Forum eedomus
https://forum.eedomus.com/

[Résolu] Pilotage de prise Meross
https://forum.eedomus.com/viewtopic.php?f=14&t=11238
Page 1 sur 1
Auteur:  nilujeperchut [ 27 Jan 2022 15:10 ]
Sujet du message:  [Résolu] Pilotage de prise Meross

(re)Bonjour à tous,

Cela fait longtemps que je ne suis pas passé ici.
Je reviens une jolie question. J'ai cherche ici et ailleurs sans pour autant trouver de réponse. Je vais essayer d'être concis.

J'ai une multiprise Meross que je n'arrive pas à piloter via eedomus car non compatible à priori. Ok pas de pb, je la pilote à la voix avec ma google home.

J'aimerai cependant pouvoir y avoir accéder autrement via eedomus, donc je cherche des alternatives (que je n'ai pas trouvé encore). En connaissez-vous ?

La vraie question étant : est-il possible de lancer une commande sur la google home via eedomus (par exemple via une télécommande lancer l'équivalent d'une commande Ok Google fais ci.

La finalité : piloter la multiprise et les éléments du bureau en même temps via un interrupteur.

Portez-vous bien, tenez vous mal.
Patrick
Auteur:  ARTNOW [ 27 Jan 2022 22:53 ]
Sujet du message:  Re: Pilotage de prise Meross

Portez-vous bien, tenez vous mal.
Patrick

:shock: :shock: :shock: :shock: :shock:
Etrange comme formule ??????
Auteur:  nilujeperchut [ 28 Jan 2022 13:09 ]
Sujet du message:  Re: Pilotage de prise Meross

Si il n'y a que cette partie qui vous a intéressé dans mon message, autant clore le thread ou s'abstenir de répondre. Donc on va se recentrer sur le sujet principal. Merci.

Mais sinon en tant qu'utilisateur eedomus+ et de google home(home nest & mini) ce genre de cas ne ne vous est pas arrivé ?

Patrick
Auteur:  philippek [ 09 Fév 2022 10:50 ]
Sujet du message:  Re: Pilotage de prise Meross

Bonjour,

Je contrôle mes prises Meross via IFTTT et j'ai créé dans eedomus un actionneur Webhooks IFTTT.
Ca fonctionne mais on ne reçoit pas le retour (l'état actualisé) de la prise/mutliprise si on change son état en direct par l'app Meross ou Google Home.

Bien à vous,
Philippe
Auteur:  nilujeperchut [ 13 Fév 2022 18:58 ]
Sujet du message:  Re: Pilotage de prise Meross

Merci pour votre retour.
IFTTT(TTTT) j'avais essayé au tout début, mais ça m'ennuie d'utiliser un service tiers. Mais si ca marche pourquoi s'en priver. Je crois que c'est limité maintenant en utilisation gratuite ?

Sinon je viens de tester un script python sur github : https://github.com/albertogeniola/MerossIot
Mais on arrive sur une limitation eedomus sur le sujet : l'execution de script python.

A moins de faire un solution (déjà éprouvée de mon côté à remettre en place sur mon nouveau chez moi)
1 - Stockage du script python sur mon NAS sur un répertoire partagé
2 - Lancement d'un actionneur sur le serveur web du NAS ou le RPI qui va exécuter un script php qui va lancer le script python (réflexion à voix haute ... en passant avec Flask je dois pouvoir faire une solution 100% python)
Auteur:  nilujeperchut [ 13 Fév 2022 22:32 ]
Sujet du message:  Re: Pilotage de prise Meross - Ma solution

Et hop un script qui fonctionne avec un actionneur sur eedomus et ca passe crème.

edit : après quelques jours d'utilisations, et une petite config sur apache car Flask a ses limites, ca marche nickel

flask.py
Code : Tout sélectionner
from meross_iot.http_api import MerossHttpClient
from meross_iot.manager import MerossManager

from prise_meross import *

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello():
    return 'Hello, World!'


@app.route('/meross/on')
def merosson():
    try:
        prise_on = on()
        return '<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><SCRIPT><RETOUR>OK</RETOUR></SCRIPT>'
    except Exception as ex:
        return '<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><SCRIPT><RETOUR>' + str(ex)  +'</RETOUR></SCRIPT>'

@app.route('/meross/off')
def merossoff():
    try:
        prise_on = on()
        return '<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><SCRIPT><RETOUR>OK</RETOUR></SCRIPT>'
    except Exception as ex:
        return '<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><SCRIPT><RETOUR>' + str(ex)  +'</RETOUR></SCRIPT>'


if __name__ == '__main__':
    app.run(debug=True, host='192.168.1.90', port=1234)


Code : Tout sélectionner
import asyncio
import os

"https://github.com/albertogeniola/MerossIot"

from meross_iot.http_api import MerossHttpClient
from meross_iot.manager import MerossManager

EMAIL = os.environ.get('MEROSS_EMAIL') or "plop"
PASSWORD = os.environ.get('MEROSS_PASSWORD') or "plop"

prise_meross.py
class on():
    def __init__(self):
        if os.name == 'nt':
            asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
        # loop = asyncio.get_event_loop()
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        loop.run_until_complete(self.main())
        loop.close()

    async def main(self):
        # 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 MSS310 devices that are registered on this account
        await manager.async_device_discovery()
        plugs = manager.find_devices(device_type="mss425e")

        if len(plugs) < 1:
            print("No mss425e plugs found...")
        else:
            # Turn it on channel 0
            # Note that channel argument is optional for MSS310 as they only have one channel
            dev = plugs[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()

            print(f"Turning on {dev.name}...")
            await dev.async_turn_on(channel=0)
            # print("Waiting a bit before turing it off")
            # await asyncio.sleep(5)
            # print(f"Turing off {dev.name}")
            # await dev.async_turn_off(channel=0)

        # Close the manager and logout from http_api
        manager.close()
        await http_api_client.async_logout()

class off():
    def __init__(self):
        if os.name == 'nt':
            asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
        # loop = asyncio.get_event_loop()
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        loop.run_until_complete(self.main())
        loop.close()

    async def main(self):
        # 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 MSS310 devices that are registered on this account
        await manager.async_device_discovery()
        plugs = manager.find_devices(device_type="mss425e")

        if len(plugs) < 1:
            print("No mss425e plugs found...")
        else:
            # Turn it on channel 0
            # Note that channel argument is optional for MSS310 as they only have one channel
            dev = plugs[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()

            # print(f"Turning on {dev.name}...")
            # await dev.async_turn_on(channel=0)
            # print("Waiting a bit before turing it off")
            # await asyncio.sleep(5)
            print(f"Turing off {dev.name}")
            await dev.async_turn_off(channel=0)

        # Close the manager and logout from http_api
        manager.close()
        await http_api_client.async_logout()
Auteur:  jluc2808 [ 06 Juin 2022 07:02 ]
Sujet du message:  Re: [Résolu] Pilotage de prise Meross

bonjour @nilujeperchut, j'ai comme toi une prise meross que je voudrais ajouter
comment tu installes tes scripts sur NAS ?
tu ajoutes la partie github dans un répertoire web du NAS ?
tu installes tes 2 scripts ou ? avec quels noms ? l'adresse IP est à changer ? (laquelle celle de eedomus, du NAS, de la prise ?)
ensuite tu intègres la prise dans eedomus comment ?
merci de tes réponses et infos pour le faire
Auteur:  nilujeperchut [ 06 Juin 2022 09:00 ]
Sujet du message:  Re: [Résolu] Pilotage de prise Meross

Salut @jluc2808

Alors au final pour répondre à tes questions, j'ai mis les scripts sur un raspberry qui sont lancés via le framework Flask, ou j'ai créé deux routes (meross/on et meross/off)

J'ai rappatrié le repo github (1 script) sur le rpi aussi que j'ai adapté pour faire des classes (c'est plus joli). Il faut quand même le configurer avec les ID du compte Meross et le nom du periph.

Donc via eedomus (via un actionneur HTTP) j'appelle donc l'adresse ip du rpi et la route choisie.
http://adr.ip.du.rpi:1234/meross/on
http://adr.ip.du.rpi:1234/meross/on

Et derrière c'est le script python qui va instancier et appeler les classes à utiliser.

Au niveau eedomus ou même de meross, c'est tout ou rien. On ne peut dissocier les prises les unes des autres. Il n'y a que via HomeKit en les plaçant dans des pièces différences que l'on peut faire un appel sélectif (pilotable via Google Home ou Alexa).

Dans un moment de folie j'ai même trouvé un script pour lancer mon NAS en Wake on Lan (qui n'est pas allumé en permanence)
Auteur:  jluc2808 [ 06 Juin 2022 10:02 ]
Sujet du message:  Re: [Résolu] Pilotage de prise Meross

merci de ces explications
j'ai rapatrié le repo github (lastest version 0.4.4.6) dedans je trouve plein de truc, donc quand tu dis 1 script :roll: ?
je suppose que c'est dans le répertoire meross_iot/ mais là j'ai 3 directory et plein de .py donc je suis perdu.

j'ai un NAS synology avec un serveur web dispo, tu penses que c'est possible de lancer les script .py à partir de là ? (la encore je suis un peu perdu :lol: ) ça m'embête d'avoir à ajouter un RPI juste pour ça !

pour l'instant je n'ai qu'une prise à piloter donc c'est bon, par contre tu as le retour d'état si elle est démarrée/arrêtée par ailleurs ?
Page 1 sur 1 Le fuseau horaire est UTC+1 heure