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.

4 Comments

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.