[S'inspirer] Postez votre Plan / Design
-
- Actif
- Messages : 635
- Inscription : 27 janv. 2017, 10:53
Re: [S'inspirer] Postez votre Plan / Design
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 ?
Jeedom Smart
Protocoles : Z-wave, Zigbee, Wifi et IR
Objets : Qubinos, Fibaros, Xiaomis
Protocoles : Z-wave, Zigbee, Wifi et IR
Objets : Qubinos, Fibaros, Xiaomis
Re: [S'inspirer] Postez votre Plan / Design
@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.
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.
Box : smart, mini+, pi 2 et 3, ipbx800 v4
Protocole : Z-Wave (Fibaro & Qubino), Ikea, Bluetooth
Méteo : Netatmo
Audio : Sonos (Play 1 et 5)
Protocole : Z-Wave (Fibaro & Qubino), Ikea, Bluetooth
Méteo : Netatmo
Audio : Sonos (Play 1 et 5)
-
- Actif
- Messages : 635
- Inscription : 27 janv. 2017, 10:53
Re: [S'inspirer] Postez votre Plan / Design
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
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
Jeedom Smart
Protocoles : Z-wave, Zigbee, Wifi et IR
Objets : Qubinos, Fibaros, Xiaomis
Protocoles : Z-wave, Zigbee, Wifi et IR
Objets : Qubinos, Fibaros, Xiaomis
-
- Actif
- Messages : 919
- Inscription : 23 avr. 2015, 14:38
- Localisation : Haute Gironde
Re: [S'inspirer] Postez votre Plan / Design
C'est bizarre moi mes temps de chargement ne sont pas long et mes refresh fonctionnent sans actualiser
Prod: jeedom V3.2.12 DIY RPI3 + Zwave (fibaro) + Zigbee (xiaomi) + IPXV4 + X4VR
AppleTV4k
PI3 : Max2play
PiZéro: PiCoreplayer
Mini+: OpenElec 7.0.1 Kodi 16.1 Jarvis
En préinstall pour migration: Nuc hystou ,ESXi6.7,jeedom V3.2.12, LMS ,Owncloud
AppleTV4k
PI3 : Max2play
PiZéro: PiCoreplayer
Mini+: OpenElec 7.0.1 Kodi 16.1 Jarvis
En préinstall pour migration: Nuc hystou ,ESXi6.7,jeedom V3.2.12, LMS ,Owncloud
Re: [S'inspirer] Postez votre Plan / Design
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 :
Ecran des trajets pour retour maison :
Ecran pour gestion caméra et des ouvrants d'accès :
Ecran pour la gestion des plannings des chauffages (sont sur agenda), dérogation, présence du fiston :
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 :
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.
Ecran de suivi du système global (pas pour madame :p) et des autres systèmes domotiques (incendie, inondation, vmc etc) :
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 :
Ecran des trajets pour retour maison :
Ecran pour gestion caméra et des ouvrants d'accès :
Ecran pour la gestion des plannings des chauffages (sont sur agenda), dérogation, présence du fiston :
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 :
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.
Ecran de suivi du système global (pas pour madame :p) et des autres systèmes domotiques (incendie, inondation, vmc etc) :
- domoggvad
- Actif
- Messages : 1880
- Inscription : 29 avr. 2015, 16:02
- Localisation : Seine-Saint-Denis (Villepinte)
Re: [S'inspirer] Postez votre Plan / Design
Très bien réussi, bravo, complet pour une domotique.
Comment tu as procédé pour la partie thermostat ?
merci
Comment tu as procédé pour la partie thermostat ?
merci
3 Odroid C2 (Prod - secours - test) Z83 tests: rfxcom + Z-wave- Clims DAIKIN - espeasy - thekey - Xiaomi - Telinfo - broadlink... widget V3 :viewtopic.php?f=29&t=44183&p=717810#p717810
Re: [S'inspirer] Postez votre Plan / Design
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).
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
super beau benj29, j'adore
PC SERVEUR : VM VirtualBox Debian Jeedom Maitre (RFXCOM + TELEINFO + IPX800)
RPI3 + Module Zwaves (uniquement en mode antenne Zwave et liaison Jeedom link)
45 Modules Zwave :
23 Secteurs
22 Sur piles
RPI3 + Module Zwaves (uniquement en mode antenne Zwave et liaison Jeedom link)
45 Modules Zwave :
23 Secteurs
22 Sur piles
Re: [S'inspirer] Postez votre Plan / Design
Excellent, bravo, quel boulot !!
Envoyé de mon S60 en utilisant Tapatalk
Envoyé de mon S60 en utilisant Tapatalk
Re: [S'inspirer] Postez votre Plan / Design
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
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
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.
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) :
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).
Et enfin la gestion des modes est comme suit :
Un virtuel qui pilote un objet mode (plus propre) :
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.
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).
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.
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...
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.
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.
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) :
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).
Et enfin la gestion des modes est comme suit :
Un virtuel qui pilote un objet mode (plus propre) :
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.
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).
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.
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...
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
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
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
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
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
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ù...
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ù...
-
- Timide
- Messages : 485
- Inscription : 10 nov. 2014, 00:20
- Localisation : Nouméa - Nouvelle-Calédonie
Re: [S'inspirer] Postez votre Plan / Design
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?GEO a écrit : ↑21 janv. 2018, 23:16Bonjour
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>
Merci
Jeedom smart avec en général toutes les mises à jour faites (système et plugin)
Re: [S'inspirer] Postez votre Plan / Design
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 !
Smart Zwave avec RFXCom, RfPlayer et Teleinfo GCE ELECTRONICS
Re: [S'inspirer] Postez votre Plan / Design
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.
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 :
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.
Voilà, bonne utilisation.
Là, je m'amuse à faire mes plans avec Cedar Architect....
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>
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>
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>
Là, je m'amuse à faire mes plans avec Cedar Architect....
Re: [S'inspirer] Postez votre Plan / Design
ca avance bien ton install Benj
Re: [S'inspirer] Postez votre Plan / Design
Ouep pas aussi que je veux j'avoue ! .
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 ).
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 ).
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 15 invités