Script Python, problème mise à jour dummy devices

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
gorgonite
Messages : 3
Inscription : 13 févr. 2018, 23:20

Script Python, problème mise à jour dummy devices

Message par gorgonite »

Bonsoir,

J'ai déjà fait quelques scripts Lua pour tester.

A priori, dans un script_time_* le plus simple pour mettre à jour la valeur d'un capteur virtuel était

Code : Tout sélectionner

commandArray['UpdateDevice'] = idx .. '|0|' .. val
Mais cela ne déclenche pas la notification nécessaire pour le fonctionnement des script_device_*
Du coup, je suis passé par

Code : Tout sélectionner

commandArray[1] = {['OpenURL']=url..'/json.htm?type=command&param=udevice&idx=' .. idx .. '&nvalue=0&svalue=' .. val}

Et je tente maintenant avec Python :mrgreen:
Les exemples fournis passent par un module DomoticzEvents qui proposent une fonction Command. Impossible à faire marcher sur mon exemple

Du coup, j'ai tenté d'accéder directement à l'url de mise à jour (module urllib.request ou requests). Mais cela déclenche un plantage silencieux du serveur Domoticz

Code : Tout sélectionner

import requests
url = 'http://{0}/json.htm?type=command&param=udevice&idx={1}&nvalue=0&svalue={2};{3};{4}'
req = url.format(domoticzserver, idx, temperature, humidity,humS)
res = requests.get(req)
J'ai alors tenté via MQTT avec le module paho.mqtt.publish ; Domoticz ne plante plus, mais le script plante la boucle d'événements.

Code : Tout sélectionner

import paho.mqtt.publish as publish
msg = '{ "idx" : {0}, "nvalue" : 0, "svalue" : "{1};{2};{3}" }'
publish.single(topic='domoticz/in',payload=msg.format(idx,temperature, humidity,humS),hostname=domoticzserver)
Nota : bien sûr j'ai testé le code avant dans un script lancé à la main pour contrôler que cela marchait


Pour le moment, je suis obligé de faire un script indépendant lancé via cron toutes les X minutes, alors le script_time semble plus intégré à la solution.


Auriez-vous une idée pour réussir à intégrer cela dans un script_time_* ?
fred1599
Messages : 21
Inscription : 05 mars 2018, 19:07

Re: Script Python, problème mise à jour dummy devices

Message par fred1599 »

Bonsoir,

Je suis débutant en domotique, mais pas en python...

Si tu souhaites utiliser le format JSON, pourquoi ne pas utiliser le module Json ?
Il y a des exemples de son utilisation ICI.

Qu'est-ce qu'un script_time_* ? Un script avec une boucle infinie ?

Bonne soirée.
gorgonite
Messages : 3
Inscription : 13 févr. 2018, 23:20

Re: Script Python, problème mise à jour dummy devices

Message par gorgonite »

Effectivement, je peux faire plus propre pour la partie JSON, mais le but était de tester ce que domoticz avait de dispo (et j'ai eu pas mal de problème d'import de modules, donc j'ai tout minimisé. Pas encore cherché pourquoi, j'essaie de me concentrer pour faire marcher chaque fonctionnalité de base, avant de partir sur quelque chose de plus complet)


Je ne suis pas spécialiste de Domoticz, juste lu rapidement la documentation :ugeek:
Dans les script_time_* il n'y a pas de boucle infinie car ils sont lancés par Domoticz toutes les minutes. Tâche au développeur d'ajuster s'ils doivent agir ou attendre.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Script Python, problème mise à jour dummy devices

Message par papoo »

gorgonite a écrit :
A priori, dans un script_time_* le plus simple pour mettre à jour la valeur d'un capteur virtuel était

Code : Tout sélectionner

commandArray['UpdateDevice'] = idx .. '|0|' .. val
Mais cela ne déclenche pas la notification nécessaire pour le fonctionnement des script_device_*
Du coup, je suis passé par

Code : Tout sélectionner

commandArray[1] = {['OpenURL']=url..'/json.htm?type=command&param=udevice&idx=' .. idx .. '&nvalue=0&svalue=' .. val}
je ne comprend pas
cela ne déclenche pas la notification nécessaire pour le fonctionnement des script_device_*
ce que je pense comprendre :
via un script_time tu mets à jour un device. Tu souhaites que la mise à jour de ce device déclenche un script_device c'est cela?
Tu nous indique que cela ne marche pas. As tu nommé ton script_device du nom de ce fameux device? Si c'est le cas cela ne peut pas fonctionner.
il ne faut pas mettre le nom du device dans le nom du script (en lua comme en python il me semble)
mais comme j'ai pas compris la question du départ je répond peut être à coté.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
gorgonite
Messages : 3
Inscription : 13 févr. 2018, 23:20

Re: Script Python, problème mise à jour dummy devices

Message par gorgonite »

papoo a écrit :via un script_time tu mets à jour un device. Tu souhaites que la mise à jour de ce device déclenche un script_device c'est cela?
Tu nous indique que cela ne marche pas. As tu nommé ton script_device du nom de ce fameux device? Si c'est le cas cela ne peut pas fonctionner.
il ne faut pas mettre le nom du device dans le nom du script (en lua comme en python il me semble)
mais comme j'ai pas compris la question du départ je répond peut être à coté.

Via un script_time en lua j'ai réussi à mettre à jour un device par 2 méthodes. Seules l'une d'elles émet l'événement nécessaire au déclenchement à un (autre) script script_device_cequilfaut.lua
C'était juste un exemple pour montrer comment sous Lua j'arrivais à mettre à jour un "dummy device" (pas la question)


J'essaie alors sous Python (car plus de lib sous Python pour gérer mes composants), et là j'expose mes problèmes... et montre comment j'ai dû faire pour que cela marche en attendant de trouver une réponse
Répondre