Plugin jeezvizv2 : installation

Bonjour à tous,

Je débarque ici suite au passage en payant des hooks IFTTT qui me permettaient jusqu’ici de piloter tant bien que mal mes caméras EZVIZ. Cela marchait déjà assez aléatoirement, alors c’est avec grand plaisir que je constate qu’il y a maintenant un plugin dédié ! Félicitations d’ailleurs pour l’écriture du plugin ainsi qu’à ceux qui ont rétro-ingénierié le protocole :pray:.

J’ai donc tenté d’installer jeezvizv2. Malheureusement, comme certains j’ai un souci avec les dépendances.

Dans un premier temps, l’installation tournait en boucle. Il semble que numpy soit assez long à compiler, et on dirait qu"un timeout redémarre l’installation du début régulièrement. Une solution pour ceux qui ont ce problème semble être de désavtiver le plugin après avoir lancé l’installation des dépendances.

Malheureusement cela n’a pas suffit dans mon cas : numpy ne voulait pas se compiler. D’après Internet, cela est dû la plupart du temps à une incompatibilité de versions entre numpy et python. J’ai seulement python 3.7 sur mon rapsberry (!) et je ne voulais pas prendre le risque d’upgrader, j’ai donc tenté une commande « pip install numpy==1.21.6 » comme indiqué ici : https://www.askpython.com/python-modules/numpy/solved-could-not-build-wheels-for-numpy avec la table de compatibilité fournie ici : numpy · PyPI (commande lancée en SSH sur mon raspberry).
Pour l’instant j’ai toujours une erreur lors de l’installation de numpy. J’espérais que cela aurait fonctionné le temps d’écrire le message, mais non …

Je continue d’essayer et je posterai une solution si je la trouve.

PS : j’ai également eu le symptôme du serveur jeedom inaccessible, je pense que c’est dû à l’installation en boucle des dépendances. Même SSH ne fonctionnait plus, j’ai dû rebooter manuellement.

J’ai essayé d’appliquer les différentes solutions proposées lorsque l’installation de numpy échoue. Aucune n’a fonctionné.

En allant regarder de plus près l’erreur de compilation, il s’avère que c’est un problème connu. La version de GCC sur Debian / Raspian Buster ne permet pas de compiler numpy correctement. Le problème a d’ailleurs aussi été reporté sur ce même forum, pour d’autres usages : Problème d'installation avec la mise à jour 20220803 - #12 par defmy
Une solution consisterait à utiliser les binaires précompilés de numpy plutôt que de le compiler en local : BUG: internal compiler error: in convert_move, at expr.c:218 · Issue #21038 · numpy/numpy · GitHub

# cat /etc/pip.conf
[global]
extra-index-url=https://www.piwheels.org/simple/

[install]
constraint=/etc/pip-constraints.txt
# cat /etc/pip-constraints.txt
numpy<1.21.5; python_version=='3.7'

En théorie, relancer l’installation de numpy devrait alors aller chercher le binaire précompilé.
pip install numpy
Vu le temps que cela prend, je ne suis pas hyper confiant !

Une autre solution serait de compiler en désactivant certaines optimisations :
pip3 install --no-use-pep517 --global-option=build --global-option="--cpu-dispatch=max -neon_vfpv4" ./

J’ai finalement réussi à faire fonctionner le plugin.

  1. Si l’installation des dépendances tourne en boucle (voir le log dans « Configuration du plugin » → Logs et surveillance → Bouton bleu jeezivizv2_dependency_install), désactiver le plugin après avoir lancé l’installation des dépendances et attendre de voir dans le log si l’installation des dépendances réussit ou pas.
  2. Si l’installation des dépendances échoue et que le log contient l’erreur « internal compiler error: in convert_move, at expr.c:218 », c’est peut être le même problème que moi. Il faut se connecter en SSH, et éditer le fichier :

/etc/pip.conf
[global]
extra-index-url=https://www.piwheels.org/simple/
[install]
constraint=/etc/pip-constraints.txt

Puis créer et éditer le fichier
/etc/pip-constraints.txt
numpy==1.21.4; python_version=='3.7'

A faire en superuser (sudo)

Toujours en SSH, vous pouvez tester l’installation en mode « user » : pip install numpy (jeedom fera l’installation en superuser)
→ Normalement c’est assez rapide car le système doit juste télécharger et installer, il n’y a pas de compilation.

Testez alors à nouveau l’installation des dépendances dans jeedom → plugin pyzvizv2

  1. Si l’installation des dépendances a réussi, vous pouvez tester si cela fonctionne. Chez moi cela n’était pas le cas. L’installation des dépendances avait réussi, mais pyezviz ne fonctionnait toujours pas à cause d’une dépendance manquante. Donc sur jeedom cela semblait fonctionner, je n’avais aucune erreur dans le log mais en fait cela ne fonctionnait pas. Un test simple à faire est d’exécuter la commande (toujours en SSH) « /usr/local/bin/pyezviz ». Si vous obtenez une erreur de ce style, c’est gagné !
usage: pyezviz [-h] -u USERNAME -p PASSWORD [-r REGION] [--debug]
{devices,home_defence_mode,mqtt,camera} ...
pyezviz: error: the following arguments are required: -u/--username, -p/--password

Par contre si vous obtenez l’erreur suivante, passer au point 4 :slight_smile:

Traceback (most recent call last):
  File "/usr/local/bin/pyezviz", line 5, in <module>
    from pyezviz.__main__ import main
  File "/usr/local/lib/python3.7/dist-packages/pyezviz/__main__.py", line 8, in <module>
    import pandas
  File "/usr/local/lib/python3.7/dist-packages/pandas/__init__.py", line 17, in <module>
    "Unable to import required dependencies:\n" + "\n".join(missing_dependencies)
ImportError: Unable to import required dependencies:
numpy:
  1. Si la commande pyezviz ne fonctionne toujours pas, essayez cela :
    « sudo apt-get install libatlas-base-dev »

  2. Vous pouvez alors essayer d’exécuter une « vraie » commande du style
    « /usr/local/bin/pyezviz -u -p camera --serial <N°SérieCaméraEZVIZ> status »
    En remplaçant bien sûr par votre adresse email, idem pour le mot de passe et le numéro de série. Si vous obtenez un long listing en json, c’est gagné !
    Chez moi, il a encore fallu renseigner le code envoyé sur mon téléphone (MFA) et cela a fini par fonctionner

J’espère que cela permettra à plus de monde d’utiliser ce plugin, qui est une vraie amélioration par rapport aux interactions IFTTT ! J’ai vu dans le forum que plusieurs personnes avaient eu ce problème de dépendances.


Pour ceux que les détails intéressent :
Le plugin utilise pyezviz, une bibliothèque Python. Cette dernière a besoin de la bibliothèque Python numpy pour fonctionner. Or, numpy ne se compile pas correctement sur raspian Buster pour une sombre histoire de version gcc. Heureusement, une âme charitable a créé des binaires (déjà compilés donc) pour les modules les plus communs de Python. Ces modules compilés appelés Wheels sont disponibles sur le serveur piwheels. Attention, pour la version 3.7 de Pyhton (celle présente sur raspian Buster), il faudrait normalement utiliser numpy 1.21.6 mais la dernière version disponible est la 1.21.4 (voir https://www.piwheels.org/project/numpy/ → Show all releases). Une fois les 2 fichiers de conf édités, le fait de relancer l’installation de numpy avec pip va télécharger le module binaire au lieu d’essayer de le compiler. Vous pouvez utiliser pip install numpy -v pour voir les détails. D’ailleurs, pendant l’installation effective des dépendances par jeedom (cette fois en mode superuser), on peut voir que pyezviz est également téléchargé.
Pour le point 4, je n’ai pas trop creusé, j’ai trouvé cette ligne dans un forum est cela a fonctionné…

Dernier point, je n’avais aucune commande après avoir créé les caméras. Mais les commandes sont pourtant bien présentes dans la configuration avancée de l’équipement. Savez-vous somment les faire « apparaître » ?

Merci

PS : @oozaer il pourrait être intéressant de renseigner ce problème de dépendances dans le plugin (je crois qu’il y a une petite doc ?), cela permettrait au plus grand monde d’en profiter :smiley:. La solution la plus radicale étant de mettre à jour raspian bien sûr !