Calaos, Home Automation Forum

Full Version: API JSON Pyhton 3.5 - fonction get_state
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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)
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...
(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
Le format que tu as utilisé c'est pour la v2.
En v3 c'est un peu different Wink