FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Guybrush am 15 August 2026, 20:41:19

Titel: Ecovacs Robots
Beitrag von: Guybrush am 15 August 2026, 20:41:19
Ich hab jetzt auch mal meine Ecovacs Schnittstelle bereinigt und auf github veröffentlicht:

https://github.com/next81/ecovacs2mqtt/

das Ganze ist dort als MQTT Bridge umgesetzt. Der Ecovacs2mqtt muss nur einmal installiert werden. Danach sollten in FHEM mit aktiviertem MQTT live Updates erfolgen und die Robots darüber zu steuern sein. Ich selbst hab nur die X12 und den Goat 1600 Lidar Pro. Deswegen ist feedback insbesondere bezüglich anderer Modelle willkommen  ;) Wichtig ist, dass Python3.14 vorhanden ist. das lässt sich als alternative Installation parallel zur vom System installierten Version betreiben.

Python3.14:
sudo apt update
sudo apt install -y   build-essential wget   libssl-dev zlib1g-dev libbz2-dev   libreadline-dev libsqlite3-dev   libffi-dev liblzma-dev   libgdbm-dev libncursesw5-dev   libexpat1-dev tk-dev uuid-dev
cd /tmp
wget https://www.python.org/ftp/python/3.14.6/Python-3.14.6.tgz
tar xzf Python-3.14.6.tgz
cd Python-3.14.6
./configure
make -j$(nproc)
sudo make altinstall

Dann weiter mit:
git clone https://github.com/next81/ecovacs2mqtt.git
cd ecovacs2mqtt
sudo ./install.sh

sudo PYTHON_BIN=python3.14 ./install.sh

sudo nano /etc/ecovacs2mqtt/config.yaml
sudo ecovacs2mqtt password
sudo ecovacs2mqtt devices
sudo ecovacs2mqtt auth
sudo systemctl enable --now ecovacs2mqtt

language: sollte man in der config auf DE stellen. ich hab hier DE/EN hinterlegt, wobei en default ist.

wenn ecovacs2mqtt läuft, müssen noch die fhem devices angepasst werden. hier mal ein beispiel meiner:
defmod Ecovacs.DG MQTT2_DEVICE ecovacs_7d758595-567f-4320-a8e8-7b3915a06667
attr Ecovacs.DG devStateIcon (0|1)\d?:measure_battery_0@red [2-3]\d+:measure_battery_25@orange [4-6]\d+:measure_battery_50@green [7-8]\d+:measure_battery_75@green (9\d+|100).*:measure_battery_100@green
attr Ecovacs.DG devicetopic ecovacs/<hier die deviceid rein>
attr Ecovacs.DG group Geräte
attr Ecovacs.DG oldreadings state,oldreadingsAlways
attr Ecovacs.DG readingList $DEVICETOPIC/json:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/battery:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/metadata:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/positions:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/availability:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/mapChanged:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/networkInfo:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/stats:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/continuousCleaning:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/cleanLog:.* cleanLog\
$DEVICETOPIC/event/cleanCount:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/error:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/fanSpeed:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/workMode:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/lifeSpan:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/cachedMapInfo:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/majorMap:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/multimapState:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/rooms:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/mapTrace:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/carpetAutoFanBoost:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/childLock:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/mopAutoWashFrequency:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/ota:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/trueDetect:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/voiceAssistantState:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/volume:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/autoEmpty:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/station:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/totalStats:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/waterCustomAmount:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/mopAttached:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/event/state:.* { json2nameValue($EVENT) }\
ecovacs/7d758595-567f-4320-a8e8-7b3915a06667/event/commandResult:.* { json2nameValue($EVENT) }
attr Ecovacs.DG room Dachgeschoss->Ankleide,Dachgeschoss->Bad groß,Dachgeschoss->Bad klein,Dachgeschoss->Flur,Dachgeschoss->Kinderzimmer groß,Dachgeschoss->Kinderzimmer klein,Dachgeschoss->Schlafen,Interfaces->Ecovacs,Interfaces->MQTT
attr Ecovacs.DG setList resume:noArg $DEVICETOPIC/resume 1\
stop:noArg $DEVICETOPIC/stop 1\
charge:noArg $DEVICETOPIC/charge 1\
dock:noArg $DEVICETOPIC/dock 1\
locate:noArg $DEVICETOPIC/locate 1\
refresh:noArg $DEVICETOPIC/refresh 1\
setFanSpeed:quiet,normal,max,max_plus $DEVICETOPIC/setFanSpeed\
setWaterAmount:slider,0,1,50 $DEVICETOPIC/setWaterAmount\
setVolume:slider,0,1,10 $DEVICETOPIC/setVolume\
setChildLock:off,on $DEVICETOPIC/setChildLock\
setTrueDetect:off,on $DEVICETOPIC/setTrueDetect\
setWorkMode:vacuum_and_mop,vacuum,mop,mop_after_vacuum $DEVICETOPIC/setWorkMode\
stationAction:empty_dustbin,dry_mop,wash_mop $DEVICETOPIC/stationAction\
clean:textField $DEVICETOPIC/clean \
cleanArea:textField $DEVICETOPIC/cleanArea\
custom:textField $DEVICETOPIC/custom\

attr Ecovacs.DG stateFormat battery\
state

im anschluss kann man die robots über fhem steuern, z.b.
set Ecovacs.DG clean Flur Schlafen Ankleide
Damit werden die Räume in der angegebenen Reihenfolge dann gereinigt. Steuerung über fhem ist ganz praktisch, wenn man das mit einer Anwesenheitserkennung versieht und die Reinigung starten lässt, wenn man das Haus verlässt etc.. Gibt ja viele Möglichkeiten :-)

Alles weitere steht in der Doku auf github