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é).