Lösung: Klimaanlage MIDEA / Dimstal über WLAN steuern (nicht über Cloud)

Hallo IPSler,

nachdem ich mir eine MIDEA-Klimaanlage gegönnt habe, musste diese natürlich auch ins IPS :wink: Falls jemand überlegt welchen Hersteller … hilft vielleicht meine Lösung etwas :rolleyes:

Aktuell werden die Klimaanlagen mit einem WLAN-Stick (SMART Kit für Mission Serie) ausgeliefert. Original kann man darüber mit der Handy-App die Geräte steuern.
Dank der tollen Arbeit von mac-zhou (midea-msmart) kann aber auch auf die Geräte über das lokale LAN/WLAN zugegriffen werden (ohne Cloud!)

Funktionen:

[ol]
[li]Power (True=Ein False=Aus)[/li][li]Modus (auto = 1 cool = 2 dry = 3 heat = 4 fan_only = 5)[/li][li]Fan (Auto = 100 High = 80 Medium = 60 Low = 40 Silent = 20)[/li][li]Swing (0=Off 1=Vertical 2=Horizontal 3=Both)[/li][li]Ton (True=Ein False=Aus) bei True piept das Raumgerät kurz[/li][li]Eco (True=Ein False=Aus)[/li][li]Turbo (True=Ein False=Aus)[/li][li]Solltemperatur setzen[/li][li]Raumtemperatur auslesen[/li][li]Aussentemperatur auslesen[/li][/ol]

Voraussetzungen:

[ol]
[li]Installiertes Python (https://www.python.org/downloads/)[/li][li]IP-Adresse des jeweiligen Wandgeräts[/li][li]ID des jeweiligen Wandgeräts (hierzu folgende Hinweise: Die ID habe ich über das iobroker-Modul ermittelt (GitHub - TA2k/ioBroker.midea: ioBroker Adapter for midea devices), alternativ könnte sie auch über GitHub - mac-zhou/midea-ac-py: This is a custom component for Home Assistant to integrate the Midea Air Conditioners via the Local area network. ermittelt werden (die 2.Variante habe ich nicht getestet). Allerdings ist es bei mir so, dass ich die korrekte ID nicht benötige (warum auch immer) – es reicht eine Ziffernfolge in der richtigen Länge. Ich sende z.B als ID.: 12345678901234. Faktisch reicht zur Steuerung die Kenntnis der IP-Adresse.:eek::D[/li][/ol]

Installation

[LIST=1|INDENT=1]
[li]Verzeichnis anlegen z.B. C:\ProgramData\Symcon\Midea[/li][li]In diesem [/li]```
git clone https://github.com/mac-zhou/midea-msmart.git

 (Anleitung lesen auf der [Webseite](http://github.com/mac-zhou/midea-msmart.git))
[li]in Konsole danach: pip3 install msmart[/li][li]In das Unterverzeichnis midea-msmart wechseln und dahin die Datei [i]symcon.py[/i] aus Anhang speichern (und umbenennen [i]symcon.py.txt [/i][i]symcon.py (ins Forum kein Upload von .php und .py möglich [/i]:banghead:)[/li][li]In IPS z.B. ein Dummy-Modul anlegen und darunter die benötigten Variablen (siehe Snapshot ips-1.jpg) und ein Script mit dem Inhalt aus (Anhang: [i]SendenUndEmpfangen.ips.php.txt[/i]) anlegen[/li][/LIST]

[b]Betrieb[/b]Dieses Script über einen Timer (z.B. 5 Minuten) zyklisch aufrufen – es werden dann die Werte geholt. Wird das Script anders aufgerufen (z.B. Execute, Webfront..) werden auch die Werte aus IPS als Befehle gesandt.

Schönen -kühlen ;) - Sonntag noch
Ciao
HerbertF

![ips_1.JPG|939x400](upload://4jhydoKkke1txmJeNnPe8xGDexX.jpeg)



![ips_2.JPG|858x432](upload://dHS1Qngc1EPHKgNS3IHtosqVIkH.jpeg)



[SendenUndEmpfangen.ips.php.txt|attachment](upload://AsWkAakoqSWdn7O6hUnWNmZkZbW.txt) (10.9 KB)



[symcon.py.txt|attachment](upload://hctQiyN2XXp6sxLxrwYCwg2EAit.txt) (8.61 KB)

Beitrag überarbeitet wegen Forenwechsel :slightly_smiling_face: :upside_down_face:

Hallo IPSler,

nachdem ich mir eine MIDEA-Klimaanlage gegönnt habe, musste diese natürlich auch ins IPS Falls jemand überlegt welchen Hersteller … hilft vielleicht meine Lösung etwas :sunglasses:

Aktuell werden die Klimaanlagen mit einem WLAN-Stick (SMART Kit für Mission Serie) ausgeliefert. Original kann man darüber mit der Handy-App die Geräte steuern.
Dank der tollen Arbeit von mac-zhou (midea-msmart) kann aber auch auf die Geräte über das lokale LAN/WLAN zugegriffen werden (ohne Cloud!)

Funktionen:

  1. Power (True=Ein False=Aus)
  2. Modus (auto = 1 cool = 2 dry = 3 heat = 4 fan_only = 5)
  3. Fan (Auto = 100 High = 80 Medium = 60 Low = 40 Silent = 20)
  4. Swing (0=Off 1=Vertical 2=Horizontal 3=Both)
  5. Ton (True=Ein False=Aus) bei True piept das Raumgerät kurz
  6. Eco (True=Ein False=Aus)
  7. Turbo (True=Ein False=Aus)
  8. Solltemperatur setzen
  9. Raumtemperatur auslesen
  10. Aussentemperatur auslesen

Voraussetzungen:

  1. Installiertes Python (Download Python | Python.org)
  2. IP-Adresse des jeweiligen Wandgeräts
  3. ID des jeweiligen Wandgeräts (hierzu folgende Hinweise: Die ID habe ich über das iobroker-Modul ermittelt (GitHub - TA2k/ioBroker.midea: ioBroker Adapter for midea devices), alternativ könnte sie auch über GitHub - mac-zhou/midea-ac-py: This is a custom component for Home Assistant to integrate the Midea Air Conditioners via the Local area network. ermittelt werden (die 2.Variante habe ich nicht getestet). Allerdings ist es bei mir so, dass ich die korrekte ID nicht benötige (warum auch immer) – es reicht eine Ziffernfolge in der richtigen Länge. Ich sende z.B als ID.: 12345678901234. Faktisch reicht zur Steuerung die Kenntnis der IP-Adresse. :heart_eyes:

Installation

  1. Verzeichnis anlegen z.B. C:\ProgramData\Symcon\Midea
  2. In diesem: git clone GitHub - mac-zhou/midea-msmart: This is a library to allow communicating to a Midea AC via the Local area network.
    (Anleitung lesen auf der Webseite)
  3. in Konsole danach: pip3 install msmart
  4. In das Unterverzeichnis midea-msmart wechseln und dahin die Datei
    symcon.py.txt (8,6 KB) aus Anhang speichern (und umbenennen symcon.py.txt symcon.py (ins Forum kein Upload von .php und .py möglich :banghead:)
    In IPS z.B. ein Dummy-Modul anlegen und darunter die benötigten Variablen (siehe Snapshot

    ) und ein Script mit dem Inhalt aus (Anhang: SendenUndEmpfangen.ips.php.txt (12,1 KB)) anlegen.

Betrieb
Dieses Script über einen Timer (z.B. 5 Minuten) zyklisch aufrufen – es werden dann die Werte geholt. Wird das Script anders aufgerufen (z.B. Execute, Webfront…) werden auch die Werte aus IPS als Befehle gesandt.

Schönen -kühlen :wink: - Sonntag noch

Ciao

HerbertF

Hallo Herbert,
vielen Dank für die Mühe, die Du hier investiert hast. Ich habe habe mir die Codeschnippsel in meinem IPS 6.0 eingefügt und Deiner Anleitung nach die Variablen angelegt.
Wenn ich in der Eingabeaufforderung midea-discover eingebe, wird mein Klimagerät (übrigens eine Vivax, die die gleiche Steuerung wie Midea nutzt) auch als unterstütztes Gerät gefunden, die korrekte IP ausgegeben und auch die ID wird angezeigt.

Im PHP-Skript wurde von Dir die Abfrage für einen zusätzlichen Schalter hinzugefügt, sowie zu einem Fensterstatus. Dies hatte ich zunächst mal auskommentiert. Als dies nicht funktionierte, habe ich dann auch mit fix hinterlegten Werten die Variablen (Hauptschalter und FensterID) angelegt und Dein Skript, bis auf die Anpassung bezüglich des Pfades zur symcon.py original belassen.

Es werden jedoch keine Werte ausgelesen.
Debug habe ich auf „true“ gesetzt.
Die Scriptengine gibt folgendes aus:

28.12.2021, 21:41:27 | ScriptEngine         | Result for Event 15567
F:\IPSdata\midea\midea-msmart\symcon.py
Vivax Solltemp=15
Aufruf über TimerEvent oder Scriptimer sende KEINE Befehle an Midea - lese Werte aus
F:\IPSdata\midea\midea-msmart\symcon.py 192.168.181.68 281115211133817 False 1 False 15 40 0 False False False
Array
(
    [0] => Funktionsname: F:\IPSdata\midea\midea-msmart\symcon.py
    [1] => IP Adresse= 192.168.181.68
    [2] => ID= 281115211133817
    [3] => Power= False
    [4] => Modus= 1
    [5] => Tone= False
    [6] => Solltemp= 15.0
    [7] => Fan= 40
    [8] => Swing= 0
    [9] => Eco= False
    [10] => Turbo= False
    [11] => IPSMaster= False
)
Raumtemp ungültig= - vermutlich alle Werte ungültig - ignoriere alle - vermutlich auch Befehle erfolglos

Ich verstehe hier übrigens den Wert, bzw die Variable IPSMaster nicht, vermute aber dass es hiermit zu tun hat.
Wird damit abgefragt, ob das Klimagerät mit der Cloud verbunden ist und deshalb kann das Gerät nicht mit IPS direkt kommunizieren?

Wenn Du mal ein paar Minuten über hast, würde ich mich über einen Tipp sehr freuen.
Gruß
Dirk

Hi Dirk,

hast Du denn die Anleitung genau befolgt und läuft das Python-Script?

Wichtig ist: ``C:\ProgramData\Symcon\midea\midea-msmart\symcon.py 192.168.4.150 12345678901234 False 1 False 19 102 1 False False True" der Befehl (siehe unten). Diesen kannst Du auch in einem cmd-Fenster direkt ausführen - dies ergibt dann den Snapshot im Anhang.

Wenn ich das „Senden und Empfangen“ Script per Execute ausführe erhalte ich:

C:\ProgramData\Symcon\\midea\midea-msmart\symcon.py
Klima Schlafzimmer Solltemp=19
Aufruf nicht über TimerEvent sondern von Execute sende Befehle an Midea - lese keine Werte
C:\ProgramData\Symcon\\midea\midea-msmart\symcon.py 192.168.4.150 12345678901234 False 1 False 19 102 1 False False True
Array
(
    [0] => Funktionsname: C:\ProgramData\Symcon\midea\midea-msmart\symcon.py
    [1] => IP Adresse= 192.168.4.150
    [2] => ID= 12345678901234
    [3] => Power= False
    [4] => Modus= 1
    [5] => Tone= False
    [6] => Solltemp= 19.0
    [7] => Fan= 102
    [8] => Swing= 1
    [9] => Eco= False
    [10] => Turbo= False
    [11] => IPSMaster= True
    [12] => fan_speed gefunden: 102
    [13] => OperationMode gefunden: 1
    [14] => SwingMode gefunden: 1
    [15] => {'id': 'f22fce733a0b', 'ipaddr': '192.168.4.150', 'power_state': False, 'prompt_tone': False, 'target_temperature': 17.0, 'operational_mode': 1, 'fan_speed': 102, 'swing_mode': 1, 'eco_mode': False, 'turbo_mode': False, 'indoor_temperature': 14.9, 'outdoor_temperature': 16.0}
    [16] => Solltemp ändern= 19.0
    [17] => Solltemp Änderung nicht sinnvoll da Klimagerät aus ist
    [18] => Keine notwendigen Befehle erkannt
    [19] => Befehlsverarbeitung durchlaufen
)
Keine Panik - Werte werden aus Midea per ScriptTimer in 30 Sekunden geholt - siehe IPS Meldungsfenster

Wenig später lese ich dann die Werte ein (Meldungsfenster):

30.12.2021, 13:59:36 | ScriptEngine         | Result for Event 59384
C:\ProgramData\Symcon\\midea\midea-msmart\symcon.py
Klima Schlafzimmer Solltemp=19
Aufruf über TimerEvent oder Scriptimer sende KEINE Befehle an Midea - lese Werte aus
C:\ProgramData\Symcon\\midea\midea-msmart\symcon.py 192.168.4.150 12345678901234 False 1 False 19 102 1 False False False
Array
(
    [0] => Funktionsname: C:\ProgramData\Symcon\midea\midea-msmart\symcon.py
    [1] => IP Adresse= 192.168.4.150
    [2] => ID= 12345678901234
    [3] => Power= False
    [4] => Modus= 1
    [5] => Tone= False
    [6] => Solltemp= 19.0
    [7] => Fan= 102
    [8] => Swing= 1
    [9] => Eco= False
    [10] => Turbo= False
    [11] => IPSMaster= False
    [12] => fan_speed gefunden: 102
    [13] => OperationMode gefunden: 1
    [14] => SwingMode gefunden: 1
    [15] => {'id': 'f22fce733a0b', 'ipaddr': '192.168.4.150', 'power_state': False, 'prompt_tone': False, 'target_temperature': 17.0, 'operational_mode': 1, 'fan_speed': 102, 'swing_mode': 1, 'eco_mode': False, 'turbo_mode': False, 'indoor_temperature': 14.9, 'outdoor_temperature': 16.0}
    [16] => IPS Master nicht aktiv - keine Befehlsverarbeitung
)
Raumtemp=14.9	Aussentemp=16.0
Power=False	Solltemp nicht ausgelesen da Gerät aus
Modus=1	Fan=100	Swing=1	Eco=False	Turbo=False	

Ciao HerbertF - und guten Rutsch !

Vielen Dank für Deine umfangreiche Hilfestellung.
Wenn ich die Abfrage in der Konsole durchführe erhalte ich die Meldung, dass das msmart Modul nicht gefunden werden kann:

 from msmart.device import device as midea_device
ModuleNotFoundError: No module named 'msmart'

Das Moduls ist aber installiert:

Package            Version
------------------ ---------
certifi            2021.10.8
charset-normalizer 2.0.9
click              8.0.3
colorama           0.4.4
idna               3.3
ifaddr             0.1.7
msmart             0.1.35
pip                21.3.1
pycryptodome       3.12.0
pycryptodomex      3.12.0
requests           2.26.0
setuptools         47.1.0
urllib3            1.26.7

C:\Users\egal>pip3 check msmart
No broken requirements found.

C:\Users\.egal>pip3 show msmart
Name: msmart
Version: 0.1.35
Summary: A library to control Midea appliances via the Local area network
Home-page: https://github.com/mac-zhou/midea-msmart
Author: mac_zhou
Author-email: mac.zfl@gmail.com
License: MIT
Location: c:\python38\lib\site-packages
Requires: click, ifaddr, pycryptodome, pycryptodomex, requests
Required-by:```

Moin,

dies ist sicher der Fehler. Am besten gehst Du die Anleitung von mac-zhou nochmals durch. Seine Lösung muss halt laufen, sonst können meine Scripte nicht funktionieren.

Ciao
HerbertF

Die 2 Schritte die dort beschrieben sind, habe ich durchgeführt und die funktionieren auch.
Ich hake das ab.
Trotzdem nochmals vielen Dank für Deine Hilfe.