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 :

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mkdir /home/pi/shelly
vi /home/pi/shelly/get_data.sh
mkdir /home/pi/shelly vi /home/pi/shelly/get_data.sh
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 ;

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#!/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"
#!/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"
#!/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

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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 :

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
script:///usr/bin/curl "http://192.168.1.31/rpc/Switch.Set?id=0&on=true"
script:///usr/bin/curl "http://192.168.1.31/rpc/Switch.Set?id=0&on=true"
script:///usr/bin/curl "http://192.168.1.31/rpc/Switch.Set?id=0&on=true"

Commande OFF :

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
script:///usr/bin/curl "http://192.168.1.31/rpc/Switch.Set?id=0&on=false"
script:///usr/bin/curl "http://192.168.1.31/rpc/Switch.Set?id=0&on=false"
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 la façon dont les données de vos commentaires sont traitées.