Page 1 sur 1

plugin http ?

Posté : 07 janvier 2019, 14:49
par Phil31
bonjour

je découvre Yadoms et me pose la question de l'existence d'un plugin qui permettrait de générer des requêtes http GET ou POST ?
est ce qu'il existe deja ou est dans une "todo list" !?

merci
phil

Re: plugin http ?

Posté : 07 janvier 2019, 17:58
par sgallou
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