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

Questions générales sur l'installation et l'utilisation de Yadoms
Avatar du membre
sgallou
Messages : 126
Enregistré le : 25 avril 2017, 09:56

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

Message 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
SHN42
Messages : 6
Enregistré le : 23 novembre 2021, 16:29

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

Message 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 !
Avatar du membre
sgallou
Messages : 126
Enregistré le : 25 avril 2017, 09:56

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

Message 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
Répondre