plugin http ?

Discussions sur le développement de plugins
Répondre
Phil31
Messages : 1
Enregistré le : 07 janvier 2019, 14:46

plugin http ?

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

Re: plugin http ?

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