petzoom a écrit : 13 févr. 2024, 08:27
la commande dont je parle et qui me pose problème est bien celle-ci :
/json.htm?type=command¶m=getschedules&idx=3
Bonjour,
Je ne crois pas que cette commande ait un jour fonctionné avec un idx (ou de manière non documentée?). Je l'ai utilisé dans les 2 versions et c'était toujours sans. D'ailleurs, getschedules est au pluriel sans doute pas sans raison.
Pour ma part, je l'utilise pour invalider temporairement tous les plannings de chauffe quand je me chauffe au bois avec mon insert. S'il y avait eu moyen de filtrer direct sur les idx des switch attachés aux contrôles individualisés de tous mes radiateurs cela m'aurait simplifié l'affaire!
C'est pour ma part un petit script python qui gère cela avec les commandes/paramètres formatés en json. On a ici l'ancienne version (en commentaire) et la nouvelle:
Code : Tout sélectionner
# Domoticz json API url
dmtJurl = 'http://127.0.0.1:8080/json.htm?'
# Command parameters in json format (only change if API change!)
#dmtJsonGetSched = {"type":"schedules"}
dmtJsonGetSched = {"type":"command", "param":"getschedules"}
Depuis le 23 juin dernier, j'utilise {"type":"command", "param":"getschedules"}au lieu de {"type":"schedules"} sans problème: L'hiver vu l'utilisation je m'en serais rendu compte
Vu mon usage, j'utilise aussi cette commande (en modifiant la partie idx avant utilisation, cette commande le supportant avec les idx timer, paramètre enabledisabletimer ici logiquement au singulier):
Code : Tout sélectionner
dmtJsonActTimer = {"type":"command", "param":"enabledisabletimer", "idx":"999"}
Utilisé par la fonction d'appel d'API HTTP/JSON générique suivante (utilise les modules python request et json):
Code : Tout sélectionner
def dmtJsonApi(url, jsonApiCmd, logger):
"""
Send Domoticz json command
"""
try:
# Connect to Domoticz via JSON API and send data
dmtRget=requests.get(url, params=jsonApiCmd)
except requests.exceptions.RequestException as dmtErr:
logger.log(logging.ERROR, "Unable to connect with URL=%s \nGet requests error %s" % (dmtRget.url, dmtErr))
finally:
logger.log(logging.DEBUG, "Sent data: [%s]" % (dmtRget.url))
return dmtRget.json()
Exemple d'appel pour récupérer l'ensemble des plannings attachés à tous ses switch dans le timer-plan sélectionné (si on en a plusieurs):
Code : Tout sélectionner
# Get all schedules
schedules = dmtJsonApi(dmtJurl, dmtJsonGetSched, logger)
Et ensuite, faut filtrer la réponse sur le nom du device visé (pour ma part je me simplifie la tâche avec une convention de préfixe de nommage et gère les wildcards/*) vu que pas de support filtrage/idx. Ici je change juste l'activation de tous les timers attachés à un switch (ou plusieurs si *, genre "radiateur*"), qui ne sont hélas pas non plus gérables globalement:
Code : Tout sélectionner
# Modify active setting for dev name...
schedNb=len(schedules['result'])
logger.log(logging.DEBUG, "Found %d schedules, extract those for %s" % (schedNb, devName))
# Change schedule(s) for device(s) matching name (wildcard support):
for sched in schedules['result']:
if fnmatch(sched['DevName'], devName):
logger.log(logging.DEBUG, 'Found : %s , state=%s, idx=%d',
sched['DevName'],
sched['Active'],
sched['TimerID'])
curState = ('disabletimer','enabletimer')[sched['Active'] == 'true']
revState = ('enabletimer','disabletimer')[sched['Active'] == 'true']
if curState != SchedActivate:
# Update domoticz request parameters
dmtJsonActTimer['param'] = (SchedActivate, revState)[SchedActivate == 'reverse']
dmtJsonActTimer['idx'] = sched['TimerID']
# Send request...
dmtJsonApi(dmtJurl, dmtJsonActTimer, logger)
On peut bien entendu tester via son navigateur préféré:
http://192.168.XXX.YYY:8080/json.htm?ty ... tschedules