Roomba Staubsaugerroboter

Begonnen von Prof. Dr. Peter Henning, 10 September 2020, 16:40:34

Vorheriges Thema - Nächstes Thema

carlos

Habe ich schon probiert, geht auch nicht nicht.
Im übrigen gehen als HTTPMod und JsonMod (nur status) angelegte devices hervorragend.
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Beta-User

@carlos:
Die anonymisierte ClientID ist hoffentlich eine andere als die, die der Sauger intern verwendet? Sonst verwirft der "on-Board-Broker" vermutlich den Verbindungsversuch auch deswegen... (Es kann nur jeweils einen Client/Broker mit derselben ClientID geben, daher die häufiger anzutreffenden "random"-ClientID's).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

und irgendwo hatte ich gelesen, dass der oBB ;) sowieso nur eine gleichzeitige Verbindung akzeptiert!? Aber ich rede nur theoretisch ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

@pah wg. der setList:
Magst du mal ein RAW (bzw. die readingList) von dem aktuellen MQTT2_DEVICE liefern? Die Zusammensetzung des cmd-Pfads scheint uU. auch den Namen zu beinhalten, zumindest sieht mir die Funktion ab hier so aus: https://github.com/NickWaterton/Roomba980-Python/blob/76d7f512891b49f8e2ba79e6e90e5886e6c47ce4/build/lib.linux-x86_64-2.7/roomba/roomba.py#L401 Das Script scheint irgendeine Art Indirektion vorzunehmen...

@Otto:
Das würde dann bedeuten, dass man entweder das script nehmen kann oder MQTT2_CLIENT, oder?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

carlos

Aber PAH schreibt doch:

ZitatNötig dafür war im Client sowohl den username als auch die clientId auf die BLID aus dem Roboter zu setzen, sowie bei sslargs SSL_version:SSLv23 einzusetzen.
deswegen habe ich beides auf die BLID gesetzt.

@Otto123 Habe ich auch gelesen, aber meine beiden (HTTPMod und JsonMod) funktionieren gleichzeitig.
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Otto123

Hatte ich hier gelesen: https://intranet-der-dinge.de/smarthome/haus/roomba/
Wie immer das wirklich gemeint ist? Ich wollte es nur in die Runde werfen, ich kann es nicht prüfen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Hmm,

ich kann da nur die Theorie ausführen. Kann schon sein, dass die ClientID "freigehalten" wird und intern eine andere genutzt wird für "firmware<->Broker". Als zusätzliches Begrenzungsmittel das Zugriffst wäre das logisch, als Ursache für Verbindungsabbrüche, falls da was intern schief läuft auch (kann sein, dass mosquitto/paho da früher nicht so empfindlich war und das (mit) die Ursache dafür ist, dass das Modul nicht mehr geht)...

Betr. jsonMod+HTTPMOD: Machen die nicht eine Verbindung auf, holen die Daten und machen die Verbindung dann wieder zu? Nacheinander sollte es dann auch "miteinander" gehen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Prof. Dr. Peter Henning

#22
Zitatwieder zu? Nacheinander sollte es dann auch "miteinander" gehen...
So isses.

Die readingList wurde durch das autocreate angelegt, ich habe nur etwas manuell optimiert:

31xx80:.* { json2nameValue($EVENT) }
31xx80:wifistat:.* { json2nameValue($EVENT) }
31xx80:.*aws/things/31xx80/shadow/update:.* { json2nameValue($EVENT) }


(31xx80 ist die natürlich längere BLID). Ich habe wirklich systematisch rund 50 Kombinationen aus BLID, Name (das Teil heißt "Feger"), "cmd", "command" etc. für die setList durchprobiert

ZitatGibt's denn nirgends eine Beschreibung der MQTT-API?
Keine, die ich gefunden hätte.

LG

pah

Beta-User

(Da ist noch eine vollst. BID drin)
Ansonsten habe ich auch keine wirkliche Idee, was der cmd-Pfad anderes als der "cmd" sein sollte; ein sich dynamisch ändernder cmd-Topic macht ja keinen Sinn... Vermutlich ist die Payload irgendwie JSON-verpackt, aber das ist ohne API-Beschreibung auch ziemliche Kaffeesatzleserei aus den diversen Implementierungen. Unschön...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Prof. Dr. Peter Henning

#24
In dem Ding von Waterton lese ich
Command = OrderedDict()
        Command["command"] = command
        Command["time"] = self.totimestamp(datetime.datetime.now())
        Command["initiator"] = "localApp"
        myCommand = json.dumps(Command)
        self.log.info("Publishing Roomba Command : %s" % myCommand)
        self.client.publish("cmd", myCommand)


Das wäre also als json so etwas wie
{"command":"start","time":timestamp,"initiator":"localApp"}

Und tada ! So isses.
Mit einer setList
start cmd {"command": "start", "time": 1, "initiator": "localApp"}
stop cmd  {"command": "stop", "time": 1, "initiator": "localApp"}
dock cmd  {"command": "dock", "time": 1, "initiator": "localApp"}
resume cmd  {"command": "resume", "time": 1, "initiator": "localApp"}
pause cmd  {"command": "pause", "time": 1, "initiator": "localApp"}


kann die Kiste via MQTT gesteuert werden. Man benötigt also nicht einmal einen tatsächlichen Timestamp, die Zahl 1 genügt ...

LG

pah

Beta-User

Zitat von: Prof. Dr. Peter Henning am 14 September 2020, 15:38:23
Mit einer setList
start cmd {"command": "start", "time": 1, "initiator": "localApp"}
stop cmd  {"command": "stop", "time": 1, "initiator": "localApp"}
dock cmd  {"command": "dock", "time": 1, "initiator": "localApp"}
resume cmd  {"command": "resume", "time": 1, "initiator": "localApp"}
pause cmd  {"command": "pause", "time": 1, "initiator": "localApp"}


kann die Kiste via MQTT gesteuert werden. Man benötigt also nicht einmal einen tatsächlichen Timestamp, die Zahl 1 genügt ...
Cool!

(Die BLID steht in der readingList oben immer noch absichtlich in voller Pracht?)

(Unter attrTemplate-Gesichtspunkten: Der nächste Schritt wäre jetzt, erst mal die setList ggf. zu optimieren oder zu erweitern (ggf. auch eine getList für Status-Abfragen zu erstellen, und dann nochmal kritisch zu checken, welche Infos eigentlich über welchen Topic kommen und ob sich das irgendwie besser sortieren läßt; "wifistat" scheint sowas wie LWT zu sein?
Bei Interesse müsste ich etwas mehr Infos haben, sonst gehe ich mal davon aus, dass du auch alleine klarkommst, ist ja kein Hexenwerk :) ).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Prof. Dr. Peter Henning

Geht schon, bin ja nicht direkt ein Anfänger  8).

Setzen von Einstellungen geht auch, z.B. mit
carpetBoost delta {"state": {"carpetBoost": true}}

LG

pah

Prof. Dr. Peter Henning

@carlos: im Roboter darf nicht ecoCharge=true gesetzt werden, das verhindert die Verbindung mit dem MQTT2_CLIENT

LG

pah

carlos

Bei mir ist ecoCharge=0

Interessanerweise bekomme ich jetzt folgenden Fehler:

2020.09.14 18:09:02 5: HttpUtils url=https://192.168.178.62:8883/
2020.09.14 18:09:02 4: IP: 192.168.178.62 -> 192.168.178.62
2020.09.14 18:09:04 4: HttpUtils: https://192.168.178.62:8883/: Can't connect(2) to https://192.168.178.62:8883:  SSL connect attempt failed error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small


Könntest du bitte mal ein LIST on deinem Client hier reinstellen zum Vergleich.
Danke und Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Prof. Dr. Peter Henning

#29
OK, tut alles fast wie gewünscht.

Woran ich noch knobele:
- Manche RegExps scheinen für den Parser bei readingList etwas zu kompliziert zu sein
- Das jsonMap Attribut ist viel zu umständlich. Hier müsste es die Möglichkeit geben, per Wildcard einfach eine ganze Gruppe von Readings auszuschließen.
- Mir fehlt noch eine Möglichkeit, bei "set <Device> CarpetBoost true" den Parameter true in das generierte JSON mit aufzunehmen. Zwar soll laut CommandRef die Verwendung von Perl-Ausdrücken in der setList möglich sein. Das ist aber nicht gut dokumentiert und funktioniert auch nicht einfach so. Abgesehen vom zu setzenden Parameterwert (true in diesem Fall) sollte auch statt der nackten "1" bei der Timestamp die richtige Zeit verwendet werden, dafür brauche ich aber einen Perl-Aufruf im Innern des JSON-Ausdrucks. Es gibt natürlich auch den umgekehrten Weg, das ganze JSON aus Perl heraus zu generieren. Mal sehen, heute nicht mehr.


Also, hier zum Ausprobieren die nackten Konfigurationsdaten für einen MQTT2_CLIENT und ein MQTT2_DEVICE

define RoombaFegerClient MQTT2_CLIENT 192.168.x.yy:8883
attr RoombaFegerClient SSL 1
attr RoombaFegerClient autocreate simple
attr RoombaFegerClient clientId 3.................80
attr RoombaFegerClient mqttVersion 3.1.1
attr RoombaFegerClient sslargs SSL_version:SSLv23
attr RoombaFegerClient username 3.................80
attr RoombaFegerClient verbose 1

define RoombaFeger MQTT2_DEVICE 3................80
attr RoombaFeger IODev RoombaFegerClient

attr RoombaFeger jsonMap state_reported_pose_point_x:position_x\
state_reported_pose_point_y:position_y\
state_reported_pose_theta:position_theta\
state_reported_lastCommand_initiator:lastCommandInitiator\
state_reported_lastCommand_command:lastCommand\
state_reported_lastCommand_time:0\
state_reported_localtimeoffset:0\
state_reported_mac:0\
state_reported_netinfo_addr:0\
state_reported_netinfo_bssid:\
state_reported_netinfo_dhcp:0\
state_reported_netinfo_dns1:0\
state_reported_netinfo_dns2:0\
state_reported_netinfo_gw:0\
state_reported_netinfo_mask:0\
state_reported_netinfo_sec:0\
state_reported_signal_rssi:signalRSSI\
state_reported_signal_snr:signalSNR\
state_reported_utctime:0\
state_reported_wifistat_cloud:0\
state_reported_wifistat_uap:0\
state_reported_wifistat_wifi:0\
state_reported_wlcfg_sec:0\
state_reported_wlcfg_ssid:0\
state_reported_cleanMissionStatus_cycle:cmCycle\
state_reported_cleanMissionStatus_error:cmError\
state_reported_cleanMissionStatus_expireM:cmExpireM\
state_reported_cleanMissionStatus_initiator:cmInitiator\
state_reported_cleanMissionStatus_mssnM:cmMMission\
state_reported_cleanMissionStatus_nMssn:cmNMission\
state_reported_cleanMissionStatus_notReady:cmNotReady\
state_reported_cleanMissionStatus_phase:cmPhase\
state_reported_cleanMissionStatus_rechrgM:cmRechargeM\
state_reported_cleanMissionStatus_sqft:cmSqft\
state_reported_binPause:sBinPause\
state_reported_carpetBoost:sCarpetBoost\
state_reported_openOnly:sOpenOnly\
state_reported_schedHold:sSchedHold\
state_reported_twoPass:sTwoPass\
state_reported_vacHigh:sVacHigh\

attr RoombaFeger readingList 3.......................80:wifistat:.* { json2nameValue($EVENT,'',$JSONMAP) }\
3..................80:.*aws/things/3...........................80/shadow/update.*Command.* { json2nameValue($EVENT,'',$JSONMAP) }

attr RoombaFeger room Unsorted

attr RoombaFeger setList start:noArg cmd {"command": "start", "time": 1, "initiator": "localApp"}\
stop:noArg cmd  {"command": "stop", "time": 1, "initiator": "localApp"}\
dock:noArg cmd  {"command": "dock", "time": 1, "initiator": "localApp"}\
resume:noArg cmd  {"command": "resume", "time": 1, "initiator": "localApp"}\
pause:noArg cmd  {"command": "pause", "time": 1, "initiator": "localApp"}\
CarpetBoostOn:noArg delta {"state": {"carpetBoost": true}}\
TwoPassOn:noArg delta {"state": {"twoPass": true}}\
VacHighOn:noArg delta {"state": {"vacHigh": true}}\
CarpetBoostOff:noArg delta {"state": {"carpetBoost": false}}\
TwoPassOff:noArg delta {"state": {"twoPass": false}}\
VacHighOff:noArg delta {"state": {"vacHigh": false}}


LG

pah