Aller au contenu

ADN182

Messages recommandés

Voici le widget (pratique pour tester)

2016-12-21_00-47-32.png

Voici la config pour le script:

2016-12-21_00-45-59.png

et le contenu du script (qui récupère les paramètres de l'url)

exemple:

http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=true&properties=value

<?php
// exemple de format de l'url http: 
// http://127.0.0.1/plugins/script/core/ressources/put2hc2b.php?value=#message#&properties=#title#
// ce script peut être utiliser pour modifier des valeurs de devices sur un HC2

$properties=$_GET['properties'];
$value=$_GET['value'];
//$properties=value;
//$value= true;

	$ipHc2 = "192.168.XXX.XXX";
	$tcpPort = "80";
	$request = "/api/devices/2153";
	$userName = "XXXXXXX";
	$password = "XXXXXXXXXX";
	//$data_string = '{"properties":{"value": false}}';
	$data_string = '{"properties":{"'.$properties.'": '.$value.'}}';
	$url = 'http://'.$userName.':'.$password.'@'.$ipHc2.':'.$tcpPort .$request;
	 
	$ch = curl_init($url);

	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

	$result = curl_exec($ch);
	curl_close($ch);
	echo $result;
	//echo $data_string
	//echo $properties.$value
?>

il faut enore ajouter dans l'url l'id du device à appeler si on le veut en paramètre, mais là, je dois aller dormir, demain c'est debout avant le coq...

 

Lien vers le commentaire
Partager sur d’autres sites

bon, ça va être la cata demain matin :rolleyes:

Mais voici la solution complète:

<?php
// exemple de format de l'url http: 
// http://127.0.0.1/plugins/script/core/ressources/put2hc2b.php?value=#message#&properties=#title#&id=2453
// ou
// http://127.0.0.1/plugins/script/core/ressources/put2hc2b.php?value=true&properties=value&id=2453
// ce script peut être utiliser pour modifier des valeurs de devices sur un HC2
$default_id=2153;  // si pas d'id spécifiée utiliser celle-ci (pour tests)
$properties=$_GET['properties'];
$value=$_GET['value'];
// transformer 0 et 1 en true/false
if ($value=="1") {
    $value="true";    
}
if ($value=="0") {
    $value="false";    
}
//si id vide utiliser default id
if (isset($_GET['id'])) {
    $id=$_GET['id'];    
}else{  
    $id=$default_id;
}

	$ipHc2 = "192.168.XXX.XXX";
	$tcpPort = "80";
	$request = "/api/devices/".$id;
	$userName = "XXXXXXXX";
	$password = "XXXXXXXXXXXX";
	//$data_string = '{"properties":{"value": false}}';
	$data_string = '{"properties":{"'.$properties.'": '.$value.'}}';
	$url = 'http://'.$userName.':'.$password.'@'.$ipHc2.':'.$tcpPort .$request;
	 
	$ch = curl_init($url);

	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

	$result = curl_exec($ch);
	curl_close($ch);
	//echo $result;
	//echo $data_string
	//echo $properties.$value
?>

et l'url à mettre dans le device:

http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=#value#&properties=value&id=2153

pour un oeil de fibaro, j'ai testé avec le mouvement, la T° et la luminosité et ça fonctionne.

 

y'a plus qu'a transformer l'id automagiquement.

 

je suis nuil en php, mais content de moi quand même :D

c'est fou les ressources sur le web pour le php, on trouve toujours son bonheur en exemples et manuels.

 

Pour la liste des pièces et devices, on pourrait stocker le json de l'api de fibaro dans une variable jeedom

ensuite il "suffit" de la parser avec le script ... il suffit ;) yaka, 'yapluka etc...

ainsi la hc2 ne serait pas chargée du tout.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Ah oui joli :-). Et comme ça tout part de jeedom :-)..

C'est plus court oui, plus rapide sans doute un peu, mais la solution de ADN182 est bien plus pratique pour le setup ou une réinstallation... D'une des box.

Sent from my Note4

Lien vers le commentaire
Partager sur d’autres sites

Tu part dormir est @sebcbien tue ton post en une nuit ;).

 

Bien vu pour le PUT en PHP (je ne serais pas develloper la fonction de get en php, mais vu comment tu est partie cette nuit c'est fait :D). Du coup comment tu ferais (juste le concept) dans Jeedom pour appeler ce script via un changement d'état sur un module (Push URL ? via quelle url ) ?

 

J'ai pas réellement chercher à le faire depuis Jeedom car mon optique c'était que ma HC2 reste le "Cerveau". Après le fait de la faire dans la HC2 c'est qu'on peut redevelopper une autre fonction de parsing pour une autre box, IPX800... et garder les fonctions d'update device

Lien vers le commentaire
Partager sur d’autres sites

ADN merci.

 

une petite aide : je voudrais retourner une géolocalisation de type 0/1. ( si (ici) alors Fake HC2= 1), et si (pas ici) alors Fake HC2=0).

 

(j'ai piger le Fake,,,ce qu'on appeler un module perdu lol,,, encore un défaut utile.)

donc fake créer, toute la partie HC2 fait, c'est au point de vu jeedom . j'ai créer de scénarios, 0 et 1. 

 

je ne sais pas si je mets dans-- l'objet --"commande" l'url.  ou dans un --scénarios-- un 0 et 1, ou dans le --plugin--- même ?

j'ai mon url http://x:y@192.168../api/callAction?deviceID=353&name=setProperty&arg1=ui.UD.value&arg2=37:1

 

37 id fake, 353 id VD, et c'est un double switch inter fibaro

Lien vers le commentaire
Partager sur d’autres sites

ADN, désolé lol, ce n'est pas mon intention.

En fait c'est toi qui a titillé mon intérêt avec ces PUT et ces fake devices, je n'avais jamais regardé de ce côté.

Donc j'ai cherché  pour voir... et j'ai été "jusqu'au bout" ...

 

Comme je le dit, ta solution à un gros avantage avec les noms et aussi effectivement que la logique n'est qu'a un seul endroit.  Si tu a plusieurs autres solutions qui tournent autour comme RFX com, c'est un avantage.

Concernant ta question de "comment mettre ça en place", j'y réponds ici:

 

Il y a 19 heures, sebcbien a dit :

et l'url à mettre dans le device:

http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=#value#&properties=value&id=2153

pour un oeil de fibaro, j'ai testé avec le mouvement, la T° et la luminosité et ça fonctionne.

 

y'a plus qu'a transformer l'id automagiquement.

 

Pour la liste des pièces et devices, on pourrait stocker le json de l'api de fibaro dans une variable jeedom

ensuite il "suffit" de la parser avec le script ... il suffit ;) yaka, 'yapluka etc...

ainsi la hc2 ne serait pas chargée du tout.

 

Donc en résumé, avec le plugin script (je ne sais pas si tu le connais) tu peux créer simplement un fichier php et l'éditer via l'interface de jeedom (comme le lua sur la hc2 en fait)

Donc dans ce script, je mets le code php que j'ai écrit ci-dessus, il ne reste plus qu'a l'appeler.

Pour l'appeler, deux solutions: soit via le plugin script lui même qui propose d'appeler le script via un bouton simple (une seule action donc par script) ou via un bouton "message".

Ca donne ceci: et tu peux envoyer au script deux arguments (#title# et #message#)

2016-12-21_00-47-32.png

 

C'est maintenant que ça devient le plus intéressant, tu peux aussi appeler ce script via la syntaxe jeedom dans un scénario ou autre, exemple:

2016-12-21_20-52-28.png

 

Mais c'est limité à deux arguments, qui sont récupérés par le plugin script avec #message# et #title#

2016-12-21_00-45-59.png

 

Donc pas possible via cette méthode par exemple de spécifier l'id fibaro à commander (pour les tests, je l'avais écrit en dur dans le script) car c'est un 3e argument.

 

C'est là que la possibilité d'appeler ce script via une commande http en 127.0.0.1 devient très intéressante...

 

Donc on modifie le path du script

/var/www/html/core/php/../../plugins/script/core/ressources/put2hc2b.php etc

en

http://127.0.0.1/plugins/script/core/ressources/put2hc2b.php

 

Cela permet donc maintenant d'appeler le script via la fameuse case Push url des devices

Exemple:

http://127.0.0.1/plugins/script/core/ressources/put2hc2b.php?value=true&properties=value&id=2453

ou pour un FGMS:
Motion:
http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=#value#&properties=value&id=2153
Température:
http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=#value#&properties=value&id=2154
Luminosité:
http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=#value#&properties=value&id=2155

etc...

et donc là on tape direct dans l'api de la HC2.

Ca marche tellement bien que je vois changer l'oeil de la fibaro plus vite sur la HC2 que sur jeedom qui pourtant héberge le device...

 

Seul point "noir" la commande à mettre dans la case push doit contenir l'id du device fibaro au lieu de ton astuce #humanname#:

 

http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=true&properties=value&id=2453

 

 

Modifié par sebcbien
clarifications et orthographe
Lien vers le commentaire
Partager sur d’autres sites

Si l'on veut gérer complètement ça sur Jeedom,

pour cela, je pense que l'on pourrait faire un simple script php sur jeedom qui récupèrerais le json "devices" de la fibaro et le stockerais dans un label ou une variable

ensuite, on utilise ta commande #humanname#:

http://<user>:<password>@<IP_DE_MA_HC2>/api/callAction?deviceID=333&name=setProperty&arg1=ui.UD.value&arg2=#humanname#:#value#

Mais en appelant non plus la hc2 mais le script jeedom, un peu comme ceci:

http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=#value#&properties=value&id=#humanname#

là le script ferai la même chose que tu a fait en lua, parser le json "devices", retrouver l'id, et ensuite appeler mon code PUT et l'envoyer sur la HC2

Ca je te laisse faire, c'est un supplice pour moi ces tables et tu as l'air de maîtriser sérieusement.

 

 

Lien vers le commentaire
Partager sur d’autres sites

suggestion de structure du script avec parse du json HC2 "devices":

 

<?php
// exemple de format de l'url http: 
// http://127.0.0.1/plugins/script/core/ressources/put2hc2b.php?value=#message#&properties=#title#&id=2453
// ou
// http://127.0.0.1/plugins/script/core/ressources/put2hc2b.php?value=true&properties=value&id=2453
// ce script peut être utiliser pour modifier des valeurs de devices sur un HC2
$default_id=2153;  // si pas d'id spécifiée utiliser celle-ci (pour tests)
$properties=$_GET['properties'];
$value=$_GET['value'];
// transformer 0 et 1 en true/false
if ($value=="1") {
    $value="true";    
}
if ($value=="0") {
    $value="false";    
}
//si id vide utiliser default id
if (isset($_GET['id'])) {
    $id=$_GET['id'];    
}else{  
    $id=$default_id;
}
////////////////////////////////////////////////////////////////////////////////////////

ICI $id contiendrait #humanname# au lieu du No de l'id
JSON DECODE du JSON DEVICES STOCKé DANS [TECHNIQUE][VARIABLES][JSON_DEVICES_HC2]
  FIND ID HC2 EN COMPARANT LES NOMS DES DEVICES ET PIECES
  REMPLACEMENT DE $id=#humanname# en $id=deviceid
  ET VOILA ;-)
  
//////////////////////////////////////////////////////////////////////////////////////////  


	$ipHc2 = "192.168.XXX.XXX";
	$tcpPort = "80";
	$request = "/api/devices/".$id;
	$userName = "XXXXXXXX";
	$password = "XXXXXXXXXXXX";
	//$data_string = '{"properties":{"value": false}}';
	$data_string = '{"properties":{"'.$properties.'": '.$value.'}}';
	$url = 'http://'.$userName.':'.$password.'@'.$ipHc2.':'.$tcpPort .$request;
	 
	$ch = curl_init($url);

	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

	$result = curl_exec($ch);
	curl_close($ch);
	//echo $result;
	//echo $data_string
	//echo $properties.$value
?>

 

Lien vers le commentaire
Partager sur d’autres sites

No problem Seb on est la pour partager et améliorer le tout ;) ! (je n'en serais pas à écrire le tuto sans Steven, Lazer, toi et bien d'autres...) je vais pas avoir le courage de faire ça dans les jours qui viennet, pour le php qui ira récupérer l'id du module dans la HC2.En tout cas merci Seb pour toutes ces explications c'est plus clair pour moi Jeedom et ce qu'il est possible de faire avec les différents plugins.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Yep, moi aussi tu sais, je ne suis pas développeur, ça me prends des plombes pour écrire un script et c'est à 70% de l'inspiration d'existants :2:

J'ai modifié le gros post ci-dessus pour plus de clarté.

 

Et oui, le PHP a cet énorme avantage qu'il est universel et que y'a des exemples plein le web et non pas uniquement sur domotique-fibar et forum.fibaro

 

Donc, the sky's the limit :lol:

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

@q.philippe voila ce que je ferai ( @sebcbien dira si j'ai bien suivi ces explications :) )

 

Un script qui va intéragir avec la HC2

jeedomscript.png

 

et un scénatio comme celui-ci (Attention je ne sais pas comment on affecte ou vérifie une variable la syntaxe est fausse dans ma capture) : 

 

jeedomsenario.png

Lien vers le commentaire
Partager sur d’autres sites

oui, tout bon, mais tu me donne une idée...

 

si on fixe properties=value, alors avec titre et message, on peux spécifier la  valeur et l'id.

 

Laissez-moi 1/2h et je poste un script testé pour ça.

Question subsidiaire, pour quels devices, la properties n'est pas value ?

Lien vers le commentaire
Partager sur d’autres sites

A ma connaissance il n'y en a pas, j'ai vérifié hier, Température, Luminosité, Dimmer, Actionneur (prise), Volet, Humdité) C'est juste que pour certain la valeur est numérique : 19.5 pour d'autres c'est true, false

 

Valeur true ou false

Capteur

Actionneur

 

Valeur 0 ou 1

Volet

Dimmer

Temp

Hum

Lum

 

Je viens de pensé à la consommation peut être qui doit être "power" et non value

Lien vers le commentaire
Partager sur d’autres sites

Hum, je reprend le sujet, commence à me plaire et va me faire commander mon RFXCom, car du coup avec ça, ce sera très simple de faire ce que je fais dans la Zibase aujourd'hui (C'est vrai qu'à ce niveau, sur la Zibase, c'est vraiment très simple). Mais du coup je peux me passer de VD et attaquer directement mes fakes device, ce qui serait top car plus de VD (Même si ce n'est qu'un seul où j'ai tout mis dedans, sorte de VD passerelle).

Le top serait vraiment d'avoir l'inverse, de pouvoir faire des fake device de type volet et du coup de pouvoir agir vers Jeedom ou la Zibase, mais ces fake device ne fonctionnent pas.

Lien vers le commentaire
Partager sur d’autres sites

ok, merci

Pur true/false, ma méthode n'est pas parfaite, car le script php transforme 1 et 0 toujours en true false... mais si on a une température qui arrive à 1°, le script va pousser 'true' aussi, au lieu de 1...

C'est pas mortel, il n'y aura pas de valeur entre 1.1° et 0.9°...

 

Bref, voici la solution:

j'ai fait un 2e script et une deuxième commande (PUT id/value)

Voivi comment l'appeler à partir d'un scénario et le widget "script"

2016-12-21_22-04-38.png

 

config du widget script:

2016-12-21_22-11-17.png

 

Codes:

put2hc2.php:

<?php
// exemple de format de l'url http: 
// http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=#message#&properties=#title#
// ce script peut être utiliser pour modifier des valeurs de devices sur un HC2
$default_id=2153;  // si pas d'id spécifiée utiliser celle-ci (pour tests)
$properties=$_GET['properties'];
$value=$_GET['value'];
// transformer 0 et 1 en true/false
if ($value=="1") {
    $value="true";    
}
if ($value=="0") {
    $value="false";    
}
//si id vide utiliser default id
if (isset($_GET['id'])) {
    $id=$_GET['id'];    
}else{  
    $id=$default_id;
}

//if !isset($id) then $id="2153" end;
//$properties=value;
//$value= true;

	$ipHc2 = "192.168.XXX.XXX";
	$tcpPort = "80";
	$request = "/api/devices/".$id;
	$userName = "XXXXXXXXXXXX";
	$password = "XXXXXXXXXXXX";
	//$data_string = '{"properties":{"value": false}}';
	$data_string = '{"properties":{"'.$properties.'": '.$value.'}}';
	$url = 'http://'.$userName.':'.$password.'@'.$ipHc2.':'.$tcpPort .$request;
	 
	$ch = curl_init($url);

	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

	$result = curl_exec($ch);
	curl_close($ch);
	//echo $result;
	//echo $data_string
	//echo $properties.$value
?>

et put2hc2V2.php:

<?php
// exemple de format de l'url http: 
// http://127.0.0.1/plugins/script/core/ressources/put2hc2V2.php?value=#message#&id=#title#
// ce script peut être utiliser pour modifier des valeurs de devices sur un HC2
$default_id=2153;  // si pas d'id spécifiée utiliser celle-ci (pour tests)
$properties=value;
$value=$_GET['value'];
// transformer 0 et 1 en true/false
if ($value=="1") {
    $value="true";    
}
if ($value=="0") {
    $value="false";    
}
//si id vide utiliser default id
if (isset($_GET['id'])) {
    $id=$_GET['id'];    
}else{  
    $id=$default_id;
}

//pour debug
//if !isset($id) then $id="2153" end;
//$properties=value;
//$value= true;

	$ipHc2 = "192.168.XXX.XXX";
	$tcpPort = "80";
	$request = "/api/devices/".$id;
	$userName = "XXXXXXXXXXX";
	$password = "XXXXXXXXXXX";
	//$data_string = '{"properties":{"value": false}}';
	$data_string = '{"properties":{"'.$properties.'": '.$value.'}}';
	$url = 'http://'.$userName.':'.$password.'@'.$ipHc2.':'.$tcpPort .$request;
	 
	$ch = curl_init($url);

	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

	$result = curl_exec($ch);
	curl_close($ch);
// pour debug
	//echo $result;
	//echo $data_string
	//echo $properties.$value
?>

 

Lien vers le commentaire
Partager sur d’autres sites

Quand tu dis ces fakes devices ne fonctionnent pas, c'est à dire ? (c'est quoi la différence entre un type volet et un type "prise") 

Si on parle de faire HC2 to Jeedom, dans l'idée si les fakes devices "font" réagir les scènes (dans les propriétés de la scène) il faudrait que cette scène récupère le nom et la pièce du device et actionne l'api de jeedom. alors je sais pas comment fonctionne son API et si c'est possible. 

Lien vers le commentaire
Partager sur d’autres sites

il y a 7 minutes, Nico a dit :

Le top serait vraiment d'avoir l'inverse, de pouvoir faire des fake device de type volet et du coup de pouvoir agir vers Jeedom

oui, j'y pensais tantôt... pouvoir commander ses dimmers jeedom via l'interface HC2...

comme ça je vois pas, je ne pense pas qu'il y a un event récupérable ....

P'têtre @Krikroff aurait une astuce ? ou @Steven ?

Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, ADN182 a dit :

si les fakes devices "font" réagir les scènes (dans les propriétés de la scène)

Effectivement, mais alors ça va faire très lourd et une belle liste de triggers ou de scènes différentes...

Lien vers le commentaire
Partager sur d’autres sites

je pensais en fait au swipe que tu peux faire sur tes pièces dans l'interface du téléphone par exemple pour éteindre tout une pièce d'un coup, ou tout un étage... je vois pas comment récupérer ces ordres

 

Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, sebcbien a dit :

Effectivement, mais alors ça va faire très lourd et une belle liste de triggers ou de scènes différentes...

Oui de trigger dans la scène, mais pas de scène. un peut comme maintenant jeedoom to HC2. Jeedom peut appeler plusieurs fois la même scène en fonction du type de device.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...