[Python] Meross MSG100 Cloud

Vous avez créé 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.
frenchyyii
Messages : 310
Inscription : 16 oct. 2015, 06:29

[Python] Meross MSG100 Cloud

Message par frenchyyii »

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
viewtopic.php?f=8&t=10483&p=89022#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 : Tout sélectionner

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
on vérifie que /home/pi/.local/bin se trouve dans la variable PATH avec la commande

Code : Tout sélectionner

echo $PATH
Si elle n'est pas présente :

Code : Tout sélectionner

nano .profile
export PATH=$HOME/.local/bin:$PATH
source ~/.profile
Installation de Meross-Iot (actuellement dernière release fonctionnelle et release mini nécessaire)

Code : Tout sélectionner

pip install meross_iot==0.4.0.6
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")

Code : Tout sélectionner

cd /home/pi/domoticz/scripts/python/
sudo nano 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

Code : Tout sélectionner

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&param=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&param=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()
Un petit

Code : Tout sélectionner

sudo chmod +x meross.py
histoire de rendre executable

A ce stade normalement vous pouvez je pense déjà tester

Code : Tout sélectionner

python3.7 meross.py
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/)
Création du script sh qui va bien

Code : Tout sélectionner

sudo nano /home/pi/domoticz/scripts/python/meross.sh

Code : Tout sélectionner

#!/bin/bash
sudo -H -u pi /usr/bin/python3 /home/pi/domoticz/scripts/python/meross.py $1 $2
Je lui donne les droits +x via un

Code : Tout sélectionner

sudo chmod +x /home/moi/domoticz/scripts/meross.sh
Un petit cron comme vous avez l'habitude de le faire (en sudo si vous bossez ainsi)

Code : Tout sélectionner

crontab -e
et si par ex vous voulez executer toutes les minutes rajoutez le cron

Code : Tout sélectionner

*/1 * * * * sh /home/pi/domoticz/scripts/python/meross.sh &
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 :D Perso je n'y connais rien en code, je bidouille juste et je cherche.
Dernière modification par frenchyyii le 01 nov. 2020, 18:12, modifié 2 fois.
frenchyyii
Messages : 310
Inscription : 16 oct. 2015, 06:29

Re: [python] Meross MSG100 Cloud

Message par frenchyyii »

Evolution du soir toujours à l'arrache mais ça fonctionne, ouverture et fermeture de la porte de garage via domoticz.
Ca outrepasse le code PIN donc attention à la sécurité.

En fait je vous conseille de créer deux autres dummies et ce coup ci en mode bouton poussoir afin que la lecture de l'état de la partie précédente ne perturbe pas les ordres.
Ca devrait ressembler à
Capture d’écran 2020-11-01 192856.png
Capture d’écran 2020-11-01 192856.png (42.7 Kio) Consulté 4488 fois
Donc dummy, interrupteurs.... que l'on modifie en bouton push-on,
Premier dummy "Ouverture garage"
Délai d'extinction 1
à action on: script:///home/pi/domoticz/scripts/python/meross_gate_open.sh

idem avec un push-on "Fermeture Garage"
script:///home/pi/domoticz/scripts/python/meross_gate_close.sh

Coté scripts dans le même directory copiez et modifiez le sh que vous avez crée précédemment en première partie qui gérait l'état de la porte.
meross_gate_open.sh aura alors la forme

Code : Tout sélectionner

#!/bin/bash
sudo -H -u pi /usr/bin/python3 /home/pi/domoticz/scripts/python/meross_gate_open.py $1 $2
on fait pareil avec un meross_gate_close.sh

Code : Tout sélectionner

#!/bin/bash
sudo -H -u pi /usr/bin/python3 /home/pi/domoticz/scripts/python/meross_gate_close.py $1 $2
On passe aux pythons... reprenez et copiez le python meross.py (perso je vais remodifier en l'appelant meross_status.py)
Un premier sera nommé meross_gate_open.py, le second meross_gate_close.py
Modifiez les lignes 47 à 57 comme tel:

Code : Tout sélectionner

   # To open the door, uncomment the following:
        print(f"Opening door {dev.name}...")
        await dev.async_open(channel=0)
        print("Door opening!")
        #
        # Wait a bit before closing it again
        await asyncio.sleep(5)
        #
        #print(f"Closing door {dev.name}...")
        #await dev.async_close()
        # print(f"Door closing!")
Pour meross_gate_close.py

Code : Tout sélectionner

        # To open the door, uncomment the following:
        #print(f"Opening door {dev.name}...")
        #await dev.async_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.async_close()
        print(f"Door closed!")
allez on rend tout ça exécutable

Code : Tout sélectionner

sudo chmod +x meross_gate_open.py
sudo chmod +x meross_gate_close.py
sudo chmod +x meross_gate_open.sh
sudo chmod +x meross_gate_close.sh
Et c'est parti....
Dernière modification par frenchyyii le 01 nov. 2020, 19:29, modifié 3 fois.
frenchyyii
Messages : 310
Inscription : 16 oct. 2015, 06:29

Re: [python] Meross MSG100 Cloud

Message par frenchyyii »

a garder pour la suite éventuelle (faire parler son GH ou son Alexa quand le portail s'ouvre histoire d'être sur que le gosse ou les chiens ne passent pas sous une auto ???) BIS
Dernière modification par frenchyyii le 30 mars 2021, 14:52, modifié 1 fois.
JRCondat
Messages : 40
Inscription : 29 nov. 2016, 16:40

Re: [python] Meross MSG100 Cloud

Message par JRCondat »

Merci beaucoup de ton travail, je vais tenter l'expérience de suite et je te tiens au jus.
J'ai acheté ce module Meross car la remontée de l'état de ma porte de garage en RFLink n'était pas fiable.
Cl31
Messages : 17
Inscription : 25 janv. 2021, 21:57

Re: [python] Meross MSG100 Cloud

Message par Cl31 »

Bonjour,
Je tenais simplement à remercier frenchyyii pour le travail et indiquer qu'en suivant à la lettre le tuto, tout fonctionnait à merveille.
Cordialement
Répondre