lua: Vigicrue

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
chatainsim
Messages : 37
Enregistré le : 25 mars 2015, 17:04

Re: lua: Vigicrue

Message par chatainsim » 06 janv. 2018, 11:26

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 ! ;)

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


balajol
Messages : 667
Enregistré le : 13 nov. 2015, 18:54
Localisation : 62

Re: lua: Vigicrue

Message par balajol » 06 janv. 2018, 12:09

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 :oops: ,
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
v4.9700 sur PC Windows7 (Elite book); DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, Divers SOMFY RTS etc..

chatainsim
Messages : 37
Enregistré le : 25 mars 2015, 17:04

Re: lua: Vigicrue

Message par chatainsim » 06 janv. 2018, 12:31

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 !

chatainsim
Messages : 37
Enregistré le : 25 mars 2015, 17:04

Re: lua: Vigicrue

Message par chatainsim » 12 janv. 2018, 21:15

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.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


chatainsim
Messages : 37
Enregistré le : 25 mars 2015, 17:04

Re: lua: Vigicrue

Message par chatainsim » 12 janv. 2018, 23:46

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é.

balajol
Messages : 667
Enregistré le : 13 nov. 2015, 18:54
Localisation : 62

Re: lua: Vigicrue

Message par balajol » 13 janv. 2018, 12:49

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
v4.9700 sur PC Windows7 (Elite book); DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, Divers SOMFY RTS etc..

balajol
Messages : 667
Enregistré le : 13 nov. 2015, 18:54
Localisation : 62

Re: lua: Vigicrue

Message par balajol » 13 janv. 2018, 15:53

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
Vigicrue4.PNG (7.08 Kio) Vu 2874 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
v4.9700 sur PC Windows7 (Elite book); DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, Divers SOMFY RTS etc..

chatainsim
Messages : 37
Enregistré le : 25 mars 2015, 17:04

Re: lua: Vigicrue

Message par chatainsim » 13 janv. 2018, 21:35

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 :

Code : Tout sélectionner

curl = 'C:/curl-7.50.3-win32-mingw/bin/curl.exe '
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.
Image

balajol
Messages : 667
Enregistré le : 13 nov. 2015, 18:54
Localisation : 62

Re: lua: Vigicrue

Message par balajol » 14 janv. 2018, 00:09

Re,
C'est bien un scipt Lua Time ;)
vigicrue.PNG
vigicrue.PNG (124.62 Kio) Vu 2858 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
v4.9700 sur PC Windows7 (Elite book); DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, Divers SOMFY RTS etc..

balajol
Messages : 667
Enregistré le : 13 nov. 2015, 18:54
Localisation : 62

Re: lua: Vigicrue

Message par balajol » 14 janv. 2018, 18:35

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
vigiecrue_Freq.PNG (75.94 Kio) Vu 2827 fois
vigiecue_script.PNG
vigiecue_script.PNG (14.63 Kio) Vu 2827 fois
Quelqu'un pourrait il me confirmer que 5 mn est le maximum avec cette Fonction ?
Cdt
Bertrand
v4.9700 sur PC Windows7 (Elite book); DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, Divers SOMFY RTS etc..

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre