Xiaomi WiFi Devices Modul (Vacuum/Airpurifier/Fan) - 72_XiaomiDevice (Support)

Begonnen von Markus M., 11 Juni 2017, 12:48:58

Vorheriges Thema - Nächstes Thema

t1me2die

Zitat von: Markus M. am 24 Oktober 2020, 23:14:47
Hmm, ich bin gerade etwas ratlos - zumindest falls das hier jetzt auch nicht funktionieren sollte

Moin Markus, funktioniert!
Habe jetzt noch einmal die Funktionen und die Readings durchgetestet.
Funktioniert einwandfrei!

Danke und einen schönen Sonntag  :)

Gruß
Mathze

PS.: Viel mehr Xiaomi (Mijia) Ventilatoren gibt es aktuell nicht auf dem Markt  ::)

neyzen

Hi,
ich hab mein s6 maxV mit dem Modul verbunden. Allerdings würde ich gerne die Roborock App benutzen anstatt der mi home App. Wenn ich allerdings die Roborock App nutze muss ich den Staubsauger wieder neu verbinden,dann geht eben mein Token flöten. Gibt es eine Möglichkeit die Roborock App zu nutzen und gleichzeitig aber auch mit Fhem verbunden?

Markus M.

Vermutlich erzeugt die Roborock App ebenfalls einen Token?
Läuft das dann auch über eine Cloudverbindung?
Wenn du Root hast, probier doch mal das Auslesen über die Datenbank auf dem Telefon.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

dominik

Tokens kannst du ganz einfach über deinen Mi Account auslesen:
fhem_pythonbinding installieren: https://github.com/dominikkarall/fhem_pythonbinding
Device erstellen: https://github.com/dominikkarall/fhem_pythonbinding/blob/master/FHEM/bindings/python/lib/xiaomi_tokens/README.md

und schon hast du alle Tokens in deinen FHEM Readings. Somit ist auch ein WLAN Wechsel kein Problem mehr, weil du da schnell die Tokens wieder beziehen kannst.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

neyzen

oo das klingt interessant,aber da werde ich wohl etwas Hilfe brauchen. Aber der erste Schritt wäre das ich erst einmal den Fhem python bindung von dir installiere und das dan in Fhem einbinde.
Aber ich kann mich in der Roborock App nicht mit meinem Mi account anmelden. Da musste ich mir ein neues Account erstellen. Da weis ich nicht ob dein Modul hier helfen würde. So wie ich das verstehe ist die Roborock App unabhängig von der mi home App

dominik

Ah, du verwendest die Roborock App, sorry, das hatte ich überlesen. In dem Fall hilft es dir wahrscheinlich nicht.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

neyzen

Ja genau. mit der mi home App funktioniert Fhem auch. Allerdings gibt es bei der Roborock App ein paar coole featers die es in der mi home App nicht gibt. Vieleicht kommt das noch,aber Roborock wird auch schneller mit updates gefüttert. Aber wie Markus schon sagte,irgend ein Token wird es ja geben,nur wie kommt man dran. Ich hab leider kein root handy. :-\

neyzen

kann es sein,dass die Flole App nicht mehr funktioniert? ich kann mich mit meinem mi account nicht in der app anmelden. Alternativ wäre es manuel einzurichten,aber da brauch ich DID Nummer,vermutlich die Device ID,wie bekomme ich die herraus?

Markus M.

Kurzes Update zu unseren Tests mit dem S6:
Die Nutzung von FHEM in Kombination mit der Roborock App scheint leider nicht möglich zu sein.

In der App Kommunikation findet sich zwar ein localKey, der Staubsauger reagiert aber nicht auf die lokale MiIO Kommunikation, wenn er nicht mit MiHome verbunden ist :(
Auch die Cloud Kommunikation der Roborock App zur Steuerung läuft nicht über HTTPS oder irgendwas, was ich im Proxy sehen kann.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

neyzen

Hi,
laut der Gebrauchsanleitung meines Saugroboter ist ein Reinigungsmittel nicht empfohlen. Allerdings gibt es im Internet Spezial Reiniger für Sauroboter. Hat jemand Erfahrung mit Haushaltsüblichen Reinigungsmittel. Oder sind diese Spezialreiniger Unsinn?

Tedious

Ich nehme ganz normalen Bodenreiniger. Seit Jahren mit dem S50, null Probleme.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

holsteiner-kiel

@Markus M

Ich verzweifel da auch schon länger dran leider. Es scheint mit der roborock App keinen Weg zu geben :(

neturmel

Hallo

ich habe mich die letzten zwei Tage noch mal ein bisschen mit meinem Xiaomi Mjija G1 (mijia.vacuum.v2) beschäftigt und kann ihn momentan per python-miio mit einem, aus dem Modul für den dreame.vacuum abgeleiteten Modul steuern und Stati auslesen.


miiocli  g1vacuum --ip ip --token token status
Running command status
G1Status(battery=68, chargestatus=1, error=0, status=5, mopstate=0, waterlevel=2, vacuummode=1, filter_life_level=70, brush_life_level=85, brush_life_level2=69, clean_area=6, clean_time=1, fanlevel=1, direction_key=None, total_clean_count=36, total_clean_area=137639, dnd_enabled=False)


D.h. also, dass der Staubsauger auch ein MIOT Gerät ist wie z.B diverse Ventilatoren und nur mal wieder ganz andere Mappings hat.

Was bei mir noch nicht funktioniert, ist das setzen des fan_levels und der Wassermenge beim Wischen. Schön wäre auch noch ein manuelles Fahren, was eigentlich auch möglich sein müsste (das aber nur am Rande)

Leider bin ich weder Perl-Experte, noch kenne ich mich im Detail mit FHEM-Plugins aus, aber vielleicht helfen ja diese Pseudomappings, die meine Quelle für die Umsetzung waren, irgendwem weiter (Ich teste auch gerne ;) )



get_commands = {
1:'{"method":"get_properties","params":[{"siid":2,"piid":1}]}', #command_get_status
2:'{"method":"get_properties","params":[{"siid":2,"piid":2}]}', #command_get_error
3:'{"method":"get_properties","params":[{"siid":2,"piid":4}]}', #command_get_mode
4:'{"method":"get_properties","params":[{"siid":2,"piid":5}]}', #command_get_water_mode
5:'{"method":"get_properties","params":[{"siid":2,"piid":6}]}', #command_get_fan_mode
6:'{"method":"get_properties","params":[{"siid":3,"piid":2}]}', #command_get_charge_state
7:'{"method":"get_properties","params":[{"siid":16,"piid":1}]}', #command_get_mop_status
8:'{"method":"get_properties","params":[{"siid":3,"piid":1}]}', #command_get_battery_level
9:'{"method":"get_properties","params":[{"siid":14,"piid":1}]}', #command_get_main_brush_life_level_percent
10:'{"method":"get_properties","params":[{"siid":14,"piid":2}]}', #command_get_main_brush_life_level_minutes
11:'{"method":"get_properties","params":[{"siid":15,"piid":1}]}', #command_get_side_brush_life_level_percent
12:'{"method":"get_properties","params":[{"siid":15,"piid":2}]}', #command_get_side_brush_life_level_minutes
13:'{"method":"get_properties","params":[{"siid":11,"piid":1}]}', #command_get_filter_life_level_percent
14:'{"method":"get_properties","params":[{"siid":11,"piid":2}]}', #command_get_filter_brush_life_level_minutes
15:'{"method":"get_properties","params":[{"siid":9,"piid":1}]}', #command_get_clean-area # responce value always 0
16:'{"method":"get_properties","params":[{"siid":9,"piid":2}]}', #command_get_clean-time # responce value always 0
17:'{"method":"get_properties","params":[{"siid":9,"piid":3}]}', #command_get_total_clean-area # responce value always 0
18:'{"method":"get_properties","params":[{"siid":9,"piid":4}]}', #command_get_total_clean-time # responce value always 0
19:'{"method":"get_properties","params":[{"siid":9,"piid":5}]}', #command_get_total_clean-count # responce value always 0
20:'{"method":"get_properties","params":[{"siid":12,"piid":1}]}', #command_get_speech_language
21:'{"method":"get_properties","params":[{"siid":12,"piid":1}]}'} #command_get_DND_status

action_commands = {
1:'{"method":"action","params":{"siid":2,"aiid":1}}', #command_start_sweep
2:'{"method":"action","params":{"siid":2,"aiid":2}}', #command_stop_sweep
3:'{"method":"action","params":{"siid":2,"aiid":3}}', #command_go_charge
4:'{"method":"action","params":{"siid":6,"aiid":1}}', #command_find_vacuum
5:'{"method":"action","params":{"siid":13,"aiid":1}}', #command_start_charge
6:'{"method":"action","params":{"siid":13,"aiid":2}}'} #command_stop_charge

set_commands = {
1:'{"method":"set_properties","params":[{"siid":2,"piid":4,"value":', #command_set_work_mode
2:'{"method":"set_properties","params":[{"siid":2,"piid":5,"value":', #command_set_water_mode
3:'{"method":"set_properties","params":[{"siid":2,"piid":6,"value":', #command_set_fan_mode
4:'{"method":"set_properties","params":[{"siid":12,"piid":1,"value":', #command_set_speech_language
5:'{"method":"set_properties","params":[{"siid":12,"piid":2,"value":'} #command_set_DND_status



In Python sehen die Stati dann z.B. so aus:


class G1Status:
    _max_properties = 14
    battery: int = field(metadata={"siid": 3, "piid": 1, "access": ["read", "notify"]})
    chargestatus: int = field(metadata={"siid": 3, "piid": 2, "access": ["read", "notify"], "enum": ChargeStatus,})
    error: int = field(metadata={"siid": 2, "piid": 2, "access": ["read", "notify"], "enum": Error})
    status: int = field(metadata={"siid": 2,"piid": 1, "access": ["read", "notify"], "enum": VacuumStatus,})
    mopstate: int = field(metadata={"siid": 16,"piid": 1, "access": ["read", "notify"], "enum": MopState,})
    waterlevel: int = field(metadata={"siid": 2,"piid": 5, "access": ["read", "write"], "enum": Target_Water_Level,})
    vacuummode: int = field(metadata={"siid": 2,"piid": 4, "access": ["read", "write"], "enum": VacuumMode,})
    filter_life_level: int = field(metadata={"siid": 11, "piid": 1, "access": ["read", "notify"]})
    #filter_left_time: int = field(metadata={"siid": 11, "piid": 2, "access": ["read", "notify"]})
    brush_life_level: int = field(metadata={"siid": 14, "piid": 1, "access": ["read", "notify"]})
    #brush_left_time: int = field(metadata={"siid": 14, "piid": 2, "access": ["read", "notify"]})
    brush_life_level2: int = field(metadata={"siid": 15, "piid": 1, "access": ["read", "notify"]}    )
    #brush_left_time2: int = field(metadata={"siid": 15, "piid": 2, "access": ["read", "notify"]})
    clean_area: int = field(metadata={"siid": 9, "piid": 1, "access": ["read", "notify"]})
    clean_time: int = field(metadata={"siid": 9, "piid": 2, "access": ["read", "notify"]})
    fanlevel: int = field(metadata={"siid": 2, "piid": 6, "access": ["read", "write"], "enum": Fan_Level,})
    direction_key: int = field(metadata={"siid": 8, "piid": 1, "access": ["read", "write"], "enum": ArrowKeys,})
    total_clean_count: int = field(metadata={"siid": 9, "piid": 5, "access": ["read", "notify"]})
    total_clean_area: int = field(metadata={"siid": 9, "piid": 3, "access": ["read", "notify"]})
    dnd_enabled: int = field(metadata={"siid": 12, "piid": 2, "access": ["read", "write"]}    )
    # audio_volume: int = field(metadata={"siid": 4, "piid": 2, "access": ["read", "write", "notify"]}    )


FHEM, Homebridge, Philips Hue, Innr, Tradfri, Osram, Shelly 1 2 2.5,  LD382A, MQTT, Xiaomi Mijia G1

Markus M.

Zitat von: neyzen am 30 Oktober 2020, 21:22:02laut der Gebrauchsanleitung meines Saugroboter ist ein Reinigungsmittel nicht empfohlen. Allerdings gibt es im Internet Spezial Reiniger für Sauroboter. Hat jemand Erfahrung mit Haushaltsüblichen Reinigungsmittel. Oder sind diese Spezialreiniger Unsinn?
Solange du nichts reinkippst was verseifen kann, ist alles ok.
Handelsübliche flüssige Reinigungsmittel sollten also problemlos funktionieren.

Zitat von: neturmel am 13 November 2020, 13:53:55
ich habe mich die letzten zwei Tage noch mal ein bisschen mit meinem Xiaomi Mjija G1 (mijia.vacuum.v2) beschäftigt und kann ihn momentan per python-miio mit einem, aus dem Modul für den dreame.vacuum abgeleiteten Modul steuern und Stati auslesen.
Leider bin ich weder Perl-Experte, noch kenne ich mich im Detail mit FHEM-Plugins aus, aber vielleicht helfen ja diese Pseudomappings, die meine Quelle für die Umsetzung waren, irgendwem weiter (Ich teste auch gerne ;) )
Hast du Android? Dann könntest du mal mit der russischen App die Befehle loggen.
Die miot-spec.org Adresse wäre auch ganz interessant.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

neturmel

Zitat von: Markus M. am 13 November 2020, 14:15:43
Hast du Android? Dann könntest du mal mit der russischen App die Befehle loggen.
Die miot-spec.org Adresse wäre auch ganz interessant.

Kein Android...

Das was beim mir noch nicht funktioniert liegt im Moment eher dran, dass ich einen Pull-Request von python-miio verwende,
in dem die MIOT-API im Umbau ist und sich ein paar Sachen geändert haben und nicht mehr so funktionieren wie vorher.

Alles was an das Gerät an Properties und Actions vorsteht, sollte soweit oben drin sein, hier aber noch die miot-spec:

https://miot-spec.org/miot-spec-v2/instance?type=urn:miot-spec-v2:device:vacuum:0000A006:mijia-v1:1
FHEM, Homebridge, Philips Hue, Innr, Tradfri, Osram, Shelly 1 2 2.5,  LD382A, MQTT, Xiaomi Mijia G1