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)