Auto-start Theengs gateway

Hello,

Dans l’optique de mettre en place #MQTTDiscovery sur mon Jeedom, j’ai installé Theengs gateway sur une VM Debian, séparé de Jeedom et qui contient aussi Mosquitto.

J’ai donc installé Theengs, avec succès, l’ai lancé manuellement, et pu voir mes équipements remonter dans MQTT Explorer et dans le plugin de Mips, donc tout fonctionne correctement.

Toutefois, je ne veux/peux pas lancer Theengs manuellement et en continue. Je voudrais donc qu’il se lance automatique en background.
J’ai regardé ce qui était proposé dans cette discussion, mais sans succès.

Voici donc les étapes que j’ai faites (seulement pour l’auto-start) :
J’ai créé le fichier TheengsGateway.service

sudo nano /etc/systemd/system/TheengsGateway.service

Et mis dedans :

[Unit]
Description=Theengs Gateway
After=network-online.target
[Service]
Restart=always
Type=simple
ExecStart=/usr/bin/python3 -m TheengsGateway -H host -u user -p password

[Install]
WantedBy=multi-user.target

J’ai testé avec After=network-online.target et After=network.target le résultat étant le même.
Bien sûr, j’ai remplacé host par l’adresse IP de ma VM (même si c’est elle-même), user et password par les bons éléments, qui fonctionne quand Thengs est lancé manuellement (pour rappel :wink: )

Ensuite, lancé le service via :

sudo systemctl daemon-reload
sudo systemctl enable --now TheengsGateway.service

Et quand je vérifie l’état du service via :

systemctl status TheengsGateway

J’ai en retour :

● TheengsGateway.service - Theengs Gateway
     Loaded: loaded (/etc/systemd/system/TheengsGateway.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2023-09-19 10:20:56 CEST; 5s ago
    Process: 702 ExecStart=/usr/bin/python3 -m TheengsGateway -H 192.168.1.103 -u ***** -p ************* (code=exited, status=1/FAILURE)
   Main PID: 702 (code=exited, status=1/FAILURE)
        CPU: 23ms

Et évidemment, MQTT Explorer m’indique que Theengs est offline

C’est donc là que j’ai besoin de vous. Où ai-je loupé quelque chose ?

Bonjour,
J’ai fait cela aussi sur mon Raspberry PI Zero et cela fonctionne.
Pour moi, la manipulation est ok.
Reste à creuser pourquoi ce n’est pas ok chez toi.

Je vois :

ExecStart=/usr/bin/python3 -m TheengsGateway -H host -u user -p password

Il faut remplacer Host par l’IP de ton Mosquitto.
et user et password par le compte utilisateur et mot de passe du Mosquitto.

Quand tu lances Theengs en ligne de commande, tu lances comment ?
Pour ma part, je n’ai pas d’utilisateur et mot de passe, alors je lance avec :

/usr/bin/python3 -m TheengsGateway -H 192.168.0.31

Quand je lance en ligne de commande, je lance ainsi :

python3 -m TheengsGateway

Et ça fonctionne, parce que dans theengsgw.conf, la configuration a été automatiquement enregistrée.
Sinon, au début je lançais ainsi :

python3 -m TheengsGateway -H 192.168.1.103 -u ***** -p *************

comme renvoyé dans l’état du service (bien sûr les étoiles son remplacé par les bonnes valeurs)
La seule différence, c’est que dans le fichier /etc/systemd/system/TheengsGateway.service il y a /usr/bin/ au début

Aussi, je viens de tester de faire un copier depuis le fichier ``/etc/systemd/system/TheengsGateway.service(sans/usr/bin/`) et coller dans la ligne de commande, ainsi Theengs est correctement lancé et fonctionnel.

Ah. Bon, je pensais à un truc simple, ce n’est pas le cas :frowning:
Je n’ai pas réussi à réutiliser le fichier de paramétrage theengsgw.conf non plus.
Je n’ai pas le PC sous les yeux pour avoir le fichier service modifié

Pour continuer mon investigation, j’ai regardé le journal de ce service :

sudo journalctl -u TheengsGateway.service

Qui m’a retourné :

-- Journal begins at Thu 2022-08-18 17:08:42 CEST, ends at Tue 2023-09-19 13:53:35 CEST. --
sept. 19 09:46:38 Debian-VM systemd[1]: Started Theengs Gateway.
sept. 19 09:46:38 Debian-VM python3[1823]: /usr/bin/python3: No module named TheengsGateway
sept. 19 09:46:38 Debian-VM systemd[1]: TheengsGateway.service: Main process exited, code=exited, status=1/FAILURE
sept. 19 09:46:38 Debian-VM systemd[1]: TheengsGateway.service: Failed with result 'exit-code'.
sept. 19 09:46:38 Debian-VM systemd[1]: TheengsGateway.service: Scheduled restart job, restart counter is at 1.
sept. 19 09:46:38 Debian-VM systemd[1]: Stopped Theengs Gateway.

Donc le défaut indiqué est No module named TheengsGateway dans python3.
J’ai donc déduis que python3, en mode sudo n’avait pas accès à TheengsGateway.

J’ai donc réinstallé Theengs Gateway en sudo :

sudo pip install TheengsGateway

puis j’ai relancé le service (comme indiqué dans mon 1er message), et le service s’est lancé sans soucis cette fois.
Il tourne donc désormais en tâche de fond et remonte correctement les informations.

1 « J'aime »

C’est un peu l’idée que j’avais aussi pour gérer theengs: installer dans systemd et ensuite le laisser faire sa vie…
j’ai fait pareil pour un autre plugin avec un « démon » distant récemment (plugin-vmczehnder)

pour info j’hésite entre plusieurs options:

  • juste documenter la marche à suivre dans la doc de #plugin-MQTTDiscovery (ton post ici est déjà bien complet :slight_smile:)
  • faire un autre plugin gratuit sur le coté pour juste gérer les « antennes theengs » et pouvoir gérer depuis le plugin l’installation, la config, la mise en service etc; ca sera p-e plus facile pour ceux qui ne sont pas trop à laisse avec un shell
  • intégrer cette fonctionnalité dans #plugin-MQTTDiscovery directement mais c’est un peu hors scope du plugin même si le but est clairement l’intégration avec ce type d’outils: theengs et openMQTT)

si vous avez un avis sur la question, je prend :slight_smile:

1 « J'aime »

Pour ma part, c’est je pense la solution qui couvre le plus d’usage (tout sur le même matériel, déporté, …).
Au besoin, je peux donner un coup de main pour la doc (c’est rapide :wink: )

Dans ce cas, ça implique que tout soit sur le même matériel (rare sont ceux qui ont un deuxième Jeedom déporté). Et aussi, plus de boulot pour toi.

Tout à fait d’accord.


En conclusion, je dirais qu’il faut que tu proposes les 2 premières solutions depuis la documentation.
Comme ça ceux qui savent utiliser les lignes de commandes s’en servent, et ceux qui ne savent pas (ou qui n’ont pas réussi) passent par quelque chose de clé en main.

2 « J'aime »

Non, je voyais plutôt une connexion via ssh sur la destination avec un mode local

en gros, on créé un équipement par « antenne », on choisi si local ou distant, si distant on config les infos requises pour ssh et hop c’est parti

et je peux récupérer des « briques » que j’ai déjà faite ailleurs, ca ne devrait pas être trop long à faire

je pense que je vais partir sur la doc (qui est presqu’en place, ca sera plus rapide) et voir quand j’ai le temps pour de l’extra

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.