Midea Comfee Klimaanlage über Fhem ?!

Begonnen von Aladin222, 11 November 2016, 11:36:07

Vorheriges Thema - Nächstes Thema

rabbit83

Zitat von: wick1 am 23 Januar 2023, 21:36:17
... keiner mehr eine Idee, woran es bei mir liegen kann?
Eine Idee habe ich leider nicht, kann das Verhalten aber bestätigen.

Johannes B.

Hallo,
ich bekomme jedes mal wenn ich die Klima schalten oder den Status abfragen möchte diese Fehlermeldung:

Traceback (most recent call last):
  File "/opt/midea-msmart/setAC.py", line 6, in <module>
    from msmart.device import air_conditioning as ac
  File "/opt/midea-msmart/msmart/device/__init__.py", line 4, in <module>
    from .AC.appliance import air_conditioning
  File "/opt/midea-msmart/msmart/device/AC/appliance.py", line 7, in <module>
    from msmart.device.base import device
  File "/opt/midea-msmart/msmart/device/base.py", line 3, in <module>
    from msmart.lan import lan
  File "/opt/midea-msmart/msmart/lan.py", line 6, in <module>
    from msmart.security import security
  File "/opt/midea-msmart/msmart/security.py", line 5, in <module>
    from Crypto.Util.Padding import pad, unpad
ModuleNotFoundError: No module named 'Crypto.Util.Padding'

Ich hoffe irgendjemand kann mir da weiterhelfen.

Johannes B.

JudgeDredd

Zitat von: Johannes B. am 09 Juli 2023, 15:25:12Ich hoffe irgendjemand kann mir da weiterhelfen.
Ich denke mal, da fehlt Dir ein python-modul.

Ist denn die Sowftware von mac-zhou richtig installiert ?
Was bekommst Du mit
pip3 show msmart
Bekommst Du eine Rückmeldung von der AC wenn Du das Script ausführst ?
<IP>, <ID> noch anpassen
und bei Protokoll V3:
<YOUR_AC_K1>, <YOUR_AC_TOKEN> auch noch anpassen und auskommentieren.

#!/usr/bin/env python3
#Version 1.2 -- for msmart 0.2.5

from msmart.device import air_conditioning as ac
from msmart.device.base import device
import logging
import time
logging.basicConfig(level=logging.DEBUG)

# first take device's ip and id, port is generally 6444
device = ac('<IP>', int('<ID>'), 6444)
# If the device is using protocol 3 (aka 8370)
# you must authenticate with device's k1 and token.

#device.authenticate('<YOUR_AC_K1>', '<YOUR_AC_TOKEN>')

device.get_capabilities()
device.refresh()
print({
    'id': device.id,
    'name': device.ip,
    'power_state': device.power_state,
    'prompt_tone': device.prompt_tone,
    'target_temperature': device.target_temperature,
    'operational_mode': device.operational_mode,
    'fan_speed': device.fan_speed,
    'swing_mode': device.swing_mode,
    'eco_mode': device.eco_mode,
    'turbo_mode': device.turbo_mode,
    'fahrenheit': device.fahrenheit,
    'indoor_temperature': device.indoor_temperature,
    'outdoor_temperature': device.outdoor_temperature
})
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

JudgeDredd

Zitat von: Johannes B. am 24 Juli 2023, 20:16:41Requires: click, ifaddr, pycryptodome, requests
und die benötigten Module sind auch alle installiert ?

pip3 show click ifaddr pycryptodome requests
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

Johannes B.

Die vorherige Fehlermeldung konnte ich schonmal beheben. Allerdings habe ich jetzt eine neue im LogFile drin stehen.
2023.07.24 20:36:47 3: Klimaanlage_Flur Parameter BlockingCall: Klimaanlage_Flur|/opt/midea-msmart/setAC.py|state -H 192.168.3.49 -I 15********* -K bab3*********** -T 7A5*******************************************
Traceback (most recent call last):
  File "/opt/midea-msmart/setAC.py", line 112, in <module>
    print( main() )
  File "/opt/midea-msmart/setAC.py", line 49, in main
    device.authenticate( args.key[0], args.token[0] )
  File "/opt/midea-msmart/msmart/device/base.py", line 40, in authenticate
    return self._authenticate()
  File "/opt/midea-msmart/msmart/device/base.py", line 44, in _authenticate
    return self._lan_service.authenticate(self._token, self._key)
  File "/opt/midea-msmart/msmart/lan.py", line 113, in authenticate
    tcp_key, success = self.security.tcp_key(response, self._key)
  File "/opt/midea-msmart/msmart/security.py", line 112, in tcp_key
    self._tcp_key = strxor(plain, key)
TypeError: argument 2 must be bytes, not bytearray

JudgeDredd

Was passiert denn, wenn Du das Script direkt auf der Konsole aufrufst (natürlich mit vollständigem ID/KEY/TOKEN)?
/opt/midea-msmart/setAC.py state -H 192.168.3.49 -I 15********* -K bab3*********** -T 7A5*******************************************
Was mir allerdings noch auffällt:
Haben ID / KEY / TOKEN exakt die länge die du inkl. "*" angegeben hast ?
Aktuell habe ich leider keinen V3-Stick zur verügung, aber ich meine das vorallem KEY und TOKEN wesentlich länger waren als bei Dir.
Hast Du die mit "midea-discover" ermittelt ?
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

Johannes B.

Fehler gefunden !
Aus irgendeinem Grund wollte er Crypt nicht haben, aber mit pycryptodome funktionierts.
Die Anzahl der Sternchen habe ich beliebig gewählt.

Danke für deine Mühe und schönen Abend noch.

Johannes B.

Wastegate

Zitat von: Johannes B. am 24 Juli 2023, 21:19:25Fehler gefunden !
Aus irgendeinem Grund wollte er Crypt nicht haben, aber mit pycryptodome funktionierts.
Die Anzahl der Sternchen habe ich beliebig gewählt.

Danke für deine Mühe und schönen Abend noch.

Johannes B.

Perfekt, danke für die Lösung

cotecmania

Hallo,

habe seit kurzem in meinem Log immer folgende Fehlermeldung von meiner Klimaanlage :

Sokcet is None: 192.168.1.203:6444
unexpected data length
Authentication failed for None -> 192.168.1.203:6444 retries: 0 time: 2.0

Jemand 'ne idee ?

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

rabbit83


JudgeDredd

Da ich die Klimaanlage aufgrund der zur Zeit gemäßigten Temperaturen nicht nutze, habe ich mal eben bei mir getestet. Da funktioniert allerdings die Steuerung noch so wie immer.

Habt ihr irgendwas geupdated ? (z.B. Debian bookworm, Python, Firewall, etc ...)

Was zeigen denn die Debugausgaben ?
#!/usr/bin/env python3

from msmart.device import air_conditioning as ac
from msmart.device.base import device
import logging
import time
logging.basicConfig(level=logging.DEBUG)

#für V2 & V3:
device = ac('YOUR_AC_IP', int('YOUR_AC_ID'), 6444)

#für V3:
#device.authenticate('YOUR_AC_K1', 'YOUR_AC_TOKEN')

device.get_capabilities()
device.refresh()
print({
    'id': device.id,
    'name': device.ip,
    'power_state': device.power_state,
    'prompt_tone': device.prompt_tone,
    'target_temperature': device.target_temperature,
    'operational_mode': device.operational_mode,
    'fan_speed': device.fan_speed,
    'swing_mode': device.swing_mode,
    'eco_mode': device.eco_mode,
    'turbo_mode': device.turbo_mode,
    'fahrenheit': device.fahrenheit,
    'indoor_temperature': device.indoor_temperature,
    'outdoor_temperature': device.outdoor_temperature
})

Wenn es tatsächlich Änderungen bei Midea-msmart gab, dann werden wir wohl warten müssen, bis der Author des Pythonscripts sich der Probleme annimmt.
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

normen

Hey,

da ich einige Probleme mit dem msmart Projekt hatte bin ich im Netz ein wenig auf die Suche gegangen und habe das hier gefunden: https://github.com/ashevchuk/midea-ac

Eine komplett in Perl implementierte Lösung um mit Midea Geräten zu kommunizieren. Vielleicht passt die besser in FHEM? Der Autor lebt allerdings in der Ukraine und hat seit 2020 nichts mehr gepostet  :-\

Ich habe momentan meine Midea Entfeuchter direkt über HomeBridge eingebunden, da gibt es ein neues homebridge-midea-platform plugin (nutze FHEM als "Backend" für HB). Trotzdem fand ich diese Lösung auch sehr interessant, vielleicht Hilft der Link ja irgendwem irgendwann, dache ich melde das mal.

Vielen Dank an alle für all die Infos, Plugins etc!

JudgeDredd

Hallo Normen,
Zitat von: normen am 27 Dezember 2023, 18:33:11da ich einige Probleme mit dem msmart Projekt hatte
Welche auch immer das waren, bei mir läuft es mit dem python-script schon recht zuverlässig.
Zitat von: normen am 27 Dezember 2023, 18:33:11Eine komplett in Perl implementierte Lösung um mit Midea Geräten zu kommunizieren.
Die Perl-Version hätte natürlich schon den Vorteil, das man es nativ aus FHEM steuern könnte.
Zitat von: normen am 27 Dezember 2023, 18:33:11Der Autor ... hat seit 2020 nichts mehr gepostet
Naja, die letzte Anpassung vom Python-Kollege (mac-zhou) ist ja auch schon > 1 Jahr

Ich habe das bei mir mal auf die schnelle getestet. Hat zwar funktioniert, aber der Reply vom Gerät dauert relativ lange.
Zitat von: normen am 27 Dezember 2023, 18:33:11vielleicht Hilft der Link ja irgendwem irgendwann, dache ich melde das mal
Dafür schonmal vielen Dank. Mal schauen, ob ich das (oder Jemand Anderes) mal umsetze.

Bei Midea gibt es ja (stand heute) mit V2 und V3, zwei Protokollversionen. Ob es mit der V3 auch funktioniert, müsste mal Jemand mit entsprechendem WiFi-Stick versuchen.

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

Wastegate

Guten Abend,

ich habe seit Juni eine Dimstal AC mit dem Midea Modul laufen. Der Stick hat schon die V3.
Auch da dauert das Reply vom Gerät relativ lange, funktioniert aber sehr gut.

Vielen Dank für das Modul und deine Arbeit.

joklemm

Hallo,

ich bin Anfänger und habe versucht, das zum Laufen zu bringen. Nachdem ich jetzt alles was ich so gefunden habe aktualisiert habe, komme ich momentan hier nicht weiter: Wenn ich midea-discover ausführe, kommt immer

pi@raspberrypi:/opt $ midea-discover -i 192.168.0.39
INFO:msmart.cli:msmart version: 0.2.5 Currently only supports ac devices, only support MSmartHome and 美的美居 APP.
INFO:msmart.cloud:Using Midea cloud server: https://mp-prod.appsmb.com/mas/v5/app/proxy?alias= False
Traceback (most recent call last):
  File "/home/pi/.local/bin/midea-discover", line 8, in <module>
    sys.exit(discover())
  File "/usr/lib/python3/dist-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/cli.py", line 51, in discover
    found_devices = loop.run_until_complete(discovery.get_all() if ip == '' else discovery.get(ip))
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/scanner.py", line 205, in get
    await self._process_tasks([task])
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/scanner.py", line 199, in _process_tasks
    [self.result.add(task.result()) for task in tasks]
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/scanner.py", line 199, in <listcomp>
    [self.result.add(task.result()) for task in tasks]
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/scanner.py", line 50, in support_test
    _device = await self.support_testv3(account, password)
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/scanner.py", line 65, in support_testv3
    token, key = await loop.run_in_executor(None, gettoken, udpid, account, password)
  File "/usr/lib/python3.7/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/scanner.py", line 255, in gettoken
    Client.login()
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/cloud.py", line 143, in login
    self.get_login_id()
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/cloud.py", line 134, in get_login_id
    {'loginAccount': self.login_account}
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/cloud.py", line 121, in api_request
    return self.api_request(endpoint, args)
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/cloud.py", line 121, in api_request
    return self.api_request(endpoint, args)
  File "/home/pi/.local/lib/python3.7/site-packages/msmart/cloud.py", line 123, in api_request
    raise RecursionError()
RecursionError

Ich habe ein neues Gerät - ich hoffe mal dass das nicht eine neue Version ist, die jetzt nicht mehr unterstützt wird?