Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
jojo57
Messages : 35
Inscription : 21 févr. 2015, 11:10

Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Message par jojo57 »

Bonjour,

j'ai un script Bash qui fonctionne bien mais j'aimerais récupérer une variable (ou une donnée, fichier, etc) dans un script Blocky

Je vous explique pourquoi:

J'ai des ampoules Hue et j'ai fait un script Bash qui allume ou éteint une ou des lampes.
Ca fonctionne bien, et j'ai créé des interrupteurs virtuels qui lancent ce script pour allumer ou éteindre, un interrupteur virtuel par ampoule.

Le seul problème est qu'une ampoule Hue peut aussi être commandé via l'application Hue, un interrupteur hue, etc
Donc l'état de l'ampoule peut changer indépendamment de Domoticz.
J'aimerais donc pouvoir "remonter" l'état de la lampe (via un script Bash aussi) et changer l'état de l'interrupteur pour refléter l'état réel de l’ampoule (éteint ou allumé).
Mais je n'arrive pas à faire cela. je pensais le faire en Blocky mais comment depuis blocky récupérer une valeur d'un script bash ?

Ou comment depuis un script Bash faire changer l'état de l'interrupteur ?

Pas trouvé hélas, donc si vous avez une piste...
Un grand merci d’avance
rimram31
Messages : 659
Inscription : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Message par rimram31 »

Changer l'etat d'un device domoticz a partir d'un shell, il te faut utiliser l'API de domoticz https://www.domoticz.com/wiki/Domoticz_ ... Fswitch_on via curl par exemple

Code : Tout sélectionner

curl http://<ip de ton domoticz;port>/json.htm?type=command&param=switchlight&idx=<id device>&switchcmd=<On/Off>
recupère l'idx de ton device dans l'interface de domoticz (-> Réglages -> Dispositifs)

Tu peux aussi utiliser python (http://easydomoticz.com/une-libraire-py ... -domoticz/) ou tout autre outil capable de faire des requetes http, tu peux d'ailleurs tester dans un simple navigateur.
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
jojo57
Messages : 35
Inscription : 21 févr. 2015, 11:10

Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Message par jojo57 »

Yes un GRAND merci, ça fonctionne, je peux changer l'état de mes interrupteurs.
Reste a intégrer ça dans un script bash avec un cron qui toutes les x minutes va interroger le pont Hue sur l'état des lampes et si besoin modifie l'affichage de l'interrupteur dans domoticz, mais ça je sais faire maintenant.

Ca intéresse quelqu'un si je mets ces scripts a disposition sur le forum ?

Merci encore pour l'aide rapide et efficace !
Bushi_blanc
Messages : 8
Inscription : 26 mars 2017, 20:06

Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Message par Bushi_blanc »

Bonjour

Je suis intéressé par le script pour allumer et éteindre les ampoules SVP

Merci d'avance.
Bushi_blanc
Messages : 8
Inscription : 26 mars 2017, 20:06

Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Message par Bushi_blanc »

Bonjour,

J'ai trouvé pour le script pour allumer une lampe via l'action On (idem pour l'action Off), je poste ici la réponse qui pourra servir à quelqu'un :

curl -X PUT -d '{"on":true,"bri":254,"sat":140,"hue":8411,"effect":"none","xy":[0.4570,0.4098]}' http://ip_du_pont_hue/api/utilisateur_enregistré/lights/1/state > /dev/null 2>&1

Je reviens vers vous car j'ai un autre problème (le même que jojo) mais comme il n'a pas posté sa réponse, je redemande. Pour récupérer l'état d'une ampoule pas de soucis, je fais une requête comme celle-ci :

curl -X GET http://ip_du_pont_hue/api/utilisateur_enregistré/lights/1/

Je récupérer des valeurs comme celle-ci :

{
"state": {
"on": false,
"bri": 254,
"hue": 65535,
"sat": 254,
"effect": "none",
"xy": [
0.6915,
0.3083
],
"ct": 153,
"alert": "none",
"colormode": "hs",
"reachable": true
},

}

Comment récupérer le "on": true (ou false selon l'état de l'ampoule) pour le transformer en variable que j'utiliserai dans mon script pour changer l'état dans Domoticz (je n'ai pas de soucis pour envoyer la requête http à Domoticz en utilisant l'API Json) ?
Bushi_blanc
Messages : 8
Inscription : 26 mars 2017, 20:06

Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Message par Bushi_blanc »

J'ai essayé d'adapter un script trouvé sur le site développeur de Philips en l'adaptant à Domoticz, cela devrait ressemblait à quelque chose comme cela mais cela ne fonctionne pas, il doit y avoir une erreur :

#!/bin/bash


on=`curl -X GET -s "http://ip_du_pont_philips/api/numero_dutilisateur/lights/2" |cut -d, -f1 |cut -d\{ -f3 |cut -d: -f2`
if [ $on = "true" ]; then
curl http://ip_domoticz:port/json.htm?type=command&param=switchlight&idx=74&switchcmd=On

elif [ $on = "false" ]; then
curl http://ip_domoticz:port/json.htm?type=command&param=switchlight&idx=74&switchcmd=Off

fi
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Message par vil1driver »

MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Bushi_blanc
Messages : 8
Inscription : 26 mars 2017, 20:06

Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Message par Bushi_blanc »

Bonjour vil1driver,

Merci pour votre réponse.

J'ai installé jq et j'ai testé ceci :

var_on=$(curl -s "http://ip_do_pont_hue/api/numéro_dutilisateur/lights/2" | jq -r .state[].on)
echo $var_on


J'ai cette erreur :
jq: error (at <stdin>:0): Cannot index boolean with string "on"


Si je teste avec ceci : var_on=$(curl -X GET -s "http://ip_do_pont_hue/api/numéro_dutilisateur/lights/2" | jq -r .on)

J'ai "null" qui s'affiche...

Savez-vous où se trouve mon erreur ?


Sachant qu'avec l'API Debug Tool de Philips j'ai ceci qui s'affiche :

{
"state": {
"on": true,
"bri": 77,
"hue": 8402,
"sat": 140,
"effect": "none",
"xy": [
0.4575,
0.4099
],
"ct": 365,
"alert": "select",
"colormode": "xy",
"reachable": true
},
"type": "Extended color light",
"name": "Hue Go",

}
Bushi_blanc
Messages : 8
Inscription : 26 mars 2017, 20:06

Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)

Message par Bushi_blanc »

Bon je me réponds tout seul lol :

l'erreur : .state.on

Inutile de mettre les crochets...
Répondre