Page 1 sur 1

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

Publié : 02 févr. 2019, 20:54
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 :)

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

Publié : 03 mai 2019, 11:51
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.

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

Publié : 10 mai 2019, 08:10
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.