[DzVents] DarkSky et probabilité de pluie

Vous avez créé 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.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : DarkSky et probabilité de pluie

Message par papoo »

Je viens juste de te poster ton code corrigé juste au dessus
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
vr6man
Messages : 627
Inscription : 18 juil. 2017, 12:15

Re: DZVents : DarkSky et probabilité de pluie

Message par vr6man »

ok mais tu as mis

Code : Tout sélectionner

        local DarkSkyAPIkey = domoticz.variables('api_forecast_io').value
        local geolocalisation = domoticz.variables('Latitude').value..","..domoticz.variables('Longitude').value 
        local DarkSkyAPIkey = "xxxxxx"
        local geolocalisation = "47.896976,0.034682" -- latitude,longitude
ca ne serait pas plutot

Code : Tout sélectionner

        --local DarkSkyAPIkey = domoticz.variables('api_forecast_io').value
        --local geolocalisation = domoticz.variables('Latitude').value..","..domoticz.variables('Longitude').value 
        local DarkSkyAPIkey = "xxxxxx"
        local geolocalisation = "47.896976,0.034682" -- latitude,longitude
Franchement je ne comprends pas tout
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : DarkSky et probabilité de pluie

Message par papoo »

Si
Très bien
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Doudy
Messages : 457
Inscription : 07 mai 2016, 17:23

Re: DZVents : DarkSky et probabilité de pluie

Message par Doudy »

@papoo

Tu as oublié de modifier la date

Code : Tout sélectionner

update/mise à jour = 06/03/2019
dans ton poste corrigé !

;)
RaspberryPi - RFLink - Zwave - WH2600
Domoticz : 2020.2 | Dashticz : V3.12 Master | dzvents : 3.0.2 | Python : 3.7.3
vr6man
Messages : 627
Inscription : 18 juil. 2017, 12:15

Re: DZVents : DarkSky et probabilité de pluie

Message par vr6man »

ok merci
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : DarkSky et probabilité de pluie

Message par papoo »

@doudy
Je n’ai pas modifié mon code seule ment adapte sont code pour utiliser son api et sa localisation en local
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Doudy
Messages : 457
Inscription : 07 mai 2016, 17:23

Re: DZVents : DarkSky et probabilité de pluie

Message par Doudy »

;)
RaspberryPi - RFLink - Zwave - WH2600
Domoticz : 2020.2 | Dashticz : V3.12 Master | dzvents : 3.0.2 | Python : 3.7.3
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: DZVents : DarkSky et probabilité de pluie

Message par Pyrrhus »

Bonjour à tous,
Merci pour ce script, je l'ai découvert aujourd'hui mais j'ai un problème avec le script.
Domoticz n'est pas content:

Code : Tout sélectionner

 2019-03-30 22:30:00.263 Error: dzVents: Error: Darksky Rain Probability v1.0 : An error occured when calling event handler darksky
2019-03-30 22:30:00.263 Error: dzVents: Error: Darksky Rain Probability v1.0 : Pi/domoticz/scripts/dzVents/scripts/darksky.lua:79: attempt to index local 'item' (a nil value) 
Il y a apparemment un problème à la ligne 79... étonnant que ce soit le timer... ça m'échappe, le lua n'est pas ma spécialité :oops:

Voici le script, tel que je l'ai modifié pour mes besoins

Code : Tout sélectionner

--[[ darksky.lua for [ domoticzVents >= 2.4 ]
author/auteur = papoo
update/mise à jour = 15/09/2018
creation = 15/09/2018
https://pon.fr/dzvents-darksky-et-probabilite-de-pluie/
This script requires prior registration to the DarkSky API
Ce script nécessite l'inscription préalable à l'API DarkSky
Enter the URL and request a free API key
Entrez l'URL et demandez une clé API gratuite
https://darksky.net/dev
]]--               
local proba_pluie_h = {}
--[[
    Add, modify or delete variables proba_pluie_h [] by changing the number (hour) between []
    the name "in quotation marks" or the idx without quotes (avoid accents) of the device of percentage of rain at [x] associated time, nil if not used
    This script can potentially retrieve the 48 available time forecasts. Create as many percent virtual sensors as you would expect from the hourly forecasts.
    for my part, I only get the forecasts at 1 hour, 2 hours, 4 hours, 6 hours, 12 hours and 24 hours.
    Only 48 possible forecasts
    Ajoutez, modifiez ou supprimez les variables proba_pluie_h[] en changeant le nombre (heure) entre []
    renseigner ensuite le nom "entre guillemets" ou l'idx sans guillemets (évitez les accents) du device pourcentage probabilité pluie à [x] heure associé, nil si non utilisé
    Ce script peut potentiellement récupérer les 48 prévisions horaires disponible. Créez autant de capteurs virtuels pourcentage correspondant aux prévisions horaires que vous souhaitez.
    pour ma part, je ne récupère que les prévisions à 1 heure, 2 heures, 4 heures, 6 heures, 12 heures et 24 heures.
    Seulement 48 prévisions possible
    My DarkSky secret key, the latitude and longitude of my home are contained in 3 user variables
    Ma clé secrète DarkSky, la latitude et la longitude de mon domicile sont contenus dans 3 variables utilisateurs
    
    --local DarkSkyAPIkey = domoticz.variables('api_forecast_io').value
    --local geolocalisation = domoticz.variables('Latitude').value..","..domoticz.variables('Longitude').value
 
    If you want to enter this information directly into the script, comment on the two lines above, uncomment the following two lines
    Si vous souhaitez inscrire ces informations dans le script, commentez les deux lignes ci-dessus, décommentez les deux lignes suivantes
    
    local DarkSkyAPIkey = "xxxxxxxxxxxxxxxxxxxx"
    local geolocalisation = "X,Y" -- latitude,longitude 
    
    by personalizing them with your personal data
    finally, you can choose the level of logs, only one level can be active; comment on others in the section
    en les personnalisant avec vos données personnelles. 
    enfin vous pouvez choisir le niveau de "verbiage" des logs, seulement un niveau peut être actif; commenter les autres dans la section logging
]]--
proba_pluie_h[1]= "Proba Pluie 1h"     			
proba_pluie_h[2]= nil    			 
proba_pluie_h[3]= nil    			            
proba_pluie_h[4]= nil    			
proba_pluie_h[5]= nil    			            
proba_pluie_h[6]= "Proba Pluie 6h"   			
proba_pluie_h[12]= "Proba Pluie 12h"    		
proba_pluie_h[24]= nil  			
proba_pluie_h[36]= nil   			            
proba_pluie_h[48]= nil     			            
                                                     
return {
    active = true,
    on      =   {   timer           =   { 'every 30 minutes' },  -- remember only 1000 requests by day, 30mn = 48 requests
                    httpResponses   =   { "trigger" }    -- Trigger the handle Json part
                },
 
  logging =   { -- level    =   domoticz.LOG_INFO,                                             -- Seulement un niveau peut être actif; commenter les autres
                -- level    =   domoticz.LOG_ERROR,                                            -- Only one level can be active; comment others
                level    =   domoticz.LOG_DEBUG,
                -- level    =   domoticz.LOG_MODULE_EXEC_INFO,
                marker    =   "Darksky Rain Probability v1.0 "      },
 
   data    =   {   rainForecast     = {initial = {} },             -- Keep a copy of last json just in case
   },
    execute = function(domoticz, item)
        --local DarkSkyAPIkey = domoticz.variables('api_forecast_io').value
        --local geolocalisation = domoticz.variables('Latitude').value..","..domoticz.variables('Longitude').value 
        local DarkSkyAPIkey = "xxxxxxxxxxxxxxx"
        local geolocalisation = "X,Y" -- latitude,longitude
 
        local Forecast_url  = "https://api.darksky.net/forecast/"  -- url
        local extraData = "?units=ca&exclude=currently,minutely,daily,alerts,flags" 
 
        local function debugMessage(message)
            domoticz.log(message,domoticz.LOG_DEBUG)
        end
        
        if (item.isTimer) then
            domoticz.openURL({
                url = Forecast_url..DarkSkyAPIkey.."/"..geolocalisation..extraData,
                callback = 'trigger'
            })
 
        end
        if (item.isHTTPResponse and item.ok) then
            -- we know it is json but dzVents cannot detect this
            -- convert to Lua
            local json = domoticz.utils.fromJSON(item.data)
            -- json is now a Lua table
            if #item.data > 0 then
                domoticz.data.rainForecast    = domoticz.utils.fromJSON(item.data)
                rt = domoticz.utils.fromJSON(item.data)
            else
                domoticz.log("Problem with response from DarkSky (no data) using data from earlier run",domoticz.LOG_ERROR)
                rt  = domoticz.data.rainForecast                        -- json empty. Get last valid from domoticz.data
                if #rt < 1 then                                         -- No valid data in domoticz.data either
                    domoticz.log("No previous data. are DarkSkyAPIkey and geolocalisation ok?",domoticz.LOG_ERROR)
                    return false
                end
            end    
            debugMessage("heure systeme")
            debugMessage(os.date('%Y-%m-%d %H:%M:%S', time))
            
            local now = tonumber(os.time(os.date("*t")))
            j = 1
            for i = 1,48 do
 
                 if now > tonumber(json.hourly.data[j].time) then 
                    local h = domoticz.utils.round((now - tonumber(json.hourly.data[j].time)) / 3600,0)
                    j = j+h
                    debugMessage("j : "..j)
                     
                end 
                 
                    if proba_pluie_h[i] then  
                            debugMessage("heure "..i)
                            debugMessage(os.date('%Y-%m-%d %H:%M:%S', json.hourly.data[j].time))
                            debugMessage(json.hourly.data[j].time)
                            debugMessage(json.hourly.data[j].precipProbability)
                            domoticz.devices(proba_pluie_h[i]).updatePercentage(json.hourly.data[j].precipProbability*100)
                    end
                if j == 48 then break end    
                j = j +1
                
            end    
        end
    end
}   
Merci pour votre aide :D
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : DarkSky et probabilité de pluie

Message par papoo »

bonjour Pyrrhus
Utilises tu ce script via un fichier dans le répertoire /home/pi/domoticz/scripts/dzVents/scripts/ ou directement depuis le gestionnaire d’événement de dz?
si tu l'utilises via un script, celui ci est il correctement encodé (utf8 sans BOM), a t'il les droits d’exécutions suffisant pour s’exécuter (chmod +x)?
si tu l'utilises via le gestionnaire d’événement, as tu déclarer ton script lua en Time?
enfin, ta copie modifiée de ce script ne comporte ni déclaration de clé API ni latitude longitude, est-ce un oubli ou volontaire ?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: DZVents : DarkSky et probabilité de pluie

Message par Pyrrhus »

Salut,
Pour la clef d'API, longitude et latitude c'est volontaire pour poster le script sur le forum ! Je suis parano :D

En fait j''ai juste copié/collé ton code dans notepad+, modifié comme posté ici, et enregistré sous "darksky.lua" Je ne masque pas les extensions de fichiers donc c'est bien un .lua et non un .lua.txt
J'ai ensuite transféré le fichier dans mon repertoire partagé samba du RPI. Ensuite je l'ai placé dans /home/pi/domoticz/scripts/dzVents/scripts/

Par rapport a ta reponse, je vais voir si il est correctement encodé (utf8 sans BOM) et lui faire un petit chmod +x
Je te tiens au courant,
Merci
Répondre