UniPi-EVOK-API

De MCHobby - Wiki
Révision datée du 9 septembre 2017 à 10:58 par Admin (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Introduction

Voici différentes informations concernant l'API Evok tel que publié sur le GitHub d'Evok.

Rest API

HTTP Get

Il est possible d'obtenir l'état d'un périphérique en faisant un requête GET sur Evok.

GET /rest/DEVICE/CIRCUIT

ou

GET /rest/DEVICE/CIRCUIT/PROPERTY

Où DEVICE peut être substitué par l'une des valeurs suivantes :

  • relay
  • di ou input
  • ai ou analoginput
  • ao ou analogoutput
  • sensor

Où CIRCUIT est le numéro du circuit

  • dans le cas du senseur 1Wire : il s'agit de son adresse 1-Wire.
  • correspondant au numéro de dans le fichier de configuration evok.conf.

Où PROPERTY est principalement une 'valeur'.

Exemples HTTP Get

Voici quelques exemples simples utilisant wget pour obtenir le statut de périphériques :

La commande suivante retourne le statut de tous les périphériques configurés dans evok.conf

wget -qO- http://l_adresse_ip_de_votre_Raspberry/rest/all

La commande suivante retourne le statut du relais avec le n° 1

wget -qO- http://l_adresse_ip_de_votre_Raspberry/rest/relay/1

La commande suivante retourne la valeur du relais 1, s'il est actif ou inactif (1/0)

wget -qO- http://l_adresse_ip_de_votre_Raspberry/rest/relay/1/value

La commande suivante retourne la valeur de la sortie analogique

wget -qO- http://l_adresse_ip_de_votre_Raspberry/rest/ao/1/value

La commande suivante retourne la valeur de l'entrée analogique

wget -qO- http://l_adresse_ip_de_votre_Raspberry/rest/ai/1/value 

HTTP Post

Pour contrôler un périphérique, toutes les requêtes doivent être par des requêtes HTTP POST. Voici quelques exemple de contrôle de relais :

Activer le relais 3 :

wget -qO- http://l_adresse_ip_de_votre_Raspberry/rest/relay/3 --post-data='value=1'

Désactiver le relais 3 :

wget -qO- http://l_adresse_ip_de_votre_Raspberry/rest/relay/3 --post-data='value=0'

Fixer la sortie analogique A0 à 5V :

wget -qO- http://l_adresse_ip_de_votre_Raspberry/rest/ao/1 --post-data='value=5'

WebSocket

Il est possible d'enregistrer un client (un socket client) auprès de ws://l_adresse_ip_de_votre_Raspberry/ws pour recevoir les messages de statut.

Une fois le client connecté, vous pouvez envoyer divers commande sur l'UniPi. Tous les messages envoyés sur le websocket sont au format JSON. Par exemple, le message suivant permet d'activer le relais 1 {"dev":"relay", "circuit":"1", "value":"1"} .

Consultez le contenu du fichier wsbase.js dans le répertoire www/js/ pour voir des exemples de contrôle de l'UniPi via websocket.

Python en utilisant JsonRPC

Vous pouvez également contrôler UniPi en utilisant la bibliothèque Python jsonrpclib. Voyez, ci-dessous, une liste de toutes les méthodes disponibles.

from jsonrpclib import Server
s=Server("http://l_adresse_ip_de_votre_Raspberry/rpc")
s.relay_set(1,1)
s.relay_get(1)
s.relay_set(1,0)
s.relay_get(0)
s.ai_get(1)

Python en utilisant WebSocket

import websocket
import json

url = "ws://l_adresse_ip_de_votre_Raspberry/ws"

def on_message(ws, message):
    obj = json.loads(message)
    dev = obj['dev']
    circuit = obj['circuit']
    value = obj['value']
    print message

def on_error(ws, error):
    print error

def on_close(ws):
    print "Connection fermee"

# Reception des messages
ws = websocket.WebSocketApp(url, on_message = on_message, on_error = on_error, on_close = on_close)
ws.run_forever()

# Envoi des messages
ws = websocket.WebSocket()
ws.connect(url)
ws.send('{"cmd":"set","dev":"relay","circuit":"3","value":"1"}')
ws.close()

Perl en utilisant JsonRPC

Voici un exemple simple permettant de contrôler UniPi via RPC en utilisant JSON::RPC::Client;

use JSON::RPC::Client;

my $client = new JSON::RPC::Client;
my $url    = 'http://l_adresse_ip_de_votre_Raspberry/rpc';

$client->prepare($url, ['relay_set']);
$client->relay_set(1,1);

Il y a également une bibliothèque websocket Perl client pour obtenir plus de contrôle.

Liste des périphériques disponibles

  • relay - Relais
  • input ou di - Entrée digitale
  • ai - Entrée analogique
  • ao - Sortie analogique
  • ee - eeprom de la carte
  • sensor - Senseur 1wire

Le reste peut être trouvé dans le fichier devices.py

Liste des méthodes disponibles

Les méthodes ci-dessous (et plus encore) peuvent être trouvé dans les fichiers source evok.py ou owclient.py .

  • Entrées digitales
    • input_get(circuit) - obtenir toutes les informations sur les entrées du circuit mentionné (le numéro).
    • input_get_value(circuit) - Obtenir l'état de l'entrée su circuit mentionné (le numéro). Retourne 0=off/1=on
    • input_set(circuit) - fixer le temps de déparasitage de l'entrée (debounce timeout)
  • Relais
    • relay_get(circuit) - obtenir l'état du du relais mentionné (le numéro)
    • relay_set(circuit, value) - fixe l'état du relais mentionné (le numéro). La valeur value peut prendre les valeurs suivantes 0=off, 1=on
    • relay_set_for_time(circuit, value, timeout) - active le relais mentionné à la valeur mentionnée (0=off, 1=on) pour le temps timeout (en secondes). Note: La description en anglais n'est pas très claire, il sera nécessaire d'expérimenter la fonction.
  • Entrée analogique
    • ai_get(circuit) - retourne la valeur d'une entrée analogique (par numéro de circuit).
    • input_get
  • Sortie analogique
    • ao_set_value(circuit, value) - fixe la valeur (0-10) de la sortie analogique (par numéro de circuit)
  • Bus 1-Wire
    • owbus_scan(circuit) - Force le scan du bus 1Wire pour le détection de nouveaux périphériques.
  • Senseurs 1-Wire
    • sensor_get(circuit) - retourne toutes les information dans un tableau [value, is_lost, timestamp_of_value, scan_interval] du senseur pour un circuit donné ou une adresse 1Wire
    • sensor_get_value(circuit) - retourne la valeur pour un circuit donné ou une adresse 1Wire

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.