Shelly - Gestion batterie
Documentation eedomus
Les modules Shelly ont différents types de piles/batterie.
Comme tout périphérique à batterie, il est important de suivre le niveau (et de penser à changer/recharger, avant les congés d'été pour les PIR, et au début de l'hiver pour les Window-Door sensor).
Pour récupérer la valeur de la batterie dans eedomus, voici des méthodes suivant les types de modules.
Sommaire |
Shelly Motion 2
Ce module est tout le temps accessible.
Il suffit donc d'utiliser un capteur HTTP eedomus, avec la requête :
http://ip_shelly/status ou le nom mDNS http://shellymotion2-8CF681FFFFFF.local/status
Et le filtre XPATH :
//bat/value
Une interrogation de la batterie toutes les 4 heures (240 minutes) suffit à notre avis.
Le seul inconvénient est que la batterie est enregistrée dans un module eedomus et non dans la "batterie" du capteur principal sur la liste des périphériques eedomus. Il est conseillé d'attacher ce module au capteur principal.
Ne pas oublier de recharger la batterie Lithium avant qu'elle ne soit trop basse (durée approximative : 6 mois en extérieur, 12 mois en intérieur).
Shelly Door Window
Ce module Shelly Door & Window n'est accessible que lors de l'ouverture de la porte/fenêtre. Il reste à l'écoute pendant 30 secondes environ après ouverture/fermeture.
Il faut détecter la connexion DHCP du module (ou le changement de valeur). Puis lancer un script qui va faire une requête sur le shelly Door (via son code api) et l'envoyer dans la batterie.
<? $ip = "192.168.xx.xx"; $url = "http://".$ip."/status"; $json = httpQuery($url); $xml = jsonToXML($json) ; $xpath = "//bat/value" ; $batt = xpath($xml, $xpath) ; setBattery(code_api_shelly_door, $batt) ; ?>
La pile CR123 tient environ 6 à 12 mois suivant le nombre d'ouverture.
Shelly Température et Humidité Wifi Gen2
La technique pour le Shelly Température et Humidité Wifi est identique au Shelly Door. Il faut simplement adapter l'URL d'appel.
$url = 'http://'.$ip.'/rpc/DevicePower.GetStatus?id=0';
Il est possible de découvrir l'adresse IP de 3 manières différentes : en dur 192.168.0.0, en mDNS, depuis la MAC ($ip=sdk_get_ip_from_ip_or_mac('B8:D6:1A:XX:XX:XX'))
Il est également possible de passer l'adresse MAC et le periph_id en paramètre du script (pour n'avoir qu'un script pour la batterie de plusieurs Shelly Gen2). Le script devient :
<? // For Shelly Gen2 on battery. Get battery just after device awakes with DHCP or change value $mac = getArg('mac'); $periph_id = getArg('periph_id'); $ip=sdk_get_ip_from_ip_or_mac($mac); $url = 'http://'.$ip.'/rpc/DevicePower.GetStatus?id=0' ; $json = httpQuery($url); $xml = jsonToXML($json) ; $path = '//percent'; $value = xpath ($xml, $path ) ; setBattery($periph_id , $value); ?>
Le script s'appelle avec les paramètres : http://localhost/script/?exec=shellygetbattery.php&mac=99:99:99:99:99:99&periph_id=99999
Script de récupération de paramètre
Il existe une autre technique, notamment sur des périphériques Gen1, qui est d'utiliser leur capacité à appeler une URL.
Le shelly ajoute simplement &hum=**&temp=***&id=shellyht-*** à l'URL saisi. (la documentation indique : report_url 0 URL to report sensor events on (/?hum=60&temp=25.00&id=shellyht-xxxxxx)
La valeur peut a priori être récupérée dans un script php eedomus avec getarg (non testé).