Page 1 sur 1

Script Python, problème mise à jour dummy devices

Publié : 05 mars 2018, 22:20
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_* ?

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

Publié : 05 mars 2018, 22:36
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.

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

Publié : 05 mars 2018, 22:47
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.

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

Publié : 06 mars 2018, 22:32
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é.

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

Publié : 07 mars 2018, 22:20
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