Page 3 sur 6

Re: lua: Vigicrue

Posté : 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

Posté : 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 :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

Re: lua: Vigicrue

Posté : 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

Posté : 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

Posté : 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

Posté : 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

Posté : 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
Vigicrue4.PNG (7.08 Kio) Vu 3413 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

Posté : 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 :

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

Re: lua: Vigicrue

Posté : 14 janv. 2018, 00:09
par balajol
Re,
C'est bien un scipt Lua Time ;)
vigicrue.PNG
vigicrue.PNG (124.62 Kio) Vu 3397 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

Posté : 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
vigiecrue_Freq.PNG (75.94 Kio) Vu 3366 fois
vigiecue_script.PNG
vigiecue_script.PNG (14.63 Kio) Vu 3366 fois
Quelqu'un pourrait il me confirmer que 5 mn est le maximum avec cette Fonction ?
Cdt
Bertrand