Page 2 sur 3

Re: RE: Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 24 févr. 2016, 09:00
par deennoo
jackslayter a écrit :le script que j'avais marchait bien et puis plus du tout , j'ai essayé avec le level en json , rien.
je pense que mon variateur n'est plus compatible.
je suis donc passé aux scènes avec 25%,50%,... et un bouton qui monte et un autre qui descend
Peux tu le partager ? Stp

Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 24 févr. 2016, 09:12
par jackslayter

Code : Tout sélectionner

--script_device_lampe.lua
commandArray = {}
MaxDimLevel = 16
step = 100.0 / MaxDimLevel
increment = 2
button = 'controle inten salon'
light = 'lampe salon'
    if (devicechanged[button]=='On') then
       if ('Off' ~= string.len(otherdevices_svalues[light])) then
          local currentlevel = tonumber(otherdevices_svalues[light])
          if (currentlevel < MaxDimLevel) then
             currentlevel = step * currentlevel
             newlevel =  math.ceil(currentlevel + (increment * step))
             --print('Increase ' .. light .. ' from ' .. math.ceil(currentlevel) .. '% to ' .. newlevel .. '%')
             commandArray[light]='Set Level ' .. newlevel
          end
       end
    elseif (devicechanged[button]=='Off') then
       if ('Off' ~= string.len(otherdevices_svalues[light])) then
          local currentlevel = tonumber(otherdevices_svalues[light])
          if (currentlevel < MaxDimLevel) then
             currentlevel = step * currentlevel
             newlevel =  math.ceil(currentlevel - (increment * step))
             --print('Increase ' .. light .. ' from ' .. math.ceil(currentlevel) .. '% to ' .. newlevel .. '%')
             commandArray[light]='Set Level ' .. newlevel
          end
       end
    end

return commandArray
et la cde json pour mettre à jour le variateur

Code : Tout sélectionner

/json.htm?type=command&param=switchlight&idx=27&switchcmd=Set%20Level&level=6
tu peux utiliser cette commande pour recup le level

Code : Tout sélectionner

curl "http://192.168.1.1:8080/json.htm?type=devices&rid=27" | sed -e 's/[{}]/''/g' | grep '"Level" :' | sed 's/:/ /1' | sed 's/,/ /1' | awk -F" " '{ print $2 }'
et mon topic ouvert sur Dz http://www.domoticz.com/forum/viewtopic ... 002#p45002

Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 24 févr. 2016, 16:23
par Neutrino
Sinon, je prendrais le problème dans l'autre sens.

Code : Tout sélectionner

Télécommande----Infra Rouge---->Capteur->Lircrc->script bash
Le script bash se contente de lire le level avec la commande de jackslayter, de l'incrémenter et enfin de faire appel à l'API JSON pour l'action dans Dz.
Pas de LUA et une exécution plus rapide je pense.

Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 24 févr. 2016, 18:16
par deennoo
Je continue a y reflechir, vraiment il faut vite que DZ finissent les intégrations de Hardware.

Il semble qu'aucun device rgbw n'a sa valeur de couleur ou de dim, ccessible par le JSON ou en LUA .

Je pourrais même faire un script qui va piloter directement l'API Milight...

C'est juste une question de perfectionnisme, je VEUX que le niveau réel soit le même que dans Domoticz !!!

Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 24 févr. 2016, 19:59
par vil1driver
deennoo a écrit :(...)
Mais non les MIlight n'affiche rien dans la section svalues, que dalle, nada, nipe.
(...)
as tu testé un simple otherdevices['Appliques'] qui remonte la ligne status (dans ton json: "Status" : "Set Level: 25 %",)
reste juste à jouer avec string.gsub pour ne garder que le 25

Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 25 févr. 2016, 09:18
par deennoo
Je peux essayer, mais je vais attendre la prochaine version officiel, j'ai lu qu'il y allait avoir une refonte complète de la gestion des éléments RGB WW et CW dans tous les protocoles.


Cela arrive pour Mars, la patience peut faire gagner du temps.

Merci de votre temps les copains.

Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 24 mars 2016, 18:37
par DavidFromRouen
Bonjour à tous.

Voilà, certains d'entre vous s'en sont rendu compte, cela fait une grosse semaine que je découvre les joies de Domoticz.
Je commence à me débrouiller et c'est vraiment passionnant.
J'essaie au maximum de me débrouiller par moi-même, mais y'a des moments.. ;)
Je souhaiterai que Domoticz me donne la température d'une sonde, de manière vocale.
J'ai trouvé plusieurs morceaux de scripts ici et ailleurs, mais rien que je ne puisse utiliser car incomplet.
Pour ce qui est vocal, je maîtrise. Il y a deux manières que j'essaie en ce moment et qui ont justement été expliquées sur le forum:

1- le message préenregistré en MP3 qui vient de http://text2speech.us/
2- le message transcrit à la volée venant de http://www.voicerss.org/

Je me suis amusé à faire quelques scripts très simples pour par exemple dire vocalement l'état du portail (ouvert ou fermé)

dans le cas 1 (MP3)

Code : Tout sélectionner

#!/bin/bash
mplayer -ao alsa -noconsolecontrols /home/pi/PortailOuvert.mp3



dans le cas 2 (VOICERSS)

Code : Tout sélectionner

#!/bin/bash
tts "Attention. Le portail est toujours ouvert"
Fin de la parenthèse : D

Du coup, comme dis au début, je souhaiterai que Domoticz me donne la température (c'est une sonde extérieure) si elle atteint un certain seuil.
J'ai vu sur le forum quelque chose de très proche (alerter à chaque degré en 30° et 45°) mais le script n'est pas entier.

D'après ce que j'ai compris, il faut un script JSON qui récupérera la valeur de la sonde et un autre script.
J'ai vu aussi le super script GoodMorning de Jmleglise mais il ne fonctionne pas. (bien sur j'ai épuré en enlevant les prévisions météo et les annonces d'ordures...)

Bref, je suis un peu perdu.

Je crois que je vais acheter un bouquin sur le lua :lol:

Quelqu'un pourrait-il me donner les quelques lignes magiques du script qu'il me faudrait ?

Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 29 mars 2016, 18:46
par Pyrrhus
Salut!
je m'exerce aussi aux joies du lua donc je peux pas bien t'aider encore dans ce langage.
Par contre, je suis passé expert en récupération de valeur en json !
ma méthode, c'est d'installer un parser (trieur) Json qui récuperera ce que tu veux dans la commande json. J'ai installé jq sur mon raspberry:

Code : Tout sélectionner

git clone https://github.com/stedolan/jq.git
cd jq
autoreconf -i
sudo ./configure --disable-maintainer-mode
sudo make
sudo make install
Si tu as un message d'erreur pour "autoreconf" c'est qu'il doit être installé:

Code : Tout sélectionner

sudo apt-get install dh-autoreconf
Imagine que tu veux recupérer les valeurs d'un capteur domoticz dans ton terminal:

Code : Tout sélectionner

curl -s "http://ip_du_rasp:port/json.htm?type=devices&rid=idx_ton_device"
Tu verras toutes les valeurs qui correspondent à ton capteur.
Exemple d'un capteur si tu veux juste récupérer la valeur "Temp" avec jq (temperature)

Code : Tout sélectionner

curl -s "http://ip_du_rasp:port/json.htm?type=devices&rid=idx_de_ton_capteur"| jq -r .result[].Temp
Et oh miracle seule la valeur que tu veux s'affiche :

Code : Tout sélectionner

21.5
Oui il fait pas tres froid en ce moment chez moi :D

Le script:

Code : Tout sélectionner

#!/bin/bash
#on cree une variable temperature
TEMP=$(curl -s "http://ip_du_rasp:port/json.htm?type=devices&rid=idx_de_ton_capteur"| jq -r .result[].Temp)
#on ordonne la sortie vocale
tts "Il fait $TEMP degres celsius "
Je ne suis pas familier du tts. Pour ma part j'utilise un vieux téléphone sur lequel j'ai installé paw server et branché un haut parleur.
tuto ici: http://www.abavala.com/paw-synthese-voc ... s-android/
chez moi la sortie vocale s'écrit donc:

Code : Tout sélectionner

curl -s "http://ip_du_telephone:8080/actions/text_to_speech.xhtml?texte=Il%20fait%20$TEMP%20degres%20celsius"
il faut remplacer les "espace" par des %20

Et ça marche du tonnerre !

Ah toi d'intégrer le script au lua avec la commande

Code : Tout sélectionner

os.execute('/chemin/du/script.sh')

Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 30 mars 2016, 17:07
par DavidFromRouen
Merci à toi !! Je vais me pencher là dessus et je te redis.
Merci beaucoup pour le temps passé pour moi. ;)

Re: Récupérer une valeur présente dans le JSON pour l'utiliser en LUA

Publié : 31 mars 2016, 00:16
par DavidFromRouen
Bon bein ça commence mal.
J'ai essayé tant bien que mal une bonne partie de la soirée, j'avais des messages d'erreur à gogo, des plantages...
Bref rien de bon. J'ai changé de µSD j'ai remis tout propre depuis le début.
Tout ce qui est installation se passe bien, mais lors de la commande finale... erreur...
Peut-être une erreur de syntaxe ?

pi@raspberrypi:~$ curl -s "http://192.168.1.27:8080/json.htm?type=device&rid=1"
<html><head><title>Unauthorized</title></head><body><h1>401 Unauthorized</h1></body></html>pi@raspberrypi:~$



EDIT: Si j’exécute le script manuellement, sous WinSCP,

J'ai une sortie vocale, sauf que la voix ne donne pas le chiffre des degrés et j'ai le retour suivant:

La commande '"./Essai.lua"'
a échoué avec pour code de retour 0 et pour message
parse error: Invalid numeric literal at line 1, column 60.