Page 3 sur 8
Re: lua: Vigicrue
Publié : 06 janv. 2018, 11:26
par chatainsim
Lou Castelou a écrit :Super ton script sur le suivi des cours d'eau. Mise en place facile et restitution nickel.
Pas de chance en ce qui me concerne, ma station concernée (L870001010) ne délivre pas le débit.
Bonne journée.
Merci pour le retour !

Re: lua: Vigicrue
Publié : 06 janv. 2018, 12:09
par balajol
chatainsim a écrit :balajol a écrit :Bonsoir Chatainsim,
Pour ma suggestion, personnellement je pense que la hauteur d'eau est ce qui intéresse les personnes à proximité d'une rivière.
Par "Expérience" en général elles savent à partir de quel niveau elles auront "les pieds dans l' eau "
La surveillance du débit peut être une donnée pour une pré Alarme, surtout la vitesse à laquelle il augmente.
Pour le fichier Json, mes connaissances en Lua et consorts ne sont pas au niveau des tiennes

,
Il faut que je gratte un Peu (beaucoup) Pour comprendre ta question
Pour ce qui concerne la réalisation de cette modif, il n'y a bien entendu aucune urgence, avoir accès aux info directement dans DOMOTICZ est déjà pas mal .
Cdt
Bertrand
Bonne année.
Je n'ai pas abandonné le script mais je suis encore en congés. (Non je ne suis pas prof

)
Je regarde ça la semaine prochaine.
Bonjour et bonne année également
Aucune honte à avoir pour les profs,il en faut.
Le scipt fonctionne parfaitement depuis.
Au plaisir de te lire
Bertrand
Re: lua: Vigicrue
Publié : 06 janv. 2018, 12:31
par chatainsim
balajol a écrit :
Bonjour et bonne année également
Aucune honte à avoir pour les profs,il en faut.
Le scipt fonctionne parfaitement depuis.
Au plaisir de te lire
Bertrand
Tout à fait d'accord pour les profs !
Re: lua: Vigicrue
Publié : 12 janv. 2018, 21:15
par chatainsim
Je viens de mettre à dispo la beta v3 du script Vigicrue :
https://github.com/chatainsim/scripts_d ... r/vigicrue
Je vous laisse tester et me faire un retour, je mettrais un bout de doc début de semaine prochaine.
Re: lua: Vigicrue
Publié : 12 janv. 2018, 23:46
par chatainsim
Finalement j'ai fait un post rapide en attendant la doc sur github :
https://domo.easter.fr/2018/01/12/vigicrue-v3-beta/
Edit: J'ai encore un bug sur les notifications, il faut que je corrige ça.
Seulement une notification pour le niveau ou le débit sera envoyée.
ça fonctionne bien avec une seul station par contre.
Edit 2 : C'est corrigé.
Re: lua: Vigicrue
Publié : 13 janv. 2018, 12:49
par balajol
Bonjour chatainsim,
Je teste sous Windows et reviens vers toi .
Pour l'alarme, personnellement sur niveau eau est déjà pas mal, certain auront peut être besoin d'avoir l'information de Décrue.
Merci
cdt
Bertrand
Re: lua: Vigicrue
Publié : 13 janv. 2018, 15:53
par balajol
Re,
A priori les devices ne se mettent pas à jour sous Windows
Je pense problème syntaxe pour l'appel Json et curl
Code : Tout sélectionner
-- Parameters to change according to you needs
debug=false
-- Json config loadfile
config = 'C:/Program Files (x86)/Domoticz/scripts/lua/vigicrue.json'--'/opt/domoticz/scripts/vigicrue.json'
-- JSON.lua path
--json = (loadfile "/opt/domoticz/scripts/lua/JSON.lua")()
json = (loadfile "C:/Program Files (x86)/Domoticz/scripts/lua/JSON.lua")()
-- Curl path
curl = 'C:/curl-7.50.3-win32-mingw/bin/curl.exe '--'/usr/bin/curl'
-- End of parameters
time = os.date("*t")
n=1
-- Function to update sensor
local function update(idx, value1)
local cmd = idx..'|0|'..value1
--print(cmd)
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end
-- function to get data from url
local function getdata(urlh,urls)
local DataHeight = assert(io.popen(curl..' -s "'..urlh..'"')) --local DataHeight = assert(io.popen('C:/curl-7.50.3-win32-mingw/bin/curl.exe "'..urlh..'"')) -- lien du Premier scipt fonctionnel
local BlocJsonHeight = DataHeight:read('*all')
DataHeight:close()
local JsonHeight = json:decode(BlocJsonHeight)
local Height = JsonHeight.Serie.ObssHydro
local Name = JsonHeight.Serie.LbStationHydro
local DataSpeed = assert(io.popen(curl..' -s "'..urls..'"')) --local DataSpeed = assert(io.popen('C:/curl-7.50.3-win32-mingw/bin/curl.exe "'..urls..'"'))
local BlocJsonSpeed = DataSpeed:read('*all')
DataSpeed:close()
local JsonSpeed = json:decode(BlocJsonSpeed)
local Speed = JsonSpeed.Serie.ObssHydro
return Height, Speed, Name
end
commandArray = {}
if ( time.min%1 == 0 ) then--Lancement Script toutes les 1 minutes
--if (time.min == 5 or time.min == 30) then
local file = assert(io.open(config, "r"))
local json_text = file:read("*all")
file:close()
local Conf = json:decode(json_text)
Station = Conf.station
for k,v in pairs(Station) do
print("V is: "..v)
local IDStation = v
local IDXHeight = Conf.idx.height[v]
local IDXSpeed = Conf.idx.speed[v]
local NotifHeightV = Conf.notifications.height[v].value
local NotifHeightA = Conf.notifications.height[v].active
local NotifSpeedV = Conf.notifications.speed[v].value
local NotifSpeedA = Conf.notifications.speed[v].active
local urlHeight = 'https://www.vigicrues.gouv.fr/services/observations.json/index.php?CdStationHydro='..IDStation..'&GrdSerie=H&FormatSortie=simple'
local urlSpeed = 'https://www.vigicrues.gouv.fr/services/observations.json/index.php?CdStationHydro='..IDStation..'&GrdSerie=Q&FormatSortie=simple'
ResultHeight,ResultSpeed,StationName=getdata(urlHeight,urlSpeed)
print("IDX Height: "..IDXHeight)
print("IDX Speed: "..IDXSpeed)
if (#ResultHeight ~= 0) then
if (debug) then print("ResultHeight: "..ResultHeight[#ResultHeight][2]) end
update(IDXHeight, ResultHeight[#ResultHeight][2])
if (NotifHeightA) then
if (tostring(ResultHeight[#ResultHeight][2]) > NotifHeightV) then
commandArray[n]={['SendNotification']='Water level is high for station '..StationName..'#Current level is '..ResultHeight[#ResultHeight][2]..'m for '..StationName..'#0#sound#extradata#telegram'}
n=n+1
end
end
else
if (debug) then print('Height level is empty.') end
end
if (#ResultSpeed ~= 0) then
if (debug) then print("ResultSpeed: "..ResultSpeed[#ResultSpeed][2]) end
update(IDXSpeed, ResultSpeed[#ResultSpeed][2])
if (NotifSpeedA) then
if (tostring(ResultSpeed[#ResultSpeed][2]) > NotifSpeedV) then
commandArray[n]={['SendNotification']='Water speed level is high for station '..StationName..'#Current speed level: '..ResultSpeed[#ResultSpeed][2]..'m3/s for '..StationName..'#0#sound#extradata#telegram'}
n=n+1
end
end
else
if (debug) then print('Speed is empty.') end
end
end
end
return commandArray
Pas de message d'erreur:

- Vigicrue4.PNG (7.08 Kio) Consulté 7300 fois
Je n'avais pas remarqué dans la version Préçédente qu'avec:
if (time.min == 5 or time.min == 30) then
Le script s'exécute toutes les 5 mn , pourquoi time.min == 30
Je suis repassé à la version Préçédente qui fonctionne chez moi
cdt
Bertrand
cdt
Bertrand
Re: lua: Vigicrue
Publié : 13 janv. 2018, 21:35
par chatainsim
balajol a écrit :Re,
A priori les devices ne se mettent pas à jour sous Windows
Je pense problème syntaxe pour l'appel Json et curl
Code : Tout sélectionner
-- Parameters to change according to you needs
debug=false
-- Json config loadfile
config = 'C:/Program Files (x86)/Domoticz/scripts/lua/vigicrue.json'--'/opt/domoticz/scripts/vigicrue.json'
-- JSON.lua path
--json = (loadfile "/opt/domoticz/scripts/lua/JSON.lua")()
json = (loadfile "C:/Program Files (x86)/Domoticz/scripts/lua/JSON.lua")()
-- Curl path
curl = 'C:/curl-7.50.3-win32-mingw/bin/curl.exe '--'/usr/bin/curl'
-- End of parameters
time = os.date("*t")
n=1
-- Function to update sensor
local function update(idx, value1)
local cmd = idx..'|0|'..value1
--print(cmd)
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end
-- function to get data from url
local function getdata(urlh,urls)
local DataHeight = assert(io.popen(curl..' -s "'..urlh..'"')) --local DataHeight = assert(io.popen('C:/curl-7.50.3-win32-mingw/bin/curl.exe "'..urlh..'"')) -- lien du Premier scipt fonctionnel
local BlocJsonHeight = DataHeight:read('*all')
DataHeight:close()
local JsonHeight = json:decode(BlocJsonHeight)
local Height = JsonHeight.Serie.ObssHydro
local Name = JsonHeight.Serie.LbStationHydro
local DataSpeed = assert(io.popen(curl..' -s "'..urls..'"')) --local DataSpeed = assert(io.popen('C:/curl-7.50.3-win32-mingw/bin/curl.exe "'..urls..'"'))
local BlocJsonSpeed = DataSpeed:read('*all')
DataSpeed:close()
local JsonSpeed = json:decode(BlocJsonSpeed)
local Speed = JsonSpeed.Serie.ObssHydro
return Height, Speed, Name
end
commandArray = {}
if ( time.min%1 == 0 ) then--Lancement Script toutes les 1 minutes
--if (time.min == 5 or time.min == 30) then
local file = assert(io.open(config, "r"))
local json_text = file:read("*all")
file:close()
local Conf = json:decode(json_text)
Station = Conf.station
for k,v in pairs(Station) do
print("V is: "..v)
local IDStation = v
local IDXHeight = Conf.idx.height[v]
local IDXSpeed = Conf.idx.speed[v]
local NotifHeightV = Conf.notifications.height[v].value
local NotifHeightA = Conf.notifications.height[v].active
local NotifSpeedV = Conf.notifications.speed[v].value
local NotifSpeedA = Conf.notifications.speed[v].active
local urlHeight = 'https://www.vigicrues.gouv.fr/services/observations.json/index.php?CdStationHydro='..IDStation..'&GrdSerie=H&FormatSortie=simple'
local urlSpeed = 'https://www.vigicrues.gouv.fr/services/observations.json/index.php?CdStationHydro='..IDStation..'&GrdSerie=Q&FormatSortie=simple'
ResultHeight,ResultSpeed,StationName=getdata(urlHeight,urlSpeed)
print("IDX Height: "..IDXHeight)
print("IDX Speed: "..IDXSpeed)
if (#ResultHeight ~= 0) then
if (debug) then print("ResultHeight: "..ResultHeight[#ResultHeight][2]) end
update(IDXHeight, ResultHeight[#ResultHeight][2])
if (NotifHeightA) then
if (tostring(ResultHeight[#ResultHeight][2]) > NotifHeightV) then
commandArray[n]={['SendNotification']='Water level is high for station '..StationName..'#Current level is '..ResultHeight[#ResultHeight][2]..'m for '..StationName..'#0#sound#extradata#telegram'}
n=n+1
end
end
else
if (debug) then print('Height level is empty.') end
end
if (#ResultSpeed ~= 0) then
if (debug) then print("ResultSpeed: "..ResultSpeed[#ResultSpeed][2]) end
update(IDXSpeed, ResultSpeed[#ResultSpeed][2])
if (NotifSpeedA) then
if (tostring(ResultSpeed[#ResultSpeed][2]) > NotifSpeedV) then
commandArray[n]={['SendNotification']='Water speed level is high for station '..StationName..'#Current speed level: '..ResultSpeed[#ResultSpeed][2]..'m3/s for '..StationName..'#0#sound#extradata#telegram'}
n=n+1
end
end
else
if (debug) then print('Speed is empty.') end
end
end
end
return commandArray
Pas de message d'erreur:
Vigicrue4.PNG
Je n'avais pas remarqué dans la version Préçédente qu'avec:
if (time.min == 5 or time.min == 30) then
Le script s'exécute toutes les 5 mn , pourquoi time.min == 30
Je suis repassé à la version Préçédente qui fonctionne chez moi
cdt
Bertrand
cdt
Bertrand
Normalement tu n'a besoin de définir le chemin de curl qu'au début :
Pas besoin de changer de le code.
Concernant le time.min == 5 et time.min == 30 c'est à quelle minute il se lance, ici XXh05 et XXh30.
Il est à 5 car j'ai fait des tests et décaler de 0 à 5 mais tu peux le remettre à zéro.
Pour les mises à jour des sensors, je regarde ça mais chez moi ça fonctionne, je n'ai pas fait de changement de ce côté là.
Par contre dans ta capture de la log Domoticz, je vois dzVents, normalement c'est lua -> time et pas dzVents essaye de changer ça.

Re: lua: Vigicrue
Publié : 14 janv. 2018, 00:09
par balajol
Re,
C'est bien un scipt Lua Time

- vigicrue.PNG (124.62 Kio) Consulté 7284 fois
Je test également le script DJU de Papoo et les Logs indiquent également dzvent alors que c'est du Lua -Time
J' ai également essayé avec le lien dans les paramètres , les dispositifs ne se mettent pas à Jour..
Pour la Fréquence d'exécution, si je laisse tes paramètres le script s'exécute toutes les 5 Minutes.
Pour le test je suis passé à toutes les minutes, j'augmenterai par la suite.
Je pense que la refonte du script n'est pas compatible Windows.
La Première version fonctionne chez moi, connais tu comment Déclencher en Lua un DUMMY On/Off à partir d'un seuil lu sur le Custom sensor ?
Si j'arrive à faire cela, La première version Me suffit pour envoyer un sms par Free.
Merci de ton aide
Cdt
Bertrand
Re: lua: Vigicrue
Publié : 14 janv. 2018, 18:35
par balajol
Bonjour,
j'ai verifié aujourd'hui la fréquence d'exécution de la prmière version, avec time.min%15 la fréquence reste à 5 mn

- vigiecrue_Freq.PNG (75.94 Kio) Consulté 7253 fois

- vigiecue_script.PNG (14.63 Kio) Consulté 7253 fois
Quelqu'un pourrait il me confirmer que 5 mn est le maximum avec cette Fonction ?
Cdt
Bertrand