Intégration de données Shelly dans Domoticz via un Script ksh

Dans cet article, nous allons voir comment intégrer les données d’un appareil Shelly (Modele exat Shelly Plus S) dans Domoticz en utilisant un simple script ksh personnalisé. Ce script permettra de récupérer des données telles que la puissance, la tension, le courant, et la température d’un appareil Shelly et de les envoyer à Domoticz pour une automatisation et un suivi efficaces de votre environnement domotique.

Prérequis

  • Un appareil Shelly configuré et connecté à votre réseau local.
  • Domoticz installé et accessible.
  • jq et bc, deux outils de ligne de commande pour l’analyse JSON et les calculs basiques.

Étape 1 : Creer les devices virtuel dans domoitcz :

Personnelement je n’utilise que 2 compteurs :

Shelly Plug config domoticz

Récupérer l’IDX de Votre Appareil dans Domoticz

L’IDX est un identifiant unique pour chaque appareil dans Domoticz. Pour trouver l’IDX de votre appareil Shelly :

  1. Connectez-vous à l’interface web de Domoticz.
  2. Naviguez vers Setup > Devices.
  3. Repérez votre appareil Shelly et notez son IDX.

 

Étape 2 : Création du Script ksh

  1. Créez un fichier pour le script : Ouvrez un terminal sur votre système où Domoticz est installé et exécutez la commande suivante pour créer un nouveau fichier script :

mkdir /home/pi/shelly
vi /home/pi/shelly/get_data.sh

Ouvrez le fichier créé dans un éditeur de texte et copiez-y le contenu du script fourni ci-dessous ;

#!/bin/ksh
DOMOTICZ=127.0.1.1:8080
SHELLY=192.168.1.31

# Emplacement du fichier de sortie
output_file="/tmp/shelly.log"

# Appel API et stockage de la réponse dans une variable
response=$(curl -s -X POST -d '{"id":1,"method":"Shelly.GetStatus"}' http://$SHELLY/rpc)


# Extraction des valeurs avec jq
apower=$(echo "$response" | jq '.result."switch:0".apower')
voltage=$(echo "$response" | jq '.result."switch:0".voltage')
current=$(echo "$response" | jq '.result."switch:0".current')
tC=$(echo "$response" | jq '.result."switch:0".temperature.tC')

POWER=$(echo "$response" | jq '.result."switch:0".apower')
ENERGY=$(echo "$response" | jq '.result."switch:0".aenergy.total')
OFFSET='95855' # Depuis le debut de la prise
ENERGY=$(echo "$ENERGY - $OFFSET" | bc)



# Affichage des valeurs
echo "apower: $apower W"
echo "voltage: $voltage V"
echo "current: $current A"
echo "temperature: $tC C"
echo "POWER : $POWER W"
echo "ENERGY : $ENERGY Wh"

# Vérification si ENERGY < 0
if [ $(echo "$ENERGY < 0" | bc) -eq 1 ]; then
    echo "Invalid ENERGY value detected, exiting."
    exit 1
fi

# Current
DEVICETOCHANGE=8150
curl -s "$DOMOTICZ/json.htm?type=command&param=udevice&idx=$DEVICETOCHANGE&nvalue=0&svalue=$current" -o /dev/null

# POWER and Watt
DEVICETOCHANGE=8153
curl -s "$DOMOTICZ/json.htm?type=command&param=udevice&idx=$DEVICETOCHANGE&nvalue=0&svalue=$POWER;$ENERGY" -o /dev/null

# Enregistrement des valeurs dans un fichier avec horodatage (facultatif)
echo "$(date '+%Y-%m-%d %H:%M:%S') - apower: $apower, voltage: $voltage, current: $current, temp: $tC " >> "$output_file"




  1. Rendez le script exécutable :
chmod +x /home/pi/shelly/get_data.sh

Étape 3 : Configurer le Script avec Vos Informations

  1. Adresse IP de Shelly : Remplacez 192.168.1.31 par l’adresse IP de votre appareil Shelly.
  2. DOMOTICZ : Modifiez la variable DOMOTICZ avec l’adresse IP et le port de votre serveur Domoticz.
  3. IDX : Remplacez les valeurs DEVICETOCHANGE par les IDX correspondants de vos appareils dans Domoticz.

A noter que j’utilise un offset pour reprendre a 0 la valeur puissance a partir du moment ou je l’ai ajouté dans domoticz. (un factory reset doit aussi faire l’affaire)

Étape 4 : Tester le Script

Exécutez le script manuellement pour vous assurer qu’il fonctionne correctement :

/home/pi/shelly/get_data.sh

 

root@pi3:/home/pi/shelly# /home/pi/shelly/get_data.sh
apower: 0.6 W
voltage: 231.6 V
current: 0.02 A
temperature: 43.3 C
POWER : 0.6 W
ENERGY : .881 Wh

 

Vérifiez les logs de Domoticz et le fichier /tmp/shelly.log pour confirmer que les données sont correctement envoyées et enregistrées.

Étape 5 : Automatisation avec Crontab

Pour automatiser l’exécution du script, ajoutez une tâche cron :

  1. Ouvrez l’éditeur crontab :
crontab -e

 

  1. Ajoutez la ligne suivante pour exécuter le script toutes les 2 minutes :
*/2 * * * * /home/pi/shelly/get_data.sh

 

  1. Sauvegardez et quittez l’éditeur.

Étape 6 : Comment commander les prises Shelly depuis domoticz ?

Pour commander votre prise Shelly S depuis domotique vous devez simplement creer un switch virtuel et utiliser ces deux commandes en adaptant l’IP de votre prise :

commander une prise SHelly depuis DOmoticz

 

 

 

Commande ON :

script:///usr/bin/curl "http://192.168.1.31/rpc/Switch.Set?id=0&on=true"

Commande OFF :

script:///usr/bin/curl "http://192.168.1.31/rpc/Switch.Set?id=0&on=false"

 

Conclusion

Félicitations ! Vous avez maintenant intégré avec succès les données de votre appareil Shelly dans Domoticz à l’aide d’un script ksh. Cela ouvre des possibilités pour une automatisation avancée et un meilleur suivi de vos appareils domotiques.

N’oubliez pas de vérifier régulièrement le bon fonctionnement du script et de consulter les logs pour toute erreur potentielle. Bonne domotique !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

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