Page 48 sur 82

Re: [S'inspirer] Postez votre Plan / Design

Publié : 23 janv. 2018, 14:53
par GuillaumeDieppe
Petite question : J'ai lu un témoignage racontant qu'il avait rassemblé toutes ses tuiles sur un seul grand Design pour éviter les temps de chargement trop longs d'une page Design à l'autre. J'ai donc fait le même choix mais lorsque j'actualise la page Design sur ma tablette en wifi, cela prend au moins 10 secondes, ce qui est trop long... Comment faites vous pour avoir un affichage plus rapide ?

Re: [S'inspirer] Postez votre Plan / Design

Publié : 23 janv. 2018, 15:06
par Sartog
@GuillaumeDieppe,

Sous réserve d'avoir bien compris, je pense qu'il voulait dire que ça lui permettait d'éviter de devoir changer de page pour chaque menu (impliquant un chargement).
L'affichage unique génère invariablement un temps de chargement plus long (dépendant de la tablette, du wifi, du hardware faisant tourner Jeedom, etc.) mais une fois fait il est tranquille car il n'a plus besoin de faire un refresh.

Re: [S'inspirer] Postez votre Plan / Design

Publié : 23 janv. 2018, 15:23
par GuillaumeDieppe
OK oui c'était bien cela le point : temps de chargement trop longs donc volonté de tout rassembler sur une seule page.
Merci pour la remarque de la non nécessité de refresher régulièrement la page, en espérant que les données soient bien actualisées systématiquement

Re: [S'inspirer] Postez votre Plan / Design

Publié : 23 janv. 2018, 17:04
par Swatmorpheus
C'est bizarre moi mes temps de chargement ne sont pas long et mes refresh fonctionnent sans actualiser

Re: [S'inspirer] Postez votre Plan / Design

Publié : 24 janv. 2018, 16:55
par benj29
Je profite de mettre mes designs téléphones...

Je suis encore en train de développer mes designs tablette domotique...
La partie téléphone était la plus importante déjà et la plus simple pour madame au quotidien aussi.

7 écrans affichables sur un tél 5.2/5.5 pouces (il faut scroller bas sur le tél 5.2 mais je ne vois pas faire 12 designs lol pour des téléphones).

Ecran de synthèse :
Image

Ecran des trajets pour retour maison :
Image

Ecran pour gestion caméra et des ouvrants d'accès :
Image

Ecran pour la gestion des plannings des chauffages (sont sur agenda), dérogation, présence du fiston :
Image

Ecran des consommations (il reste la partie eau pour en bas, le jour où j'attaque la photodiode du compteur de flotte) avec les principaux usages électriques de la maison :
Image

Ecran des actions possibles dans la maison et de la piscine (activation de la filtration la nuit, gestion de l'hivernage/saison, filtration de 20 min), réveil du PC distant, etc.
Image

Ecran de suivi du système global (pas pour madame :p) et des autres systèmes domotiques (incendie, inondation, vmc etc) :
Image

Re: [S'inspirer] Postez votre Plan / Design

Publié : 24 janv. 2018, 17:42
par domoggvad
Très bien réussi, bravo, complet pour une domotique.
Comment tu as procédé pour la partie thermostat ?
merci

Re: [S'inspirer] Postez votre Plan / Design

Publié : 24 janv. 2018, 17:58
par benj29
Merci ;).
Je ne pense pas que ce soit le topic associé pour en discuter.
Je dois vraiment remettre ma présentation à jour.

Je gère deux ou trois types de planning par thermostat et par zone qui s'activent en fonction du mode sélectionné (A la maison, Travail+WE, dérogation, présence de mon fils ou autre).

La partie téléphone me permet simplement de changer de mode de chauffe (semaine), d'activer ou non la présence de mon fils, de déroger mes chauffages en cas de départ (pour ne pas chauffer inutilement), de tout arrêter (of course !).

Tout est basé sur des chacons (on/off avec consigne à 23° et capteurs xiaomi à plusieurs endroits et résumé pour la bonne température).

Re: [S'inspirer] Postez votre Plan / Design

Publié : 25 janv. 2018, 00:20
par overkill
super beau benj29, j'adore :)

Re: [S'inspirer] Postez votre Plan / Design

Publié : 25 janv. 2018, 00:27
par geo___
Excellent, bravo, quel boulot !!

Envoyé de mon S60 en utilisant Tapatalk


Re: [S'inspirer] Postez votre Plan / Design

Publié : 25 janv. 2018, 06:11
par benj29
Merci !

Après j'avoue que pour les tablettes domotique ça va être plus sportif car je n'arrive pas à voir un beau plan. Ça demande vraiment du boulot...

Envoyé de mon Moto G (5S) Plus en utilisant Tapatalk


Re: [S'inspirer] Postez votre Plan / Design

Publié : 27 janv. 2018, 11:48
par stban1983
domoggvad a écrit :
24 janv. 2018, 17:42
Très bien réussi, bravo, complet pour une domotique.
Comment tu as procédé pour la partie thermostat ?
merci
Très sympa!
Je suis aussi intéressé par ton affichage des thermostats!

Re: [S'inspirer] Postez votre Plan / Design

Publié : 27 janv. 2018, 22:28
par benj29
Je ne comprends pas trop ce que vous voulez sur la partie thermostat ?

A vrai dire, j'ai reconstruit un virtuel en me basant sur le thermostat d'origine car je le trouvais trop gros et pas pratique.

Image

Et ensuite j'ai réutilisé les commandes intéressantes pour le design.

La vue arrière du virtuel (il manque toutes les commandes, mais vous avez le principe) :

Image

La variable d'agenda est remise à jour toutes les 30 min via un scénario (vous avez le principe pour tous les modes de chauffage).

Image

Et enfin la gestion des modes est comme suit :

Un virtuel qui pilote un objet mode (plus propre) :

Image

Du coup, des modes, on pilote un scénario à chaque fois par mode, rien de très compliqué.
Je vous montre Absence (dérogation pour ne pas chauffer quand on est pas là) et un mode semaine+weekend.

Image

Et dans le principe, c'est pareil pour tout :
- je désactive les agendas qui ne sont pas utilisés,
- j'active ceux qui le sont,
- je teste la présence de mon fils pour activer le bon agenda en fonction,
- je lance la récupération de l'état de l'agenda de chauffe (pour mes designs plans à venir).

Image

Pour le mode absent, c'est plus simple, ce ne sont pas des agendas mais les thermostats.
On désactive les agendas (tous) et on active les thermostats en ABS.

Image

Par contre, petite astuce. Quand j'active la dérogation (via le switch on/off) pour éviter de me souvenir de l'agenda précédent de chauffe (en même temps c'est pas sorcier)... ce mode ABSENT est piloté par un scénario Dérogation =1 ou =0 (activation ou désactivation).
Et du coup je stocke le mode précédent pour le réactiver...

Image

Image

Du coup sur le design, on retrouve :
- la température de la pièce,
- le mode du thermostat (pas besoin de la consigne ici pour limiter la place),
- les commandes intéressantes (ami, salle de bains/eau j'ai juste besoin d'abs, off, confort...)
- les dérogations (par exemple quand mon fils n'est pas là, je maintiens sa chambre en eco ou abs, quand il est là, ça tourne en fonction des heures de sieste),
- les modes de chauffage.

Re: [S'inspirer] Postez votre Plan / Design

Publié : 27 janv. 2018, 23:03
par eric186
Bonsoir Benj29,
Bravo, très bien fait ton design mobile, tu as du passer du temps. Ca doit être pratique au quotidien pour la gestion distante et même locale du coup vu que nos téléphones nous quittent rarement...
Que fait ton «autorisation des vehicules»?


Envoyé de mon NXT-L29 en utilisant Tapatalk


Re: [S'inspirer] Postez votre Plan / Design

Publié : 27 janv. 2018, 23:03
par eric186
Bonsoir Benj29,
Bravo, très bien fait ton design mobile, tu as du passer du temps. Ca doit être pratique au quotidien pour la gestion distante et même locale du coup vu que nos téléphones nous quittent rarement...
Que fait ton «autorisation des vehicules»?


Envoyé de mon NXT-L29 en utilisant Tapatalk


Re: [S'inspirer] Postez votre Plan / Design

Publié : 27 janv. 2018, 23:19
par benj29
Bonsoir,

Elle est activée/désactivée sur scénario passée une certaine heure (en off puis on) ou en présence.

Cette autorisation autorise l'ouverture portail / garage en fonction des véhicules (qui sont gérés indépendamment de l'alarme). Je préfère interdire l'arrivée de voiture pendant que nous ne sommes pas là et durant la nuit. Cela me coûte un appui sur une télécommande au cas où...

Re: [S'inspirer] Postez votre Plan / Design

Publié : 28 janv. 2018, 00:09
par raphael_malin
GEO a écrit :
21 janv. 2018, 23:16
Bonjour
je ne sais pas si il y a plus simple, mais pour ma part, j'ai modifié le code du widget et rajouté une ligne de code pour afficher en dessous la dernière activité.
Exemple
Capture.JPG

et son code modifié

Code : Tout sélectionner

<div style="width:100px;min-height:62px;" class="cmd #history# tooltips cmd-widget" data-type="info" data-subtype="numeric" data-cmd_id="#id#" title="#collectDate#">
    <center>
        <span class='cmdName' style="font-weight: bold;font-size : 12px;">#name#</span>
        <span style="font-size: 3em;font-weight: bold;margin-top: 5px;" id="iconCmd#id#"></span>
      
      <span class="timeCmd#uid#" style="background-color:#cmdColor# !important;padding : 3px;border-radius: 4px;"></span>
    </center>
    <script>
        jeedom.cmd.displayDuration('#valueDate#', $('.timeCmd#uid#'));
      if ('#state#' == '1' || '#state#' == 1) {
             $('#iconCmd#id#').append('<img src="plugins/widget/core/template/dashboard/cmd.info.binary.FibaroOeil/FibaroOeilNoirNew.png" />');
        }
        if ('#state#' == '0' || '#state#' == 0) {
             $('#iconCmd#id#').append('<img src="plugins/widget/core/template/dashboard/cmd.info.binary.FibaroOeil/FibaroOeilJauneNew.png" />');
        }  
      
      
    </script>
  	<style>
    img.FibraoImg#id# {
    	width: 80px;
    	height: 80px;
  	}
  </style>
</div>
Hello, j'ai piqué ton code, j'ai adapté pour la partie image, mais j'ai un léger décalage, que dois-je modifier comme valeur pour que ca soit bien à la ligne?

Merci
FireShot Capture 6 - Dashboard - Jeedom_ - http___192.168.1.200_index.php.png
FireShot Capture 6 - Dashboard - Jeedom_ - http___192.168.1.200_index.php.png (33.47 Kio) Consulté 3662 fois

Re: [S'inspirer] Postez votre Plan / Design

Publié : 28 janv. 2018, 11:16
par jeewawa
benj29 a écrit :
24 janv. 2018, 16:55


Image

Salut, très beau travail. C'est sobre et efficace.

Tu partages ton code (cette page par exemple) ?

J'aimerais voir comment tu as fait pour :
- Menu de navigation du haut
- Le petit séparateur
- Un des petits encarts comme "courbe électrique"
Les css ?
Merci !

Re: [S'inspirer] Postez votre Plan / Design

Publié : 28 janv. 2018, 14:16
par benj29
Hello,

Pour le menu, j'ai tenté plusieurs balises (je suis loin d'être un pro...). Je n'ai pas réussi à rendre coloré l'écran actif à mon grand regret.
Voilà le code.

Code : Tout sélectionner

<ul class="nav nav-pills nav-fill">
  <li class="nav-item">
    <a class="nav-link active" href="index.php?v=d&p=plan&plan_id=10"><i class="fa fa-home fa-lg" aria-hidden="true"></i></a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="index.php?v=d&p=plan&plan_id=12"><i class="fa fa-map-marker fa-lg" aria-hidden="true"></i></a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="index.php?v=d&p=plan&plan_id=13"><i class="fa fa-video-camera fa-lg" aria-hidden="true"></i></a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="index.php?v=d&p=plan&plan_id=14"><i class="fa fa-thermometer-three-quarters fa-lg" aria-hidden="true"></i></a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="index.php?v=d&p=plan&plan_id=16"><i class="fa fa-bolt fa-lg" aria-hidden="true"></i></a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="index.php?v=d&p=plan&plan_id=17"><i class="fa fa-lightbulb-o fa-lg" aria-hidden="true"></i></a>
  </li>
    <li class="nav-item">
    <a class="nav-link" href="index.php?v=d&p=plan&plan_id=18"><i class="fa fa-cogs fa-lg" aria-hidden="true"></i></a>
  </li>
</ul>
Kesako, le petit séparateur ?

Pour la courbe de charge électrique, faut rendre à César ce qui est à César, je ne suis pas un pro du PHP, c'est un super collègue de boulot qui m'a fait ça avec un code PHP. Il me semble d'ailleurs que quelqu'un sur ce fil avait proposé cette approche.

Il faut mettre un code PHP et modifier l'API et autres codes. Ca transforme une graphique en le renvoyant sans échelle et sur une durée de 24h dans mon cas.

Une iframe avec ce code :

Code : Tout sélectionner

<iframe  src="/chart.php?cmdId=5486&chartWidth=310&chartHeight=66" width="310" height="66" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>
où cmdId=X le numéro de l'info que tu veux afficher.
Le fichier chart.php est à mettre à l'endroit qui convient (ici à la racine de html de ton jeedom. Tu peux utiliser le plugin outils de développement ou un SFTP via Bitvise par exemple pour placer ton fichier.

Tu as deux fois à mettre ton API Jeedom (le code est certainement optimisable, je n'en ai ni les compétences, ni le temps) et la personne qui m'a aidé pour cela a été déjà super sympa de me montrer le principe.

Code : Tout sélectionner

<?php

class jsonrpcClient {
                /*     * ********Attributs******************* */

                private $errorCode = 9999;
                private $errorMessage = 'No error';
                private $error = 'No error';
                private $result;
                private $rawResult;
                private $apikey = 'XXXXXXXXXXXXXXXXXXX';
                private $options = array();
                private $apiAddr;
                private $cb_function = '';
                private $cb_class = '';
                private $certificate_path = '';
                private $noSslCheck = false;

                /*     * ********Static******************* */

                /**
                *
                * @param type $_apiAddr
                * @param type $_apikey
                * @param type $_options
                */
                public function __construct($_apiAddr, $_apikey, $_options = array()) {
                               $this->apiAddr = $_apiAddr.'/core/api/jeeApi.php';
                               $this->apikey = $_apikey;
                               $this->options = $_options;
                }
                /**
                *
                * @param type $_method
                * @param array $_params
                * @param int $_timeout
                * @param type $_file
                * @param int $_maxRetry
                * @return boolean
                */
                public function sendRequest($_method, $_params = null, $_timeout = 15, $_file = null, $_maxRetry = 2) {
                               $_params['apikey'] = $this->apikey;
                               $_params = array_merge($_params, $this->options);
                               $request = array(
                                               'request' => json_encode(array(
                                                               'jsonrpc' => '2.0',
                                                               'id' => mt_rand(1, 9999),
                                                               'method' => $_method,
                                                               'params' => $_params,
                                               )));
                               $this->rawResult = preg_replace('/[^[:print:]]/', '', trim($this->send($request, $_timeout, $_file, $_maxRetry)));

                               if ($this->rawResult === false) {
                                               return false;
                               }

                               if (!((is_string($this->rawResult) && (is_object(json_decode($this->rawResult)) || is_array(json_decode($this->rawResult)))))) {
                                               if ($this->error == 'No error' || $this->error == '') {
                                                               $this->error = '9999<br/>Reponse is not json : ' . $this->rawResult;
                                               }
                                               $this->errorMessage = $this->rawResult;
                                               return false;
                               }
                               $result = json_decode(trim($this->rawResult), true);

                               if (isset($result['result'])) {
                                               $this->result = $result['result'];
                                               if ($this->getCb_class() != '') {
                                                               $callback_class = $this->getCb_class();
                                                               $callback_function = $this->getCb_function();
                                                               if (method_exists($callback_class, $callback_function)) {
                                                                               $callback_class::$callback_function($this->result);
                                                               }
                                               } elseif ($this->getCb_function() != '') {
                                                               $callback_function = $this->getCb_function();
                                                               if (function_exists($callback_function)) {
                                                                               $callback_function($this->result);
                                                               }
                                               }
                                               return true;
                               } else {
                                               if (isset($result['error']['code'])) {
                                                               $this->error = 'Code : ' . $result['error']['code'];
                                                               $this->errorCode = $result['error']['code'];
                                               }
                                               if (isset($result['error']['message'])) {
                                                               $this->error .= '<br/>Message : ' . $result['error']['message'];
                                                               $this->errorMessage = $result['error']['message'];
                                               }
                                               return false;
                               }
                }

                private function send($_request, $_timeout = 15, $_file = null, $_maxRetry = 2) {
                               if ($_file !== null) {
                                               if (version_compare(phpversion(), '5.5.0', '>=')) {
                                                               foreach ($_file as $key => $value) {
                                                                               $_request[$key] = new CurlFile(str_replace('@', '', $value));
                                                               }
                                               } else {
                                                               $_request = array_merge($_request, $_file);
                                               }
                                               if ($_timeout < 1200) {
                                                               $_timeout = 1200;
                                               }
                               }
                               $nbRetry = 0;
                               while ($nbRetry < $_maxRetry) {
                                               $ch = curl_init();
                                               curl_setopt($ch, CURLOPT_URL, $this->apiAddr);
                                               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                                               curl_setopt($ch, CURLOPT_HEADER, false);
                                               curl_setopt($ch, CURLOPT_TIMEOUT, $_timeout);
                                               curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
                                               curl_setopt($ch, CURLOPT_POST, true);
                                               curl_setopt($ch, CURLOPT_POSTFIELDS, $_request);
                                               curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
                                               curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
                                               if ($this->getCertificate_path() != '' && file_exists($this->getCertificate_path())) {
                                                               curl_setopt($ch, CURLOPT_CAINFO, $this->getCertificate_path());
                                               }
                                               if ($this->getNoSslCheck()) {
                                                               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                                                               curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
                                               }
                                               $response = curl_exec($ch);
                                               $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                                               $nbRetry++;
                                               if (curl_errno($ch) && $nbRetry < $_maxRetry) {
                                                               curl_close($ch);
                                                               usleep(500000);
                                               } else {
                                                               $nbRetry = $_maxRetry + 1;
                                               }
                               }
                               if ($http_status == 301) {
                                               if (preg_match('/<a href="(.*)">/i', $response, $r)) {
                                                               $this->apiAddr = trim($r[1]);
                                                               return $this->send($_request, $_timeout, $_file, $_maxRetry);
                                               }
                               }
                               if ($http_status != 200) {
                                               $this->error = 'Erreur http : ' . $http_status . ' Details : ' . $response;
                               }
                               if (curl_errno($ch)) {
                                               $this->error = 'Erreur curl sur : ' . $this->apiAddr . '. Détail :' . curl_error($ch);
                               }
                               curl_close($ch);
                               return $response;
                }

                /*     * ********Getteur Setteur******************* */

                public function getError() {
                               return $this->error;
                }

                public function getResult() {
                               return $this->result;
                }

                public function getRawResult() {
                               return $this->rawResult;
                }

                public function getErrorCode() {
                               return $this->errorCode;
                }

                public function getErrorMessage() {
                               return $this->errorMessage;
                }

                public function getCb_function() {
                               return $this->cb_function;
                }

                public function getCb_class() {
                               return $this->cb_class;
                }

                public function setCb_function($cb_function) {
                               $this->cb_function = $cb_function;
                               return $this;
                }

                public function setCb_class($cb_class) {
                               $this->cb_class = $cb_class;
                               return $this;
                }

                public function setCertificate_path($certificate_path) {
                               $this->certificate_path = $certificate_path;
                               return $this;
                }

                public function getCertificate_path() {
                               return $this->certificate_path;
                }

                public function setDisable_ssl_verifiy($noSslCheck) {
                               $this->noSslCheck = $noSslCheck;
                               return $this;
                }

                public function getNoSslCheck() {
                               return $this->noSslCheck;
                }

                public function setNoSslCheck($noSslCHeck) {
                               $this->noSslCheck = $noSslCHeck;
                               return $this;
                }

}

$urlJeedom = "http://127.0.0.1:80";
$apiKey = "XXXXXXXXXXXXX";

$chartWidth = ( IsSet($_GET['chartWidth']) ? $_GET['chartWidth'] : 300 );
$chartHeight = ( IsSet($_GET['chartHeight']) ? $_GET['chartHeight'] : 115 );
$cmdId = ( IsSet($_GET['cmdId']) ? $_GET['cmdId'] : 1 );
// changer le forcage pour la durée d'affichage (voir plus bas)
$period = ( IsSet($_GET['period']) ? $_GET['period'] : 0 );

if ($period==1)
{
                $startTime=date("Y-m-d H:i:s",time()-24*60*60);
                $endTime=date("Y-m-d H:i:s",time());
}else{
                $startTime=date("Y-m-d",time())." 00:00:00";
                $endTime=date("Y-m-d H:i:s",time());
}


$jsonrpc = new jsonrpcClient($urlJeedom, $apiKey);
$data = array();
if($jsonrpc->sendRequest('cmd::getHistory', array('apikey' => $apiKey, 'id' => $cmdId, 'startTime' => $startTime, 'endTime' => $endTime ))) {
                foreach ($jsonrpc->getResult() as $result) {
                               $data[] = array("ts" => strtotime($result["datetime"]),"value"=> $result["value"]);
                }
} else {
    echo $jsonrpc->getError();
}
?>
<!DOCTYPE html>
<html>
<head>
                <meta http-equiv="Content-Language" content="fr" />
                <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
                <meta http-equiv="X-UA-Compatible" content="IE=edge">
                <meta name="viewport" content="width=device-width">
                <script src="https://code.highcharts.com/highcharts.js"></script>
                <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
</head>
<body>
                <script>
                               $(function () {
                                               var data = {name: 'command #<?= $cmdId;?>', data:[
<?php
                foreach ($data as $row){
                               echo "\t\t\t\t[Date.UTC(".date("Y",$row['ts']).",".(date("m",$row['ts'])-1).",".date("d",$row['ts']).",".date("H",$row['ts']).",".date("i",$row['ts']).",".date("s",$row['ts'])."),".$row['value']."],\n";
                }
?>
                                               ]};
                                               var myChart = Highcharts.chart('container', {
                                                               chart: {
                                                                               backgroundColor:'rgba(255, 255, 255, 0.0)',
                                                                               type: 'line'
                                                               },
                                                               title: {
                                                                               text: ''
                                                               },
                                                               xAxis: {
                                                                               type: 'datetime',
                                                                              lineWidth: 0,
                                                                               minorGridLineWidth: 0,
                                                                               lineColor: 'transparent',
                                                                               labels: {
                                                                                              enabled: false
                                                                               },
                                                                               minorTickLength: 0,
                                                                               tickLength: 0
                                                               },
                                                               plotOptions: {
                                                                               series: {
                                                                                              marker:{
                                                                                                              enabled: false
                                                                                              }
                                                                               }
                                                               },
                                                               yAxis: {
                                                                               title: {
                                                                                              text: ''
                                                                               },
                                                                               lineWidth: 0,
                                                                               minorGridLineWidth: 0,
                                                                               lineColor: 'transparent',
                                                                               labels: {
                                                                                              enabled: false
                                                                               },
                                                                               minorTickLength: 0,
                                                                               tickLength: 0,
                                                                               gridLineColor: 'transparent',
                                                               },
                                                               tooltip: {
                                                                               enabled: false
                                                               },
                                                               credits: {
                                                                               enabled: false
                                                               },
                                                               legend: {
                                                                               enabled: false
                                                               },
                                                               series: [data]
                                               });
                               });
                </script>             
                <div id="container" style="width:<?= $chartWidth;?>px; height:<?= $chartHeight;?>px;"></div>
</body>
</html>
Voilà, bonne utilisation.

Là, je m'amuse à faire mes plans avec Cedar Architect....

Re: [S'inspirer] Postez votre Plan / Design

Publié : 28 janv. 2018, 15:20
par dcjona
ca avance bien ton install Benj :)

Re: [S'inspirer] Postez votre Plan / Design

Publié : 28 janv. 2018, 15:33
par benj29
Ouep pas aussi que je veux j'avoue ! :D.
Et puis je suis bloqué avec cette histoire de virtuel à la c*n pour la présence de la maison (je ne comprends pas ce qui se passe ...) (cf autre post).

Mais oui, j'arrive au bout (si tant est qu'il y en ait un :D).