Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
API JSON Pyhton 3.5 - fonction get_state
#1
Brick 
Bonjour,

Je me lance dans un petit projet de création d'interface graphique pour ma domotique Calaos.
Objectif : créer un petit écran tactile positionné à l'entrée de ma maison pour executer quelques fonctions principales :
- activer / désactiver l'alarme
- éteindre toutes les lumières
- fermer/ouvrir tous les volets roulants du rez de chaussé
- Activer un/ des scénarios
- ...Etc...

Le matériel :
- un Rpi 3 avec Raspbian + python 3.5 + TKinter
- un écran tactil 7"

j'ai écrit quelques script mais je bloque sur la fonction "get_state"
les fonctions "get_home' et "set_state" fonctionnent bien, mais pas "get_state", j'ai une collection vide en retour {}.
je peux allumer ou éteindre des lumières, mais pas connaitre l'état d'une sortie...

Voici mon code…. si quelqu'un peu me dépanner, ce serait sympa. Big Grin
Ici la fonction "get_alarme_" ne me retourne rien par exemple.

Code:
import urllib.request, urllib.parse
import json
import ssl

calaos_url = 'https://192.168.1.2/api.php' # Calaos server API url
calaos_user = 'blablabla'
calaos_password = 'blablabla'
lum_salon = 'output_0'
open_rdc = 'input_58'
close_rdc = 'input_59'
on_='true'
off_='false'

def send_json(dict_send):
   json_send = json.dumps(dict_send) # parameters string in JSON format
   data_send = json_send.encode('ascii') # bytes data to be sent
   headers_send = {'Content-Type': 'application/json'} # media type of the data to be sent
   request = urllib.request.Request(calaos_url, data_send, headers_send) # data sent with POST method
   context = ssl._create_unverified_context() # do not verify the SSL certificate
   
   with urllib.request.urlopen(request, context=context) as response:
       #print(response.info())
       data_receive = response.read() # bytes data received
       json_receive = data_receive.decode('ascii') # string received in JSON format
       dict_receive = json.loads(json_receive) # dictionary received
       return (dict_receive)

def get_home():
   dict_send = {
       'cn_user': calaos_user,
       'cn_pass': calaos_password,
       'action': 'get_home'
   }
   col_stat = send_json(dict_send)
   return (col_stat)


def set_stat_(qui,quoi):
   #print (qui,quoi)
   dict_send = {
       'cn_user': calaos_user,
       'cn_pass': calaos_password,
       'action': 'set_state',
       'type': 'output',
       'id': qui,
       'value': quoi
   }
   send_json(dict_send)
   
def allumer_salon():
set_stat_(lum_salon,on_)

def eteindre_salon():
set_stat_(lum_salon,off_)

def get_alarme_():
   """action wget json get lumiere salon output_0"""
   dict_send = {
       'cn_user': calaos_user,
       'cn_pass': calaos_password,
       'action': 'get_state',
       'inputs': ['input_1'],
       'outputs': ['output_0","output_1'],
       'audio_players': ['0']
   }
   col_stat = send_json(dict_send)
   return (col_stat)
many77, équipé WAGO 750-849 + Rpi3
Reply
#2
Salut, tu es en quelle version?

Dans tous les cas tu peux utiliser:
calaos_config set debug_enabled true

et ouvrir la page web: http://xx.xx.xx.xx:5454/debug

Tu as une page pour tester l'api avec des exemples. En v2 c'est moins fourni la page debug qu'en v3...

Pour ton get_state, ca a l'air juste. Enleve le "audio_players" de ton dict_send, si tu ne l'utilises pas. Car ca fait des requetes en plus pour interoger les lecteurs audio et c'est pas top si pas besoin...
Raoul,
Calaos Core Dev.
Calaos git sur NUC NUC5PPYH | Wago 750-849 | DALI RGB | Sondes NTC sur 750-464 | Sondes 1Wire DS18B20 avec adaptateur USB DS9490R | Nodes MySensors avec gateway USB | Ecran tactile ELO avec adaptateur USB/RS232 | Squeezebox Duet et Radio | Logitech Harmony Ultimate | Ampli Pioneer VSX921
Reply
#3
(05-11-2020, 09:59 AM)raoulh Wrote: Salut, tu es en quelle version?

Dans tous les cas tu peux utiliser:
calaos_config set debug_enabled true

et ouvrir la page web: http://xx.xx.xx.xx:5454/debug

Tu as une page pour tester l'api avec des exemples. En v2 c'est moins fourni la page debug qu'en v3...

Pour ton get_state, ca a l'air juste. Enleve le "audio_players" de ton dict_send, si tu ne l'utilises pas. Car ca fait des requetes en plus pour interoger les lecteurs audio et c'est pas top si pas besoin...

bonjour raoulh,
j'ai calaosv3 sur un RPI 

j'ai executé la commande "calaos_config set debug_enabled true" en SSH sans problème.
Je me suis connecté en web sur http://IP_calaos_server:5454/debug
quel que soit le test que je fait, la réponse est "error 0".

Par contre, cela m'a permit de voir que pour "get_state", dans le dict_send je ne doit pas mettre "inputs:" et "outputs", mais "items:".
j'ai corrigé mon appli et j'ai testé avec python, cela fonctionne parfaitement.
donc merci  Smile
many77, équipé WAGO 750-849 + Rpi3
Reply
#4
Le format que tu as utilisé c'est pour la v2.
En v3 c'est un peu different Wink
Raoul,
Calaos Core Dev.
Calaos git sur NUC NUC5PPYH | Wago 750-849 | DALI RGB | Sondes NTC sur 750-464 | Sondes 1Wire DS18B20 avec adaptateur USB DS9490R | Nodes MySensors avec gateway USB | Ecran tactile ELO avec adaptateur USB/RS232 | Squeezebox Duet et Radio | Logitech Harmony Ultimate | Ampli Pioneer VSX921
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)