Deebot Ozmo 950 [MQTT][CLOUDFREE][CLOUD][bumper][non-bumper]

Begonnen von schwatter, 15 Juni 2020, 21:42:30

Vorheriges Thema - Nächstes Thema

schwatter

Nabend,

mh vielleicht ein Prerelease mit Fehlern? Ich habe im Moment die 1.80 installiert. Installier mal neu:


pip3 install deebotozmo==1.8.0


Gruß schwatter

davipet

#121
Moin,

danke für den Tipp,

ist bei mir auch die 1.8.0  :o

Kann meine Python-Version schlecht sein?
python -V sagt 2.7.13
python3 -V sagt 3.5.3


Gruß

David

schwatter

Nabend

root@raspi4fhem:~# python -V
Python 2.7.16
root@raspi4fhem:~# python3 -V
Python 3.7.3


Probleme hatte ich nur nach V 1.8.0. Da hat sich was geändert.

https://pypi.org/project/deebotozmo/#history
pip3 install deebotozmo==2.0.0b6

Da keine Zeit und Motivation, hatte ich einfach wieder auf 1.8.0 gedowngraded.


Gruß schwatter

davipet

Moin,

ich bin noch an den Thema dran...

Ich habe eine frische VM mit debian 10 aufgesetzt.
python 2.7.16 und Python 3.7.3 laufen da.

"createconfig" läuft nun ohne, dass ich den Code ändern muss.
Aber exportlivemap wirft noch immer diese Fehler...
Ich habe den OZMO 950 mit firmware 1.8.2

Kann es an der Karte selber liegen? Gibt es da etwas was in der App nicht gemacht werden sollte? Ich habe z.B. ein paar erkannte Räume zusammen gelegt.

Danke!

Gruß

David

schwatter

#124
Nabend,

mein Ozmo ist auch auf der 1.8.2. Und bei mir habe ich es auf meinem
Raspi4 installiert, auf dem auch Fhem läuft.
Das mit dem zusammenlegen der Räume sollte kein Problem sein.
Stell dein Problem bitte in Github ein.

Gruß schwatter

edit:

Ok, ich bekomme jetzt auch den Fehler.

root@raspi4fhem:~# deebotozmo exportlivemap /tmp/map.png
Traceback (most recent call last):
  File "/usr/lib/python3.7/base64.py", line 510, in _input_type_check
    m = memoryview(s)
TypeError: memoryview: a bytes-like object is required, not 'NoneType'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/deebotozmo", line 10, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1289, in invoke
    rv.append(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/deebotozmo/cli.py", line 203, in exportLiveMap
    fh.write(base64.decodebytes(vacbot.live_map))
  File "/usr/lib/python3.7/base64.py", line 545, in decodebytes
    _input_type_check(s)
  File "/usr/lib/python3.7/base64.py", line 513, in _input_type_check
    raise TypeError(msg) from err
TypeError: expected bytes-like object, not NoneType
root@raspi4fhem:~#


Wahrscheinlicht hat Ecovacs etwas geändert, oder ein Service von den ist down.

ZeitlerW

Hallo zusammen,

ich mußte wieder auf 1.7.1 zurückgehen, dann hat es bei mir funktioniert.
Python 3.5.3 auf Raspbian Stretch


p.s.
@schwatter: Vielen Dank für Deine Arbeit!

vG
Wolfgang


schwatter

@ZeitlerW

Sehr gerne. Und jetzt auch Dank an dich. Mit 1.7.1 is alles ok.
Jetzt weiß ich auch warum es nicht mehr funktionert. Ich war
auf 1.7.1 und hatte die letzte Prerelease probiert. Da es nicht
funktioniert hat habe ich einfach die letzte stable 1.8.0 installiert
und nur getestet ob der Bot startet.

Gruß schwatter

davipet

Moin!

Danke Wolfgang. Mit der 1.7.1 hatte ich es noch gar nicht versucht. Damit funktioniert es bei mir auch!

Ich habe das übrigens mal an den Entwickler weiter kommuniziert.

Gruß

David

schwatter

#128
@KölnSolar

Nabend,
nachdem der Edenhaus, der jetztige MainContributer/MainDev von der DeebotLibrary im Moment alles umkrempelt und den Client eher als optional betrachtet, bzw. keine Lust auf Support hat, dachte ich, ich schau mir nochmal das Problem mit dem Port an.

Der Port wurde beim Bot von 1883 auf 443 geändert. Um das ganze jetzt mit FhemOnly zu realisieren, bekommen wir
eine Port-Konflikt.

defmod myEcovacsServer MQTT2_SERVER 443 global
attr myEcovacsServer SSL 1
attr myEcovacsServer autocreate simple
attr myEcovacsServer room Saugroboter
attr myEcovacsServer sslVersion TLSv12


myEcovacsServer: Can't open server port at 443: Permission denied

An der Stelle ist das Problem mein ich Fhem selber, da es 443 blockiert? Irgendwo aufgeschnappt. Kann der Port vielleicht freigegeben werden?
Belegte Fhemports von mir sind 8083,8084 und 8085.

Alternative wäre ein anderer Headlessserver ohne irgendeinem Firlefanz in Bezug auf Port 443 (Webinterface,...,...) oder

ein Routing.
iptables -A PREROUTING -t nat -i wlp0s20f3 -p tcp --dport 443 -j REDIRECT --to-port 8883

Aber auch da bin ich mir nicht sicher, Konflikt mit Fhem wegen dem blockieten Port?

Gruß schwatter

edit:
Oder einfach
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to 8883

schwatter

#129
Juhu,
funktioniert, da issa wieder.

Internals:
   CFGFN     
   CID        bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk
   DEF        bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk
   DEVICETOPIC MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk
   FUUID      616ddb0d-f33f-86cf-676e-918b2d18a445b6eb
   IODev      myEcovacsServer
   LASTInputDev myEcovacsServer
   MSGCNT     2
   NAME       MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk
   NR         487
   STATE      ???
   TYPE       MQTT2_DEVICE
   myEcovacsServer_MSGCNT 2
   myEcovacsServer_TIME 2021-10-18 22:37:33
   READINGS:
     2021-10-18 22:37:33   IODev           myEcovacsServer
     2021-10-18 22:37:33   body_data_code  1065
     2021-10-18 22:37:43   body_data_enable 1
     2021-10-18 22:37:33   body_data_info_1_built 1
     2021-10-18 22:37:33   body_data_info_1_index 2
     2021-10-18 22:37:33   body_data_info_1_mid 2010636970
     2021-10-18 22:37:33   body_data_info_1_name
     2021-10-18 22:37:33   body_data_info_1_status 0
     2021-10-18 22:37:33   body_data_info_1_using 1
     2021-10-18 22:37:33   body_data_info_2_built 0
     2021-10-18 22:37:33   body_data_info_2_index 3
     2021-10-18 22:37:33   body_data_info_2_mid 2010636970
     2021-10-18 22:37:33   body_data_info_2_name
     2021-10-18 22:37:33   body_data_info_2_status 0
     2021-10-18 22:37:33   body_data_info_2_using 1
     2021-10-18 22:37:43   body_data_isCharging 1
     2021-10-18 22:37:33   body_data_isHasMap 1
     2021-10-18 22:37:43   body_data_mode  slot
     2021-10-18 22:37:33   body_data_state idle
     2021-10-18 22:37:33   body_data_trigger none
     2021-10-18 22:37:43   header_fwVer    1.8.2
     2021-10-18 22:37:43   header_hwVer    0.1.1
     2021-10-18 22:37:43   header_pri      1
     2021-10-18 22:37:43   header_ts       1634589461911
     2021-10-18 22:37:43   header_tzm      480
     2021-10-18 22:37:43   header_ver      0.0.1
Attributes:
   readingList bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk:iot/atr/onRelocationState/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/iElk/j:.* { json2nameValue($EVENT) }
bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk:iot/atr/onMapState/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/iElk/j:.* { json2nameValue($EVENT) }
bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk:iot/atr/onSched/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/iElk/j:.* { json2nameValue($EVENT) }
bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk:iot/atr/onCachedMapInfo/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/iElk/j:.* { json2nameValue($EVENT) }
bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk:iot/atr/onEvt/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/iElk/j:.* { json2nameValue($EVENT) }
bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk:iot/atr/onCleanInfo/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/iElk/j:.* { json2nameValue($EVENT) }
bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk:iot/atr/onSleep/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/iElk/j:.* { json2nameValue($EVENT) }
bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_iElk:iot/atr/onChargeState/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/iElk/j:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE


Funktionierte erst, nachdem ich den Bot einmal aus und wieder eingeschaltet hatte.

Gruß schwatter

edit:

Ich habe den Hinweis im ersten Post unter 2.02 hinzugefügt.

KölnSolar

Na dann antworte ich mal nur ohne Worte.  ;)
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

schwatter

#131
Nabend,


ich hatte Dennis Giese sein Vortrag auf der 37c3 gesehen. Im Stream war auch ein Link zum EcopasswordCalculator.

--> https://x.com/dgi_DE/status/1742040123997577565?s=20 <-- bitte Link teilen

https://media.ccc.de/v/37c3-11943-sucking_dust_and_cutting_grass_reversing_robots_and_bypassing_security
https://builder.dontvacuum.me/ecopassword.php

Einige Modelle, außer mein Deebot950 waren schon da. Daraufhin habe ich mein UART (Pinout im Anhang) ausgemessen um TX/RX/GND zu finden.
Nachdem ich erfolgreich connectet hatte, kontaktierte ich Dennis.


Heute Nacht hat Dennis nochmal Vollgas gegeben und nun ist die 9x0 Serie auch mit im EcopasswordCalculator.


Ecovacs ist sehr verbreitet und das Ziel ist, auf den neuen Modellen Valetudo zu installieren. Das trifft in meinem Fall
natürlich nicht mehr zu, da EOL.

Mein Antrieb war und ist, ein Redirect der EcovacsServer auf dem Bot einzurichten. Damit würde der Bot direkt, wie im ersten
Post unter "2. Aufbau mit Fhem only", mit dem MQTT_Server aber ohne PIHOLE oder ähnlichen externen DNS_Verbiegern sprechen.


Gruß schwatter

schwatter

#132
Tag,

jetzt bin ich weiter und ein "spoof" bzw. "redirect" funktioniert direkt auf dem Bot ohne mounten und ohne extra Tools. Er stellt einfach
alles zur Verfügung.


1. Etwas Vorarbeit aus dem ersten Post von mir, damit der Fhemserver den Bot hört.

Ich habe Ubuntu, muss mal wechseln auf Debian, und muss folgendes ergänzen.

echo "1" > /proc/sys/net/ipv4/ip_forward
Danach eine Rule

iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to 8883
Problem, der Bot möchte gerne mit Port 443 sprechen. Das ist aber von Fhem blockiert, auch wenn
ihr es nicht nutzt. Deshalb umleiten.


2. Einen passenden MqttServer anlegen

defmod myEcovacsServer MQTT2_SERVER 8883 global
attr myEcovacsServer SSL 1
attr myEcovacsServer autocreate simple
attr myEcovacsServer room Saugroboter
attr myEcovacsServer sslVersion TLSv12


3. Der Bot sucht zu unserem Glück nach einem Script in /data/autostart. Den Wunsch erfüllen wir ihm natürlich :)
"vi" is on board, damit erstellen wir jetzt den Rest.

echo "1" > /data/freebot/spoofswitch
/data/autostart # cat start.sh
#/bin/sh

# start telnet
/usr/sbin/telnetd

# start ftpserver
/etc/rc.d/vsftpd.sh start

# restart tools and medusa for local redirect if spoofswitch == 1
value=`cat /data/freebot/spoofswitch`
if [[ $value == 1 ]]
then
  echo "mqtt_spoof is on"
  /data/freebot/mqtt_spoof.sh
else
  echo "mqtt_spoof is off"
fi


4. So, nach dem ersten Restart steht uns ein Telnetd Daemon und ein FTP-Server zur Verfügung. Wir arbeiten auch direkt mit Telnet weiter und loggen uns ein.

4.1 mqtt_spoof.sh anlegen

mkdir /data/freebot
/data/freebot # cat mqtt_spoof.sh
#/bin/sh

# stop medusa and dhcpcd
sleep 20
/etc/rc.d/medusa.sh stop
pkill dhcpcd

# change hosts
echo "127.0.0.1 dnsmasq" > /tmp/root/etc/hosts
chmod 0444 /tmp/root/etc/hosts
sleep 1

# dhcpcd always overwrites resolv.conf, so add nodnsupdate
echo "#!/bin/sh" > /data/freebot/nodnsupdate
echo "make_resolv_conf(){" >> /data/freebot/nodnsupdate
echo "        :" >> /data/freebot/nodnsupdate
echo "}" >> /data/freebot/nodnsupdate
chmod +x /data/freebot/nodnsupdate
sleep 1

# start dnsmasq, dhcpcd and medusa again
dnsmasq -C /data/freebot/dnsmasq.conf
sleep 1
dhcpcd --noarp -c /data/freebot/nodnsupdate --option 1,3,6,28,51
sleep 1
/etc/rc.d/medusa.sh start

chmod +x /data/freebot/mqtt_spoof.sh

4.2 dnsmasq.conf anlegen und eure IP vom Fhemserver unter {bumper server ip} eintragen.

/data/freebot # cat dnsmasq.conf
server=208.67.222.222
server=208.67.220.220
listen-address=127.0.0.1
no-dhcp-interface=

# https://bumper.readthedocs.io/en/latest/DNS_Setup/
address=/ecouser.net/{bumper server ip}
address=/ecovacs.com/{bumper server ip}
address=/ecovacs.net/{bumper server ip}

chmod 0444 /data/freebot/dnsmasq.conf

5. Nach einem erneuten restart des Bots sollte in Fhem ein neues Device angelegt werden. Wenn nicht, auf dem Bot einmal den Startbutton drücken.
Er redet nicht sehr viel. Die Topics haben sich etwas verkürzt. Daher muss ich jetzt schauen, wie ich die Cmd-Topics anpassen muss.
Bei mir wurden bis jetzt nur 2 Topics angelegt, da der Bot noch zerplückt im Keller hockt. Mehr als "Error" kommt da noch nicht.
Außerdem denke ich, ich baue noch einen Switch im Script ein, damit ich zwischen Cloud und Lokal umschalten kann.

defmod MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj MQTT2_DEVICE bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj
attr MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj readingList bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj:iot/atr/onError/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/TQjj/j:.* { json2nameValue($EVENT) }\
bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj:iot/atr/onSpeed/bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/TQjj/j:.* { json2nameValue($EVENT) }
attr MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj room MQTT2_DEVICE

setstate MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj 2024-01-21 14:42:40 IODev myEcovacsServer
setstate MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj 2024-01-21 14:42:45 body_data_code_1 102
setstate MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj 2024-01-21 14:42:40 body_data_speed 0
setstate MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj 2024-01-21 14:42:45 header_fwVer 1.8.2
setstate MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj 2024-01-21 14:42:45 header_hwVer 0.1.1
setstate MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj 2024-01-21 14:42:45 header_pri 1
setstate MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj 2024-01-21 14:42:45 header_ts 1705844564179
setstate MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj 2024-01-21 14:42:45 header_tzm 480
setstate MQTT2_bb5d3df7_0ec5_4f38_b930_b6e0ed03b963_yna5xi_TQjj 2024-01-21 14:42:45 header_ver 0.0.1


Gruß schwatter





KölnSolar

Seeeeehr interessant  !!!

Aber ich glaub ich verfahre nach dem alten Motto: never change a running system. bumper verrichtet noch immer seine Dienste.

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

schwatter

@KölnSolar

Tag,

bleib bei deinem Setup. Ich will dich zu nix animieren :D

@all EcovacsUser

Hatte die Tage damit verbracht, meine Mainboard zu flicken. Leider ist da geplante Obsolenz
mit im Spiel. SMD's rauchen ab. Und bestimmte Funktionen wie z.B Laden leiden darunter.
Bin noch nicht fertig, daher habe ich mich heute wieder MQTT zugewandt.

Top, jetzt funktioniert es genau so wie unter Punkt "2. Aufbau mit Fhem only" beschrieben.
Aber ohne Pihole. Das der Bot sich direkt mit Fhem connectet, hatte ich oben schon beschrieben.
Was ich den Tag bei der Freude übersehen hatte, es hat sich lediglich das "devicetopic" minimal geändert.

Von:

bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/9cha
Zu:

bb5d3df7-0ec5-4f38-b930-b6e0ed03b963/yna5xi/TQjj
Danach funktioniert die set- und getlist.

Möchte man die Map in der App bearbeiten, einfach kurz in der /data/autostart/start.sh
die Zeile -->/data/freebot/mqtt_spoof.sh<-- mit"#" auskommentieren und einen reboot auslösen.
Jetzt ist der Bot wieder online. Danach das "#" wieder entfernen und einen erneuten reboot
auslösen. Dann steht der Bot in Fhem wieder zur Verfügung.

Gruß schwatter