[Tuto] MàJ cumul quotidien de pluie (données DarkSky)

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.
ogulf
Messages : 445
Inscription : 15 juin 2017, 14:41

[Tuto] MàJ cumul quotidien de pluie (données DarkSky)

Message par ogulf »

En référence à cette problématique de màj que j'évoquais > ici <, je viens de mettre au point un petit script qui corrige directement en base le cumul quotidien de pluie à partir des données issues de DarkSky (mais globalement la mise à jour marche avec n'importe quel device de type "rain").

Les prérequis :
- installer sqlite3
- avoir au moins 2 jours de log (ou alors adapter le principe décrit ci-dessous : crontab à 23h58 et ne garder que date('now') dans la requête)

Principe du script :
- Analyse des données de la veille
- Script lancé en crontab tous les jours vers 2h
- Dès que la précipitation > 0 mm, je calcule le cumul tombé entre deux informations DarkSky
- J'agrège le tout pour la journée étudiée
- Je formate un ordre de MàJ
- Je mets à jour la base Domoticz

La crontab de pi :

Code : Tout sélectionner

# Ajuste tous les jours à 2h08 la base Domoticz (Cumul Pluie)
8 2 * * * /home/domoticz/scripts/RegulBase.sh > /tmp/RegulBase.log 2>&1
Le script RegulBase.sh (le rendre exécutable, bien entendu !) :

Code : Tout sélectionner

#!/bin/bash

echo $(date +%d-%m-%Y" "%H:%M:%S:%3N) ": début Select"
cd /home/domoticz/pi
cat RegulPluie.sql | sudo sqlite3 domoticz.db > Result.sql
echo $(date +%d-%m-%Y" "%H:%M:%S:%3N) ": début MàJ"
cat Result.sql | sudo sqlite3 domoticz.db
echo $(date +%d-%m-%Y" "%H:%M:%S:%3N) ": fin MàJ"
Le fichier de requête SQL 'RegulPluie.sql' à placer dans le répertoire /home/domoticz/pi (si ailleurs, modifier le script précédent en conséquence) :
nb : devicerowid=37 ==> correspond à mon device "Pluie" de DarkSky

Code : Tout sélectionner

select "update rain_calendar set total="||a.pluie||" where devicerowid="||a.devicerowid
       ||" and date="""||a.jour||""";"
from
(
select a.devicerowid,date(a.date) as jour, round(sum(a.Pluie),2) as pluie
from
(
select a.devicerowid,a.date, (strftime('%s',b.date)-strftime('%s',a.date))*a.total/3600 as Pluie
from rain a, rain b
where a.devicerowid=37
  and a.total>0
  and date(a.date)=date('now','-1 days')
  and b.devicerowid=a.devicerowid
  and b.date=(select min(temp.date)
              from rain temp
              where temp.devicerowid=a.devicerowid
                and temp.date>a.date
              )
              
              
) a
group by 1,2
) a;
Si vous êtes frileux, vous pouvez n'exécuter que la première partie du script, celle qui formate l'ordre de màj : cela vous permettra de voir la màj à venir !
Exemple chez moi (oui oui il a bcp plu !!) :

Code : Tout sélectionner

pi@raspberrypi:/home/domoticz/pi $ cat RegulPluie.sql | sudo sqlite3 domoticz.db
update rain_calendar set total=23.59 where devicerowid=37 and date="2019-02-01";
pi@raspberrypi:/home/domoticz/pi $
Si la valeur 23.59 mm de pluie cumulée dans la journée du 01/02/2019 vous parait vraisemblable, alors vous pouvez lancer le script complet manuellement avant de le mettre en crontab.

Enjoy :)
Domoticz Stable sur RPi3 + RFPlayer + ZWave+ + RFLink R48 :
- 11 x RF660P
- 1 x FGSD-002
- 10 x F007TH
- 5 x Emcoluxr EV1527 + 4 x NAS-DS01Z
- 4 x NAS-PD02Z
- 1 x Shelly 1PM
bourgui37
Messages : 1
Inscription : 03 mai 2019, 11:48

Re: MàJ cumul quotidien de pluie (données DarkSky)

Message par bourgui37 »

Bonjour

Pourrais tu communiquer le détail des tables a créé pour le bon fonctionnement de ton script?

Merci d'avance et bonne journée.
ogulf
Messages : 445
Inscription : 15 juin 2017, 14:41

Re: MàJ cumul quotidien de pluie (données DarkSky)

Message par ogulf »

Aucune table n'est créée, j'exploite celles de Domoticz.
Si pb d'implémentation revenir ici avec la description de ce qui ne marche pas.
Domoticz Stable sur RPi3 + RFPlayer + ZWave+ + RFLink R48 :
- 11 x RF660P
- 1 x FGSD-002
- 10 x F007TH
- 5 x Emcoluxr EV1527 + 4 x NAS-DS01Z
- 4 x NAS-PD02Z
- 1 x Shelly 1PM
Répondre