Page 2 sur 4

Re: Valeur d'un anemometre oregon WGR800

Publié : 03 juin 2015, 15:39
par deennoo
bon t'es trop fort sur un telephone !

tu avais presque tout bon

en Rouge, la correction :
commandArray = {}
Wb, Wd,Ws,Wg = otherdevices_svalues['Le_nom-de-ton_anemo']:match("([^;]+);([^;]+);([^;]+);([^;]+)")
Wb = tonumber(Wb)
Ws = tonumber(Ws)
Wg = tonumber(Wg)
print("Wind bearing" .. Wb)
print("Wind direction " .. Wd)
print("Wind speed" .. Ws)
print("Wind gust " .. Wg)
return commandArray
Donc j'ai nommer le script : script_device_vent.lua et j'ai bien les valeurs de l anémomètre qui apparaissent dans le log.

j'en fait quoi maintenant ??

Re: Valeur d'un anemometre oregon WGR800

Publié : 03 juin 2015, 23:35
par patrice
Bonsoir
Cool que ca marche a peut prêt
Maintenant il faut les affecter a tes widgets Domoticz
On peut le faire via curl et l' api json
Mais il doit bien y avoir un truc en lua pour envoyer une valeur ds un périphérique.
Je n'ai pas de Domoticz ss la main et il est trop tard pour que j' arrive a trouver

Quelques specialistes de lua devraient pouvoir t' aider (ou le wiki peut-être)

Re: Valeur d'un anemometre oregon WGR800

Publié : 04 juin 2015, 09:27
par vil1driver
Une fois que tu parviens à isoler l'info utile il te suffit de la tester et suivant résultat faire l'action.

Exemple:

Code : Tout sélectionner

If Ws > 20 then
CommandArray['mon store']='Off'
End

Re: Valeur d'un anemometre oregon WGR800

Publié : 04 juin 2015, 09:34
par patrice
bonjour,
Ah ben oui , il fallait juste faire un off sur les volets !!

je cherchais à remplir un widget avec la valeur de Ws !!!
et d'ailleurs comment fait on en Lua pour affecter une valeur à un device ?

y a un truc comme otherdevices_svalues['Le_nom-de-ton_anemo']= 25 ?
ou il faut faire curl ?

Re: Valeur d'un anemometre oregon WGR800

Publié : 04 juin 2015, 15:47
par deennoo
vil1driver a écrit :Une fois que tu parviens à isoler l'info utile il te suffit de la tester et suivant résultat faire l'action.

Exemple:

Code : Tout sélectionner

If Ws > 20 then
CommandArray['mon store']='Off'
End
Merci pour ce bout de code, je l ajoute tel que au code precedent qui me permet de connaitre les valeurs de l anemo ?

Re: Valeur d'un anemometre oregon WGR800

Publié : 04 juin 2015, 16:34
par vil1driver
Il te faut comprendre et adapter...

Re: Valeur d'un anemometre oregon WGR800

Publié : 04 juin 2015, 16:49
par deennoo
vil1driver a écrit :Il te faut comprendre et adapter...
Avec plaisir et cela fait un moment ou je passe l apres midi a chercher a comprendre pour ce fichu store mais il me manque des documentations, connaissances.

Documentation sur le LUA (le wiki domoticz est pas mal mais encore trop technique pour moi qui n'ai pas les bases)
Documentation sur les variables Utilisateurs (idem que le LUA)

Il y a certaines choses que je peux faire et comprendre en LUA (je viens de capter pour le twice, j'avais realisé des script pour piloter mes prises 433 direct au GPIO et codesend sans le rfxcom) principalement en faisant du copier, coller, adapter, relire, retravailler.


Par exemple Patrice donne le code pour avoir les variables de l anemometre, je n'ai toujours pas compris si je devais :

- creer les variables utilisateurs moi meme dans domoticz ? et dans ce cas le code les mets a jours (ce qui ne marche pas)
- le code doit il creer les variables (comme le fait le script twice ?)
- est ce que je dois appeller le script : script_device_store.lua ou script_variable_store.lua ???

J'ai reussit a adapter le code de patrice pour avoir l'etat du store (open ou close), donc maintenant dans les log j'ai l anemometre et l etat du store



Si tu as des sources de documentation partage les stp

Re: Valeur d'un anemometre oregon WGR800

Publié : 04 juin 2015, 17:27
par vil1driver
Le script de patrice n'utilise aucune variable utilisateur, mais de simples variables internes au script et qui n'existent que durant l'exécution de script.
Les variables utilisateur sont elle conservées et peuvent être réutilisées au besoin.

Dans notre cas il s'agit juste de séparer les infos de l'anémometre pour les tester au besoin une à une dans la suite du script.

Les variables déclarées ne servent qu'à ça. On se fiche bien de les conserver.

Du coups après c'est juste de la traduction:

Je veux que
Si (if)
La vitesse du vent (Ws)
Est suppérieur (>)
À 20km/h (20)
Alors (then)
Je ferme mon-store (commandArray['mon-store']='Off)
Fin (end)

Script_device_xxx.lua est exécuté à chaque maj d'un device
Script_time_xxx.lua est exécuté toutes les minutes
Script_variable_xxx.lua est exécuté à chaque maj d'une variable utilisateur.

Mes sources ne sont que le wiki et google ofc.

Re: Valeur d'un anemometre oregon WGR800

Publié : 04 juin 2015, 17:57
par deennoo
bah crotte les gars vous pouvez etre fiere de vous !

Avec vos betises et le fait que je n aime pas rester sur un echec et aussi cette page (http://lua-users.org/wiki/TernaryOperator) j'ai pondu ceci :

Code : Tout sélectionner

commandArray = {}
Wb, Wd, Ws, Wg = otherdevices_svalues['Anemometre']:match("([^;]+);([^;]+);([^;]+);([^;]+)")
Wb = tonumber(Wb)
Ws = tonumber(Ws)
Wg = tonumber(Wg)
print("Vitesse du Vent " ..  Ws)
print("Vitesse Rafale " ..  Wg)

etat = otherdevices_svalues['PIR Store']:match("([^;]+)")
etat = tonumber (etat)

if etat  > 14 then
	 print("Store Ouvert")
 else
	print ("Store Fermer")
 end
if Ws  > 75 then
	commandArray['Store Terrasse']='Off'
end
Deltat = otherdevices_svalues['Delta_T']:match("([^;]+)")
Deltat = tonumber(Deltat)
print("il fait chaud " ..  Deltat)

if Deltat > 1 then
	print("on ouvre le store")
	commandArray['Store Terrasse']='On'
end
return commandArray
et Cela fonctionne en plus !!

Anemometre c'est le WGR800
Store terrasse : c est le store de la terrasse
PIR Store : c'est le capteur chacon qui me permet de savoir si le store est ouvert ou fermé
Deltat : c'est un dummy thermometre qui me calcule la difference entre la temp exterieur et le salon (actuellement +16°c)

Re: Valeur d'un anemometre oregon WGR800

Publié : 04 juin 2015, 19:18
par vil1driver
Franchement bravo !

Par contre lorsqu'un device ne contien qu'une seule info il y a plus simple, exemple ceci:

Code : Tout sélectionner

Deltat = otherdevices_svalues['Delta_T']:match("([^;]+)")
Peut être remplacé par ceci:

Code : Tout sélectionner

Deltat = otherdevices['Delta_T']
Probablement idem pour etat...

Sinon je ne comprends pas trop ton 14 ?
Quel est le model de capteur chacon qui te remonte ça ?

Autre point, il se peut que tu ai du vent et un delta de temp supérieur à 1, dans ce cas où tes 2 conditions sont vraies, seule la dernière action sur ton store sera effectuée.

Du coups, je ferais plutôt comme ceci:

Code : Tout sélectionner

Deltat = otherdevices['Delta_T']
if Ws  > 75 then
   commandArray['Store Terrasse']='Off'

elseif Deltat > 1 then
   print("on ouvre le store")
   commandArray['Store Terrasse']='On'
end
Dans ce cas la première condition testée vraie, stop le teste des suivantes. Ton store se fermera meme si le delta est supérieur à 1.. Et ne s'ouvrira que s'il n'y a pas de vent.

Ps, pour sécuriser d'avantage perso je tiendrais compte également des rafales.

Code : Tout sélectionner

if Ws  > 75 or Wg > 75 then