Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)
Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)
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
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
Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)
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
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.
Code : Tout sélectionner
curl http://<ip de ton domoticz;port>/json.htm?type=command¶m=switchlight&idx=<id device>&switchcmd=<On/Off>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
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Re: Récupérer une valeur de script bash en blocky (ou changer l'état d'un interrupteur en Bash)
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 !
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)
Bonjour
Je suis intéressé par le script pour allumer et éteindre les ampoules SVP
Merci d'avance.
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)
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) ?
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)
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¶m=switchlight&idx=74&switchcmd=On
elif [ $on = "false" ]; then
curl http://ip_domoticz:port/json.htm?type=command¶m=switchlight&idx=74&switchcmd=Off
fi
#!/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¶m=switchlight&idx=74&switchcmd=On
elif [ $on = "false" ]; then
curl http://ip_domoticz:port/json.htm?type=command¶m=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)
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
/!\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)
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",
}
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)
Bon je me réponds tout seul lol :
l'erreur : .state.on
Inutile de mettre les crochets...
l'erreur : .state.on
Inutile de mettre les crochets...