Bonjour a tous,
Je n’ai jamais utilise de daemon dans un plugin et j’aurais besoin d’un petit coup de pouce pour comprendre ou est l’erreur dans l’utilisation de la fonction ‹ send_change_immediate ›…
J’ai suivi le tuto du plugin template mais je ne trouve pas comment resoudre mon soucis.
Je cherche a comprendre comment la partie PHP envoi des donnees vers le daemon (ceci fonctionne) et aussi comment le daemon retourne des donnees a PHP (la j’ai le probleme).
Voici un log de ce que produit mon plugin ‹ template › :
[2024-01-17 21:03:28]INFO : Start demond
[2024-01-17 21:03:28]INFO : Log level: debug
[2024-01-17 21:03:28]INFO : Socket port: 58387
[2024-01-17 21:03:28]INFO : Socket host: localhost
[2024-01-17 21:03:28]INFO : PID file: /tmp/jeedom/template/deamon.pid
[2024-01-17 21:03:28]INFO : Device: auto
[2024-01-17 21:03:28]INFO : Writing PID 25853 to /tmp/jeedom/template/deamon.pid
[2024-01-17 21:03:28]INFO : Socket interface started
[2024-01-17 21:03:28]INFO : LoopNetServer Thread started
[2024-01-17 21:03:28]INFO : Listening on: [localhost:58387]
[2024-01-17 21:04:03]INFO : Client connected to [127.0.0.1:59278]
[2024-01-17 21:04:03]INFO : Message read from socket: b'{"apikey":"mEF2RTrLCCdE1jHWxBnctl9QbrqQZVFSXmHTJpLbMrRQCrRxOwCIIA14aKwqMJOu","action":"discover","login":"test1","password":"test2","address":"test3"}'
[2024-01-17 21:04:03]INFO : Client disconnected from [127.0.0.1:59278]
[2024-01-17 21:04:03]DEBUG : Message received in socket JEEDOM_SOCKET_MESSAGE
[2024-01-17 21:04:03]INFO : Message sent by PHP and received by PYTHON -> action: discover
[2024-01-17 21:04:03]INFO : Message sent by PHP and received by PYTHON -> login: test1
[2024-01-17 21:04:03]ERROR : Send command to demon error: send_change_immediate() missing 1 required positional argument: 'change'
On voit bien la reception sur le socket d’un message pour un parametre ‹ action › et ‹ login ›.
Mais ensuite lorsque j’utilise la fonction ‹ send_change_immediate › provenant de jeedom.py il y a cette erreur : missing 1 required positional argument: ‹ change ›
Je vois bien que la fonction send_change_immediate demande 2 arguments mais je ne trouve pas d’exemple indiquant comment les renseigner.
Voici la partie read_socket() de du fichier ‹ templated.py › du plugin template de mes essais:
def read_socket():
global JEEDOM_SOCKET_MESSAGE
if not JEEDOM_SOCKET_MESSAGE.empty():
logging.debug("Message received in socket JEEDOM_SOCKET_MESSAGE")
#message = json.loads(jeedom_utils.stripped(JEEDOM_SOCKET_MESSAGE.get()))
message = json.loads(JEEDOM_SOCKET_MESSAGE.get().decode('utf-8'))
if message['apikey'] != _apikey:
logging.error("Invalid apikey from socket: %s", message)
return
try:
print ('read')
#logging.info('Message sent by PHP and received by PYTHON -> apikey: %s', message['apikey'])
logging.info('Message sent by PHP and received by PYTHON -> action: %s', message['action'])
logging.info('Message sent by PHP and received by PYTHON -> login: %s', message['login'])
jeedom_com.send_change_immediate({'apikey' : '1234','action' : '5678'})
except Exception as e:
logging.error('Send command to demon error: %s' ,e)
Dans la fonction ‹ deamon_start › j’ai mis le callback sur ‹ /plugins/template/core/php/jeetemplate.php › qui devrait donc etre appele pour decoder le json retourne par le daemon, c’est juste?
Mais le script n’arrive pas jusque la vu l’erreur avec la fonction send_change_immediate …
PS: desole pour les accents, clavier US …
Merci pour votre support!
Sebastien