Scripts PHP sous Domoticz, IPX800 et Ecodevice
Pour ma domotique à la maison, j’utilise plusieurs serveurs Domoticz. Je pratique Domoticz depuis 2012 et ai vu l’évolution de cette distribution libre et gratuite de très bonne facture. Après un aller retour sous Jeedom que je n’ai pas aimé, je suis revenu à mes premières amours sous Domoticz. Pour que tout ce petit monde fonctionne, j’ai développé un tas de scripts PHP que je vais commencer à partager.
Structure
Aujourd’hui, ma domotique est constituée de :
- 3 raspberry + RFXCOM + 1wire
- 1 IPX800
- 1 ECODEVICE
- 1 Netatmo
Pour avoir un résultat satisfaisant dans Domoticz, j’ai créé tout un tas de scripts permettant d’être plus fin que ce que ne propose Domoticz. N’étant pas un adepte du LUA (je trouve que cela consomme trop de processeur), je lui préfère du PHP qui interagi avec Domoticz via du JSON.
Mes scripts PHP sont découpés comme suit :
- 1 fichier de variables, nommé variables.php où je met dedans toutes les variables nécessaires (majoritairement les ID des devices des différents raspberry, les IP de chaque équipement, etc …
- 1 fichier de fonctions, nommé functions.php qui regroupe les fonctions d’accès à domoticz. Dès que je dois taper 2 fois la même commande dans un fichier, je créé une fonction.
- 1 fichier par script lui même qui inclut les 2 fichiers ci dessus
Les fonctions de bases Domoticz
La première fonction nécessaire est celle permettant de récupérer une infos dans Domoticz.
/** * fonction qui permet de récupérer une valeur dans Domoticz * Paramètres : $server : ip du serveur domoticz $id : id du device où l'on veut récupérer la valeur $value : type de valeur que l'on veut récupérer : Temp, Data, ... */ function getDomoticzData($server,$id,$value){ $json_string = file_get_contents('http://'.$server.'/json.htm?type=devices&rid='.$id); $parsed_json = json_decode($json_string, true); return $parsed_json['result'][0][$value]; }
Exemple pour récupérer la valeur de ma sonde de température du jardin :
$tempJardin = getDomoticzData('192.168.1.10',37,'Temp'); echo $tempJardin;
La deuxième fonction nécessaire est de pouvoir basculer un switch à On ou Off dans Domoticz.
/** * fonction qui permet de switcher un interrupteur dans Domoticz * Paramètres : $server : ip du serveur domoticz $id : id du device où l'on veut récupérer la valeur $commande : on ou off */ function switchDomoticz($server,$id,$command){ $json = file_get_contents('http://'.$server.'/json.htm?type=command&param=switchlight&idx='.$id.'&switchcmd='.$command); $obj = json_decode($json); }
IPX800
Les deux fonctions suivantes permettent d’allumer et d’éteindre un relais de l’IPX800 tout simplement.
/** * fonction qui permet de démarrer un relais sur l'IPX800 * Paramètres : $server : ip de l'IPX800 $apikey : apikey à définir dans l'IPX800 pour la sécurité $id : n°du relais à allumer */ function startIPX800Relay($server,$apikey,$id){ $json = file_get_contents('http://'.$server.'/api/xdevices.json?key='.$apikey.'&SetR=0'.$id); $obj = json_decode($json); } /** * fonction qui permet d'éteindre un relais sur l'IPX800 * Paramètres : $server : ip de l'IPX800 $apikey : apikey à définir dans l'IPX800 pour la sécurité $id : n°du relais à éteindre */ function stopIPX800Relay($server,$apikey,$id){ $json = file_get_contents('http://'.$server.'/api/xdevices.json?key='.$apikey.'&ClearR=0'.$id); $obj = json_decode($json); }
La fonction ci dessous permet de récupérer l’état d’un relais (on ou off), pratique pour vérifier et couper un élément (comme la gestion d’un chauffe eau).
/** * fonction qui permet d'interroger un relais sur l'IPX800 * Paramètres : $server : ip de l'IPX800 $apikey : apikey à définir dans l'IPX800 pour la sécurité $id : n°du relais à interroger */ function getIPX800RelayStatus($server,$apikey,$id){ $json_string = file_get_contents('http://'.$server.'/api/xdevices.json?key=1598741230&Get=R'); $parsed_json = json_decode($json_string, true); $relay = 'R'.$id; return $parsed_json[$relay]; }
Ecodevice
Voici une fonction qui permet de remonter n’importe quelle info de l’écodevice. La liste des valeurs est disponible dans votre navigateur en lancant http:///api/xdevices.json?cmd=10
/** * fonction qui permet de récupérer une info dans l'ecodevice * Paramètres : $server : ip de l'ecodevice $value : valeur que l'on souhaite récupérer Note : la liste de toutes les valeurs est disponible http://<ip_server>/api/xdevices.json?cmd=10 */ function getEcodeviceData($server,$value){ $json_string = file_get_contents('http://'.$server.'/api/xdevices.json?cmd=10'); $parsed_json = json_decode($json_string, true); return $parsed_json[$value]; }
Si comme moi vous avez un contrat tempo EDF, avec les couleurs bleu blanc et rouge, vous allez être intéressés par cette fonction qui permet de remonter la couleur actuelle du jour ou celle du lendemain
/** * fonction qui permet de récupérer la couleur tempo du jour ou du lendemain dans l'ecodevice * Paramètres : $server : ip de l'ecodevice $value : mettre T1_PTEC pour aujourd'hui ou T1_DEMAIN pour delaim */ function getEcodeviceTempoColor($server,$value){ $json_string = file_get_contents('http://'.$server.'/api/xdevices.json?cmd=10'); $parsed_json = json_decode($json_string, true); if ($parsed_json[$value] == 'HPJB' or $parsed_json[$value] == 'HCJB') $color="BLEU"; if ($parsed_json[$value] == 'HPJW' or $parsed_json[$value] == 'HCJW') $color="BLANC"; if ($parsed_json[$value] == 'HPJR' or $parsed_json[$value] == 'HCJR') $color="ROUGE"; return $color; }
J’espère que ces scripts pourront vous aider à donner de la puissance à votre domotique, qui avec un peu de code prend une autre dimension pourune gestion encore plus avancée.
Bonjour Fabien,
je commence avec Domoticz …. Votre site est sympa et votre approche me plait bien.
N’étant pas programmeur de formation, j’aurais quelques questions : dans quelle directorie de Domoticz placez-vous les fichiers variables.php, functions.php et les fichiers scripts? Pouvez vous donner un exemple de contenu du fichier variables.php, du fichier functions et d’un ficher script? Que signifie « 1 fichier par script lui même qui inclut les 2 fichiers ci dessus »?
Dans l’attente, merci et bonne fête de noêl.
Patric
Bonjour,
Merci pour votre commentaire.
En effet, je n’ai pas détaillé cette partie la mais le script doit être installé sur un serveur web à côté. Il vous faut donc installer un serveur nginx ou apache et mettre les fichiers dedans.
Vous trouverez facilement des tutos sur internet détaillant leur installation.
Ensuite il vous faudra créer 3 fichiers :
– 1 fichier index.php qui appellera les scripts ci dessous
– 1 fichier script.php
– 1 fichier variable.php
Essayez de trouver un tuto pour nginx et posez les fichiers. Revenez commenter ici si vous avez des soucis.
Bonne soirée,
Fabien