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)
1 „Gefällt mir“

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,8 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,4 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.

Hey Herbert,
kannst Du mir evtl. helfen?
Ich habe alles installiert und sehe, wenn ich midea-discover eingebe die Anlage mit IP und allen möglichen Daten.
Ich nutze Linux (Debian Buster) und habe das IPS-Script in den gleichen Ordner kopiert und auch den Ordnerpfad in dem sendenundempfangen.php angepasst.
Leider kommen gar keine Daten rein.
Hast Du eine Idee zum Debuggen?

Ahja, Anlage ist von Dimstal…

Gruß,
Maeffjus

Hey Herbert,
ich habe die Scripte (PHP und Python) soweit geflickt bekommen, dass diese funktionieren.
Ich werde die Tage ein paar Details hier reinschreiben!

Kannst Du mir bitte sagen, was für eine „eigene Aktion“ bei den Variablen angegeben ist?
Doch nicht etwas das PHP-Script zum Senden und Empfangen, oder?
Das hat bei mir so garnicht funktioniert…

Gruß,
Maeffjus

Mit midea-msmart habe ich es auf dem Pi4 nicht hin bekommen.
Habe dann GitHub - nbogojevic/midea-beautiful-air: Python client for accessing Midea air conditioners and dehumidifiers (Midea, Comfee, Inventor EVO) via local network genommen, und ein Paar Skripte in IPS erstellt.
So kann ich das „Comfee Mobiles Klimagerät MPPF1-12CRN7 12.000 BTU“ auch über WLAN steuern und abfragen.
Abfrage Skript :

<?php

$ip=" --ip 10.10.0.174";
$token=" --token [token hier eintragen]";
$key=" --key [key hier eintragen]";
$test = "/usr/local/bin/midea-beautiful-air-cli status".$ip.$token.$key;
$out = exec($test , $output, $retval);
//echo "Rückgabe mit Status $retval und Ausgabe:\n";
//print_r($output);

$wert = (explode(" ",$output[8]));
//var_dump($wert);
SetValueboolean(23125,($wert[4]));

$wert = (explode("=",$output[10]));
//var_dump($wert);
SetValuefloat(44462,floatval($wert[1]) );

$wert = (explode("=",$output[9]));
//var_dump($wert);
SetValuefloat(36941,floatval($wert[1]) );

$wert = (explode("=",$output[13]));
//var_dump($wert);
SetValue(45579,$wert[1] );
1 „Gefällt mir“

Hallo,

ich blicke hier grad nicht ganz durch.
Benötige ich einen PC wo IPS drauf läuft oder ist das nur zum auslesen der ID? (weil ein Windows Pfad angegeben ist)
Mein IPS läuft auf einer Himbeere.

Ich würde sehr gern meine Dimstal Klimaanlagen steuern und auslesen, um den PV Strom besser zu verwerten.
Die APP ist ja schon nicht schlecht aber mit ALEXA oder Google wollte ich die Klima nicht verbinden und über IFTTT kann ich sie im Moment nur ein und ausschalten über IPS, das reicht aber nicht.

Es wäre echt klasse wenn das funktioniert, weil ich hier mehrere der Geräte habe.
vllt kann mir jemand Starthilfe geben.

Hallo Tom,

könntest du mir kurz erklären was ich mit dem GitHub Link anstellen muss?
auf einen PC installieren? (extra Pyton installieren?)
Auf meinen Lappi, welcher im gleichen Netz wie die Klima ist?
auf den RPi IPS? (welcher nicht im gleichen Subnet ist, das Netz der Klima aber erreichen kann)

Ich finde hier leider keinen Start…

grüße

Hatte das auf einen Raspberry am laufen. Muss das aber auch wieder neu einrichten, da Raspberry gewechselt wurde.

ein extra Raspberry? oder wo IPS drauf läuft?
wenn extra, dann muss der bleiben oder kommuniziert IPS dann direkt mit der Klima?

Da lief IPS auch drauf.

ok, warum muss du das neu verbinden?
Ich dachte wenn der API Key und das Passwort einmal klar sind, dann kann man immer mit der Klima direkt sprechen?

Kann ich dir auch nicht mehr sagen, ist zu lange her. Im Moment ist die Klima eingemottet. Kommt erst wieder im Sommer raus, dann werde ich weiter probieren.

oh schade, dann muss ich schauen ob ich eine Lösung finde oder ich warte, bis du es nochmal geschafft hast.

Hab gerade mal nachgesehen, das hatt ich auf dem Pi gemacht, nachdem ich das dort abgelegt hatte :

cd midea
pip install --upgrade midea-beautiful-air
apt install python-pip
apt install python3-pip
pip install --upgrade midea-beautiful-air

und dann getestet mit :
midea-beautiful-air-cli status --ip 10.10.0.174 --token [hier der token]–key [hier der key]

ok, danke, vllt. hilft mir das etwas um weiterzukommen.