[Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Domo89
Messages : 15
Enregistré le : 04 août 2015, 00:49

[Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par Domo89 »

Apres plusieurs mois, j'ai décidé de me remettre à écrire quelques scripts et à moderniser ceux étant devenus obsolètes (cf https://www.easydomoticz.com/forum/viewtopic.php?t=1972).

Dans tous les scripts, la partie a configurer se trouve à la fin.
Pour l'installation, ils utilisent tous python3 et nécessitent la librairie requests (pip3 install requests)
Le script MyJDownloader nécessite aussi la lib pycrypto (pip3 install pycrypto) ainsi que le fichier myjdapi.py
Le scrpit de la 4G Box nécessite la lib huawei_lte_api (pip3 install huawei-lte-api)

Le premier permet de récupérer différentes données sur MyJDownloader (interface en ligne de JDownloader 2).
On peut récupérer les infos suivantes:
total a télécharger (gb) / total téléchargé (gb) / nombre de paquets / nombre de paquets activés / nombre de paquets téléchargés / nombre de paquets en erreur / nombre de paquets en attente / pourcentage de paquets en erreur / pourcentage de paquets téléchargés / statut de téléchargement / vitesse de téléchargement (en mb/s) / temps total avant fin des téléchargements (day h:min:sec) / nombre de paquets en cours de téléchargement / nom du téléchargement en cours / texte du rapport telechargé-à télécharger en gb / texte du rapport téléchargé-à télécharger en paquets
On remplace donc DOMOTICZIP par l'ip de domoticz,
MONIDJDOWNLOADER par l'id qu'on peut trouver dans l'url du service:
ex: https://my.jdownloader.org/?deviceId=MONIDJDOWNLOADER #webinterface:downloads
mon@mail.com par l'adresse mail avec laquelle on s'est inscrit et MONMOTDEPASSE
On configure ensuite les idxs des capteurs virtuels créés dans domoticz
ex: idxs = [12,13,16] si on a crée 3 capteurs avec les idxs 12 13 et 16
Puis on configure les données associées a ces capteurs d'apres la liste de dennées ci-dessus (en partant de 0):
ex: types = [9,10,13] feront correspondre l'idx 12 au statut de téléchargement, l'idx 13 à la vitesse de téléchargement et l'idx 16 au nom du téléchargement en cours

Voila, le fonctionnement est a peu pres le même pour les autres scripts:

Pour la qualité de l'air:
On remplace notre longitude et latitude (trouvable sur google maps par exemple) et cela calculera la station la plus proche
On replace les idxs et les données associées parmis celles de cette liste:
a_SO2, a_NO2, a_O3, a_PM10, CO, SO2, NO2, O3, PM10, PM25, j_CO, j_SO2, j_NO2, j_O3, j_PM10, j_PM25 avec a_ correspondant à l'indice ATMO et j_ à la moyenne journalière
ex: pour les idxs 11,12 et 13 correspondants à l'indice ATMO global, la quantitée de NO2 et l'indice ATMO des PM10, on a
idxs = [11,12,13] et polluants = ["a_INDICE","NO2","a_PM10"]


Pour les pollens:
On remplace notre département
Puis les idxs, et les pollens parmis ceux-cis (numeros en partant de 0):
General / Tilleul / Ambroisies / Olivier / Plantain / Noisetier / Aulne / Armoise / Chataigner / Urticacées / Oseille / Graminées / Chene / Platane / Bouleau / Charme / Peuplier / Frene / Saule / Cypres
ex: pour idxs 11 et 12 correspondant au niveau general et charme, on a
idxs = [11,12] et pollens = [0,15]


Pour la vigilance météo et crue:
On remplace le département, et les 2 idxs devant correspondre a des devices de type ALERTE, le premier etant la vigilance meteo et le second la vigilance crue

Pour les moustiques:
On remplace le département et les 2 idxs correspondant a des devices ALERT, le premier est pour les moustiques et le second pour les moustiques tigres (dans le script les idxs à remplacer sont 7655 et 7656)

Pour la 4G Box:
Dans boxAddr = 'http://UTILISATEUR:MOTDEPASSE@BOXIP/',
on remplace par l'utilisateur (admin) et le mot de passe de connexion à l'interface de la box, et l'IP de la box
On remplace ensuite les idxs et les valeurs qu'on souhaite obtenir parmi celles-cis (numeros en partant de 0): indicateur de reception(dBm) / force de réception (dBm) / qualitée de réception (dBm) / IP publique / Total Téléchargé pour le mois (gb) / Total Uploadé pour le mois (gb)
ex: pour les idxs 13 et 14 correspondants au total téléchargé et a l'IP publique,on a:
idxs = [13,14] et types = [4,3]

PS: Je parle ici de la 4G Box car c'est celle que j'ai, mais normalement cela deverait fonctionner avec tous les routeurs Huawei compatibles avec l'app HiLink.

Et voilà !
(J'ai mis tous les scripts en pièce jointe pour éviter que mon post ne prenne 10 pages)
Fichiers joints
vigilance.py
script vigilance meteo et crue
(2.11 Kio) Téléchargé 51 fois
prevair.py
script qualité de l'air
(4.23 Kio) Téléchargé 53 fois
pollens.py
script pollens
(1.79 Kio) Téléchargé 72 fois
MyJDownloader.py
script MyJDownloader
(4.75 Kio) Téléchargé 50 fois
myjdapi.py
librairie nécessaire au script MyJDownloader
(30.23 Kio) Téléchargé 40 fois
moustiques.py
script moustiques
(1.57 Kio) Téléchargé 68 fois
4gbox.py
script 4GBox
(2.2 Kio) Téléchargé 42 fois

denis_brasseur
Messages : 472
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par denis_brasseur »

Bonjour Domo89, joli travail, et merci pour le partage.
Je viens de mettre en place le script 4gbox.py depuis les événements de Domoticz.

J'ai lancé au préalable pip3 install requests et pip3 install huawei-lte-api.

A l'issu de pip3 install huawei-lte-api, j'ai bien

Code : Tout sélectionner

Successfully installed certifi-2019.3.9 chardet-3.0.4 dicttoxml-1.7.4 huawei-lte-api-1.1.5 idna-2.8 requests-2.21.0 urllib3-1.24.2 xmltodict-0.12.0
Mais voici mes logs :

Code : Tout sélectionner

2019-04-25 19:30:17.689 Error: EventSystem: Failed to execute python event script "py_4gbox"
2019-04-25 19:30:17.689 Error: EventSystem: Traceback (most recent call last):
2019-04-25 19:30:17.689 Error: EventSystem: File "<string>", line 1, in <module>
2019-04-25 19:30:17.689 Error: EventSystem: ImportError: No module named 'huawei_lte_api'
Ma version python : Python 3.4.4

Il ne trouve pas le module huawei_lte_api.

Depuis apt-mark showmanual | grep huawei, je ne trouve pas huawei_lte_api

Qu'est ce que je n'ai pas fait ou mal fait ?

Merci de ton retour.
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Domo89
Messages : 15
Enregistré le : 04 août 2015, 00:49

Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par Domo89 »

Bonjour,
Je pense que cela ne fonctionne pas car ces scripts sont prévus pour être exécutés séparément et pas via les Events de domoticz.
Personnellement, j'ai crée le script directement dans le dossier scripts/python de domoticz sans passer par les Events, et j'exécute ce script toutes les 2h avec un crontab:

Code : Tout sélectionner

PATH=/usr/local/sbin:/usr/local/bin:/bin:/usr/bin
* */2 * * * python3 /home/pi/domoticz/scripts/python/updateDevices/4gbox.py >/dev/null 2>&1
D’après tes logs, il semblerait que le scripts n'arrive pas a importer le module alors qu'il est installé (peut-etre la faute a une installation faite sur une différente version de python que celle utilisée par domoticz ?)

PS: Pour apt, c'est normal de ne pas trouver le paquet huawei-lte-api (étrangement, le nom du paquet est avec des tirets, mais pour l'importer il faut utiliser des underscores) car c'est un module python et non un paquet debian, il s'installe donc par pip3.

denis_brasseur
Messages : 472
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par denis_brasseur »

Effectivement, en exécutant directement le script depuis un dossier python, cela fonctionne.

Par contre, impossible de récupérer WanIPAddress.

Pour le reste (indicateur de reception(dBm) / force de réception (dBm) / qualitée de réception (dBm) / Total Téléchargé pour le mois (gb) / Total Uploadé pour le mois (gb)), cela fonctionne.

Code : Tout sélectionner

pi@raspberrypi:~ $ python3 /home/pi/domoticz/scripts/python/4gbox.py
Traceback (most recent call last):
  File "/home/pi/domoticz/scripts/python/4gbox.py", line 39, in <module>
    updateDomoticz(boxAddr,idxs,types,domoticz)
  File "/home/pi/domoticz/scripts/python/4gbox.py", line 20, in updateDomoticz
    wanIP = client.device.information()["WanIPAddress"]
KeyError: 'WanIPAddress'
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Domo89
Messages : 15
Enregistré le : 04 août 2015, 00:49

Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par Domo89 »

D'après tes logs, il semblerait que ta box ne revoie pas l'IP Publique lors de l'appel à l'API, on ne peut donc malheureusement pas y faire grand chose. Cependant l'IP Publique est une valeur facile a trouver, il suffit de recuperer la valeur sur des sites comme monip.org par exemple.

denis_brasseur
Messages : 472
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par denis_brasseur »

Domo89 a écrit :
26 avr. 2019, 14:58
D'après tes logs, il semblerait que ta box ne revoie pas l'IP Publique lors de l'appel à l'API, on ne peut donc malheureusement pas y faire grand chose. Cependant l'IP Publique est une valeur facile a trouver, il suffit de recuperer la valeur sur des sites comme monip.org par exemple.
Il s'agit pourtant d'une valeur affichée depuis la console
Nom de l'appareil : E5180As-22
IMEI: xxxxxx
IMSI: xxxxxx
Mon numéro: Inconnu
Version matériel: CL1E5180SM05
Version du logiciel: 21.270.35.05.309
Version IU Web: 16.100.03.00.03
Adresse MAC: xxxxxx
Adresse IP WAN: 176.164.yyy.yyy
PCI: 98
CELL_ID: xxxxxx
RSRQ: -11dB
RSRP: -72dBm
RSSI: >=-51dBm
SINR: 13dB
Durée: 02:51:29
État WLAN: Marche
Impossible de récupérer WanIPAddress.
Idem pour rssi, pas de message d'erreur, mails le device ne se met pas à jour, alors que l'heure du device se met bien à jour.
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

denis_brasseur
Messages : 472
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par denis_brasseur »

denis_brasseur a écrit :
27 avr. 2019, 19:40


Impossible de récupérer WanIPAddress.
Idem pour rssi, pas de message d'erreur, mails le device ne se met pas à jour, alors que l'heure du device se met bien à jour.
Effectivement, on ajoutant print(client.device.information()), l'IP ne remonte pas.

En ce qui concerne rssi, la valeur retournée est celle ci :
'rssi': '&gt;=-51dBm'

J'ai donc modifié str(signal["rssi"])

Code : Tout sélectionner

requests.get(domoticz+"/json.htm?type=command&param=udevice&idx="+str(idxs[types.index(0)])+"&nvalue=0&svalue="+str(signal["rssi"]))
en str(signal["rssi"][5:])

Code : Tout sélectionner

requests.get(domoticz+"/json.htm?type=command&param=udevice&idx="+str(idxs[types.index(0)])+"&nvalue=0&svalue="+str(signal["rssi"][5:]))
afin de ne conserver que les caracteres a partir du 5eme. Et cela fonctionne.

Par contre, impossible d’exécuter le script depuis crontab, pas de mise à jour des device et rien dans les log, alors que la commande dans la console met à jour et alimente les logs.

Code : Tout sélectionner

*/15 * * * * /usr/bin/python3 /home/pi/domoticz/scripts/python/4gbox.py >> /home/pi/domoticz/4gbox.log
J'ai loupé un truc ?
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Domo89
Messages : 15
Enregistré le : 04 août 2015, 00:49

Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par Domo89 »

Ah, parfait, moi qui comptais te demander de vérifier le résultat de l'api avec un print, tu m'as devancé :)
Sinon ton cron me semble bon,
Essaye avec cette forme:

Code : Tout sélectionner

*/15 * * * * cd /home/pi/domoticz/scripts/python && /usr/bin/python3 4gbox.py >> /home/pi/domoticz/4gbox.log
mais je ne pense pas que cela changera grand chose. Sinon vérifie aussi les droits d'exécution, quand tu lance ton script dans la console c'est avec quel utilisateur, est-ce le même que celui de ton cron ?

titis14
Messages : 138
Enregistré le : 22 juin 2018, 14:09

Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par titis14 »

Beau travail, la parti 4G est top mais j'ai un TP-Link avec une sim free donc ça ne pourra pas me servir mais j'aimerais avoir sur mon domoticz la data qui remonte bien sur l'interface de mon routeur et pas d'api dispo.

J'ai trouvé ça https://github.com/KreXor/TP-Link-API/b ... /tplink.py es que tu crois qu'il y aurais moyen de faire quelques chose avec mon TP-Link MR-6400 ?
Merci

Domo89
Messages : 15
Enregistré le : 04 août 2015, 00:49

Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo

Message par Domo89 »

Il y a probablement moyen de faire quelque chose mais tout dépends de ce que te renvoie les appels a cette librairie. Pour la 4g box non plus, il n'y a pas d'API "officielle" et j'utilise une lib externe basée sur du reverse-engineering.

Répondre