Bonjour à tous,
Hardeux à la retraite nul en soft demande de l'aide !!!
Pour mon projet d'alarme j'ai besoin de récupérer dans un script Python des infos venant d'un switch et du panneau de sécurité. Je sais qu'il y a dans l'API JSON pour Domoticz une commande qui permet cela (/json.htm?type=devices&rid=IDX) seulement je débute juste avec Python et je ne sais pas comment l'utiliser et encore moins comment extraire l'info dont j'ai besoin.
Si quelqu'un sait (ce dont je ne doute pas un instant) un petit coup de main serait le bienvenu.
Merci d'avance.
Récupérer l'état d'un switch dans python ?
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Récupérer l'état d'un switch dans python ?
Salut,
Ça ne réponds pas à ta question mais c'est tjs bon à prendre.
http://easydomoticz.com/domoticz-se-pythonise/
Ça ne réponds pas à ta question mais c'est tjs bon à prendre.
http://easydomoticz.com/domoticz-se-pythonise/
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Récupérer l'état d'un switch dans python ?
Bonjour,
A la lecture de l'article tu auras compris que Python et Domoticz ce n'est pas encore si simple.
Si tu n'est pas contre un autre langage de programmation, moi j'utilise ça :
création du script par un
par choix je mets tous mes scripts dans le dossier script de domoticz
le script
script qu'il faudra rentre exécutable par un chmod +x
Voilà, ce n'est pas forcément le plus élégant (notamment la partie tatonnement !) mais chez moi c'est efficace.
Une fois toutes mes données dans les variables, je peux les comparer entre elles et prévoir des actions avec les fonctions IF THEN ELSE
et la commande curl pour, cette fois, non pas lire un JSON mais commander domoticz.
Bon courage
A la lecture de l'article tu auras compris que Python et Domoticz ce n'est pas encore si simple.
Si tu n'est pas contre un autre langage de programmation, moi j'utilise ça :
création du script par un
Code : Tout sélectionner
sudo nano monscript.shle script
Code : Tout sélectionner
#!/bin/bash
# script qui affiche l etat (ou la valeur) d un bidule (interrupteur, capteur,...)
# j'utilise curl et l'adresse JSON avec l'IP et le port du serveur domoticz
# etat de la commande domoticz a verifier : ici scene/groupe avec idx 1 (numero trouvé dans les dispositifs)
# mais on peut le faire pour les interrupteurs en changeant type=devices
# les donnees brutes sont placees dans la variable DBRUT
DBRUT=$(curl 'http://192.168.1.23:8080/json.htm?type=scenes&idx=1')
# affichage des donnees brutes pour determiner la position des donnees utiles a extraire
echo $DBRUT
# les donnees utiles sont extraites par manipulation de chaine
# (par tatonnement, 374 c'est le premier caractère de la chaine, 2 la longueur de la chaine à extraire
# et les donnees ainsi extraites placees dans la variable DEXTRAITE
DEXTRAITE=${DBRUT:374:2}
# on affiche le contenu de la variable
echo $DEXTRAITE
exit 0
Code : Tout sélectionner
sudo chmod +x monscript.shUne fois toutes mes données dans les variables, je peux les comparer entre elles et prévoir des actions avec les fonctions IF THEN ELSE
et la commande curl pour, cette fois, non pas lire un JSON mais commander domoticz.
Bon courage
RPiB Jarvis+LogitechUBS47
RPi3 motionEye+PiCam
RPi2 DomoticzV3.4834+RFLink:4 zones chauffage fil pilote sur GPIO+relais, delestage via blocky, ECS via ITL3500, lumieres, sonnette, portail, sondes température, teleinfo EDF conso+product
iPhone6+Pilot
RPi3 motionEye+PiCam
RPi2 DomoticzV3.4834+RFLink:4 zones chauffage fil pilote sur GPIO+relais, delestage via blocky, ECS via ITL3500, lumieres, sonnette, portail, sondes température, teleinfo EDF conso+product
iPhone6+Pilot
Re: Récupérer l'état d'un switch dans python ?
Bonsoir
Un petit python
Il y a pas mal de commentaires pour aider
Le paramétrage se fait avec Ip, port,user,password eventuellement
il faut y renseigner l'idx Domoticz à interroger et le terme recherché (batteryLevel dans mon cas ci-dessous)
Attention aux majuscules/minuscules
Les caractères français sont gérés (éèç)
Ce script va chercher dans le bloc 'result' renvoyé par domoticz qui sont les valeurs liées au périphérique (nom, valeur, last update, batterylevel...)
il faut la bibilotheque request (sudo pip install requests)
Un petit python
Il y a pas mal de commentaires pour aider
Le paramétrage se fait avec Ip, port,user,password eventuellement
il faut y renseigner l'idx Domoticz à interroger et le terme recherché (batteryLevel dans mon cas ci-dessous)
Attention aux majuscules/minuscules
Les caractères français sont gérés (éèç)
Ce script va chercher dans le bloc 'result' renvoyé par domoticz qui sont les valeurs liées au périphérique (nom, valeur, last update, batterylevel...)
il faut la bibilotheque request (sudo pip install requests)
Code : Tout sélectionner
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
import requests
from requests.auth import HTTPBasicAuth
############# Parametres #################################
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# les parametres de Domoticz
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
domoticz_ip='192.168.1.82'
domoticz_port='8080'
user=''
password=''
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# les parametres du periphérique
# l'idx Domoticz
# la chaine recherchée (sensible à la casse)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
domoticz_idx='44'
terme_recherche='BatteryLevel'
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Exemple
#http://192.168.1.82:8080/json.htm?type=devices&rid=44
# renvoie
#{ "5MinuteHistoryDays" : 1, "ActTime" : 1429029448, "AllowWidgetOrdering" : true, "DashboardType" : 0, "Latitude" : "44.495849", "Longitude" : "-0.146575", "MobileType" : 0, "TempScale" : 1.0, "TempSign" : "C", "WindScale" : 1.0, "WindSign" : "m/s", "dontcachehtml" : true, "result" : [ { "BatteryLevel" : 255, "Counter" : "4.826", "CounterToday" : "0", "CustomImage" : 0, "Data" : "0, 4.826", "Favorite" : 0, "HardwareID" : 7, "HardwareName" : "Dummy", "HaveTimeout" : true, "ID" : "1407B", "LastUpdate" : "2015-03-13 15:20:08", "Name" : "Geranium_Lumiere_valeur", "Notifications" : "false", "PlanID" : "0", "Protected" : false, "ShowNotifications" : true, "SignalLevel" : 12, "SubType" : "RFXMeter counter", "SwitchTypeVal" : 3, "Timers" : "false", "Type" : "RFXMeter", "TypeImg" : "counter", "Unit" : 1, "Used" : 1, "XOffset" : "0", "YOffset" : "0", "idx" : "44" } ], "status" : "OK", "title" : "Devices" }
#je vois BatteryLevel : 255
# je veux recuperer la valeur de BatteryLevel
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# la valeur est renvoyée dans la variable nommée val
############### fin des parametres #############################
domoticzurl = 'http://192.168.1.82:8080/json.htm?type=devices&rid='+str(domoticz_idx)
r=requests.get(domoticzurl,auth=HTTPBasicAuth(user,password))
status=r.status_code
if status == 200:
# l'API renvoie 200 si tout est OK
domoticzjson=r.json()
for i, v in enumerate(domoticzjson["result"]):
val= domoticzjson["result"][i][terme_recherche]
print (terme_recherche,'= ',val)
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
Objectif : WAF > 1
Re: Récupérer l'état d'un switch dans python ?
WAHOO !!!
Merci à tous pour votre aide.
Bonjour et un grand merci Patrice pour ton intervention; je vais essayer cela tout de suite
Merci à tous pour votre aide.
Bonjour et un grand merci Patrice pour ton intervention; je vais essayer cela tout de suite