[python] Meross MSG100 Cloud
Posted: Monday 02 November 2020 10:24
Hi, sorry because it's in french and not clean but it works.
If it can help someone (HellStorm666 ??)
(copy from my easydomoticz topic)
Bonjour, n'étant pas un fan des tutos celui ci pourra juste dépanner ceux qui chercheraient quelques réponses à l'intégration de la passerelle MEROSS MSG100, module qui permet de gérer ouverture/fermeture d'une porte de garage, de portail ou autre avec retour d'état. N'ayant besoin que du retour d'état pour le moment ce sera la seule partie dont je parlerai pour le moment.
Après avoir cherché ce qui pourrait fonctionner, je me suis basé sur la librairie python de Alberto Geniola (merci à lui et merci à sa réactivité)
https://github.com/albertogeniola/MerossIot
Le fonctionnement passer par du mqtt et du python puisque c'est ce qu'utilise Alberto Geniola. Voilà juste un petit peu d'adaptation à faire.
Je reprends juste et adapte un message d'ici de Ph.A qui lui traite des prises
https://easydomoticz.com/forum/viewtopi ... 022#p89022
Avant tout créez un dummy virtuel type interrupteur et modifiez le pour le passer en Blinds, Notez son ID pour le script plus tard.
Allez déjà installation des composantes si pas déjà fait
- python3.7 (reprise d'un message de Ph.A et ajouts)
on vérifie que /home/pi/.local/bin se trouve dans la variable PATH avec la commande
Si elle n'est pas présente :
Installation de Meross-Iot (actuellement dernière release fonctionnelle et release mini nécessaire)
Si non présentes installez les librairies python nécessaires à l'utilisation du script
"import asyncio
import os
import json
import requests
import urllib.request"
Rendez-vous dans votre directory python par defaut pour pi (utilisez specifiquement ce directory si vous pouvez gerer les scripte time en python, il faudra alors renommer le script à venir "meross.py" en "script_time_meross.py") ou meross_gate.py par ex si vous utilisez autre chose que le gate openener
ou avec n'importe quel editeur
Attention ce n'est pas le même que Ph.A, tant au niveau des imports que dans la structure puisqu'il cela concerte un Gate opener !!!! y a les en plus ajouts requests et la modif Gate Opener (dev.is_open devenant dev.get_is_open)etc...)
Creez le script suivant et pensez à bien mettre vos user et pass de meross ainsi que ip:port et ID de domoticz
Un petit
histoire de rendre executable
A ce stade normalement vous pouvez je pense déjà tester
Logiquement ça devrait soit fonctionner soit vous dire ce qui déconne (je mets ces explications de mémoire)
Execution auto du script:
2 solutions:
- soit vous avez compilé et pouvez/savez utililer les script time .... c'est à vous
- soit il va falloir executer regulierement via un cron ou autre
pour tester au plus simple, et vu que je galère dans les cron python, je repique la fin de Ph.A (en mode pi et sous /scripts/python/)
et si par ex vous voulez executer toutes les minutes rajoutez le cron
Voilà, je l'ai dit les tutos ce n'est pas mon truc et je n'ai pas trop le temps. Ca vous donnera déjà une base et au pire on modifiera/rectifiera et dépannera si il y a moyen. Et puis il faut aussi chercher à adapter hein Perso je n'y connais rien en code, je bidouille juste et je cherche.
If it can help someone (HellStorm666 ??)
(copy from my easydomoticz topic)
Bonjour, n'étant pas un fan des tutos celui ci pourra juste dépanner ceux qui chercheraient quelques réponses à l'intégration de la passerelle MEROSS MSG100, module qui permet de gérer ouverture/fermeture d'une porte de garage, de portail ou autre avec retour d'état. N'ayant besoin que du retour d'état pour le moment ce sera la seule partie dont je parlerai pour le moment.
Après avoir cherché ce qui pourrait fonctionner, je me suis basé sur la librairie python de Alberto Geniola (merci à lui et merci à sa réactivité)
https://github.com/albertogeniola/MerossIot
Le fonctionnement passer par du mqtt et du python puisque c'est ce qu'utilise Alberto Geniola. Voilà juste un petit peu d'adaptation à faire.
Je reprends juste et adapte un message d'ici de Ph.A qui lui traite des prises
https://easydomoticz.com/forum/viewtopi ... 022#p89022
Avant tout créez un dummy virtuel type interrupteur et modifiez le pour le passer en Blinds, Notez son ID pour le script plus tard.
Allez déjà installation des composantes si pas déjà fait
- python3.7 (reprise d'un message de Ph.A et ajouts)
Code: Select all
sudo apt update
sudo apt install -y python3.7
sudo apt-get install build-essential python3-dev libffi-dev
sudo apt install -y python3-gribapi
sudo apt install -y python3-eccodes
sudo apt install -y python3-distutils
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --user
Code: Select all
echo $PATH
Code: Select all
nano .profile
export PATH=$HOME/.local/bin:$PATH
source ~/.profile
Code: Select all
pip install meross_iot==0.4.0.6
"import asyncio
import os
import json
import requests
import urllib.request"
Rendez-vous dans votre directory python par defaut pour pi (utilisez specifiquement ce directory si vous pouvez gerer les scripte time en python, il faudra alors renommer le script à venir "meross.py" en "script_time_meross.py")
Code: Select all
cd /home/pi/domoticz/scripts/python/
sudo nano meross.py
ou avec n'importe quel editeur
Attention ce n'est pas le même que Ph.A, tant au niveau des imports que dans la structure puisqu'il cela concerte un Gate opener !!!! y a les en plus ajouts requests et la modif Gate Opener (dev.is_open devenant dev.get_is_open)etc...)
Creez le script suivant et pensez à bien mettre vos user et pass de meross ainsi que ip:port et ID de domoticz
Code: Select all
import asyncio
import os
import json
import requests
import urllib.request
from meross_iot.controller.mixins.garage import GarageOpenerMixin
from meross_iot.http_api import MerossHttpClient
from meross_iot.manager import MerossManager
EMAIL = "votre_email_du_compte_meross"
PASSWORD = "votre_pass_du_compte_meross"
async def main():
# Setup the HTTP client API from user-password
http_api_client = await MerossHttpClient.async_from_user_password(email=EMAIL, password=PASSWORD)
# Setup and start the device manager
manager = MerossManager(http_client=http_api_client)
await manager.async_init()
# Retrieve all the devices that implement the garage-door opening mixin
await manager.async_device_discovery()
openers = manager.find_devices(device_class=GarageOpenerMixin)
if len(openers) < 1:
print("No garage opener found...")
else:
dev = openers[0]
# Update device status: this is needed only the very first time we play with this device (or if the
# connection goes down)
await dev.async_update()
# Check current door status
open_status = dev.get_is_open()
if open_status:
print(f"Door {dev.name} is open")
requete='http://ip_domoticz:port/json.htm?type=command¶m=switchlight&idx=ID_de_votre_switch&switchcmd=Off'
urllib.request.urlopen(requete)
else:
print(f"Door {dev.name} is closed")
requete='http://ip_domoticz:port/json.htm?type=command¶m=switchlight&idx=ID_de_votre_switch&switchcmd=On'
urllib.request.urlopen(requete)
# To open the door, uncomment the following:
#print(f"Opening door {dev.name}...")
#await dev.open(channel=0)
#print("Door opened!")
#
# Wait a bit before closing it again
#await asyncio.sleep(5)
#
#print(f"Closing door {dev.name}...")
#await dev.close()
# print(f"Door closed!")
# Close the manager and logout from http_api
manager.close()
await http_api_client.async_logout()
if __name__ == '__main__':
# On Windows + Python 3.8, you should uncomment the following
# asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Code: Select all
sudo chmod +x meross.py
A ce stade normalement vous pouvez je pense déjà tester
Code: Select all
python3.7 meross.py
Execution auto du script:
2 solutions:
- soit vous avez compilé et pouvez/savez utililer les script time .... c'est à vous
- soit il va falloir executer regulierement via un cron ou autre
pour tester au plus simple, et vu que je galère dans les cron python, je repique la fin de Ph.A (en mode pi et sous /scripts/python/)
Un petit cron comme vous avez l'habitude de le faire (en sudo si vous bossez ainsi)Création du script sh qui va bienCode: Select all
sudo nano /home/pi/domoticz/scripts/python/meross.sh
Je lui donne les droits +x via unCode: Select all
#!/bin/bash sudo -H -u pi /usr/bin/python3 /home/pi/domoticz/scripts/python/meross.py $1 $2
Code: Select all
sudo chmod +x /home/moi/domoticz/scripts/meross.sh
Code: Select all
crontab -e
Code: Select all
*/1 * * * * sh /home/pi/domoticz/scripts/python/meross.sh &