Impossible de récupérer les activités sur mon Hub

Bonjour à tous,

Je rencontre un problème avec le plugin Harmony Hub. Mon installation fonctionnait bien jusqu’à ce que je change de routeur Wifi. Comme mon Harmony Hub a changé d’adresse, j’ai renseigné la nouvelle adresse dans la configuration du plugin et j’ai lancé une mise à jour des configurations. Et là, plus aucune activité n’est trouvée.

Quand j’appelle mon Harmony Hub directement via la commande Curl, j’obtiens bien une réponse

curl -X POST 192.168.1.XX:8088 -H 'Accept: utf-8' -H 'Content-Type: application/json' -H 'Origin: http://sl.dhg.myharmony.com' -d '{"id":1,"cmd":"setup.account?getProvisionInfo","params":{}}'
{"id":1,"msg":"OK","data":{"email":"xxx.xxx@gmail.com","username":"xxx.xx@gmail.com","activeRemoteId":16138087,"discoveryServer":"https:\/\/svcs.myharmony.com\/Discovery\/Discovery.svc","se":true,"susChannel":"production","mode":3,"language":"fr-FR","accountId":"8885212"},"code":"200"}

Par contre, quand j’appelle le fichier main.py, j’obtiens l’erreur suivante:

XX@raspberrypi:/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony $ python __main__.py --loglevel DEBUG --harmony_ip 192.168.1.xx show_config
DEBUG:  asyncio Using selector: EpollSelector
DEBUG:  __main__        Executing task get_client
DEBUG:  client  Starting connect.
DEBUG:  client  Retrieving Harmony Hub information.
Traceback (most recent call last):
  File "__main__.py", line 641, in <module>
    main()
  File "__main__.py", line 631, in main
    sys.exit(args.func(args))
  File "__main__.py", line 340, in show_config
    client = get_client(args.harmony_ip)
  File "__main__.py", line 56, in get_client
    return run_in_loop_now('get_client', func)
  File "__main__.py", line 34, in run_in_loop_now
    loop.run_until_complete(func_task)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 516, in create_and_connect_client
    connected = await client.connect()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 141, in connect
    await self._perform_connect()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 125, in _perform_connect
    await self.retrieve_hub_info()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 103, in retrieve_hub_info
    json_response = await response.json()
  File "/usr/local/lib/python3.7/dist-packages/aiohttp/client_reqrep.py", line 1110, in json
    headers=self.headers,
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: ', url=URL('http://192.168.1.xx:8088/')

La page santé de mon plugin

J’utilise raspbian sur un Rpi4
uname -a
Linux raspberrypi 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux

J’ai essayé de desinstallé le plugin et de le réinstaller mais ça n’a pas fonctionné.
Je sèche.
Avez-vous une idée ?

Un grand merci d’avance

Bonjour,

Fournissez les logs sans masquer les adresses IP.
Cela ne sert à rien de cacher des adresses internes du sans cela on ne peut pas savoir si vous avez fait une config correcte.

Fournissez aussi capture de la page config et capture de la page santé jeedom
Et donnez nous l’ip actuelle du hub tel que visible dans le routeur.

Oui, c’est toujours le cas pour tout plugin. Ça ne sert jamais à rien de desinstaller.

Merci @Mips

Voilà les logs complets.
Appel de la fonction __main__

python __main__.py --loglevel DEBUG --harmony_ip 192.168.1.2 show_config
DEBUG:  asyncio Using selector: EpollSelector
DEBUG:  __main__        Executing task get_client
DEBUG:  client  Starting connect.
DEBUG:  client  Retrieving Harmony Hub information.
Traceback (most recent call last):
  File "__main__.py", line 641, in <module>
    main()
  File "__main__.py", line 631, in main
    sys.exit(args.func(args))
  File "__main__.py", line 340, in show_config
    client = get_client(args.harmony_ip)
  File "__main__.py", line 56, in get_client
    return run_in_loop_now('get_client', func)
  File "__main__.py", line 34, in run_in_loop_now
    loop.run_until_complete(func_task)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 516, in create_and_connect_client
    connected = await client.connect()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 141, in connect
    await self._perform_connect()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 125, in _perform_connect
    await self.retrieve_hub_info()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 103, in retrieve_hub_info
    json_response = await response.json()
  File "/usr/local/lib/python3.7/dist-packages/aiohttp/client_reqrep.py", line 1110, in json
    headers=self.headers,
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: ', url=URL('http://192.168.1.2:8088/')

Appel de curl


curl -X POST 192.168.1.2:8088 -H 'Accept: utf-8' -H 'Content-Type: application/json' -H 'Origin: http://sl.dhg.myharmony.com' -d '{"id":1,"cmd":"setup.account?getProvisionInfo","params":{}}'
{"id":1,"msg":"OK","data":{"email":"xxx.xxx@gmail.com","username":"xxx.xxx@gmail.com","activeRemoteId":16138087,"discoveryServer":"https:\/\/svcs.myharmony.com\/Discovery\/Discovery.svc","se":true,"susChannel":"production","mode":3,"language":"fr-FR","accountId":"8885212"},"code":"200"}

IP actuelle de mon Hub vu par mon modem/routeur
image

Pour être sûr que 192.168.1.2 correspond bien à mon Hub, scan des ports ouverts de mon Harmony Hub:

 nmap 192.168.1.2 -T4
Starting Nmap 7.70 ( https://nmap.org ) at 2023-01-31 21:43 GMT
Nmap scan report for 192.168.1.2
Host is up (0.022s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
5222/tcp open  xmpp-client
8088/tcp open  radan-http
8222/tcp open  unknown

Page santé Harmony Hub

Page de configuration d’Harmony Hub

Merci d’avance @Mips
/Papatte

Update : j’ai essayé de comprendre ce qui diffère au niveau réseau entre la commande Curl et l’appel de __main__ et voici ce que j’ai trouvé. Les deux appels sont identiques sauf que

  • L’appel de Curl se fait en une trame
sudo tcpdump port 8088 -A
22:05:59.342143 IP 192.168.1.184.48484 > 192.168.1.2.omniorb: Flags [P.], seq 1:322, ack 1, win 502, options [nop,nop,TS val 3583135151 ecr 30574568], length 321
E..u..@.@............d...............r.....
..M.....POST / HTTP/1.1
Host: 192.168.1.2:8088
Accept: application/json
Content-Type: application/json
Origin: http://localhost.nebula.myharmony.com
Accept-Charset: utf-8
Accept-Encoding: gzip, deflate
User-Agent: Python/3.7 aiohttp/3.8.3
Content-Length: 60

{"id ":1,"cmd":"setup.account?getProvisionInfo","params":{}}

Et alors le Hub répond par un HTTP/1.1 200 OK

  • L’appel de __main__ se fait en deux trames
22:07:36.014030 IP 192.168.1.184.49106 > 192.168.1.2.omniorb: Flags [P.], seq 1:262, ack 1, win 502, options [nop,nop,TS val 3583231823 ecr 30598736], length 261
E..9..@.@...............R.....\+.....6.....
...O...PPOST / HTTP/1.1
Host: 192.168.1.2:8088
Origin: http://localhost.nebula.myharmony.com
Content-Type: application/json
Accept: application/json
Accept-Charset: utf-8
Accept-Encoding: gzip, deflate
User-Agent: Python/3.7 aiohttp/3.8.3
Content-Length: 60

22:07:36.014281 IP 192.168.1.184.49106 > 192.168.1.2.omniorb: Flags [P.], seq 262:322, ack 1, win 502, options [nop,nop,TS val 3583231823 ecr 30598736], length 60
E..p..@.@...............R.....\+.....m.....
...O...P{"id ": 1, "cmd": "connect.discoveryinfo?get", "params": {}}

Et alors Hub répond par un code d’erreur 417 qui provoque une erreur dans __main__

22:07:36.043554 IP 192.168.1.2.omniorb > 192.168.1.184.49106: Flags [P.], seq 1:225, ack 322, win 3432, options [nop,nop,TS val 30598743 ecr 3583231823], length 224
E....}@.@..[..............\+R......h.......
...W...OHTTP/1.1 417
Access-Control-Allow-Headers: origin, content-type, accept
Access-Control-Allow-Method: POST, OPTIONS
Access-Control-Allow-Origin: http://localhost.nebula.myharmony.com
Content-Length: 16

{"code":"417"}

Note : j’ai modifié l’appel de la fonction Curl de la manière suivante pour que les deux appels soient identiques :

curl -X POST 192.168.1.2:8088 -H 'Accept: application/json' -H 'Content-Type: application/json' -H 'Origin: http://localhost.nebula.myharmony.com' -H 'Accept-Charset: utf-8' -H 'Accept-Encoding: gzip, deflate' -H 'User-Agent: Python/3.7 aiohttp/3.8.3' -d '{"id ":1,"cmd":"setup.account?getProvisionInfo","params":{}}'

As-tu une idée, @Mips ?

/Papatte

Comment obtenez-vous ce log? pas en utilisant le plugin je pense, vous appelez le script à la main? pourquoi?

vous n’avez pas fourni la page santé jeedom, je peux la voir?

et sur quelle version point python ?
pouvez-vous exécuter ceci et donner le résultat?

python --version

un dernier détail, pas sur que cela ait un impact mais mieux vaut éviter les doutes surtout si on n’a pas une vue d’ensemble, le plugin execute le script avec les droits sudo et vous pas semble-t-il => cela peut influencer les versions de libs utilisées

Merci pour votre réponse, @Mips

Je n’ai pas fourni ces logs, car quand je lance la commande de synchronisation, je n’obtiens aucun log exploitable. Je suppose que, comme la commande crashe, elle ne remonte rien.
Pour info, voilà ce que contiennent les logs en mode DEBUG

La voilà :

pi@raspberrypi:~ $ python --version
Python 3.7.3

Bien vu, mais chez moi cela ne change rien

pi@raspberrypi:/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony $ sudo python __main__.py --loglevel DEBUG --harmony_ip 192.168.1.2 show_config
DEBUG:  asyncio Using selector: EpollSelector
DEBUG:  __main__        Executing task get_client
DEBUG:  client  Starting connect.
DEBUG:  client  Retrieving Harmony Hub information.
Traceback (most recent call last):
  File "__main__.py", line 641, in <module>
    main()
  File "__main__.py", line 631, in main
    sys.exit(args.func(args))
  File "__main__.py", line 340, in show_config
    client = get_client(args.harmony_ip)
  File "__main__.py", line 56, in get_client
    return run_in_loop_now('get_client', func)
  File "__main__.py", line 34, in run_in_loop_now
    loop.run_until_complete(func_task)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 516, in create_and_connect_client
    connected = await client.connect()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 141, in connect
    await self._perform_connect()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 125, in _perform_connect
    await self.retrieve_hub_info()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 103, in retrieve_hub_info
    json_response = await response.json()
  File "/usr/local/lib/python3.7/dist-packages/aiohttp/client_reqrep.py", line 1110, in json
    headers=self.headers,
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: ', url=URL('http://192.168.1.2:8088/')

Qu’en pensez-vous, @Mips ?

/Papatte

c’est le soucis

essayez plutôt

sudo /usr/bin/python ....

Merci @Mips

Mais le résultat est le même :

pi@raspberrypi:/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony $ sudo /usr/bin/python __main__.py --loglevel DEBUG --harmony_ip 192.168.1.2 show_config
DEBUG:  asyncio Using selector: EpollSelector
DEBUG:  __main__        Executing task get_client
DEBUG:  client  Starting connect.
DEBUG:  client  Retrieving Harmony Hub information.
Traceback (most recent call last):
  File "__main__.py", line 641, in <module>
    main()
  File "__main__.py", line 631, in main
    sys.exit(args.func(args))
  File "__main__.py", line 340, in show_config
    client = get_client(args.harmony_ip)
  File "__main__.py", line 56, in get_client
    return run_in_loop_now('get_client', func)
  File "__main__.py", line 34, in run_in_loop_now
    loop.run_until_complete(func_task)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 516, in create_and_connect_client
    connected = await client.connect()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 141, in connect
    await self._perform_connect()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 125, in _perform_connect
    await self.retrieve_hub_info()
  File "/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony/client.py", line 103, in retrieve_hub_info
    json_response = await response.json()
  File "/usr/local/lib/python3.7/dist-packages/aiohttp/client_reqrep.py", line 1110, in json
    headers=self.headers,
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: ', url=URL('http://192.168.1.2:8088/')

Il faut dire que python redirige vers /usr/bin/python comme le montre

pi@raspberrypi:/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony $ which python
/usr/bin/python

J’ai essayé d’exécuter le scipt avec python2 mais ça ne marche pas non plus

pi@raspberrypi:/var/www/html/plugins/harmonyhub/3rdparty/PyHarmony2/harmony $ sudo /usr/bin/python2.7 __main__.py --loglevel DEBUG --harmony_ip 192.168.1.2 show_config
Traceback (most recent call last):
  File "__main__.py", line 9, in <module>
    import asyncio
ImportError: No module named asyncio

Si je vous suis bien, le problème vient de la version de python. Mais, quelle version permet d’éxecuter le script sans problème ?

/Papatte

Ça tourne en python2

Et donc ça marche pas avec python2 car les dépendances ne sont pas installée
Le plugin et jeedom croient qu’elles le sont à cause du même problème de lien avec python2

Il faudrait remettre en place les installations de python2 et pip2 du coup ensuite relancer les dépendances et je pense que tout fonctionnera

Je ne suis pas sur de tête quelle commande exacte permettra de corriger l’installation sur python2 et je suis sur mobile donc impossible à tester.
Je flag le sujet pour plus tard sinon le sujet a déjà été abordé dans d’autres posts sur community

Euh, là, j’avoue que je tombe sur un os pour faire tourner ce module sous Python 2 @Mips

Quand j’éxecute la commande avec python2, j’obtiens l’erreur suivante

$ python2 __main__.py --loglevel DEBUG --harmony_ip 192.168.1.2 show_config
Traceback (most recent call last):
  File "__main__.py", line 9, in <module>
    import asyncio
ImportError: No module named asyncio

Et c’est normal, car à la ligne 9 de __main__.py, on retrouve bien

import asyncio

Mais, quand je lis la doc d’asyncio, je comprends que ce module n’est compatible qu’avec Python 3.3 et suivant (GitHub - python/asyncio at master et ici python - ROS ImportError: No module named asyncio - Stack Overflow)

Comment alors faire fonctionne le plugin-harmony ??
Est-ce que j’ai loupé quelque chose ?

/Papatte

Un petit up :up:

Je n’ai pas oublié mais pas eu le temps encore

Cela a été très long mais je viens seulement de reproduire le problème
du coup la version beta qui sera dispo demain devrait fonctionner correctement.

Bonjour,

Je viens de passer sur la beta du 2023-09-22 01:15:46

Ma config :
|Version Jeedom|4.3.17|Version OS|debian 10.13|
|Version PHP|7.3.31-1~deb10u4|Apache|13|
|Version OS|Linux raspberrypi 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux [10.13]|Version database|10.3.39-MariaDB-0+deb10u1|

Suite à changement de certains devices dans mon installation avec mon Hub Harmony, j’ai fait une relance de config.
Dans le fichier de log harmonyhub, je retrouve une ligne [2023-09-22 16:35:04][DEBUG] : Sortie console : {"dataConsent": false, "activity": [ {"rules": [], "label": "Lecture .......... qui décrit l’intégralité de la nouvelle configuration.

Néanmoins, les dispositifs ne sont pas modifiés dans Jeedom (disparition des anciens ou ajout des nouveaux)

Je peux éventuellement fournir d’autres log s’il faut

C’est donc un autre sujet; évitons de mettre tous les « problèmes » sur le dos de cette mise a jour :wink:

Les équipements ne sont jamais créés ou mis a jour automatiquement après une découverte, ca a toujours été comme ça.

Donc vous devez aller dans la page des équipements et les créer ou modifier si nécessaire.

Ah oui, exact, j’avais oublié comment se faisait la création/modification des dispositifs.

Merci

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