Bonsoir,
et merci de votre intérêt pour Yadoms,
Ce plugin est malheureusement encore dans une "todo list", même si nous sommes conscient de son importance. Nous avons cependant un contournement facile à mettre en place à partir d'une règle d'automatisation Python.
Il faut au préalable créer manuellement les équipements virtuels à associer à la règle.
Voici un exemple, permettant de récupérer le vent d'une
balise Pioupiou via une API REST.
Au préalable, il faut créer les équipements virtuels 'Vent - direction' (du type 'direction'), 'Vent minimum', 'Vent moyen' et 'Vent maximum' (tous les 3 du type 'speed') à partir de la page des équipements.
Ensuite, à partir de la page des règles d'automatisation, créer la règle Python suivante :
Code : Tout sélectionner
import scriptUtilities
import json
import urllib2
import datetime
import time
def readWind(yApi, windDirectionKw, minWindKw, avgWindKw, maxWindKw):
try:
pioupiouAnswer = json.load(urllib2.urlopen("http://api.pioupiou.fr/v1/live/532?format=json"))
except Exception as e:
print 'Error requesting data to pioupiou website', e.message
return
if pioupiouAnswer[u'data'][u'status'][u'state'] != u'on':
print 'Station is OFF'
return
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)):
print 'Measure is too old'
return
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)
Ici, c'est un GET, mais
faire un POST en Python n'a pas l'air beaucoup plus compliqué.
En espérant que ça vous aide,
Sébastien