Bonsoir à tous,
Je suis équipé de modules de mesure de consommation d'énergie Legrand/Bticino F520 connectés à des centralisateurs IP F524 et une passerelle web F455.
Je peux récupérer l'info des consos en me connectant aux centralisateurs IP ou grâce à une petite appli fournie par Legrand mais je souhaiterais aussi pouvoir les intégrer directement dans mon environnement eedomus.
Je comprends que la communication avec la passerelle web Legrand se fait grâce au protocole OpenWebNet qui permet facilement de récupérer la conso instantanée ou cumulée d'un tore, en php ou en python par exemple (cf petit exemple de code que j'ai trouvé sur le net ci-dessous).
Cependant ce protocole nécessite apparemment l'utilisation de socket à la place des requêtes http utilisées en standard dans les scripts eedomus.
Pourriez-vous svp m'indiquer les solutions qui s'offrent à moi pour remonter cette info dans la eedomus, par exemple sous forme de courbes de conso à côté des courbes de température de mes sondes Oregon ?
J'ai pensé aux pistes suivantes mais suis ouvert à toute idée :
- la fonction netsend disponible sur la eedomus+ permettrait sans doute d'envoyer une requête vers ma passerelle Bticino mais comment récupérer et stocker la réponse de la passerelle ?
- passer par une autre passerelle (jeedom/myombox/raspberry/PC...) qui ferait la jonction entre les protocoles php/http de la eedomus et le OpenWebNet
Sinon, la gestion des sockets dans les scripts est-elle attendue dans une prochaine release eedomus ?
Un grand merci d'avance à tous pour votre aide
Alex
<?php
$gatewayaddr = "x.x.x.x";
$gatewayport = "20000";
$message = "*#1*0##\n"; //inquire about lights
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{ $errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
} echo "Socket defined. ";
//Connect socket to remote server
if(!socket_connect($sock , $gatewayaddr , $gatewayport))
{ $errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not connect: [$errorcode] $errormsg \n"); } echo "Connection OK. ";
//Send the message to the server
if( ! socket_send ( $sock , $message , strlen($message) , 0))
{ $errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [$errorcode] $errormsg \n");
} echo "Message sent OK. ";
//Receive reply from server, remove message delimeters, beautify results
if(socket_recv ( $sock , $buf , 2045 , MSG_WAITALL ) === FALSE)
{ $errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [$errorcode] $errormsg \n");
} echo "Message received OK. \n";
echo str_replace("##","## ",str_replace("*#*1##","",$buf));
?>