[Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo
[Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo
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)
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)
- Pièces jointes
-
vigilance.py- script vigilance meteo et crue
- (2.11 Kio) Téléchargé 353 fois
-
prevair.py- script qualité de l'air
- (4.23 Kio) Téléchargé 342 fois
-
pollens.py- script pollens
- (1.79 Kio) Téléchargé 369 fois
-
MyJDownloader.py- script MyJDownloader
- (4.75 Kio) Téléchargé 343 fois
-
myjdapi.py- librairie nécessaire au script MyJDownloader
- (30.23 Kio) Téléchargé 315 fois
-
moustiques.py- script moustiques
- (1.57 Kio) Téléchargé 362 fois
-
4gbox.py- script 4GBox
- (2.2 Kio) Téléchargé 341 fois
-
denis_brasseur
- Messages : 898
- Inscription : 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
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
Mais voici mes logs :
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.
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.0Code : 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'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
Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo
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:
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.
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>&1PS: 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 : 898
- Inscription : 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
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.
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
Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo
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 : 898
- Inscription : 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
Il s'agit pourtant d'une valeur affichée depuis la consoleDomo89 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.
Impossible de récupérer WanIPAddress.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
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
-
denis_brasseur
- Messages : 898
- Inscription : 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
Effectivement, on ajoutant print(client.device.information()), l'IP ne remonte pas.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.
En ce qui concerne rssi, la valeur retournée est celle ci :
'rssi': '>=-51dBm'
J'ai donc modifié str(signal["rssi"])
Code : Tout sélectionner
requests.get(domoticz+"/json.htm?type=command¶m=udevice&idx="+str(idxs[types.index(0)])+"&nvalue=0&svalue="+str(signal["rssi"]))Code : Tout sélectionner
requests.get(domoticz+"/json.htm?type=command¶m=udevice&idx="+str(idxs[types.index(0)])+"&nvalue=0&svalue="+str(signal["rssi"][5:]))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.logPi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo
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: 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 ?
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.logRe: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo
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
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
Re: [Python] Scripts pour MyJDownloader, 4G Box, Pollens, Qualitée de l'air, Moustiques et Vigilance Meteo
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.