Page 2 sur 2

Re: Serveur web ? (Poco pour Yadoms et Nginx en front)

Posté : 24 novembre 2021, 14:31
par sgallou
Super nouvelle.
En mode SQLite du coup, c'est ça ?

Concernant Shelly, nous n'avons pas (encore !) de plugin dédié, mais pas de panique, il y a moyen de s'en sortir en créant une règle d'automatisation (en Python du coup), qui puisse communiquer avec le ou les modules, et enregistrer les acquisitions récupérées vers des équipements virtuels (à créer dans la page équipements).

Exemple de règle récupérant le vent (vitesse, direction) à partir de balises déployées un peu partout :

Code : Tout sélectionner

import scriptUtilities
import json
import urllib2
import datetime
import time


# IDs des balises Pioupiou par ordre d'intérêt décroissant
# Cette liste permet d'utiliser d'autres balises en cas de balise défaillante
pioupiouIds=[###, ###, ###, ###]


def requestData(pioupiouId):
   try:
      print 'Try to reach pioupiou #' + str(pioupiouId) + '...'
      
      pioupiouAnswer = json.load(urllib2.urlopen(url='http://api.pioupiou.fr/v1/live/' + str(pioupiouId), timeout=10))

      if pioupiouAnswer[u'data'][u'status'][u'state'] != u'on':
         raise Exception('Pioupiou # ' + str(pioupiouId) + ' : Station is OFF')
      
      if datetime.datetime.strptime(pioupiouAnswer[u'data'][u'measurements'][u'date'], "%Y-%m-%dT%H:%M:%S.%fZ") < (datetime.datetime.utcnow() - datetime.timedelta(minutes=30)):
         raise Exception('Pioupiou # ' + str(pioupiouId) + ' : Measure is too old')
         
      return pioupiouAnswer
   
   except Exception as e:
      print 'Error requesting data to pioupiou website :', e.message
      return None

def readWind(yApi, windDirectionKw, minWindKw, avgWindKw, maxWindKw):
   print 'Read wind...'
   for pioupiouId in pioupiouIds:
      pioupiouAnswer = requestData(pioupiouId)
      if pioupiouAnswer != None:
         break;

   if pioupiouAnswer is None:
      print 'No working Pioupiou found'
      return

   print 'Working Pioupiou found was ', (pioupiouAnswer[u'data'][u'meta'][u'name']).encode('utf-8')
   
   windDirection = pioupiouAnswer[u'data'][u'measurements'][u'wind_heading']
   minWind = pioupiouAnswer[u'data'][u'measurements'][u'wind_speed_min']
   avgWind = pioupiouAnswer[u'data'][u'measurements'][u'wind_speed_avg']
   maxWind = pioupiouAnswer[u'data'][u'measurements'][u'wind_speed_max']
   print "Wind direction =", windDirection, ", min speed =", minWind, ", avg speed =", avgWind, ", max speed =", maxWind

   # Direction
   yApi.writeKeyword(windDirectionKw, str(windDirection))
   
   # Speeds : convert to m/s
   if minWind is not None:
      yApi.writeKeyword(minWindKw, str(minWind * 1000 / 3600))
   if avgWind is not None:
      yApi.writeKeyword(avgWindKw, str(avgWind * 1000 / 3600))
   if maxWind is not None:
      yApi.writeKeyword(maxWindKw, str(maxWind * 1000 / 3600))

   

def yMain(yApi):
   
   windDirectionKw = yApi.getKeywordId('Vent - direction', 'direction')
   minWindKw = yApi.getKeywordId('Vent minimum', 'speed')
   avgWindKw = yApi.getKeywordId('Vent moyen', 'speed')
   maxWindKw = yApi.getKeywordId('Vent maximum', 'speed')
   
   while(True):
      readWind(yApi, windDirectionKw, minWindKw, avgWindKw, maxWindKw)
      time.sleep(1800)
      
      
Sébastien

Re: Serveur web ? (Poco pour Yadoms et Nginx en front)

Posté : 24 novembre 2021, 14:52
par SHN42
Oui, avec SQlite du coup.
En attenant de pouvoir basculer :)

Je teste tout de suite les règles pour voir ce que j'arrive à faire du shelly.

Encore merci !

Re: Serveur web ? (Poco pour Yadoms et Nginx en front)

Posté : 26 novembre 2021, 11:40
par sgallou
Bonjour,

en principe, le problème est corrigé dans cette version beta.

J'attends votre validation avant de diffuser une release officielle.

Sébastien