couillerot Posté(e) le 29 mai 2021 Signaler Posté(e) le 29 mai 2021 (modifié) Il ne s'agit pas à proprement parlé d'un QA sur l'arrosage automatique mais simplement du déclencheur, à l'aide d'une variable globale "Arrosage" > OUI ou NON (récupérable donc dans une scène ou un autre QA pour lancer l'arrosage). Ce QA fonctionne de la sorte : - il récupère les prévisions de précipitations J+1 et J+2 (via le site WeatherBit) - il met à jour régulièrement le cumul des précipitations du jour via un pluviomètre (type "capteur de pluie") ou soit les données de précipitations du jour via Weatherbit (indication de la source dans le QA) - il stock les données de précipitations à J-1 et J-2 - il compare la consigne de déclenchement et les précipitations passées, actuelles et prévues pour conseiller un arrosage, ou pas. si vous avez des conseils pour optimiser le code (surement) ou même des choses à améliorer (certainement), n'hésitez pas ! Installation : - Créer une variable globale globable énumérée : "Arrosage" > valeurs : "OUI" / "NON" - Dans le tableau des variables : renseignez la key_id WeatherBit (en s'inscrivant gratuitement sur weatherbit.io) et - indiquez l'id de votre pluviomètre (précipitations 24h) > "id_pluviometre" ou l'id de n'importe quel autre module existant pour obtenir les données de Weatherbit. function QuickApp:onInit() self:updateProperty("deviceIcon", 1044) -- mettre ici l'id de votre icon self:loop() end function QuickApp:loop() lat = api.get("/settings/location").latitude lati = tostring(string.format("%.2f", lat)) lon = api.get("/settings/location").longitude long = tostring(string.format("%.2f", lon)) key_id = self:getVariable("key_id") local http = net.HTTPClient() http:request("https://api.weatherbit.io/v2.0/forecast/daily?lat="..lati.."&lon="..long.."&days=5&lang=fr&key="..key_id, { options = { method = 'GET' }, success = function(response) if response.status == 200 then if response.data and response.data ~= "" then local jsonTable = json.decode(response.data) precipday1 = jsonTable.data[2].precip precipday2 = jsonTable.data[3].precip precipday0 = jsonTable.data[1].precip id_pluie = self:getVariable("id_pluviometre") precip1 = self:getVariable("precip_jour_1") precip2 = self:getVariable("precip_jour_2") Consigne_mm, _ = self:getVariable("Consigne") Consigne_mm = tonumber(Consigne_mm) if tostring(id_pluie) > tostring("0") and fibaro.getType(tonumber(id_pluie)) == tostring("com.fibaro.rainSensor") then pluie = fibaro.getValue(tonumber(id_pluie), "value") source = fibaro.getName(tonumber(id_pluie)) else pluie = precipday0 source = tostring("WeatherBit") end name = fibaro.getName(tonumber(id_pluie)) arrosage = string.format("%.2f", precipday1 + precipday2 + pluie + precip1 + precip2) arrosage, _= tonumber(arrosage) arrosage_jardin = fibaro.getGlobalVariable("Arrosage") self:setVariable("pluie", pluie) ---------------------------------------- ---------- ARROSAGE OUI / NON ---------- ---------------------------------------- if tonumber(arrosage) > tonumber(Consigne_mm) then fibaro.setGlobalVariable("Arrosage", "NON") else if (tonumber(precip2) > tonumber(Consigne_mm)) and (tonumber(precipday2 + precipday1 + pluie + precip1) == 0) then fibaro.setGlobalVariable("Arrosage", "OUI") else if (tonumber(precipday2) > tonumber(Consigne_mm)) and (tonumber(precipday1 + pluie + precip1 + precip2) == 0) then fibaro.setGlobalVariable("Arrosage", "OUI") else fibaro.setGlobalVariable("Arrosage", "OUI") end end end ------------------------------------------------------------------------------ --------------------------- CONSTRUCTION DES LABELS -------------------------- ------------------------------------------------------------------------------ Arro = fibaro.getGlobalVariable("Arrosage") self:updateProperty("log", ""..arrosage.." mm") self:updateView("labeldate", "text", "INFOS ARROSAGE DU "..os.date("%d.%m.%Y\r\rdonnées mises à jour à %Hh%M")) self:updateView("labelconsigne", "text", "\nConsigne de report : + "..tostring(Consigne_mm).." mm de pluie / 5 jours") self:updateView("labelprecip", "text", "\rPrécipitations J-2 : "..string.format("%.1f", precip2).." mm\r\rPrécipitations J-1 : "..string.format("%.1f", precip1).." mm\r\rPrécipitations ce jour : " ..string.format("%.1f", pluie).." mm (source : "..source..")\r\rPrécipitations prévues J+1 : "..string.format("%.1f", precipday1).." mm\r\rPrécipitations prévues J+2 : "..string.format("%.1f", precipday2).." mm") self:updateView("labelconseil", "text", "Arrosage conseillé : "..Arro) else self:debug("Error : empty response data") end else self:debug("Error : status=" .. tostring(response.status)) end end, error = function(err) self:debug("Error : " .. err) end }) self:stockprecipitations() fibaro.setTimeout(1000 * 60 * 3, function() self:loop() end) end function QuickApp:uiMoinsOnR() local Consigne_mm, _ = self:getVariable("Consigne") Consigne_mm = tonumber(Consigne_mm) - 1 self:setVariable("Consigne", tostring(Consigne_mm)) self:loop() end function QuickApp:uiPlusOnR() local Consigne_mm, _ = self:getVariable("Consigne") Consigne_mm = tonumber(Consigne_mm) + 1 self:setVariable("Consigne", tostring(Consigne_mm)) self:loop() end function QuickApp:stockprecipitations() local Heure = tonumber(os.date("%H", os.time())) local Minute = tonumber(os.date("%M", os.time())) ----------------------------------------------------------------- ---------- MISE A JOUR DES VARIABLES POUR L'HISTORIQUE ---------- ----------------------------------------------------------------- if (Heure == tonumber("23") and Minute > tonumber("45")) and (Heure == tonumber("23") and Minute < tonumber("50")) then actus = self:getVariable("precip_jour_1") self:setVariable("precip_jour_2", tostring(actus)) end if (Heure == tonumber("23") and Minute > tonumber("50")) and (Heure == tonumber("23") and Minute < tonumber("55")) then actu = self:getVariable("pluie") self:setVariable("precip_jour_1", tostring(actu)) end fibaro.setTimeout(1000 * 60 * 2, function() self:stockprecipitations() end) end version 1.2 - choix du type de source de données de précipitations (capteur de pluie ou WeatherBit) version 1.3 (20.06.2021) - correction d'un bug historique précipitations - affichage dans le log du total des précipitations sur 5 jours. Programmateur.fqa bonne installation ! Stef Modifié le 21 juin 2021 par couillerot 5
Dragoniacs Posté(e) le 29 mai 2021 Signaler Posté(e) le 29 mai 2021 Super pour mon arrosage en cours d'installation !Je vais tester ton QA Envoyé de mon RMX1993 en utilisant Tapatalk 1
couillerot Posté(e) le 29 mai 2021 Auteur Signaler Posté(e) le 29 mai 2021 merci Dragoniacs je vais tâcher de l'essayer également avec le mien Stef
fredokl Posté(e) le 30 mai 2021 Signaler Posté(e) le 30 mai 2021 @couillerot merci pour ce QA. dans ma nouvelle maison je suis entrain d'étudier l'arrosage automatique. Je pense que ton QA va bien m'aider. Cool! 1
CatTrack Posté(e) le 30 mai 2021 Signaler Posté(e) le 30 mai 2021 Bonjour, Merci beaucoup ! Super utile, on prépare tous l'été et l'arrosage automatique !!! Petite question : si on n'a pas de station Netatmo, on peut utiliser le QA que vous avez créé : Quick App - Météo WeatherBit v1.2 pour la pluviométrie du jour ?
couillerot Posté(e) le 31 mai 2021 Auteur Signaler Posté(e) le 31 mai 2021 (modifié) je ne le conseille pas car WeatherBit fournit des données de précipitations en mm/h et non en cumul sur 24h comme le pluvio Netatmo. Stef Modifié le 1 juin 2021 par couillerot
couillerot Posté(e) le 2 juin 2021 Auteur Signaler Posté(e) le 2 juin 2021 - Correction d'un léger bug
Dragoniacs Posté(e) le 2 juin 2021 Signaler Posté(e) le 2 juin 2021 Peux tu nous mettre à disposition le code du QA pour qu'on ne soit pas obligé de tout réimporter ?Envoyé de mon RMX1993 en utilisant Tapatalk 1
couillerot Posté(e) le 2 juin 2021 Auteur Signaler Posté(e) le 2 juin 2021 (modifié) c'est fait QA mis à jour le 03.06.2021 Stef Modifié le 3 juin 2021 par couillerot 2
flacon030 Posté(e) le 3 juin 2021 Signaler Posté(e) le 3 juin 2021 merci Je vais essayer cela ce week-end
couillerot Posté(e) le 6 juin 2021 Auteur Signaler Posté(e) le 6 juin 2021 * version 1.1 - prise en compte de 2 cas particuliers (si J-2 > Consigne + 4 jours suivant sont à 0 mm et J+2 > Consigne + 4 jours précédent sont à 0) - affichage jour J de la prévision annoncée précédemment à titre de comparaison / information Stef 2
Dragoniacs Posté(e) le 7 juin 2021 Signaler Posté(e) le 7 juin 2021 (modifié) J'ai mis à jour le code du "main". J'ai un bug : [07.06.2021] [13:49:01] [WARNING] [QUICKAPP288]: Variable prevision not found [07.06.2021] [13:49:01] [ERROR] [QUICKAPP288]: QuickApp crashed [07.06.2021] [13:49:01] [ERROR] [QUICKAPP288]: main.lua:56: bad argument #2 to 'format' (number expected, got string) Modifié le 7 juin 2021 par Dragoniacs
couillerot Posté(e) le 7 juin 2021 Auteur Signaler Posté(e) le 7 juin 2021 (modifié) sorry, en effet il faut ajouter une variable "prevision" dans le tableau. Stef Modifié le 7 juin 2021 par couillerot
Dragoniacs Posté(e) le 7 juin 2021 Signaler Posté(e) le 7 juin 2021 Ah okEt je mets quoi comme valeur dedans ?Envoyé de mon RMX1993 en utilisant Tapatalk
couillerot Posté(e) le 7 juin 2021 Auteur Signaler Posté(e) le 7 juin 2021 tu peux mettre ce que tu veux, la variable se mettra à jour par la suite automatiquement Stef 1
Bebitoo Posté(e) le 9 juin 2021 Signaler Posté(e) le 9 juin 2021 (modifié) Bonjour, Un peu la même question que un peu plus haut : faute de pluviomètre (Netatmo), que conseilleriez-vous ? Une API Web qui donne la quantité d'eau sur les deniers jours (en mm/jour) ? Modifier le QA pour mémoriser, chaque jour, la prévision WeatherBit du lendemain ? Merci d'avance. --- David PS : je télécharge et installe en parallèle Modifié le 10 juin 2021 par Bebitoo
couillerot Posté(e) le 10 juin 2021 Auteur Signaler Posté(e) le 10 juin 2021 (modifié) Difficile de répondre... Nativement, le QA récupère la prévision de J+1 de Weatherbit et l'affiche dans "Précipitations ce jour" > "prévues : ... mm" (en guise d'information). Après je pourrais très bien récupérer les précipitations du jour J via Weatrherbit, c'est tout à fait possible mais la solution ne me paraissait peu pertinente. Après, je pourrais modifier le code pour donner le choix... pourquoi pas ? - soit les données Weatherbit : précipitations du joiur - soit les données d'un pluviomètre Stef Modifié le 10 juin 2021 par couillerot
couillerot Posté(e) le 10 juin 2021 Auteur Signaler Posté(e) le 10 juin 2021 (modifié) Nouvelle MAJ - version 1.2 il désormais possible de récupérer les données de précipitations du jour soit via un capteur de pluie, soit en passant par WeatherBit. Stef Modifié le 10 juin 2021 par couillerot 1
Bebitoo Posté(e) le 10 juin 2021 Signaler Posté(e) le 10 juin 2021 Excellent merci ! Je regardais de mon côté en parallèle, et : API OpenWeatherMap : la version gratuite de l'API semble permettre d'obtenir le volume de précipitations de la veille... mais pas pour ma géolocalisation (pas de champ current.rain dans la réponse, lors de mon test) Weatherbit : sauf erreur, les données historiques sont soumises à souscription (et c'est pas donné). AccuWeather : le endpoint get24HoursConditionsByLocationKey semble être là pour ça (une fois sa "location key" récupérée, par requête sur un autre endpoint), mais n'ai pu tester encore : je me suis inscrit, mais n'ai pas reçu ma clé d'usage de l'API. Modification du QA Un fork de la toute version 1.2, en utilisant pour J-1 le volume de précipitation prévisionnel obtenu la veille pour J (et ainsi de suite pour J-2) ? Ou bien (nouvelle idée) : création un autre Quick App simulant le pluviomètre Netatmo - valorisé à partir de l'une des méthodes ci-dessus, et indiquer son ID dans les paramètres du QA Arrosage ? Comme ça, pas de motif / fork du QA arrosage Je continue de fouiller dès que possible. --- David
couillerot Posté(e) le 11 juin 2021 Auteur Signaler Posté(e) le 11 juin 2021 J-1 correspond bien à la valeur obtenue la veille (donc J) et ainsi de suite... le QA crée lui-même un mini historique sur 2 jours, que ce soit avec WB ou avec un capteur de pluie. Stef
Dragoniacs Posté(e) le 18 juin 2021 Signaler Posté(e) le 18 juin 2021 Je viens de faire la mise à jour pour passer en 1.2, car je me suis rendue compte que mes valeurs de pluie J-1 et J-2 sont restées à 0 mm Je ne sais pas si cette version corrigera ce problème...
couillerot Posté(e) le 18 juin 2021 Auteur Signaler Posté(e) le 18 juin 2021 (modifié) je n'avais pas noté ce bug, je vais tâcher de jeter un oeil... merci pour le retour. Stef Modifié le 18 juin 2021 par couillerot
couillerot Posté(e) le 19 juin 2021 Auteur Signaler Posté(e) le 19 juin 2021 (modifié) Correction du bug Stef Modifié le 20 juin 2021 par couillerot
flamalex Posté(e) le 27 février 2022 Signaler Posté(e) le 27 février 2022 Bonjour, @Dragoniacs ta source est "Pluie 24h" passes tu par weatherB ou meteofrance (pluie dans l'heure....24h....) ? Le 18/06/2021 à 09:39, Dragoniacs a dit : Je viens de faire la mise à jour pour passer en 1.2, car je me suis rendue compte que mes valeurs de pluie J-1 et J-2 sont restées à 0 mm Je ne sais pas si cette version corrigera ce problème...
couillerot Posté(e) le 27 février 2022 Auteur Signaler Posté(e) le 27 février 2022 (modifié) salut flamalex, La variable "Précipitations ce jour" est la quantité de pluie journalière cumulée par un pluviomètre Netatmo. De ce fait, l'arrosage auto se déclenchera (ou pas) selon un niveau réel de précipitations. Stef Modifié le 27 février 2022 par couillerot
Messages recommandés