FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: Prof. Dr. Peter Henning am 10 September 2020, 16:40:34

Titel: Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 10 September 2020, 16:40:34
Edit:

Ich habe über die Anbindung der Roomba-Roboter einen Wiki-Eintrag geschrieben, das Hilfsmodul 99_RoombaUtils.pm befindet sich ab sofort im FHEM-Ordner contrib/Roomba.

https://wiki.fhem.de/wiki/Roomba

Es gibt in diesem Wiki-Eintrag auch eine noch etwas rudimentäre Beschreibung, wie man die interaktiven Reinigungskarten erzeugt und verwaltet.


Die Roomba-Staubsaugerroboter von iRobot haben einen eingebauten MQTT Server. Das von Thorsten Pferdekämper und anderen entwickelte Modul 42_Roomba980 basiert auf dem Perl-Modul Net::MQTT::Message, funktioniert inzwischen aber nicht mehr. Nach einem Firmware-Update der Staubsauger sagen diese

Zitat
2020.09.10 16:33:40 5: MQTT RoombaSauger message received: [2] ConnAck/at-most-once Connection Refused: unacceptable protocol version
2020.09.10 16:33:40 1: 192.168.0.41:8883 disconnected, waiting to reappear (RoombaSauger)
2020.09.10 16:33:41 5: MQTT RoombaSauger message sent: Connect/at-most-once MQTT/5/NetMQTTpm16474
2020.09.10 16:33:41 5: SW: 101a00044d5154540502003c000e4e65744d515454706d3136343734
2020.09.10 16:33:41 5: MQTT RoombaSauger message sent: PingReq/at-most-once
2020.09.10 16:33:41 5: SW: c000

Das Modul wird auch nicht mehr weiterentwickelt.

Ich blicke nicht so ganz durch, wie ich einen MQTT2_SERVER dazu kriegen kann, sich mit einem bisher unbekannten MQTT-Device zu verbinden. Im dem obengenannten Modul geht das mit einem Aufruf aus Net::MQTT::Message
return send_message($hash, message_type => MQTT_CONNECT, keep_alive_timer => $hash->{timeout},
                             user_name => $user, password => $pass, client_id => $user,
protocol_name => "MQTT", protocol_version => 4);
und produziert den obigen Fehler. Könnte mir mal jemand von den MQTT-Experten auf die Sprünge helfen?

LG

pah



Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 10 September 2020, 17:33:26
Hmm, bin zwar bei weitem kein Experte, was die Kommunikation "hinter" dem MQTT2_SERVER angeht, aber so wie ich dieses Code-Fragment verstehe, geht es eigentlich eher darum, dass man sich mit dem Broker verbindet und dazu ggf. die Credentials benötigt. Der liefert dann aus oder eben nicht, die Kommunikation in Richtung Client/Sauger ist dann ein 2. Ding.

Hier kommt mir die "4" seltsam vor, ich meine, dass entweder "3" gebräuchlich ist oder dann gleich "5" (was aber bisher noch kein Device genutzt hat, das hier aufgeschlagen war, und M2Server kann (bisher) auch nur MQTT-Protokoll bis V. 3.irgendwas).

Für MQTT2_DEVICE braucht man eigentlich keine Credentials, wenn, dann wäre das ein Thema, das im Rahmen von allowed iVm. dem M2Server zu verorten wäre. Ohne allowed akzeptiert ein "global"-Server auch Nachrichten von Clients, die meinen, es müßte eine Authentifizierung stattfinden. Näheres sollten eigentlich die Logs vom Server liefern.

Ansonsten ist es bei anderen Geräten iVm. M2Server easy: Du trägst die IP/Port-Kombi auf dem Server ein, den (empfangsseitigen) Rest erledigt autocreate. Ist das dein erster Versuch mit einem MQTT-Gerät und M2Server? (Wenn ja: nimm' mal einen Shelly zum Kennenlernen ;) ).
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 11 September 2020, 09:00:39
Zitat
Ist das dein erster Versuch mit einem MQTT-Gerät und M2Server?
Natürlich nicht, ich betreibe schon diverse Dinge damit. Ich diskutiere gerade mit Entwicklern von iRobot, wie man vorgehen kann und werde Euch auf dem Laufenden halten.


So wie ich das jetzt einschätze, stellt der Roomba tatsächlich einen MQTT Broker bereit, und nicht nur das Endgerät. Das würde bedeuten, dass ich mich als Client mit der Kiste verbinden muss.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 11 September 2020, 10:13:22
Hmm, dann implementiert das fragliche Modul also sowohl den Client (alt: 00_MQTT.pm) wie das eigentliche MQTT-Device.

K.A., wie MQTT2_CLIENT das Protokoll aushandelt, aber wenn bis 3.irgendwas ausreicht, könnte es  gehen, erst mal nur die Readings abzuholen mit MQTT2_CLIENT (+ aktiviertem autocreate simple) und den passenden Credentials (ich meine, es gab auch schon mal ein ähnliches Projekt, das Stichwort düfte "bumper" sein). Spannender wird dann die Frage, wie die Topics sind, auf denen das Teil seine Befehle erwartet (und in welchem Format).

Ansonsten wäre zu checken, ob das alte Modul wieder mit einer passenden Protokol-Version reanimiert werden könnte. (Insgesamt glaube ich aber, dass eine Verteilung dieser Angelegenheit auf ein IO+Client-Gespann mit den MQTT2-Modulen vermutlich auf die Dauer einfacher zu pflegen sein wird als dieses Einheits-Modul).
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 12 September 2020, 12:22:47
Also, mit dem "Einheitsmodul" geht gar nichts mehr, egal, was bei der Protokollversion drinsteht.

Mit MQTT2_CLIENT bin ich einen Schritt weiter - ich erziele immerhin ein "opened" beim MQTT-Broker des Staubsaugers. Jetzt brauche ich nur noch etwas, das ich publishen kann. Gibt es irgendwo ein Beispiel für eine mit MQTT2_CLIENT zu publizierende Message? BLID und Passwort habe ich.

Meine vermutung, dass da ein Broker mit eingebaut ist, hat sich jedenfalls bestätigt. Hier gibt es nämlich ein GitHub-Projekt, das darauf aufbauend den MQTT-Broker des Staubsaugers mit einem anderen MQTT-Broker (also sprich in FHEM) koppelt.

https://github.com/NickWaterton/Roomba980-Python

Leider habe ich das Python-Skript noch nicht richtig zum Laufen bekommen. Aber ich arbeite immerhin dran.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 12 September 2020, 14:12:22
Hmmm, vorher würde ich mal versuchen, an Readings zu kommen => autocreate am IO aktiv?
Falls der Sauger einen Homeassistant-Modus kennt: darüber könnte man uU. rausbekommen, welche messages wo erwartet werden ;) .
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 12 September 2020, 14:23:33
Schon wieder einen Schritt weiter. Ich habe jetzt eine Python-Anwendung, die die beiden Broker koppelt. Auch das globale autocreate und das autorcreate im MQTT2_SERVER sind aktiv, verbose 5 zeig tmir auch Daten des Roboters, aber readings werden noch keine angelegt.
Zitat
2020.09.12 14:22:32 5: in:  PUBLISH: 0!(0)(28)/roomba/feedback/signal_rssi-40
2020.09.12 14:22:32 4:   MQTTBridge_127.0.0.1_41349  PUBLISH /roomba/feedback/signal_rssi:-40
2020.09.12 14:22:32 5: MQTTBridge: dispatch autocreate=complex\000\000/roomba/feedback/signal_rssi\000-40
2020.09.12 14:22:32 5: in:  PUBLISH: 0(31)(0)(27)/roomba/feedback/signal_snr49
2020.09.12 14:22:32 4:   MQTTBridge_127.0.0.1_41349  PUBLISH /roomba/feedback/signal_snr:49
2020.09.12 14:22:32 5: MQTTBridge: dispatch autocreate=complex\000\000/roomba/feedback/signal_snr\00049
2020.09.12 14:22:32 5: in:  PUBLISH: 0 (0)(22)/roomba/feedback/stateCharging
2020.09.12 14:22:32 4:   MQTTBridge_127.0.0.1_41349  PUBLISH /roomba/feedback/state:Charging
2020.09.12 14:22:32 5: MQTTBridge: dispatch autocreate=complex\000\000/roomba/feedback/state\000Charging

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 12 September 2020, 15:19:38
OK, diese Methode klappt schon mal.

Mit der Python-Anwendung im Hintergrund kann ich den Roomba jetzt prima steuern. Aus irgendeinem Grund wurden aber weder das zugehörige MQTT2_DEVICE, noch dessen Readings automatisch angelegt, habe ich alles manuell machen müssen.

Außerdem ist ein Problem mit dem paho-mqttt-Client in Python aufgetreten: Von den Kommandostrings musste ich immer noch ein führendes "b" sowie die "'" entfernen.

Das ist mir jetzt aber noch zu umständlich - es müsste auch mit einem MQTT2_CLIENT direkt auf den Roomba gehen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 13 September 2020, 12:02:07
Hallo pah,

ich habe mal mit Hilfe von ein paar Beiträgen einen Cloud Broker an MQTT2_CLIENT gekoppelt.

Durch Dein python Script solltest Du alle Infos haben, vielleicht hilft dieses Beispiel (https://heinz-otto.blogspot.com/2020/06/worx-landroid-per-mqtt.html).
autocreate complex ist übrigens nicht unbedingt das Mittel der Wahl, Standard sollte simple sein.

Gruß Otto
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 13 September 2020, 13:00:50
Danke Dir.

Ich habe jetzt als Übergangslösung das mit den externen Python-Programmen gemacht. Bisher habe ich es nicht hinbekommen, dass beide Roombas in demselben Python-Programm verwaltet werden.
Lässt man aber 2 davon im Hintergrund laufen, funktioniert das astrein, für jeden Roboter gibt es auf FHEM-Seite ein MQTT2_DEVICE, mit dem ich ihn steuern kann.

Diese Lösung, also MQTT2_DEVICE <-> MQTT2_SERVER <-> Python-Programm <-> Roomba-MQTT-Server <-> Roomba-Gerät  habe ich unten beschrieben.


Die andere Lösung  wäre MQTT2_DEVICE <-> MQTT2_CLIENT <-> Roomba-MQTT-Server <-> Roomba-Gerät, diese habe ich noch nicht hinbekommen. Denn inzwischen kriege ich - erstaunlicherweise, das hatte zwischendrin ja schon geklappt - eine Verweigerung der Verbindung eines MQTT2_CLIENT mit einem der Roboter. Irgendetwas stimmt dabei an den Credentials nicht, ich muss wohl wirklich nach dem Zertifikat graben, das mit der anderen Methode irgendwie geholt wird (auch da gibt es zunächst beom Connect eine Fehlermeldung, bis TLS 1.3 eingeschaltet wird).

Also, was geht bisher:

1. Auf dem FHEM-Server per
pip install paho-mqtt
pip install pillow
pip install six
pip install git+https://github.com/NickWaterton/Roomba980-Python.git
eine lokale Installation geholt.

2. Mit dem Kommando
python3 ~/Roomba980-Python/roomba/getpasswd.pydie jeweiligen Credentials meiner beiden Roomba geholt. Ergibt jeweils etwas wie
Zitat
Received: {
 "robotname": "Feger", 
 "sku": "R981040", 
 "nc": 0, 
 "ver": "3", 
 "proto": "mqtt", 
 "ip": "192.168.0.xx", 
 "hostname": "Roomba-31xxxxxxxxxx0", 
 "sw": "v2.4.8-44", 
 "mac": "70:66:xxxxxxxxxxx:6F", 
 "cap": {
   "carpetBoost": 1, 
   "pp": 1, 
   "langOta": 1, 
   "binFullDetect": 1, 
   "ota": 2, 
   "maps": 1, 
   "pose": 1, 
   "eco": 1, 
   "multiPass": 2, 
   "edge": 1, 
   "svcConf": 1
 }
}
Roomba (Feger) IP address is: 192.168.0.XX
blid is: 3###########0
Password=> :######################A <= Yes, all this string.
Use these credentials in roomba.py

3. Ein Python-Programm gebaut, z.B. ~/Roomba980-Python/roomba/fhemfeger.py als
from __future__ import print_function
from roomba import Roomba
import paho.mqtt.client as mqtt
import time
import json

broker = 'localhost'    #ip of FHEM mqtt broker
user = ''         
password = '' 

#roombaName = 'roombaFeger'
#address = '192.168.0.xx'
#blid = '3xxxxxxxxxxxx0'
#roombaPassword = ':1:1xxxxxxxxxxxxxbh'

def broker_on_connect(client, userdata, flags, rc):
    print("Broker Connected with result code "+str(rc))
    #subscribe to roomba feedback
    if rc == 0:
        mqttc.subscribe(brokerCommand)
        mqttc.subscribe(brokerSetting)

def broker_on_message(mosq, obj, msg):
    if roombaName in msg.topic:
        #publish to roomba
        if "command" in msg.topic:
            pl = str(msg.payload).strip('b\'')
            print("Received COMMAND: %s" % pl)
            myroomba.send_command( pl )
        elif "setting" in msg.topic:
            print("Received SETTING: %s" % str(msg.payload))
            cmd = str(msg.payload).split()
            myroomba.set_preference(cmd[0], cmd[1])

def broker_on_publish(mosq, obj, mid):
    pass

def broker_on_subscribe(mosq, obj, mid, granted_qos):
    print("Broker Subscribed: %s %s" % (str(mid), str(granted_qos)))

def broker_on_disconnect(mosq, obj, rc):
    print("Broker disconnected")

def broker_on_log(mosq, obj, level, string):
    print(string)


mqttc = None
if broker is not None:
    brokerCommand = "/roomba/command/" + roombaName
    brokerSetting = "/roomba/setting/" + roombaName
    brokerFeedback = "/roomba/feedback/" + roombaName

    #connect to broker
 mqttc = mqtt.Client()
    #Assign event callbacks
    mqttc.on_message = broker_on_message
    mqttc.on_connect = broker_on_connect
    mqttc.on_disconnect = broker_on_disconnect
    mqttc.on_publish = broker_on_publish
    mqttc.on_subscribe = broker_on_subscribe

    try:
        mqttc.username_pw_set(user, password)  #put your own mqtt user and password here if you are using them, otherwise comment out
        mqttc.connect(broker, 1883, 60) #Ping MQTT broker every 60 seconds if no data is published from this script.

    except Exception as e:
        print("Unable to connect to MQTT Broker: %s" % e)
        mqttc = None

myroomba = Roomba(address, blid, roombaPassword, topic="#", continuous=True, clean=False, cert_name = "./ca-certificates.crt")

#all these are optional, if you don't include them, the defaults will work just fine
#if you are using maps
myroomba.enable_map(enable=True, mapSize="(800,1650,-300,-50,2,0)", mapPath="./", iconPath="./")  #enable live maps, class default is no maps


if broker is not None:
    myroomba.set_mqtt_client(mqttc, brokerFeedback)

#finally connect to Roomba - (required!)
myroomba.connect()

print("<CTRL C> to exit")
print("Subscribe to /roomba/feedback/" + roombaName + "/# to see published data")

try:
    if mqttc is not None:
        mqttc.loop_forever()
    else:
        while True:
            print("Roomba " + roombaName +" Data: %s" % json.dumps(myroomba.master_state, indent=2))
            time.sleep(5)

except (KeyboardInterrupt, SystemExit):
    print("System exit Received - Exiting program")
    myroomba.disconnect()
    if mqttc is not None:
        mqttc.disconnect()

4. Dieses Programm läuft auf dem FHEM-Server im Hintergrund als python3 ~/Roomba980-Python/roomba/fhemfeger.py > /dev/null 2> /dev/null und schickt alle Messages von dem Roomba-MQTT-Server an den FHEM-MQTT-Server (mit Namen MQTTBridge). Der wiederum kennt für jeden der beiden Roomba ein Device.

5.Listing des einen Devices:
DEVICETOPIC RoombaFeger
   FUUID      5f5cbe27-f33f-a726-8734-ab96da6c3ee99444
   IODev      MQTTBridge
   IODevName  RoombaFegerClient
   LASTInputDev MQTTBridge
   MQTTBridge_MSGCNT 2517
   MQTTBridge_TIME 2020-09-13 12:44:52
   MSGCNT     2517
   NAME       RoombaFeger
   NR         180
   STATE      Charging
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-09-13 12:43:19   audio_active    False
     2020-09-13 12:43:19   battery         100
     2020-09-13 12:43:19   carpetBoost     False
     2020-09-12 15:46:56   lastCommand     dock
     2020-09-13 12:43:20   lastInitiator   manual
     2020-09-13 12:43:19   netinfo_dhcp    True
     2020-09-13 12:43:19   position_theta  173
     2020-09-13 12:43:19   position_x      -12
     2020-09-13 12:43:19   position_y      29
     2020-09-13 12:44:52   signal_rssi     -41
     2020-09-13 12:44:52   signal_snr      48
     2020-09-13 12:44:52   state           Charging
Attributes:
   IODev      MQTTBridge
   autocreate 1
   readingList /roomba/feedback/roombaFeger/state:.* state
/roomba/feedback/roombaFeger/signal_rssi:.* signal_rssi
/roomba/feedback/roombaFeger/signal_snr:.* signal_snr
/roomba/feedback/roombaFeger/netinfo_dhcp:.* netinfo_dhcp
/roomba/feedback/roombaFeger/audio_active:.* audio_active
/roomba/feedback/roombaFeger/batPct:.* battery
/roomba/feedback/roombaFeger/carpetBoost:.* carpetBoost
/roomba/feedback/roombaFegerr/astCommand_command:.* lastCommand
/roomba/feedback/roombaFeger/lastCommand_initiator:.* lastInitiator
/roomba/feedback/roombaFeger/pose_theta:.* position_theta
/roomba/feedback/roombaFeger/pose_point_x:.* position_x
/roomba/feedback/roombaFeger/pose_point_y:.* position_y

   setList    start /roomba/command/roombaFeger start
stop /roomba/command/roombaFeger stop
pause /roomba/command/roombaFeger pause
resume /roomba/command/roombaFeger resume
dock /roomba/command/roombaFeger dock

6. Ich habe es bisher nicht hinbekommen, die beiden unterschiedlichen Roombas in einem einzelnen Python-Programm abzudecken. Also werden ganz einfach zwei davon gestartet, es gibt zwei bach-Skripte in /opt/fhem, eins zum checken
#!/bin/bash

statsauger=`ps -ef | grep fhemsauger | grep -v grep | awk '{print $2}'`
statfeger=`ps -ef | grep fhemfeger | grep -v grep | awk '{print $2}'`

if [ "$statsauger" == "" ] || [ "$statfeger" == "" ]; then
  echo -n "0"
else
  echo -n "1"
fi
und eins zum Starten der beiden Python-Programme
#!/bin/bash

statsauger=`ps -ef | grep fhemsauger | grep -v grep | awk '{print $2}'`
statfeger=`ps -ef | grep fhemfeger | grep -v grep | awk '{print $2}'`

if [ "$statsauger" == "" ]; then
  python3 /root/Roomba980-Python/roomba/fhemsauger.py > /dev/null 2> /dev/null &
fi

if [ "$statfeger" == "" ]; then
  python3 /root/Roomba980-Python/roomba/fhemfeger.py > /dev/null 2> /dev/null &
fi

7. Auf FHEM-Seite werden diese überwacht durch einen Dummy
Internals:
   CFGFN     
   FUUID      5f5df29c-f33f-a726-2e25-be3150af0bbdd339
   NAME       RoombaBridge
   NR         1291
   STATE      on
   TYPE       dummy
   READINGS:
     2020-09-13 12:49:01   state           on
Attributes:
   devStateIcon off:ios-off .*:ios-on-green
   setList    start stop on off
   webCmd     start:stop
ein at zum periodischen checken
Internals:
   CFGFN     
   COMMAND    {fhem("set RoombaBridge ".((`/opt/fhem/checkRoomba.sh` eq "1")?"on":"off"))}
   DEF        +*00:05:00 {fhem("set RoombaBridge ".((`/opt/fhem/checkRoomba.sh` eq "1")?"on":"off"))}
   FUUID      5f5df319-f33f-a726-6529-6a2067913cf0b841
   NAME       RoombaChecker
   NR         1323
   NTM        12:54:01
   PERIODIC   yes
   RELATIVE   yes
   REP        -1
   STATE      Next: 12:54:01
   TIMESPEC   00:05:00
   TRIGGERTIME 1599994441.07101
   TRIGGERTIME_FMT 2020-09-13 12:54:01
   TYPE       at
   READINGS:
     2020-09-13 12:49:01   state           Next: 12:54:01
Attributes:
und ein IF zum Abfangen der start/stop-Befehle für die Python-Skripte
Internals:
   CFGFN     
   DEF        ([RoombaBridge] eq "start")
 ({system ("sudo /opt/fhem/startRoomba.sh")},
 {fhem("set RoombaBridge ".
  ((`/opt/fhem/checkRoomba.sh` eq "1")?"on":"off"))})
DOELSEIF ([RoombaBridge] eq "stop")
 ({system ("sudo /opt/fhem/stopRoomba.sh")},
{fhem("set RoombaBridge ".
  ((`/opt/fhem/checkRoomba.sh` eq "1")?"on":"off"))})
   FUUID      5f5df3a0-f33f-a726-7120-1bf01544cde3ae26
   MODEL      FHEM
   NAME       Roomba.IF
   NOTIFYDEV  RoombaBridge,global
   NR         1359
   NTFY_ORDER 50-Roomba.IF
   STATE      initialized
   TYPE       DOIF
   VERSION    22757 2020-09-11 16:21:17
   READINGS:
     2020-09-13 12:49:01   Device          RoombaBridge
     2020-09-13 12:27:47   cmd             0
     2020-09-13 12:49:01   e_RoombaBridge_STATE on
     2020-09-13 12:27:47   mode            enabled
     2020-09-13 12:27:47   state           initialized
   Regex:
     accu:
     cond:
       RoombaBridge:
         0:
           &STATE     ^RoombaBridge$
         1:
           &STATE     ^RoombaBridge$
   condition:
     0          ::InternalDoIf($hash,'RoombaBridge','STATE') eq "start"
     1          ::InternalDoIf($hash,'RoombaBridge','STATE') eq "stop"
   do:
     0:
       0          {system ("sudo /opt/fhem/startRoomba.sh")},  {fhem("set RoombaBridge ".   ((`/opt/fhem/checkRoomba.sh` eq "1")?"on":"off"))}
     1:
       0          {system ("sudo /opt/fhem/stopRoomba.sh")}, {fhem("set RoombaBridge ".   ((`/opt/fhem/checkRoomba.sh` eq "1")?"on":"off"))}
     2:
   helper:
     DEVFILTER  ^global$|^RoombaBridge$
     NOTIFYDEV  global|RoombaBridge
     event      on
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev RoombaBridge
     triggerEvents:
       on
     triggerEventsState:
       state: on
   internals:
     all         RoombaBridge:STATE
   readings:
   trigger:
   uiTable:
Attributes:
   do         always

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 13 September 2020, 15:38:51
OK, Auslesen klappt auch ohne zusätzliche Python-Programme.

Der Weg ist also jetzt:
MQTT2_DEVICE <-> MQTT2_CLIENT <-> Roomba-MQTT-Server <-> Roomba-Gerät

Nö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.

Ergebnis ist - bei verbose 5 - eine ganze Menge von Messages, hier ein paar Auszüge
Zitat
2020.09.13 15:27:01 5: RoombaSaugerClient: received PUBLISH (0)*$aws/things/3xx90/shadow/update{"state":{"reported":{"batPct":84,"dock":{"known":false},"bin":{"present":true,"full":false},"audio":{"active":false}}}}
2020.09.13 15:27:01 5: RoombaSaugerClient: dispatch autocreate=simple\0003xx90\000$aws/things/3xx90/shadow/update\000{"state":{"reported":{"batPct":84,"dock":{"known":false},"bin":{"present":true,"full":false},"audio":{"active":false}}}}
2020.09.13 15:27:01 5: RoombaSaugerClient: received PUBLISH (0)*$aws/things/3xx90/shadow/update{"state":{"reported":{"cleanMissionStatus":{"cycle":"none","phase":"charge","expireM":0,"rechrgM":0,"error":0,"notReady":0,"mssnM":0,"sqft":0,"initiator":"rmtApp","nMssn":68},"language":4,"noAutoPasses":true,"noPP":false,"ecoCharge":false}}}
2

die auch mit autocreate wunderbar in die entsprechenden Readings umgewandelt werden. Sowohl die MQTT2_Devices, als auch die Readings werden sauber angelegt, dabei ist z.B. die readingList dann aber manuell angepasst auf
Zitat
3xx90:wifistat:.* { json2nameValue($EVENT) }
3xx90:.*aws/things/3xx90/shadow/update:.* { json2nameValue($EVENT) }

Passt also. Jetzt fehlt mir nur noch ein schlauer Einfall für die setList.

Probiert habe ich ohne Erfolg schon das Publizieren von
/things/3xx90/command start
*$aws/things/3xx90/command start
*$aws/things/3xx90/command start
und ungefähr 100 Variationen davon. Hat irgendjemand von Euch einen Schimmer, wie ich den richtigen Topic dafür finden kann?


LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 14 September 2020, 10:01:08
Hmm, unterstellt, der Code aus https://github.com/ThorstenPferdekaemper/FHEM-Roomba980/blob/master/FHEM/42_Roomba980.pm#L309 paßt noch, müßte der Command-Topic eigentlich nur "cmd" (also ganz ohne things oä, einfach nur diese drei Buchstaben) sein, oder lese ich "apiCall()" ggf. falsch?

Allerdings ist mir dann nicht klar, welche Messages ggf. dann JSON-encoded sein müssen, aber das ergibt sich (jedenfalls für eine ggf. ältere Version) auch aus diesem apiCall(), oder? (Das ist aber etwas für mich schwierig zu raten, ich habe keinen wirlliche Idee, was die ganzen Kommandos sollen...)
Gibt's denn nirgends eine Beschreibung der MQTT-API?

(Oder gibt es ggf. eine Option für "Homeassistant"? Das wäre ggf. hilfreich, weil da dann u.a. auch drinstehen sollte, was das Ding an Befehlen unter welchem Topic entgegennimmt).
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 14 September 2020, 12:28:58
Bisher alles (auch "cmd") ohne erfolg ausprobiert.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: carlos am 14 September 2020, 12:37:15
Hallo,
Wollte mal das mit folgendem MQTT2 Client nachstellen:
defmod myRoombaClient MQTT2_CLIENT 192.168.178.62:1883
attr myRoombaClient SSL 1
attr myRoombaClient autocreate simple
attr myRoombaClient clientId 123456789
attr myRoombaClient mqttVersion 3.1.1
attr myRoombaClient room Roomba
attr myRoombaClient sslargs SSL_version:SSLv23
attr myRoombaClient username 123456789
attr myRoombaClient verbose 5

setstate myRoombaClient disconnected
setstate myRoombaClient 2020-09-14 12:30:48 state disconnected

Allerdings ist der immer disconnected.
username und clientId ist auf die BLID gesetzt.
password ist natürlich auch gesetzt.

im log sehe ich nur:
2020.09.14 12:34:10 5: HttpUtils url=https://192.168.178.62:1883/
2020.09.14 12:34:10 4: IP: 192.168.178.62 -> 192.168.178.62
2020.09.14 12:34:10 4: HttpUtils: 192.168.178.62: Verbindungsaufbau abgelehnt (111)
Was fehlt hier noch?

Gruß Carlos
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 14 September 2020, 12:50:19
Hallo Carlos,

ich hätte anstatt 1883 - 8883 vermutet?

Gruß Otto
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: carlos am 14 September 2020, 13:19:31
Habe ich schon probiert, geht auch nicht nicht.
Im übrigen gehen als HTTPMod und JsonMod (nur status) angelegte devices hervorragend.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 14 September 2020, 13:25:27
@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).
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 14 September 2020, 13:35:50
und irgendwo hatte ich gelesen, dass der oBB ;) sowieso nur eine gleichzeitige Verbindung akzeptiert!? Aber ich rede nur theoretisch ...
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 14 September 2020, 13:41:20
@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 (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?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: carlos am 14 September 2020, 13:42:12
Aber PAH schreibt doch:

Zitat
Nö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.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 14 September 2020, 13:44:35
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.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 14 September 2020, 13:52:54
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...
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 14 September 2020, 14:06:38
Zitat
wieder 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

Zitat
Gibt's denn nirgends eine Beschreibung der MQTT-API?

Keine, die ich gefunden hätte.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 14 September 2020, 14:30:15
(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...
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 14 September 2020, 15:38:23
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
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 14 September 2020, 16:03:50
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 :) ).
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 14 September 2020, 16:23:32
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
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 14 September 2020, 17:16:27
@carlos: im Roboter darf nicht ecoCharge=true gesetzt werden, das verhindert die Verbindung mit dem MQTT2_CLIENT

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: carlos am 14 September 2020, 18:13:18
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
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 14 September 2020, 18:15:55
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
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 14 September 2020, 18:40:12
Hmm, bei der readingList kann man die CID jedenfalls dann rauslassen, wenn man nicht mehrere von den Dingern hat (es sollte wg. des individuellen IOs dann trotzdem klappen, aber es dürfte andere rL geben, wenn das Ding irgendeinen Namen hat?).

 Statt die ID irgendwie als regex-Teil zu nehmen, kannst du auch $DEVICETOPIC als Wildcard hernehmen (muß dann entsprechend gesetzt sein).

Wirf mal einen Blick auf den tasmota2zigbee-Teil. Da gibt es Logiken, einen inneren JSON zu erkennen und dann auch nur den auszuwerten; ansonsten gibt es bei json2nameValue() einen 4. Parameter, um Teile rauszufiltern (filter als Schlagwort sollte für j2nv wenige Treffer liefern).

Parameter kann man mit $EVTPART1 etc. übergeben, damit sollte z.B.
boost:true, false cmd {"json_elemente":"$EVTPART1"}gehen. Auch da gibt es einige Beispiele in der mqtt2.template-file, wenn man nach EVTPART sucht. setList kann auch Perl, es muß am Ende dann einfach ein String mit topic+Payload zurückgeliefert werden, wie du das zusammenbaust, bleibt dir überlassen (schnelles Beispiel: tasmota_rgbw_led). Zur Doku: Du darfst das gerne besser machen, ich suche noch nach einem freiwilligen, der einen Artikel zu den ganzen MQTT2_DEVICE-Attributen bzw. auch den allgemeinen FHEMWEB-Attributen entwirft (anhand eines shelly-pm). Da würde dann Perl-setList zwar erst ganz am Ende kommen, aber wer auch immer den schreibt, kann das ja aufnehmen ;) ... (Ansonsten ist die mqtt2.template ein ziemlich guter Steinbruch für alles mögliche, man muß nur wissen, nach was man sucht...)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: TomLee am 14 September 2020, 18:59:58
Zitat
boost:true, false cmd

Ist das richtig mit dem Leerzeichen zwischen dem Komma und false ? das klappt doch nicht oder doch ? Habs nicht ausprobiert...
Wenn doch, Kommentar einfach ignorieren.

edit:
für die mit weniger Erfahrung:
attr widgets setList 00select:1,2,3,4,5,a,b,c,def,hik (https://wiki.fhem.de/wiki/FHEMWEB/Widgets)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 14 September 2020, 19:03:41
Unbeabsichtigt, sorry...
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 15 September 2020, 14:14:56
Zitat
Zur Doku: Du darfst das gerne besser machen, ich suche noch nach einem freiwilligen, der einen Artikel zu den ganzen MQTT2_DEVICE-Attributen bzw. auch den allgemeinen FHEMWEB-Attributen entwirft (anhand eines shelly-pm).
Setze ich gerne auf meine Agenda. Allerdings schreibe ich derzeit an einem neuen Buch, das kann also ein Jahr dauern...

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 15 September 2020, 14:31:59
Setze ich gerne auf meine Agenda. Allerdings schreibe ich derzeit an einem neuen Buch, das kann also ein Jahr dauern...
;D

Lass mal, vielleicht finde ich vorher einen anderen Freiwilligen, der das dann auch tatsächlich mal macht....? ("Jüngst" kam das mit dem eocr&Co wieder ganz neu in den Fokus :'( .)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 15 September 2020, 16:38:09
So, ich habe eine arbeitsfähige Version der ganzen Angelegenheit.

Unschön ist noch die gigantische Menge an Readings - von denen man dann die meisten wieder mit der jsonMap eliminieren muss. Mir schwebt derzeit vor, stattdessen ein paar Hilfsfunktionen zu definieren, die an Stelle von json2nameValue aufgerufen werden können und aus dem strukturierten JSON-Zeug wenige aussagekräftige Readings machen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: TomLee am 15 September 2020, 16:50:27
Geht es denn nicht mit dem optionalen 4. Parameter von json2nameValue diese weniger aussagekräftigen Readings gleich zu erhalten ?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 15 September 2020, 16:54:57
Halte ich für zielführend mit den Hilfsfunktionen, falls das mit "filter" in json2nameValue() nicht passt (?). (In der Hinsicht war TomLee schneller :) )

Es gibt eine funktionierende Konstruktion für ebus und den anderen Sauger, die man übertragen könnte: da wird myUtils-Code vom attrTemplate dann aus dem contrib-svn nachgeladen. Die "extended version" gäbe es in zwave.template: der zugehörige myUtils-Code ist dort auch noch als package ausgeformt...
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: GerhardSt am 15 September 2020, 18:58:41
Hallo!

Find ich super, wenn man den Roboter wieder steuern kann.
Hab es gleich mit dem Roomba e5 probiert, damit funktioniert es auch.
Allerdings dürfte etwas noch nicht ganz stimmen, den so lange MQTT aktiv ist, leuchten am Roboter alle weißen LED (CLEAN, WLAN, Home) auf dauer.
Normal gehen die nach kurzer Zeit aus.
Ist das bei den anderen Typen auch so?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 15 September 2020, 21:14:53
@Beta-User: filter wird es nicht tun. Wenn ich z.B. aus dem länglichen JSON-Ausdruck die Datenwerte für state_reported_cleanSchedule_H_7=9 und state_reported_cleanSchedule_m_7=0 nicht möchte, sondern daraus den Zeitpunkt 9:00 (Samstags) konstruieren will, komme ich um etwas Perl-code nicht herum.


@GerhardSt: Ich habe das jetzt mit einem 960 und einem 981 ausprobiert, zu anderen Typen kann ich nichts sagen. Aktuelle Version von readingList und setList anbei (DEVICETOPIC ist auf die BLID gesetzt). Finde ich aber prima, bei so vielen unterschiedlichen Typen kann man nur gemeinsam etwas erreichen. Es ist ganz instruktiv, sich dafür mit verbose=5 im MQTT2_CLIENT die rohen Events anzuschauen.

Bei mir sehe ich auch nichts von dauerhaft leuchtenden LEDs. Allerdings verliert, wenn ich "ecoCharge" true setze, der Roboter seine Verbindung und kann per MQTT offenbar auch nicht mehr aufgeweckt werden. Wenn ich etwas mehr Zeit habe, werde ich mal ausprobieren, ob ein Wake-On-Lan-Paket das Teil wieder aufweckt.

LG

pah

readingList:

$DEVICETOPIC:wifistat:.*  { json2nameValue($EVENT,'',$JSONMAP) }
$DEVICETOPIC:.*pose.* { json2nameValue($EVENT,'',$JSONMAP) }
$DEVICETOPIC:.*batPct.* { json2nameValue($EVENT,'',$JSONMAP) }
$DEVICETOPIC:.*Command.* { json2nameValue($EVENT,'',$JSONMAP) }
$DEVICETOPIC:.*cleanSchedule.* { json2nameValue($EVENT,'',$JSONMAP) }

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"}
CarpetBoost:true,false delta {"state": {"carpetBoost": $EVTPART1}}
TwoPass:true,false delta {"state": {"twoPass": $EVTPART1}}
VacHigh:true,false delta {"state": {"vacHigh": $EVTPART1}}
BinPause:true,false delta {"state": {"binPause": $EVTPART1}}
OpenOnly:true,false delta {"state": {"openOnly": $EVTPART1}}

jsonMap ist inzwischen etwas länglich
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
state_reported_audio_active:audioActive
state_reported_batPct:battery
state_reported_bin_full:binFull
state_reported_bin_present:0
state_reported_dock_known:0
state_reported_batteryType:0
state_reported_cap_binFullDetect:0
state_reported_cap_carpetBoost:0
state_reported_cap_eco:0
state_reported_cap_edge:0
state_reported_cap_langOta:0
state_reported_cap_maps:0
state_reported_cap_multiPass:0
state_reported_cap_ota:0
state_reported_cap_pose:0
state_reported_cap_pp:0
state_reported_cap_svcConf:0
state_reported_hardwareRev:0
state_reported_sku:0
state_reported_soundVer:0
state_reported_uiSwVer:0
state_reported_cleanSchedule_cycle_1:tpSunday
state_reported_cleanSchedule_cycle_2:tpMonday
state_reported_cleanSchedule_cycle_3:tpTuesday
state_reported_cleanSchedule_cycle_4:tpWednesday
state_reported_cleanSchedule_cycle_5:tpThursday
state_reported_cleanSchedule_cycle_6:tpFriday
state_reported_cleanSchedule_cycle_7:tpSaturday
state_reported_cleanSchedule_h_1:tpSundayH
state_reported_cleanSchedule_h_2:tpMondayH
state_reported_cleanSchedule_h_3:tpTuesdayH
state_reported_cleanSchedule_h_4:tpWednesdayH
state_reported_cleanSchedule_h_5:tpThursdayH
state_reported_cleanSchedule_h_6:tpFridayH
state_reported_cleanSchedule_h_7:tpSaturdayH
state_reported_cleanSchedule_m_1:tpSundayM
state_reported_cleanSchedule_m_2:tpMondayM
state_reported_cleanSchedule_m_3:tpTuesdayM
state_reported_cleanSchedule_m_4:tpWednesdayM
state_reported_cleanSchedule_m_5:tpThursdayM
state_reported_cleanSchedule_m_6:tpFridayM
state_reported_cleanSchedule_m_7:tpSaturdayM
state_reported_bbchg3_avgMin:0
state_reported_bbchg3_estCap:0
state_reported_bbchg3_hOnDock:0
state_reported_bbchg3_nAvail:0
state_reported_bbchg3_nDocks:0
state_reported_bbchg3_nLithChrg:0
state_reported_bbchg3_nNimhChrg:0
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 17 September 2020, 09:11:45
Hallo und erstmal vielen Dank für eure Mühen.

ich hatte schon länger vor meinen Roomba einzubinden.
Auf Wunsch der Regierung ist zufällig vorgestern der 2e 675 angekommen.

Ich habe es nach pah s "nackten Konfigurationsdaten" und jsonMAP / setList / readingList eingebunden.

Ich kann bestätigen:Die Roomba 675/676 funktionieren - auch mit der aktuellsten Firmware.

Gruß und Dank

Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 17 September 2020, 09:47:06
@Beta-User: filter wird es nicht tun. Wenn ich z.B. aus dem länglichen JSON-Ausdruck die Datenwerte für state_reported_cleanSchedule_H_7=9 und state_reported_cleanSchedule_m_7=0 nicht möchte, sondern daraus den Zeitpunkt 9:00 (Samstags) konstruieren will, komme ich um etwas Perl-code nicht herum.
:) einleuchtend...

Daher gab es ja auch gleich die "extended Version":
Die "extended version" gäbe es in zwave.template: der zugehörige myUtils-Code ist dort auch noch als package ausgeformt...
Das mit package würde ich hier (vom Bauchgefühl her) für die "richtige" Vorgehensweise ansehen; das ganze hat dann ja wirklich den "Einschlag" eines eigenständigen Moduls, und evtl. läßt sich ja was vom Code des seitherigen Moduls wiederverwerten?
(Vermutlich werde ich auch den anderen MQTT2-Sauger-Code mal Richtung package umbauen, ist aber low prio).

(Ansonsten finde ich es klasse, dass sich so schnell weitere User für diesen "usecase" eingefunden haben, Danke für's "Anschubsen"!)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 17 September 2020, 10:00:23
Ich habe mich ja bisher immer um attrTemplate herumgedrückt. Allerdings erscheint es mir ab sofort sinnvoll, und ich werde auch das mit dem Package bevorzugen.

Es ist eigentlich auch logisch, dass bei der Vielzahl der vorhandenen Module damit etwas unterhalb der Modulebene enststeht, das mit verteilt werden kann.

Betreffend die Roombas habe ich Folgendes auf der Agenda:
- Bessere Rückmeldungen in FHEM über Zustand und Ablauf der Reinigung
- Erzeugen von Cleaning Maps via FHEM (aus den gemeldeten Positionen)

Wenn ich herausfinde, wie man die Kiste an eine bestimmte Position manövrieren kann, könnte man auch so etwas wie "hier ist es schmutzig, mach mal bitte da sauber" erreichen, ohne die Kiste hochzuheben.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 17 September 2020, 10:25:39
Ich habe mich ja bisher immer um attrTemplate herumgedrückt.
Na ja, das überrascht vielleicht, aber ich war auch erst skeptisch, ob das ganze ein "gutes" Werkzeug ist und noch skeptischer, als ich dann entschieden habe, via attrTemplate die "on/off"-Meldungen auf den Tasmota-firmwares auf Kleinschreibung umzukonfigurieren und damit etwas zu machen, was auch "außerhalb FHEM" Auswirkungen hat.

Grundsätzlich hat sich die ganze Methodik aber m.E. bewährt, vor allem für Sachen, die sehr "offen" in der Konfiguration sind und dem, was sie an Daten und Kommandos liefern, wie eben MQTT2_DEVICE (oder HTTPMOD, aber da lag es mAn. an dem bisherigen Maintainer, dass das nicht so recht vorwärts gekommen ist (wobei: "gefühlt" ist da auch deutlich mehr Bewegung drin als früher)).

Bin mal gespannt, ob das Werkzeug auch tauglich ist für "spezifischere" Dinge, z.B. ZWave, aber mAn. besteht schon ein gewisser Bedarf nach einer Standardisierung für FHEM auch da, wo es nicht zwingend wäre (wie eben bei ZWave). Mal sehen, können wir ja an anderer Stelle mal vertiefen...
(Für Mitleser: tendenziell wäre das auch ein Weg, standardisierte Konfigurationen für MODBUS zu teilen. Falls da jemand Starthilfe braucht: melden! Ich kenne da aber im Prinzip auch nur das Schlagwort.)

Zitat
Es ist eigentlich auch logisch, dass bei der Vielzahl der vorhandenen Module damit etwas unterhalb der Modulebene enststeht, das mit verteilt werden kann.
MAn. hängt das eher weniger an der Zahl der Module, sondern eher an der Art des "Inputs": MQTT2_DEVICE, HTTPMOD und MODBUS "leben" eigentlich vorwiegend durch Attribute, da ist der Weg über (z.B.) attrTemplate einfach sehr viel schneller, was updates und Reaktionen auf (z.B.) firmware- oder Webseiten-updates angeht, auch, weil die User nicht in den Modulcode müssen und daher eher geneigt sind, "patches" zu liefern.

Das mit der Zusatzsoftware ist zweischneidig, weil die (z.B. bei Systemwechseln) ggf. separat nachinstalliert werden muss. Da werden wir also irgendwann die ersten "Einschläge" haben... Insgesamt ist das Verfahren aber an sich soweit transparent (und bekannt), dass das handhabbar sein dürfte.

Von daher: Willkommen an Bord und viel Erfolg mit der Agenda für den Roomba!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 17 September 2020, 12:14:29
Hallo,

das mit den dauerhaft leuchtenden LEDs kann ich für die 675/676 bestätigen.
Eventuell fehlt hir noch ein Poweroff? Oder kann mann die Verbindung des MQTT2 Clients geplant trennen und erneut aufbauen?

Ich bin zu jeder Schandtat (testen) bereit.

edit: nach etwas Geteste - wenn ich das MQTT Topic /blid/disconnect sende disconected der Client kurz conneted sich aber aufgrund von
nextopendelay nach 5 Sekunden wieder. Da hilft auch kein KeepAlive 0. Wenn ich das MQTT2_Client Device lösche geht Robi nach ca.
einer Minute schlafen. Lege ich es wieder an und trage das Passwort ein, ist er sofort wieder erreichbar. Das Licht ist dann aber auch an.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 17 September 2020, 20:05:06
Zuerst müsste man testen, ob die Leuchten tatsächlich mit dem "Connect"-Zustand zusammenhängen. Das kann man z.B. testen, indem in das MQTT2_CLIENT temporär mit einer anderen IP-Adresse umdefiniert.

Einen Poweroff-Befehl gibt es bei meinen Robotern nicht - vlt. mal ein Foto des 676 mit/ohne LED posten?

Wie reagieren die LED, wenn man den Roboter nicht mit FHEM (=localApp) sondern dem Handy (=remoteApp) steuert?

Kann MQTT2_CLIENT den Robot wieder aufwecken, wenn seine LED aus sind?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 17 September 2020, 20:30:12
Hallo,

wenn ich den Client umdefiniere oder wie oben geschrieben aus der Fhem CFG entferne, geht er braf schlafen.
Der Zustand ist unabhängig davon, ob er auf der Ladestation oder im Raum rumsteht. Es leuchtet Power und WLan.

Füge ich den Client wieder ein, wacht er brav auf und lässt sich bedienen. Allerdings sind dann die LED auch wieder an.

Für mein Verständniss fehlt hier in der Implementierung von MQTT2_Client das schon öfter angesprochene Connect/Disconnect.

edit:
Man könnte jetzt quick an dirty mit modify device 'ip vom Mars':8883 arbeiten und das in einen AT packen sowie mit einem Notify
vom Client Device triggern - aber schön ist anders....

Besser wäre ein Disconect sowie regelmäßiges Connect alle 60? Minuten um die Statuswerte zu refreshen.
Dann geht zwar alle 60 Minuten das Licht für 2 Minuten an aber das wäre zu verschmerzen.
Das Connect kann dann ebenfalls per Notify vom MQTT2_Device erzwungen werden für Start und
das Disconnect ausgesetzt werden für z.B. 2h. (Länge Reinigungszyklus)


Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 17 September 2020, 20:53:11
Gibt es. Setzt man das Attribut disable=1, sollte die Connection aufgelöst werden. disable=0 stellt den Zustand wieder her, in dem sich der Client selbsttätig wieder verbindet.

Bitte mal ausprobieren, was das mit den LED macht.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 17 September 2020, 20:55:38
Hallo,

leider nix - schon getestet. Das Attribut verhindert das Senden von Informationen, der Status bleibt aber connected.
Robi geht also nicht schlafen. Sonst wäre es einfach...

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 17 September 2020, 21:14:16
OK, habe einen Feature request abgesetzt. Diskussion erfolgt hier: https://forum.fhem.de/index.php/topic,114299.0.html

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 17 September 2020, 21:15:12
Hallo,

vielen lieben Dank.

edit:
Wenn was zu testen ist - ihr Logs braucht - immer Her damit. Gern auch per PM

edit2:
Zitat
Ich würde das sogar noch weiter treiben: Nicht am CLIENT muss eingestellt werden, wie lange sein KeepAlive dauern soll. Sondern das wäre am DEVICE zu machen, welches dies dann dem CLIENT mitteilt.

Gibt es dann die Möglichkeit mit dem späteren Template zu sagen, für welchen Befehl das Keepalive wie lange dauert?

Für Stop macht da aus meiner Sicht ein anderer Wert Sinn als für Start - wo mann vermutlich das Ende des Reinigungszyklus abwartet um z.B. Koordinaten zu bekommen.


Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 18 September 2020, 21:33:02
Guten Abend,

mit der neuen Version aus dem SVN disconnected er ordnungsgemäß.
Robi geht dann nach 2 Minuten schlafen. Neue Befehle werden
ordnungsgemäß entgegen genommen und er wacht auf und tut.
Dafür vielen Dank.

Irgendwie is es aber noch nicht ganz rund. Für Werte >6 bei Disconnect after bleibt die Connection einfach opened.
Wenn ich also als Wert 30 Sekunden eintrage, geht er niemals in den disconnect - zumindest was ich in den letzten
20 Minuten testen konnte.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 18 September 2020, 22:13:25
Werde ich morgen testen. Ich habe jetzt die ganze Mimik der Erstellung von Readings in externe Programme ausgelagert, ist sehr viel einfacher. Meine readingList lautet nur noch
$DEVICETOPIC:.*  {roomba::reading($EVENT)}sowie meine setList
start:noArg {roomba::command("start")}
stop:noArg {roomba::command("stop")}
dock:noArg {roomba::command("dock")}
resume:noArg {roomba::command("resume")}
pause:noArg {roomba::command("pause")}
CarpetBoost:true,false {roomba::setting("carpetBoost",$EVTPART1)}
TwoPass:true,false {roomba::setting("twoPass",$EVTPART1)}
VacHigh:true,false {roomba::setting("vacHigh",$EVTPART1)}
BinPause:true,false {roomba::setting("binPause",$EVTPART1)}
OpenOnly:true,false {roomba::setting("openOnly",$EVTPART1)}
jsonMap ist leer. Der zugehörige Code - kann man z.B. in myUtils packen, hängt unten dran. Achtung: Das ist experimenteller Code, Alpha-Version

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 18 September 2020, 22:24:58
Die readingList und setList sieht ziemlich cool aus!

Wir sollten das Namensschema-Thema mal allg. (im Developer-Bereich?) zur Diskussion stellen, in der zwave-Geschichte sieht das "etwas aufgedröselter" aus, was mich allerdings auch nicht nur glücklich macht, aber am Funktionsaufruf leichter erkennen läßt, wo der Code eigentlich herkommt. Bauchgefühl ruft nach praktikablem Mittelweg...
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 18 September 2020, 22:34:44
Guten Abend in die Runde,

den Alpha Code teste ich morgen Mittag - die Regierung ruft.
Dann mache ich auch noch mal einen Wireshark um zu sehen,
Was da hin und her fliegt und warum bei Disconnect >6 die
Verbindung stehen bleibt.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 19 September 2020, 19:32:48
EDIT: Ich habe gerade die Aufrufe in der readingList ebenso wie in der setList grundlegend geändert. Ist nötig, weil ich bei der Kartenerzeugung Referenzen auf das Device benötige. Nachstehend die aktuellen Definitionen, so werden sie auch bleiben.

Der Roomba-spezifische Code zur Erzeugung von Readings und zum Setzen diverser Parameter umfasst jetzt ca. 400 Zeilen, ich habe ihn darum erst einmal in ein Modul 99_RoombaUtils.pm ausgelagert. Wo man diesen Code später hinsteckt, lasse ich für den Moment noch offen - im Moment genügt es, dass 99_RoombaUtils beim FHEM-Start in /opt/fhem/FHEM liegt. Man kann das natürlich auch von Hand laden.

readingList:
$DEVICETOPIC:.* {roomba::reading($NAME,$EVENT)}
Die setList ist jetzt wegen der einzustellenden Saugprogramme etwas länger geworden.
start:noArg {roomba::command($NAME,"start",$EVENT)}
stop:noArg {roomba::command($NAME,"stop",$EVENT)}
dock:noArg {roomba::command($NAME,"dock",$EVENT)}
resume:noArg {roomba::command($NAME,"resume",$EVENT)}
pause:noArg {roomba::command($NAME,"pause",$EVENT)}
CarpetBoost:true,false {roomba::setting($NAME,"carpetBoost",$EVENT)}
TwoPass:true,false {roomba::setting($NAME,"twoPass",$EVENT)}
VacHigh:true,false {roomba::setting($NAME,"vacHigh",$EVENT)}
BinPause:true,false {roomba::setting($NAME,"binPause",$EVENT)}
OpenOnly:true,false {roomba::setting($NAME,"openOnly",$EVENT)}
ProgHold:true,false {roomba::setting($NAME,"schedHold",$EVENT)}
ProgSun:time {roomba::setsched($NAME,0,$EVENT)}
ProgMon:time {roomba::setsched($NAME,1,$EVENT)}
ProgTue:time {roomba::setsched($NAME,2,$EVENT)}
ProgWed:time {roomba::setsched($NAME,3,$EVENT)}
ProgThu:time {roomba::setsched($NAME,4,$EVENT)}
ProgFri:time {roomba::setsched($NAME,5,$EVENT)}
ProgSat:time {roomba::setsched($NAME,6,$EVENT)}

Das Modul befindet sich in der Anlage.

Nächster Punkt auf der Agenda: Karte zusamenbauen mit SVG. Funktioniert schon teilweise, der abgefahrene Pfad wird nach dem Ende des Durchlaufs in dem Reading cmPath abgelegt.

Vielleicht könnte jemand anders mal Folgendes probieren:
1. Robot mit einem "start" vom Dock entfernen.
2. Robot mit einem "stop" anhalten.
3. Mit einem geänderten set-Befehl die gegenwärtige Positionauf irgendetwas  _setzen_
4. Robot mit einem "dock" zum Dock schicken.

Die Frage steht nämlich im Raum, wie man die Kiste dazu bringen kann, an eine bestimmte Position zu fahren. Orientiert sie sich nur am IR-Signal der Docking Station? Was, wenn dieses nicht empfangen wird - geht es dann nach der Position?

LG

pah

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 20 September 2020, 15:24:08
OK, hier die erste mit FHEM erzeugte Karte. Roomba 960, saugte im Dachgeschoss. Schränke etc. sind gut erkennbar, ebenso der Treppenabsatz.
Die acht-förmigen Strukturen links sind Stuhlbeine (in der Mitte ein Tisch), die U-förmige Aussparung links oben ist ein Sessel, die 5-blasige Struktur rechts ein Schreibtischstuhl.

Unangenehm: Die Kiste läuft nicht senkrecht zur Wand los. Das bedeutet, dass man ggf. aus den Daten irgendwie ableiten muss, um welchen Winkel das Koordinaten gedreht werden müssen, um das so in einen Grundriss einzupassen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 20 September 2020, 19:58:08
Guten Abend,

erstmal zur Map -> genial.

Ich bin leider nicht früher zum Wireshark gekommen - kankes Kind... :(

Zum Thema Timeout > 5

Es ist tatsächlich so, dass alle 5 Sekunden vom Roomba ein Status kommt und er deswegen nicht in den Disconnect geht.
Das Timeout muss also doch eingehende Signale für den Timeout-Timer ignorienen. Doch noch eine "Bestellung"....

Siehe Screenshot vom Wireshark

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 20 September 2020, 21:23:02
Wieso ? Mit einem Timeout von 5 Sekunden kann man doch gut leben.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 20 September 2020, 22:56:15
Guten Abend,

prinzipiell schon, aber dann muss man ihn während der Reinigung pollen um die Position und die Statuswerte zu erhalten. Meine Idee war eher für verschiedene Aufgaben verschiedene Timeouts mitzugeben. Quasi für Start z.B. 2h um eben solange Stauswerte zu erhalten oder für Dock 10 Minuten - länger braucht er nicht zum Finden des Docks.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 21 September 2020, 13:14:54
Seltsam. Ich erhalte Status und Position auch bei einem Timeout von 5 Sekunden. Und zwar bei beiden Kisten.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 21 September 2020, 20:47:02
Hallo,

ich habe jetzt noch mal getestet. Wenn er mehr als 5 Sekunden DisconnectTimeout eingestellt bekommt, macht er keinen Disconnect.
Dies geschieht aufgrund der eingehenden Statusmeldungen. Stelle ich ihn auf 5 Sekunden ein, disconnected er den MQTT Client.
Das bedeutet, dass er das MQTT Abonnement sauber beendet. Damit bekommt er vom MQTT Server des Roombas keine weiteren
Informationen mehr mitgeteilt - ergo auch keine Statuswerte.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: rudolfkoenig am 21 September 2020, 21:03:39
Zitat
Damit bekommt er vom MQTT Server des Roombas keine weiteren Informationen mehr mitgeteilt - ergo auch keine Statuswerte.
Ich verstehe noch nicht, warum erwaehnenswert ist, dass ohne eine Verbindung keine Daten ausgetauscht werden. Uebersehe ich etwas?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 22 September 2020, 06:34:44
Guten Morgen,

Ja ich hatte versucht zu erklären, dass ein Disconnect Timeout >5 nicht zum Disconnect führt, da vom Roboter Statusdaten kommen. Ich habe aber Timeout und nicht DisconnectTimeout geschrieben, was vermutlich zu Missverständnissen führte. Siehe die letzten Posts.

Daher habe ich das mit dem Disconnect noch einmal explizit beschrieben, wobei es natürlich wie erwartet dem Protokoll entspricht.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 22 September 2020, 07:57:48
Ich verstehe das Problem auch nicht - bei mir laufen die beiden Kisten wie gewünscht.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 23 September 2020, 09:14:38
Hallo die Herren,

also bei den 675/676 verhält es sich folgendermaßen:

Stelle ich ein DisconnectTimeout kleiner/gleich 6 ein, disconnected er nach der eingestellten Anzahl an Sekunden. Dabei ist es völlig egal, ob er in einem Reinigungszyklus ist oder auf dem Dock steht. Offensichtlich überträgt er hier beim Reinigen auch nur alle ca. 6 Sekunden etwas (Position,...)

Stelle ich ein DisconnectTimeout größer 6 ein bleibt die Verbindung dauerhaft bestehen. Auch hier ist es egal in welchem Zyklus er sich befindet. Es werden regelmäßig Statusdaten übertragen.

Wenn ich mir was wünschen dürfte, dann die Implementierung von Connect und Disconnet als Methoden für den MQTT2_Client. Dann könnte mann mit Notifys und AT Timern arbeiten.

Also z.B.
Wenn Status docked, dann disconnect.
Stündlich einen Connect und nach 2 Minuten wieder ein Disconnect um die Aktuellen Akkustände zu erhalten.
usw usf

Vermutlich verhält es sich bei den größeren Modellen der Roomba anders mit den Intervallen (Mehr Rechenleistung?)

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 23 September 2020, 14:22:37
Ich habe keine Problem, das mit den Connects und Disconnects zu verstehen. Allerdings verstehe ich nicht, welche Auswirkung das auf das Verhalten der Roboter haben sollte. Nur im Schlafmodus sollte die Verbindung disconnected sein, damit die Kiste sich wirklich ausruht und die LED ausgehen.

Nachtrag: ein automatischer Disconnect von wenigen Sekunden führt bei einem langsamen Start des Roboters dazu, dass die Verbindung nicht mehr besteht. Gleiches gilt, wenn der Robot durch die App gestartet wird - der Roboter kann eben nicht von sich aus die Verbindung mit FHEM herstellen. Damit kommen in FHEM auch keine Positionsupdates mehr an. Merkt man aber natürlich und kann - z.B. mit dem Setzen eines bereits gesetzten Attributes - sofort für einen Reconnect sorgen. Da die Positionsupdates ca. 1x pro Sekunde kommen, wird die Verbindung dann offengehalten.

Natürlich könnte man auch mit einem "get" bestimmte Daten abfragen - allerdings habe ich den MQTT-Topic zur Statusabfrage noch nicht herausgefunden. Das nochmalige Setzen eines Attributes löst die Sendung dieser Statusinformationen aus.


Also aus meiner Sicht alles in Butter, und das System ist problemlos ohne weitere Änderungen an MQTT_Device oder _Client einsetzbar.

LG

pah

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 23 September 2020, 15:30:50
Hallo,

leider nicht, denn unter 6 Sekunden Disconnected er immer, über 6 Sekunden Bleibt die Verbindung für immer bestehen.
Dabei ist es völlig egal in welchem Zustand sich der Robooter befindet.

Die Positionsupdates kommen beim 675 leider auch nur - wie oben geschrieben alle 6 Sekunden.

Attribute im Robotter sinnlos hin und her setzen möchte ich eher nicht. Get würde ein pollen des Robotters verlangen.

Wenn ich das Attribut DisconnectAfter per Notify für die Reinigung verändere erscheint im Fhem das rote Fragezeichen...

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 23 September 2020, 15:59:08
Hallo,

noch ein Nachsatz zum 99_RoombaUtils.pm

Zeile 174:

  }elsif( $cmd =~ /("stop")|("dock")/){
Stop und Dock funktioniert bei mir nur mit zus. eingefügten Anführungszeichen.
Das haben Sie aber bestimmt auch schon selbst herausgefunden - nur für Leute die hier mitlesen...
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: rudolfkoenig am 23 September 2020, 16:37:34
Ich habe jetzt set connect bzw. disconnect hinzugefuegt.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 23 September 2020, 16:48:00
@Rudi: Danke.

@Sturi
Zitat
  }elsif( $cmd =~ /("stop")|("dock")/){
Äh - nö. Das funktioniert korrekt auch ohne Anführungszeichen, wi eman auch leicht unter https://regex101.com/ testen kann.

Allerdings fliegt das auch umgehend wieder heraus - dann man kann nicht 100 kB String in ein FHEM_Reading packen.

Ich knobele noch an einem Algorithmus für die Nachbearbeitung der Karten. Denn tatsächlich läuft der Roboter durchaus in leicht unterschiedlicher Richtung los.


LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 23 September 2020, 18:06:37
Hallo in die Runde,

@Herr König,

vielen Dank für die viele Arbeit. Ich werde heute Abend respektive morgen Vormittag ausgiebig testen.

@Herr Henning,

Ohne die Anführungszeihen kommt bei mir leider LastCommand Start (oder was auch immer ich vorher gedrückt habe)
wenn ich auf Stop oder Dock drücke...mit Anführungszeichen funktioniert es.
Das mag am Perl 5.20.2 im Docker Container liegen.

Prallel dazu wirft er den Fehler:

2020.09.23 15:51:27 1: ERROR evaluating my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $NAME=   $evalSpecials->{'%NAME'};{roomba::command($NAME,"stop",$EVENT)}: Can't use an undefined value as an ARRAY reference at ./FHEM/99_RoombaUtils.pm line 175.

Nach Einbau der Hochkommata ist der Fehler weg. Ob das nun ursächlich war.... wenn es rausfliegt ist es sowieso egal.

->Notiz an mich selbst Container updaten!

Zur Ausrichtung der Map:
Eventuell den Winkel der Karte zu zwei Berührungspunkten mit der Wand links und rechts neben der Dockingstation abgleichen.
Das funktioniert aber nur, wenn die Dockingstation an einer glatten Wand steht - was aber in den seltendsten Anwendungsfällen
so sein wird. Damit wäre es nicht universell einsetzbar.
Alternativ können wir mal testen, ob mann eine virtual Wall als Fixpunkt einsetzen kann und ob dazu Stauswerte zurückkommen,
respektive wie er die Virtual Wall erkennt.

Wenn es Testcode gibt und nirgendwo eine Virtual Wall vorhanden ist, würde ich zu Testzwecken eine bestellen.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: rudolfkoenig am 23 September 2020, 18:20:00
Zitat
Ohne die Anführungszeihen kommt bei mir leider LastCommand Start (oder was auch immer ich vorher gedrückt habe) wenn ich auf Stop oder Dock drücke...mit Anführungszeichen funktioniert es.
Das ist vermutlich wie bei der Homoeopathie. Wissenschaftlich nicht zu erklaeren :)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 23 September 2020, 18:33:19
Ich habe 3 Virtual Walls - da gibt es kein Datum in den Statuswerten, dass er die getroffen hat. Ich habe schon Vorstellungen, wie man die Karten aufarbeiten kann.

Anbei zur Belustigung die Karte zweier Läufe in meinem Dachgeschoss - so richtig deterministisch ist das nicht.


LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: carlos am 27 September 2020, 23:16:08
Ich schaffe es immer noch nicht, dass sich mein MQTT2_Client mit meinem Roomba verbindet.
Im log sehe ich nur:
2020.09.27 23:13:34 5: HttpUtils url=https://192.168.178.62:8883/
2020.09.27 23:13:34 4: IP: 192.168.178.62 -> 192.168.178.62
2020.09.27 23:13:36 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
Bin für jede Hilfe dankbar.

Gruß

Carlos
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 28 September 2020, 07:55:59
SSL-Version richtig gsetzt ?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 28 September 2020, 08:27:28
Hallo Carlos,

Poste doch mal bitte deine Konfiguration.
Ist dein Roomba in der App eingebunden und hat er die aktuelle Firmware?
Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: carlos am 28 September 2020, 09:46:45
Hallo,
Meine device sieht genau so aus das wie von pah in post 29, deswegen bat ich da um die Daten:

defmod myRoombaClient MQTT2_CLIENT 192.168.x.y:8883
attr myRoombaClient SSL 1
attr myRoombaClient autocreate simple
attr myRoombaClient clientId 3.................20
attr myRoombaClient mqttVersion 3.1.1
attr myRoombaClient room Roomba
attr myRoombaClient sslargs SSL_version:SSLv23
attr myRoombaClient username 3.................20
attr myRoombaClient verbose 5

Mein Roomba ist in der app eingebunden und hat die Firmware 2.4.6-3 vom 14 Juni 2018.

Wie zuvor auch schon geschrieben funktioniert die Anbindung über rest980 als HTTPMod device mit den gleichen Daten (BLID/password).
Gruß

Carlos
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 28 September 2020, 10:24:55
Hallo,

ich vermute mal es liegt, an der zu aktuellen OpenSSL auf deinem Host System.
Siehe https://wiki.debian.org/ContinuousIntegration/TriagingTips/openssl-1.1.1 (https://wiki.debian.org/ContinuousIntegration/TriagingTips/openssl-1.1.1)

Schau mal bitte in deine \etc\ssl\openssl.conf
Da sollte es einen Wert
CipherString = DEFAULT@SECLEVEL=2geben. Diesen mal mit # ausremmen oder auf 1 heruntersetzten.

Interessant wäre in dem Zusammenhang auch sie Ausgabe von

openssl version

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: carlos am 28 September 2020, 10:52:47
Hallo Andreas,
Du hattest recht.
Mit CipherString = DEFAULT@SECLEVEL=1 funktioniert mein Client jetzt.
Vielen Dank für den Tip, da wäre ich nie drauf gekommen.

Zur Vollstandigkeit:

OpenSSL 1.1.1d  10 Sep 2019
Gruß

Carlos
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 28 September 2020, 11:08:44
Ich stelle hier mal etwas zur Abstimmung.

Bei der in Arbeit befindlichen Kartenerstellung taucht das Problem auf, dass zur Erstellung reproduzierbarer Karten (gibt es in der Form bei iRobot nicht, wohlgemerkt) die Bounding Box des Raumes angegeben werden muss.

Möglichkeit A: Angabe maximale Breite, maximale Tiefe des Raumes, sowie Position der Docking Station in Zentimetern von linker Kante und "unterer" (naher) Kante, sowie Startrichtung des Roboters (Nord, Süd, Ost, West). Also 4 Zahlen plus Richtungsangabe

Möglichkeit B: Angabe der Raumgrenzen in Bezug auf die Docking Station (4 Zahlen) plus Startrichtung.

Ich favorisiere Möglichkeit A.

Als problematisch bei der Auswertung erweist sich noch, wenn man unterschiedliche Räume saugen lässt (z.B. die Tür zur Küche mal offen und mal geschlossen ist).

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 28 September 2020, 11:27:17
Hallo pah,

ich würde A favorisieren.

Ich hatte überlegt, ob man die Karten einzeln betrachten sollte oder ob sich der komplette Grundriss nicht nach mehren
Reinigungszyklen automatisch ergibt, wenn man versucht die Eckpunkte zu finden und über Näherung zu matchen....

Hier würde sich dann auch die Tür offen / geschlossen Problematik erledigen, da er ja irgendwann alles entdeckt.

Was dabei aus meiner Sicht jedoch auf keinen Fall erfolgen darf, ist, dass er verschiedene Startpunkte hat.
Meine Frau nimmt ihn z.B. ganz gerne mal und stellt ihn in die Veranda um dort auf Start zu drücken.

Das ließe sich dann nur durch Karten aussortieren, bei denen er bei Start nicht den Status docked hatte, lösen.

Anbei noch mal vielen Dank für die geleitete Arbeit. Bei mir funktioniert er jetzt mit dem Disconnet / Connect wie gewünscht.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 28 September 2020, 12:18:47
Das Problem besteht darin, dass die Kiste mit unterschiedlichen Winkeln losläuft. Und nicht unterscheiden kann, ob das Hindernis an der Position X ein temporär dort hingestellter Sessel ist, eine geschlossene Tür oder - wegen des geänderten Laufwinkels - einfach die Wand des bekannten Raumes. Es ist nicht einfach, das aus den Daten herauszufieseln.

Derzeit gehe ich davon aus, dass es jeweils ein Array aus verschiedenen Breiten und Tiefen gibt.

Sagen wir für die Breite 11.5 m und 9.5 m, für die Tiefe 5.5 variabel bis 7.5 m.

Damit gäbe es dann 4 mögliche Bounding Boxes, in die man die übermittelten Koordinaten einpassen könnte - aus diesem Einpassen ergäbe sich auch der Laufwinkel.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Jewe am 28 September 2020, 15:30:40
Hallo,

die Karte könnte doch auch anders erstellt werden. Jetzt ist es so, dass die einzelnen Koordinaten in gewissen zeitabständen gespeichert werden und daraus die Karte erstellt wird.

Wäre es nicht möglich, wenn der Roboter gegen die Wand oder ein Hindernis fährt einen Koordinatenpunkt zu speichern und daraus dann die Karte zu erstellen ? Das müssten dann doch an einer Wand eine relativ gerade Strecke geben. Ein reading des Schalters der Leiste gibt es meine ich doch, irgendwas mit bumper (bin gerade nicht zu Hause).

Grüssle, Jens
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 29 September 2020, 09:48:56
Die Koordinaten kommen in einer anderen Message, als die Bumper Messages. Außerdem sind diese Bumper Messages nach meinem Dafürhalten keine aktuellen Statusmeldungen, sondern nur Zähler. Und drittens sind die Bumper Messages sehr viel seltener, als die Koordinatenangaben

Da lasse ich mich aber gerne eines Besseren belehren - vielleicht könnte jemand das austesten, der die ungefilterten JSON-Daten mitschreibt.

Einen anderen Ansatz werde ich noch ausprobieren, nämlich den Winkel mitzuloggen.

Anbei die Karte meines Dachgeschosses mit drei unterschiedlichen Läufen. An ein paar Stellen gibt es deutliche Abweichungen, weil ein Stuhl verrückt wurde. Wichtiger sind aber die Abweichungen an den Kanten - die zeigen, dass diese Art der Navigation eben doch ziemlich ungenau ist.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: rudolfkoenig am 29 September 2020, 09:57:22
Vorschlag eines Unbeteiligten :)

Koennte man die Liniendicke in der Zeichnung auf die Breite der Kehrflaeche erweitern, halb durchsichtig, damit man die Kreuzungen erkennt?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 29 September 2020, 10:50:20
Das habe ich in SVG auch schon gemacht (das Ganze ist eine SVG-Grafik). Ist nicht sonderlich erhellend.

Wo ich dich gerade dran habe: im MQTT2_CLIENT fehlen m.E. die connect/disconnect im Modul noch in der Liste der set-Befehle. Sie tauchen zwar in der CommandRef auf, aber ein set ... connect liefert nur die Fehlermeldung, dass nur "publish" und "password" erlaubt sind.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 29 September 2020, 12:57:35
Hallo,

Da muss ich wiedersprechen.

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 29 September 2020, 15:18:07
Stimmt. War aus irgendeinem Grund noch das alte Modul am Laufen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 30 September 2020, 12:59:12
Hallo,

zum Thema MQTT und Cipher Level gibt es wohl schon was in der TCPUtils.pm Das müstte nur im MQTT Modul eingebaut werden...

https://forum.fhem.de/index.php/topic,89745.msg1088503.html#msg1088503 (https://forum.fhem.de/index.php/topic,89745.msg1088503.html#msg1088503)

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: rudolfkoenig am 30 September 2020, 13:42:54
Zitat
Das müstte nur im MQTT Modul eingebaut werden...
Alternativ setzt man
attr MQTT2_CLIENT sslargs  SSL_version:SSLv23(oder so, ich will immer noch kein SSL Experte werden)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 30 September 2020, 14:22:32
Hallo,

das scheint leider nicht zu greifen - > siehe
https://forum.fhem.de/index.php/topic,114166.msg1088298.html#msg1088298 (https://forum.fhem.de/index.php/topic,114166.msg1088298.html#msg1088298)
und die folgenden 3 Posts.
Ich musste es nach dem Upgrade des Docker Images auch in der OpenSSL.conf setzen.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: rudolfkoenig am 30 September 2020, 15:08:40
sslargs ist die generische Version von sslVersion, erlaubt alle IO::Socket::SSL Parameter zu setzen, und nicht nur SSL_version. Weiterhin hat es Vorrang ueber sslVersion.

Habs gerade ueberpruft, es wird von MQTT2_CLIENT weitergegeben und in TcpServerUtils ausgewertet.

Ich wuesste nicht, was ich daran aendern soll.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 30 September 2020, 16:25:43
Hallo,

dann greift es in der TCPServerUtils.pm nicht oder die
TCPServerUtils (IO::Socket::SSL) setzt es nicht über die Default Arg im OpenSSL.

Woran es liegt vermag nur einer der Programmierer zu sagen.

Als Workaround kann man halt wie oben beschrieben die
CipherString = DEFAULT@SECLEVEL=1setzen. Das ist aber unschön weil systemweit.
Es schaltet SHA1 ein....

Bei mir funktioniert es so - erschlag nicht den Boten - er versucht nur den scheinbaren Bug zu kommunizieren.
In welchem der beteiligten Module er liegt kann er auch nicht sagen ;)

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: rudolfkoenig am 30 September 2020, 17:28:47
Ich habe es vorhin in TcpServerUtils.pm ausgegeben, da war es richtig.
Wenn die Datei in /etc diese Einstellung ueberschreibt, dann ist das mAn ein Bug.
Was passiert, wenn man diese Datei loescht bzw. zur Seite schiebt?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 30 September 2020, 19:18:48
Hallo,

dann funktioniert es. Es ist aber schwer zu sagen, welche systemrelevanten Auswirkungen das hat.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 01 Oktober 2020, 15:04:15
Hallo zusammen,

ich hätte einen Roomba 980 und einen nagelneuen Braava Jet M6 beizusteuern, benötige jedoch eine zusammenfassende Anleitung (=Wiki-Eintrag) für Eure bisher hier nerdigen Fortschritte.
Im Wesentlichen schwebt mir eine Einbindung in FHEM vor, um anschließend per Homebridge die Geräte per Homekit-App & Siri zu aktivieren/deaktivieren.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 01 Oktober 2020, 20:54:23
Was ist denn nerdig daran, einen MQTT2_CLIENT mit dem Roomba zu verbinden?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 02 Oktober 2020, 15:28:52
Bei mir scheitert es derzeit noch an den Grundlagen wie dem Herausfinden von clientID oder einem Passwort für den Gerätezugriff. Ich hoffe, am Wochenende Zeit zu finden.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 02 Oktober 2020, 18:13:19
Ich bin noch nicht dazu gekommen, dass Holen des Passworts in FHEM zu realisieren. Einfachster Weg im Moment: Das hier

https://github.com/NickWaterton/Roomba980-Python

installieren und "python3 getpassword.py" ausführen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 02 Oktober 2020, 18:24:25
Guten Abend,

wenn du das aber in fhem realisieren willst (getpassword) dann ist Template für MQTT Geschichte und es wird doch ein eigenes Modul/Helper Modul?

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 02 Oktober 2020, 19:12:33
Nicht notwendigerweise. Es muss sowieso eine Menge spezieller Code hinzugeladen werden - da kommt es auf ein Unterprogramm auch nicht mehr an. Ich halte nichts davon, diesen Code direkt im template zu lagern - er sollte vielmehr separat, z.B. im lib-Ordner liegen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 03 Oktober 2020, 13:07:03
Noch etwas zum Diskutieren. Die vier Einstellungen

state_reported_noAutoPasses
state_reported_noPP
state_reported_openOnly
state_reported_twoPass

machen mir noch etwas Aufwand.

openOnly ist klar -> Kantenreinigung ein oder aus.

noAutoPasses true bedeutet: Einfachreinigung oder Zweifachreinigung fest eingestellt, keine autmatische Umschaltung
twoPass true bedeutet, Zweifachreinigung fest eingestellt.

Was wäre, wenn beide false sind? Was bedeutet PP bzw. noPP?

Ich knobele immer noch an der Kartenerstellung herum. So wie es aussieht, benutzt die Kiste bei der Kartenerzeugung entweder irgendwelche Signale der Bumper, die nicht nach außen geleitet werden. Oder irgendeine Kombination des Winkels mit den Koordinaten.

Sehen kann man das sehr schön an den von der App gezeigten Karten für unvollständige Läufe: Manche der Kanten enthalten dann fett gezeichnete Linien, andere nicht.

Jede Unterstützung beim Herausfinden ist hier willkommen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 03 Oktober 2020, 15:45:03
Hallo Andreas,
Du hattest recht.
Mit CipherString = DEFAULT@SECLEVEL=1 funktioniert mein Client jetzt.
Vielen Dank für den Tip, da wäre ich nie drauf gekommen.

Zur Vollstandigkeit:

OpenSSL 1.1.1d  10 Sep 2019
Gruß

Carlos
Habe die gleiche Problematik wie Du, habe auch o.g. Idee geändert, aber es bleibt bei mir weiterhin "disconnected".

Übrigens läuft bei mir das alte Roomba980-Modul! Darüber kann ich meinen Roomba980 starten & beenden. Über dessen modulinternes "DiscoverRoomba" erhielt ich die clientID und auch ein krypisches Passwort. Wird letzteres für mqtt2 gar nirgens benötigt? 

Internals:
   BUF       
   CFGFN     
   DEF        192.168.178.21:8883
   DeviceName 192.168.178.21:8883
   FUUID      5f787e4f-f33f-4dec-1624-9c568cbd4eeabc57
   NAME       RoombaFegerClient
   NEXT_OPEN  1601732659
   NR         39720
   PARTIAL   
   SSL        1
   STATE      disconnected
   TYPE       MQTT2_CLIENT
   clientId   31**********40
   connecting 1
   lastMsgTime 1601732192.72541
   nextOpenDelay 5
   READINGS:
     2020-10-03 15:44:14   state           disconnected
   sslargs:
     SSL_version SSLv23
Attributes:
   SSL        1
   autocreate simple
   clientId   31**********40
   mqttVersion 3.1.1
   room       Roomba
   sslargs    SSL_version:SSLv23
   username   31**********40
   verbose    1
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 03 Oktober 2020, 16:20:14
Hallo,

das Passwort musst du im MQTT2_Client eintragen. Da gibt es oben ein Dropdown Conect usw.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 04 Oktober 2020, 08:21:17
Hallo,

das Passwort musst du im MQTT2_Client eintragen. Da gibt es oben ein Dropdown Conect usw.

Gruß Andreas

Moin,

habe gestern zur Sicherheit nochmal mein gesamtes FHEM System geupdated. Seither habe ich in Deinem besagten Dropdown eine Auswahlmöglichkeit "connect" (die ich vorher nicht hatte) und habe dort das Passwort eingetragen; übrigens sehr kryptisch, mag das stimmen? (Der Doppelpunkt am Anfang gehört dazu!)
2020-10-04 08:18:18 MQTT2_CLIENT RoombaFegerClient connect :1:151***********WnO
Eine Verbindung stellt sich leider nicht her ,wobei ich mich frage, ob der Roomba dafür in irgend einem bestimmten Status stehen muss?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 04 Oktober 2020, 08:29:59
Hallo,

einen bestimmten Status benötigt er nicht,
Eine aktuelle Firmware aus der App solltest
du ihm schon verpasst haben...

Das Passwort soll kryptisch sein....die Leerzeichen
gehören allerdings nicht dazu.


Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 04 Oktober 2020, 08:40:49
Roboter-Software: 2.4.6-3 (Roomba 980), lt App ist das der neueste Stand  ???
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 04 Oktober 2020, 09:05:00
Hallo,

dann stelle mal verbose 5 ein und poste die Logs.
Ich komme allerdings erst morgen dazu weiter zu
lesen - mein großer hat heute Konfirmation.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 04 Oktober 2020, 10:04:42
Zitat
2020.10.04 10:02:18 5: HttpUtils url=https://192.168.178.21:8883/
2020.10.04 10:02:18 4: IP: 192.168.178.21 -> 192.168.178.21
2020.10.04 10:02:19 4: HttpUtils: https://192.168.178.21:8883/: Can't connect(2) to https://192.168.178.21:8883:  SSL connect attempt failed error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small

trotz

CipherString = DEFAULT@SECLEVEL=1
und alternativ

#CipherString = DEFAULT@SECLEVEL=1
Reicht es die genannte Datei zu editieren, oder muss danach zusätzlich noch etwas restarted werden o.ä.?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 04 Oktober 2020, 12:01:47
Hallo,

wie heißt es so schön - reboot tut gut.
Wenn es dei dir im Docker Container
läuft vorher ein comit - sonst sind die
Änderungen flöten.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 04 Oktober 2020, 13:06:56
oh my godness  ;D ;D ;D
Zitat
STATE opened

Zitat
2020.10.04 12:58:23 1: 192.168.178.21:8883 disconnected, waiting to reappear (RoombaFegerClient)
2020.10.04 12:59:01 1: 192.168.178.21:8883 reappeared (RoombaFegerClient)
2020.10.04 12:59:01 2: autocreate: define MQTT2_3145*********40 MQTT2_DEVICE 31***********40 RoombaFegerClient
2020.10.04 12:59:01 2: autocreate: define FileLog_MQTT2_31*******40 FileLog ./log/MQTT2_31********740-%Y.log MQTT2_31*********740
2020.10.04 12:59:51 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"signal":{"rssi":-39,"snr":50}}}}
2020.10.04 12:59:51 5: RoombaFegerClient: dispatch autocreate=simple\00031*********740\000wifistat\000{"state":{"reported":{"signal":{"rssi":-39,"snr":50}}}}

Läuft  8)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 04 Oktober 2020, 15:19:34
OK, langsam nehmen auch die Karten etwas Form an.

Zunächst einmal anbei meine Datei mit dem "Spezialcode", sowie ein Listing eines meiner Roboter

Internals:
   CID        3...0
   DEF        3...0
   DEVICETOPIC 3...0
   FUUID      5f5e176a-f33f-a726-7839-10b15519c0efcc9f
   IODev      RoombaFegerClient
   LASTInputDev RoombaFegerClient
   MSGCNT     15009
   NAME       RoombaFeger
   NR         122
   RoombaFegerClient_MSGCNT 15009
   RoombaFegerClient_TIME 2020-10-04 12:16:53
   STATE      Charging (100 %)
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-10-04 12:16:50   audioActive     0
     2020-10-04 12:16:50   battery         100
     2020-10-04 12:16:51   cmArea          37.3 m²
     2020-10-04 12:16:50   cmBinFull       0
     2020-10-04 12:16:51   cmCycle         none
     2020-10-04 12:16:51   cmError         None
     2020-10-04 12:16:51   cmErrorD        Kein Fehler
     2020-10-04 12:16:51   cmExpire        Never
     2020-10-04 12:16:51   cmInitiator     localApp
     2020-10-04 12:16:51   cmNotReady      0
     2020-10-04 12:16:51   cmPhase         charge
     2020-10-04 12:16:51   cmPhaseD        Wird geladen
     2020-10-04 12:16:51   cmPhaseE        Charging
     2020-10-04 12:16:51   cmTime          57 min
     2020-10-04 12:16:51   lastCommand     resume
     2020-10-04 12:16:51   lastCommandInitiator localApp
     2020-10-04 11:11:00   position        (-513,-22)
     2020-10-04 11:11:00   positionTheta   49
     2020-10-04 12:16:51   progWeek        [Sun:none,Mon:none,Tue:none,Wed:none,Thu:none,Fri:none,Sat:none]
     2020-10-04 12:16:51   sBinPause       true
     2020-10-04 12:16:51   sCarpetBoost    false
     2020-10-04 12:16:51   sOpenOnly       false
     2020-10-04 12:16:51   sSchedHold      false
     2020-10-04 12:16:51   sTwoPass        false
     2020-10-04 12:16:51   sVacHigh        false
     2020-10-04 12:16:53   signalRSSI      -51
     2020-10-04 11:10:20   state           NoAutoPasses
Attributes:
   IODev      RoombaFegerClient
   devicetopic 3...0
   readingList $DEVICETOPIC:.*  {roomba::reading($NAME,$EVENT)}
   room       Haus
   setList    start:noArg {roomba::command($NAME,"start",$EVENT)}
stop:noArg {roomba::command($NAME,"stop",$EVENT)}
dock:noArg {roomba::command($NAME,"dock",$EVENT)}
resume:noArg {roomba::command($NAME,"resume",$EVENT)}
pause:noArg {roomba::command($NAME,"pause",$EVENT)}
CarpetBoost:true,false {roomba::setting($NAME,"carpetBoost",$EVENT)}
TwoPass:true,false {roomba::setting($NAME,"twoPass",$EVENT)}
NoAutoPasses:true,false {roomba::setting($NAME,"noAutoPasses",$EVENT)}
NoPP:true,false {roomba::setting($NAME,"noPP",$EVENT)}
VacHigh:true,false {roomba::setting($NAME,"vacHigh",$EVENT)}
BinPause:true,false {roomba::setting($NAME,"binPause",$EVENT)}
OpenOnly:true,false {roomba::setting($NAME,"openOnly",$EVENT)}
ProgHold:true,false {roomba::setting($NAME,"schedHold",$EVENT)}
ProgSun:time {roomba::setsched($NAME,0,$EVENT)}
ProgMon:time {roomba::setsched($NAME,1,$EVENT)}
ProgTue:time {roomba::setsched($NAME,2,$EVENT)}
ProgWed:time {roomba::setsched($NAME,3,$EVENT)}
ProgThu:time {roomba::setsched($NAME,4,$EVENT)}
ProgFri:time {roomba::setsched($NAME,5,$EVENT)}
ProgSat:time {roomba::setsched($NAME,6,$EVENT)}

   startdir   east
   startx     1100
   starty     120
   stateFormat cmPhaseE (battery %)
   userattr   startdir:north,west,south,east startx starty
   webCmd     start:pause:resume:stop:dock

Also mit ganz einfacher readingList und klar definierter setList. Die Attribute für Startpunkt und Startrichtung sind im Moment noch bedeutungslost - sie definieren später die Ausrichtung der Karte. Programmierung und Setzen von Optionen funktioniert problemlos (wobei ich immer noch nicht weiß, was noPP bedeuten soll...)

Es werden sehr viel weniger Readings angelegt, als beim per autocreate erzeugten Device - das mach m.E. mehr Sinn.

Zusätzlich mache ich tagsüber alle 5 Minuten einen Connect - es kann ja sein, dass jemand die Kiste per App gestartet hat.

Bei den Karten eliminiere ich inzwischen alle Wegpunkte, bei denen sich der Fahrwinkel nicht ändert (macht dann nur noch so 2500 Punkte bei einem Lauf). Diese Punkte können abgefragt werden durch {Dumper($defs{'RoombaFeger'}->{helper})}. Anbei die Grafik einer Fahrt duch 2 Räume im Erdgeschoss. Mittels eines Graham Scan-Verfahrens lässt sich schnell die konvexe Hülle der Fahrtpunkte ermitteln (Rote Linie, sehr viel weniger Punkte), die muss ich jetzt nur noch automatisch an die "theoretische" Hüllkurve anpassen. Beziehungsweise in diesem Geschoss an 4 verschiedene Hüllkurven, da Küche, Garderob und Gästebad nicht immer gesaugt werden.

Als problematisch erweist sich die ziemlich ungenaue Messung.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 04 Oktober 2020, 16:16:38
Aus Interesse: welches Ziel verfolgst Du mit den Karten?
Nach 2 Jahren Roomba kann ich der Karte als Reinigungsergebnis keinen Mehrwert abnehmen. Selbst die Kartierung in Zonen nutzen wir nicht.

Mein persönliches Ziel ist die Einbindung beider Roboter, sodass ich im Idealfall am Ende eine definierte Ablaufkette in FHEM habe, die z.B. mitten in der Nacht durchläuft und das gesamte Erdgeschoss erst saugt und dann durchwischt.:
1.) Licht in Küche, Esszimmer, Wohnzimmer einschalten
2.) Roomba 980 starten und nach Ende (=Status: Dock/Charging)
3.) Nach Ende Braava starten und nach Ende (=Status: Dock/Chariging)
4.) Licht wieder ausschalten
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 04 Oktober 2020, 17:48:51
Erstens interessiert mich das mathematisch.
Zweitens ist wohl in einem der nächsten Firmware-Updates die Möglichkeit drin, gezielt bestimmte Zonen anzusteuern.
Und drittens hat das mit den Karten, wenn es funktioniert, einen hohen WAF. Wo die Kiste gereinigt hat, ist dabei eher egal - aber die Frage, wo sie gerade saugt, und wo man sie hinbewegen möchte, ist sehr interessant.

Wischen fällt hier flach - nagelneues geöltes Eichenparkett. Also 2x Roomba, kein Braava

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 04 Oktober 2020, 19:17:45
Klare Aussage, ist verstanden.

Vielleicht ist der Braava zukünftig von einem kompetenteren User wie mir hier einzubringen. Ich finde derzeit keine Möglichkeit (Google), irgendeine Verbindung zu ermöglichen.

Auf Dein Parkett bin ich neidisch, wobei die rund 40qm Fliesen hier recht praktisch sind: 2 eigene Kinder, 1 Hund und seit dem Frühjahr täglich 3 Tageskinder bei meiner Frau, hinterlassen in Summe zum Feierabend regelmäßig Arbeit für beide Roboter. Momentan starten wir die Geräte abends manuell nacheinander. Morgens ist dann alles frisch sauber, bevor die Terrorzwerge von vorn beginnen  ;D
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 04 Oktober 2020, 19:24:20
Zitat
Auf Dein Parkett bin ich neidisch
Nicht doch. Haben wir auch erst machen lassen, nachdem das jüngste von 3 Kindern in absehbarer Zeit das Studium beenden und ausziehen wird. Komm Zeit, komm Luxus.

Und warum sollte der Braava anders funktionieren, als der Roomba? Was sagt er denn bei einem Verbindungsversuch mit einem MQTT2_CLIENT? Kann man ein Passwort holen?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 04 Oktober 2020, 20:58:20
Ich war bisher nicht im Stande, eine clientID irgendeines Roboters zu erhalten. Die clientID des Roombas samt Passwort erhielt ich über das Roomba980 Modul.
Über selbiges Modul versuchte ich den Braava zu erreichen, aber das Teil reagiert nicht auf Tastenkombinationen jeglicher Art, um in einen Sende-/Empfangsmodus versetzt zu werden.

Interessant ist folgende Beobachtung in der iRobot-App unter Braava --> Robotereinstellungen --> WLAN Einstellungen --> Details:
Zitat
Netzwerkname
Signalstärke
Sicherheitszyp
IP Adresse
...
...
Verbindungsstatus: Der Roboter kommuniziert mit dem MQTT-Broker
...
Dieses Detail ist im Roomba 980 innerhalb der gleichen App nicht erwähnt.

Während ich dies schreibe habe ich folgendes auf meinem raspberry gemacht:

git clone https://github.com/koalazak/dorita980.git
cd dorita980
npm install
npm run getpassword 192.168.178.51

Make sure your Roomba is on the Home Base and powered on. Then press and hold the HOME button on your roomba until it plays a series of tones (about 2 seconds). Release the button and your Roomba will flash WIFI light. Then wait...
========>
Good job!

Ich habe den Braava Homebutton ca 5 Sekunden gedrückt, dann gab es ähnlich dem Roomba einen Ton und in der Konsole:
Zitat
(node:10977) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
Robot Data:
{ ver: '3',
  hostname: 'iRobot-54F4**********0F9',
  robotname: 'Braava jet',
  robotid: '54F***********F9',
  ip: '192.168.178.51',
  mac: '50:******F:D8',
  sw: 'sanmarino+3.10.8+sanmarino-release-rt320+11',
  sku: 'm613440',
  nc: 0,
  proto: 'mqtt',
  cap:
   { edge: 0,
     maps: 3,
     pmaps: 4,
     tHold: 1,
     tLine: 2,
     area: 1,
     eco: 1,
     multiPass: 2,
     pose: 1,
     team: 1,
     pp: 0,
     '5ghz': 1,
     prov: 3,
     sched: 1,
     svcConf: 1,
     ota: 2,
     log: 2,
     tileScan: 1 },
  blid: '54F************0F9' }
Password=> :1:16*********KgnT <= Yes, all this string.
Use this credentials in dorita980 lib :)

 8)

Copy & Paste Deiner Setlist in Teilen:
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"}
funktioniert aus FHEM heraus super.


Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 05 Oktober 2020, 10:22:14
Guten Morgen zusammen,

mir fällt auf, dass meine Geräte - wenn MQTT2_Client = opened - im Sekundentakt nur auf den folgenden Readings Aktualisierungen erhalten.
Zitat
state_reported_signal_noise -90 2020-10-05 10:12:17
state_reported_signal_rssi  -68 2020-10-05 10:12:17
state_reported_signal_snr  22  2020-10-05 10:12:17
während
Zitat
state

unverändert bleibt. Dort ändert sich das Reading nur beim senden eines Befehlts aus FHEM heraus.
Wenn ich die Roboter per App steuere, kriegt FHEM davon derzeit nichts mit ?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 05 Oktober 2020, 11:26:50
Richtig. Es scheint keine Möglichkeit zu geben, die gegenwärtigen Settings aktiv abzufragen. Und weil der Roboter den FHEM Client nicht aufwecken kann, habe ich mit einem kleinen separaten DOIF dafür gesorgt, dass (nur tagsüber und wenn nicht sowieso connected) alle 5 Minuten ein automatischer Connect von FHEM mit dem Roboter gemacht wird. Also spätestens nach 5 Minuten bekommt FHEM das mit - und erhält dann auch regelmäßig die Positionsdaten und die Netzwerkdaten.

Und ja: Ich finde das mit dem sekündlich aktualisierten RSSi auch grenzwertig, habe es darum bis auf ein Reading auch unterdrückt. Aber das ist nunmal der Kram, der vom Roboter kommt - verhindern kann man den wohl eher nicht.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 05 Oktober 2020, 11:43:41
Hallo,

du könntest aber mit der Rssi und deinen Karten hervorragend eine Karte zur Netzabdeckung erzeugen.
Man müsste „nur“ den Fahrweg abhängig von rssi einfärben.

Quasi Roomba zum WLan ausleuchten....eigentlich genial, um tote Ecken zu finden / Accesspoints zu positionieren.

Ich glaube ich lass Robi mal bei meinen Problemkunden putzen 😬

Gruß

Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 05 Oktober 2020, 11:45:30
Kleiner Hinweis: mit "periodicCmd" kann auch MQTT2_DEVICE in eingeschränktem Umfang Timer verwalten. Müßte also ggf. gehen, (notfalls mit etwas "Tricksen", da kann ja auch ein Perl-Kommando als setter/getter stehen) ohne ein betreffendes externes Device auszukommen ;) .

(Beispielsweise verwirft OpenMQTTGateway_BT_scanner immer nach 24h alle "gesammelten Werke"):
attr DEVICE setList\
  [...]\
  deleteReadings:noArg {fhem "deletereading -q $NAME (?!associatedWith).*"}
attr DEVICE periodicCmd deleteReadings:1440
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Dracolein am 05 Oktober 2020, 12:37:11
Richtig. Es scheint keine Möglichkeit zu geben, die gegenwärtigen Settings aktiv abzufragen. Und weil der Roboter den FHEM Client nicht aufwecken kann, habe ich mit einem kleinen separaten DOIF dafür gesorgt, dass (nur tagsüber und wenn nicht sowieso connected) alle 5 Minuten ein automatischer Connect von FHEM mit dem Roboter gemacht wird. Also spätestens nach 5 Minuten bekommt FHEM das mit - und erhält dann auch regelmäßig die Positionsdaten und die Netzwerkdaten.

Und ja: Ich finde das mit dem sekündlich aktualisierten RSSi auch grenzwertig, habe es darum bis auf ein Reading auch unterdrückt. Aber das ist nunmal der Kram, der vom Roboter kommt - verhindern kann man den wohl eher nicht.

LG

pah
Du hast in Deinem Listung von Seite 1 dieses Threads immerhin (u.a. )
Zitat
     2020-09-13 12:44:52   state           Charging
dort stehen, das müsste imho eine Statusinfo von Deinem Roboter sein, oder nicht?
D.h. zum Zeitpunkt des Connects durch den MQTT2_Client befand sich der Roboter im Dock und war am aufladen.
Deine Workarounds bzgl. zyklischer Verbindungen habe ich gesehen.

Bei mir ändert sich state jedoch nie. Egal, ob der Robi im Dock steht oder gerade fährt, es steht in diesem Reading bei mir immer der zuletzt aus FHEM gesandte Befehl mit Timestamp wann er versendet wurde. Die anderen Readings bzgl. Netzwerk etc. aktualisieren sich brav 1malig bei Connect. 
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 07 Oktober 2020, 12:33:30
Hmmm. Katastrophal: gestern abend noch problemlos einen Lauf eines der Roboter gestartet, heute morgen ging gar nichts mehr. Das MQTT2_CLIENT bekommt keine Verbindung mehr zu einem der beiden Roboter, auch ein manueller Connect-Befehl bewirkt GAR NICHTS. verbose=5 liefert nur in kurzen Abständen

Zitat
020.10.07 12:28:37 5: HttpUtils url=https://192.168.0.xx:8883/
2020.10.07 12:28:37 4: IP: 192.168.0.xx -> 192.168.0.xx
2020.10.07 12:28:46 5: HttpUtils url=https://192.168.0.xx:8883/
2020.10.07 12:28:46 4: IP: 192.168.0.xx -> 192.168.0.xx

Keine Fehlermeldung, kein Rückgabewert, kein nix. Auch keine Response der Roboter.

Steuerung per App geht noch.

Edit: Problem behoben - aber Ursache noch nicht klar. Das Einzige, was tatsächlich Abhilfe schaffte, war ein Hardware-Reset beider Roboter durch kurzen Ausbau des Akkus. Die beiden waren übrigens auch nicht mehr durch die Python-Anwendung Roomba980 erreichbar, ebensowenig durch die JavaScript-Anwendung dorita980. Was kann der Grund sein? Ich habe seit gestern von FHEM aus einen regemäßigen manuellen Connect vorgenommen - aber kein Kommando gesendet. Aus dem Bauch heraus: möglicherweise speichert der interne MQTT-Broker der Roboter die IP-Adresse, von der aus die Connects ohne Daten kommen, in einer Blacklist und nimmt davon nichts mehr entgegen. Oder ein Puffer läuft voll. Oder die Kiste ist in einer Endlosschleife und wartet auf Daten aus der Quelle.

Der langen Rede kurzer Sinn: Vielleicht könnte einer der anderen Interessenten mal versuchen, das Problem nachzustellen: Tagsüber alle 5 Min einen automatischen Connect, und das mal eine Weile laufen lassen. Und schauen, ob der Roboter nach einem Tag noch erreichbar ist.

LG

pah

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: rudolfkoenig am 07 Oktober 2020, 16:57:01
Zitat
Keine Fehlermeldung, kein Rückgabewert, kein nix. Auch keine Response der Roboter.
Hypothese: TCP Verbindungsaufbau samt TLS Handshake ist durchgelaufen, der MQTT Server hat aber nicht auf die MQTT CONNECT Nachricht reagiert.
Ich habe jetzt MQTT2_CLIENT angepasst, damit der Timer in diesem Fall auch zuschlaegt, und eine Meldung produziert.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 08 Oktober 2020, 10:34:18
Update:

1. Schwäche der bisherigen Installation: Wenn die Kiste steckenbleibt, geht der Client natürlich nach dem eingestellten timeout auf disconnected. Das ist übel, weil man ja selten innerhalb von 5 Sekunden die Ursache beheben kann. Nötig ist also ein zyklisches connect, damit man das Weiterfahren dann nicht verpasst.

2. Bei den Karten mache ich derzeit aus Zeitmangel nur geringe Fortschritte. Als erfolgversprechend hat sich Folgendes herausgestellt:

a. Einmalig: Bestimmung der konvexen Hülle des maximalen Saugbereiches aus einem Plan der Wohnung, sowie des entsprechenden Schwerpunktes (Zentroid).
b. Nach jedem Lauf: Bestimmung der konvexen Hülle des abgesaugten Bereiches, sowie dessen Zentroid.
c. Abgleich von b. mit den Daten aus a. liefert die notwendige Transformation, um den abgesaugten Koordinatenbereich genau in den Plan der Wohnung einzupassen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 19 Oktober 2020, 12:31:57
Hallo,

habe gestern mal mein Glück versucht an einem i7

Robot Data:
{ ver: '3',
  hostname: 'iRobot-XXXX',
  robotname: 'Putzfee',
  robotid: ''XXXX,
  ip: '192.168.X.X,
  mac: 'XXXX',
  sw: 'lewis+3.10.8+lewis-release-rt320+13',
  sku: 'i755640',
  nc: 0,
  proto: 'mqtt',
  cap:
   { binFullDetect: 1,
     dockComm: 1,
     wDevLoc: 2,
     bleDevLoc: 1,
     edge: 0,
     maps: 3,
     pmaps: 4,
     tLine: 2,
     area: 1,
     eco: 1,
     multiPass: 2,
     pose: 1,
     team: 1,
     pp: 0,
     '5ghz': 1,
     prov: 3,
     sched: 1,
     svcConf: 1,
     ota: 2,
     log: 2,
     tileScan: 1 },
  blid: 'XXXX' }
Password=> XXXX <= Yes, all this string.
Use this credentials in dorita980 lib :)


Passwort und ID auslesen ging. Leider verbindet der MQTT-client nicht.

Internals:
   BUF       
   CFGFN     
   DEF        192.168.X.X:8883
   DeviceName 192.168.X.X:8883
   FUUID      5f7c2c61-f33f-9eb9-e80b-2411f9c9f72d0af4
   NAME       PutzfeeClient
   NEXT_OPEN  1603103254.02846
   NR         925
   PARTIAL   
   SSL        1
   STATE      disconnected
   TYPE       MQTT2_CLIENT
   WBCallback
   clientId   blid
   connecting 1
   lastMsgTime 1603096483.99491
   nextOpenDelay 5
   READINGS:
     2020-10-19 12:27:29   state           disconnected
   powerMap:
   readingsDesc:
     energy:
       rtype      whr
     power:
       rtype      w
   sslargs:
     SSL_version SSLv23
Attributes:
   SSL        1
   autocreate simple
   clientId   blid
   room       MQTT2_DEVICE
   sslargs    SSL_version:SSLv23
   username   blid
   verbose    5
ist bei attr Username und ClientID jeweils die blid einzutragen?

Password habe ich über set gesetzt.
Jemand noch einen Tip für mich?

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 19 Oktober 2020, 16:47:49
Noch das Log

2020.10.19 16:41:18.247 5: PutzfeeClient: sending CONNECT (16)p(0)(6)MQIsdp(3)(194)(0)(30)(0) blid(0) blid(0)(30)PWD
2020.10.19 16:41:18.248 5: SW: XXXX
2020.10.19 16:41:18.251 1: 192.168.X.X:8883 reappeared (PutzfeeClient)
2020.10.19 16:41:18.257 3: Opening PutzfeeClient device 192.168.X.X:8883
2020.10.19 16:41:18.257 5: HttpUtils url=https://192.168.X.X:8883/
2020.10.19 16:41:18.257 4: IP: 192.168.X.X -> 192.168.X.X
2020.10.19 16:41:18.262 4: HttpUtils: 192.168.X.X: Connection reset by peer (104)
2020.10.19 16:41:18.433 1: 192.168.X.X:8883 disconnected, waiting to reappear (PutzfeeClient)
2020.10.19 16:41:18.449 5: HttpUtils url=https://192.168.X.X:8883/
2020.10.19 16:41:18.450 4: IP: 192.168.X.X -> 192.168.X.X
2020.10.19 16:41:18.455 4: HttpUtils: 192.168.X.X: Connection refused (111)

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 19 Oktober 2020, 19:14:27
Zitat
ist bei attr Username und ClientID jeweils die blid einzutragen?
So hab ich es gemacht, ja.

Ist die SSl-Version richtig gesetzt?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 19 Oktober 2020, 20:24:43
Hallo,

username und clientid = blid - keine Leerzeichen?
Password ohne Leerzeichen?
IP richtig?
Aktuelle Firmware mit der APP geflusht?

SSL Passt so mit 23.

Eventuell mal Port 1883 probieren.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 19 Oktober 2020, 21:01:31
Hallo,

sslargs    SSL_version:SSLv23

blid: 'X'
sollte dann das X sein

Password=> X <= Yes
hier auch das X

IP ist richtig, letzte Firmware ist drauf

Port 1883 habe ich probiert hat nicht funktioniert, aber ich denke 8883 ist richtig sieht man auch am log "Opening PutzfeeClient"

telnet 192.168.X.X 8883
Trying 192.168.X.X...

Connected to 192.168.X.X.
Escape character is '^]'.


Gruß
Eisix


Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 19 Oktober 2020, 21:13:26
Hallo,

welche Version von openssl ist auf dem Server?

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 19 Oktober 2020, 21:54:20
openssl version

OpenSSL 1.1.1f  31 Mar 2020
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 20 Oktober 2020, 05:04:28
Zitat
blid: 'X'
sollte dann das X sein

Password=> X <= Yes
hier auch das X

Nein. Das Passwort ist ein deutlich längerer String, etwa in der Form
Roomba (Feger) IP address is: 192.168.0.zz
blid is: 3112345678900
Password=> :1:112345670:g698ehf9j0306A <= Yes, all this string.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 20 Oktober 2020, 07:14:24
Hallo pah,

Ich war sehr sparsam mit den den  X'en  :o

Also sind alle drei durch : getrennte Felder das Passwort oder nur das letzte?
Das erste Feld :1 ist bei allen gleich
Das zweite Feld :112345670 ist der Unix timestamp der Passworterzeugung
Das dritte ist das eigentliche Passwort
Habe schon alles und das dritte Feld ohne Erfolg probiert.

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 20 Oktober 2020, 12:43:19
Bei meinen Robotern musste ich den ganzen String eintragen.

Hast Du die Verbindungstaste am Roboter gedrückt gehabt?

Funktioniert das mit den einfachen Beispielen unter node.js?

LG

pah

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 20 Oktober 2020, 15:15:29
Hi,

siehe https://github.com/NickWaterton/Roomba980-Python/issues/65#issuecomment-568524075


Zitat
The relationship between MQTT and the app is that the app will try to connect to the Roomba locally via MQTT to control it. If it can't connect via MQTT, it falls back to using a remote connection via AWS - you can tell it's done this because the app displays a "globe" icon in the top right corner.

The Roomba only allows one connection via MQTT. Once the Roomba believes that an MQTT connection has been established, it refuses all other connections.

If you run Roomba980-Python in this case, you get the:

Connection Error [Errno 111] Connection refused
Message.

Even if the app is closed, the Roomba may still believe that the MQTT connection is present. You may have to reset the Roomba, and reconnect WiFi. Hopefully this will clear the MQTT connection.

Once Roomba980-Python successfully connects, you can then connect via the app, and you should get the "globe" icon to show it's connected remotely.

Gruß Andreas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 20 Oktober 2020, 19:35:05
@pah

Welche ist den die Verbindungstaste? Musste bei der Erstinstallation verschiedene Tastenkombinationen drücken.

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 21 Oktober 2020, 08:44:41
Na ja, ich habe ja keinen i7, insofern kann ich das nicht sagen. Aber genau die Taste, die man drücken musste um z.B. das Passwort zubekommen. Bei meinen Kisten ist das die WLAN-Taste länger als 2 Sekunden.

Und wie Sturi2011 schon geschrieben hat: Dabei sollte die App nicht gleichzeitig verbunden sein.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 21 Oktober 2020, 17:02:27
Hallo,

die Verbindungstaste scheint bei mir der Homebutton zu sein.
MQTT2_DEVICE wurde per autocreate angelegt, aber der MQTT-Client kriegt keine dauerhafte Verbindung.
Kann das noch was mit dem eco modus zu tun haben und wie schaltet man den aus?

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 21 Oktober 2020, 19:05:45
Zitat
die Verbindungstaste scheint bei mir der Homebutton zu sein.
So isses auch bei mir.

Zitat
MQTT2_DEVICE wurde per autocreate angelegt, aber der MQTT-Client kriegt keine dauerhafte Verbindung.
Soll ja auch nicht - der MQTT2_CLIENT kennt darum die set-Befehle connect/disconnect, und das Attribut disconnectAfter

Zitat
Kann das noch was mit dem eco modus zu tun haben und wie schaltet man den aus?
ich glaube zu verstehen, was Du meinst. Im EcoCharge-Modus (auszuschalten in der App) stellt der Roboter die Verbindung zum Netz ein. Ich habe noch keine Zeit gehabt zu prüfen, ob sich die Kiste durch ein WOL-Paket oder Ähnliches wieder aufwecken lässt. Also einfach ausschalten.

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 23 Oktober 2020, 11:08:27
Anbei die aktuelle Version meiner 99_RoombaUtils.

Beim Abschluss einer Mission wird jetzt jeweils eine Datei /opt/fhem/<NAME><DATUM>.pl erzeugt, die (im Moment für Weiterverarbeitungszwecke) Perl-Code mit
- Bounding Box
- Gesaugter Fläche
- Konvexer Hülle des Pfades
- Schwerpunkt (Zentroid) der konvexen Hülle
- Pfad, Array mit Richtungswinkeln, Array mit Geschwindigkeiten

enthält.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 23 Oktober 2020, 15:48:52
Hallo,

WOL- Paket muss es geben da die App das Teil aufweckt.

Den EcoCharge Modus kann ich bei mir in der App nicht ausschalten.

Ich kriege von Fhem aus keine Aktionen ausgelöst. Die Verbindung zum MQTT2_CLIENT bricht immer sofort ab.
Hat jemand eine i7 am laufen oder sind das alles 980er.

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 23 Oktober 2020, 18:11:51
Hallo,

habe den Fehler denke ich gefunden

attr PutzfeeClient mqttVersion 3.1.1

hat gefehlt. Ist jetzt auf connected.

Danke und Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 23 Oktober 2020, 19:08:05
Hallo,

wie kriege ich am einfachsten einen komplette Übersicht welche Daten das Teil ausspuckt?
Ich hab den i7+, bei mir ist noch die Absaugung in der Station. Die Favoriten würde ich auch noch auslesen wollen da ich ihn hauptsächlich anwesenheitsgesteuert, besser abwesenheitsgesteuert betreiben will.

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 24 Oktober 2020, 06:26:34
Einfach mit dem Standardwert für readingList
Zitat
<blid>:.* { json2nameValue($EVENT) }
und autocreate=1 laufen lassen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Stefan_Hvr am 01 November 2020, 00:11:40
mmmh,
irgendwie habe ich den Faden verloren.
Es steht doch noch aus, dass der Status des Gerätes nicht übertragen wird/ oder "wurde".

Im MQTT2_DEVICE "RoombaFegerClient" gibt es aber den

state_reported_cleanMissionStatus_phase
zeigt der nicht genau das an, was ihr sucht?

Ich habe einen i7 mit der FW3.10.8. Heute aktualisiert (30.10.2020)

Wenn man den beim MQTT2_DEVICE "RoombaFeger" in den Status bekommt wäre das nicht die Lösung?

ich habe jetzt noch fürs Auge
attr RoombaFeger stateFormat Status von Annemarie: state_reported_cleanMissionStatus_phaseeingetragen und bekomme den Status des Roboters angezeigt.

und damit schalte ich jetzt das Licht an, wenn er losfährt.

Grüße Stefan
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 01 November 2020, 06:05:01
Zitat
irgendwie habe ich den Faden verloren.
Sieht so aus. Denn das war nie ein Problem.

Das Problem besteht darin, dass die Kiste sich vom WLAN trennt, wenn sie in den EcoCharge-Modus geht. Ich bin auf Grund vieler anderer Aufgaben noch nicht dazu gekommen, das Aufwecken mit einem WOL-Paket zu probieren. Wenn iRobot sauber arbeiten würde, wäre der Roboter damit aufzuwecken. _Dass_ er irgendwie wieder aufgeweckt werden kann ist klar - denn das  macht die App j auch.

LG

pah

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 22 November 2020, 11:30:28
Ich habe gerade meine Roomba-Anbindung ins Produktivsystem umgezogen.

Leider bekomme ich jetzt massenhaft
Zitat
tls_process_ske_dhe:dh key too small
Fehler. Das ist schon bei Anderen aufgetreten, und die empfohlene Lösung war immer, in der Datei /etc/ssl/openssl.conf
Zitat
CipherString = DEFAULT@SECLEVEL=2
auszukommentieren oder die 2 durch eine 1 zu ersetzen.

allerdings taucht die Zeile mit CipherString in meiner openssl.conf gar nicht auf - hat jemand noch eine andere Lösung parat?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Sturi2011 am 22 November 2020, 16:25:48
Hallo,

hast du die neueste OpenSSL?

Lies mal hier quer:

https://stackoverflow.com/questions/36417224/openssl-dh-key-too-small-error

Gruß Andreas

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 22 November 2020, 17:25:30
Ja habe ich: 1.1.1f - und stolpere schon seit heute morgen in den ganzen Tipps über das "CipherString", das in meine ropenssl.cnf nicht auftaucht.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Jewe am 22 November 2020, 17:40:03
Hallo,
hast Du schon mal probiert die Zeile bei Dir einfach einzuttragen ?

LG, Jens
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 22 November 2020, 18:14:16
Natürlich - aber es fehlte noch der Hinweis, dass oben in der openssl.cnf  die richtige Konfigurationssektion genannt werden muss.

Jetzt tut es. Also Anleitung aus stackoverflow:


Zitat
    Adding openssl_conf = default_conf at the top of the file
    Adding at the end:

    [ default_conf ]

    ssl_conf = ssl_sect

    [ssl_sect]

    system_default = ssl_default_sect

    [ssl_default_sect]
    MinProtocol = TLSv1.2
    CipherString = DEFAULT:@SECLEVEL=1


LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 28 November 2020, 18:19:15
Sooo, mit den Karten bin ich ein großes Stück weiter gekommen.

Meine Roboter machen jetzt Folgendes:
- Am Ende jeder Mission sehen sie nach, ob eine SVG_Datei mit dem Grundriss existiert. Wenn ja, wird diese in eine Ausgabedatei kopiert, dann wird geschaut, ob schon vorige Läufe da sind. Wenn ja, werden zunächst diese in die Ausgabedatei kopiert, dabei werden die Farben etwas abgeschwächt. Dann wird der aktuelle Lauf hineinkopiert und die Datei finalisiert. Außerdem wird der aktuelle Lauf auch noch in die Datei der "vorigen Läufe" hinzugefügt.
- Die Ausgabedatei liegt im images-Verzeichnis des FHEMWEB und kann mit dem Browser angesehen werden.

Ein Beispiel findet man anbei - und man muss natürlich ein paar Attribute setzen, siehe Doku ganz unten in der RoombaUtils. Auch werden ein paar Bibliotheken für die Polynomrechnungen benötigt. Fehlen noch in der Dokue, bitt eoben in der RoombaUtils nachsehen.

Es wird noch eine Option hinzukommen, mit der man dann die "alten" Läufe auch herauswerfen kann. Außerdem ist das Setzen einer Drehung noch nicht automatisiert - es kann also sein, dass die Anzeige noch nicht optimal funktioniert, wenn der Roboter nicht nach links = "west" startet.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: sTaN am 06 Januar 2021, 18:51:34
Hallo Peter,

ich hatte bisher immer den iRobot 960 über das alte Modul am Laufen und mit Einstellungen liegen lassen.
Nun sehe ich, dass es scheinbar eine funktionierende Lösung über MQTT gibt.

Wie aktuell ist denn im moment das Wiki https://wiki.fhem.de/wiki/Roomba um mit der Einrichtung des Roomba zu starten?
Gibt es ggf. ein aktuelleres HowTo oder ist das auf dem neusten Stand?

Danke und Gruß
sTaN
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 06 Januar 2021, 18:53:29
So, ich habe über die Anbindung der Roomba-Roboter einen Wiki-Eintrag geschrieben, das Hilfsmodul 99_RoombaUtils.pm befindet sich ab sofort im FHEM-Ordner contrib/Roomba.

https://wiki.fhem.de/wiki/Roomba

Es gibt in diesem Wiki-Eintrag auch eine noch etwas rudimentäre Beschreibung, wie man die interaktiven Reinigungskarten erzeugt und verwaltet.

In der angehängten Datei kann man das Gesamtergebnis für die Karten sehen - dass da noch ein paar schief ausgerichtete Läufe drin sind, zeigt den noch etwas provisorischen Charakter. Bitte mit der Maus die Liste links berühren.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 06 Januar 2021, 18:54:15
@sTaN: Heute geschrieben.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: sTaN am 06 Januar 2021, 18:56:28
@sTaN: Heute geschrieben.

LG

pah

Na das nenn ich mal Zufall  ;D
Danke, dann werde ich mich da mal dran machen.

Gruß sTaN
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: loetmeister am 07 Januar 2021, 23:18:46
Hallo,

super Sache und auch bereits gute Anleitung. Danke!
Habe meinen Roomba E5 (E5158) konfiguriert. Readings kommen rein...
Beim MQTT2_CLIENT habe ich
attr RoombaClient    sslargs    SSL_version:TLSv1_2gesetzt. Damit musste ich nichts an openssl.conf ändern.

99_RoombaUtils.pm suche ich noch... FHEM update hat es noch nicht dabei gehabt...  :D

Gruß,
Thomas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 08 Januar 2021, 05:45:08
1. Der contrib-Ordner, in dem die Datei 99_RoombaUtils.pm derzeit steht, wird nicht automatisch upgedated.
Wie man an die Datei herankommt, steht z.B. hier: https://forum.fhem.de/index.php?topic=36012.0

2. Bitte an alle Nutzer dieser MQTT-Anbindung:

Hier einen kurzen Post mit der Bezeichnung des funktionierenden Roboters, z.B. "Roomba i7" oder "Braava xyz"

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 08 Januar 2021, 09:57:39
zu 1. Es geht auch einfacher :)

In der FHEM Kommandozeile ...
{ Svn_GetFile("contrib/Roomba/99_RoombaUtils.pm", "FHEM/99_RoombaUtils.pm") }Man muss ja wegen einer Datei nicht durch die halbe Welt im ZickZack fliegen. ;)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 08 Januar 2021, 20:15:26
Du beantwortest dann auch hoffentlich die eher grundlegenden Fragen der Anfänger - etwa "Und wo soll man das eingeben?".

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: loetmeister am 08 Januar 2021, 21:34:41
Ich hoffe ich habe keine weiteren banalen Fragen.   ;D
Hatte nicht auf dem Schirm das der contrib-Ordner nur einmalig bei der Installation (hatte ich über apt, debian.fhem.de/nightly gemacht) kopiert wird.

Die Kommandos (start, dock, etc.) mit 99_RoombaUtils.pm funktionieren, es fehlen aber noch ein paar Readings...
"stateFormat cmPhaseD (battery %)" wird als "Wird geladen (battery %)" angezeigt.
Das reading "battery" fehlt. Warum konnte ich noch nicht erkennen.

Vorhandene Readings:
cmArea 0 m²
cmCycle clean
cmError None
cmErrorD Kein Fehler
cmExpire Never
cmInitiator localApp
cmMap initialized
cmNotReady false
cmPhase hmUsrDock
cmPhaseD Dockingbefehl
cmPhaseE User Docking
cmTime 0 min
lastCommand dock
lastCommandInitiator localApp
sBinPause false
sCarpetBoost false
sNoAutoPasses false
sNoPP false
sOpenOnly false
sSchedHold false
sTwoPass false
sVacHigh false
signalRSSI -50
state dock


Gruß,
Thomas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 08 Januar 2021, 21:55:42
Dann gibts nur einen Weg:

Als erste Zeile der readingList eintragen:
attr RoombaFeger readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }Dann die Kiste laufen lassen - die hundert nutzlosen Readings kann man später wieder löschen. irgendeines dieser Readings wird den Ladezustand anzeigen - davon benötige ich die geanue Bezeichnung.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: loetmeister am 08 Januar 2021, 23:42:58
Hallo pah,

das hatte ich zu Anfang gehabt. Da hatte ich "batPct" gesehen.
Habe mir die MQTT Nachricht noch mal ausgeben lassen. Ich denke es klemmt, da "batPct" mit "cleanSchedule" und "cleanMissionStatus" zusammen gesendet wird.
Kann es da sein, das alles vom elsif( $evt =~ /cleanMissionStatus/) "blockiert wird"? Es fehlt ja auch "cleanSchedule", was ebenfalls wie "state....reported....batPct" nach dieser elseif Abfrage kommt.

{"state":{"reported":{"cleanSchedule":{"cycle":["none","none","none","none","none","none","none"],"h":[0,0,0,0,0,0,0],"m":[0,0,0,0,0,0,0]},
"language":15,"cleanMissionStatus":{"cycle":"none","phase":"stop","expireM":0,"expireTm":0,"rechrgM":0,"error":0,"notReady":0,"mssnM":0,"mssnStrtTm":0,"sqft":0,"initiator":"","nMssn":8},
"dock":{"known":true},
"bin":{"present":true,"full":false},
"batPct":100,"mobilityVer":"1086","bootloaderVer":"2.5","soundVer":"14","batteryType":"F12432832R"}}}

Gruß,
Thomas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 09 Januar 2021, 05:11:08
Wahrscheinlich haben die Herrschaften bei iRobot in dieser Version das API anders antworten lassen.

Abhilfe: Hinter Zeile 464. also hinter
$ret{"cmNotReady"} = numtobool($notr)
    if(defined($notr));
bitte einfach einfügen
  my $bat   = $dec->{'state'}->{'reported'}->{'batPct'};
  $ret{"battery"} = $bat
    if(defined($bat));

LG

pah

Edit: So wars ja auch gemeint.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: loetmeister am 11 Januar 2021, 22:53:41
Hallo,

Danke für die Tipps/Hilfe.
Ich habe mal "sub reading" etwas verunstaltet, um die passenden MQTT Themen/Daten zu erhalten, egal wie sie strukturiert sind (das ist zumindest die Idee).
Schön ist das (noch) nicht, aber es kommen die bisher Fehlenden readings "battery", "progWeek" an....

sub reading($$){
  my ($name,$evt) = @_;
my %ret;
my $sub_ret;
 
  #main::Log 1,"============> $evt";
  if( $evt =~ /state....reported....signal/){
    $sub_ret = signale($evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  if( $evt =~ /state....reported....pose/){
    $sub_ret = pose($name,$evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  #}elsif( $evt =~ /bbrun/){
  #  main::Log 1,"[RoombaUtils] bbrun ".$evt;
  if( $evt =~ /cleanMissionStatus/){
    $sub_ret = mission($name,$evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  if( $evt =~ /cleanSchedule/){
    #main::Log 1,"[RoombaUtils] schedule event ".$evt;
    $sub_ret = schedule($evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  if( $evt =~ /(vacHigh)|(openOnly)|(binPause)|(carpetBoost)|(twoPass)|(schedHold)|(lastCommand)/){
    $sub_ret = settings($name,$evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  #if( $evt =~ /state....reported....batPct/){
  if( $evt =~ /batPct/){
    $sub_ret = battery($evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  if( $evt =~ /state....reported....dock/){
    $sub_ret = dock($evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }

[...snip...]

if (%ret) {
  return {%ret};


  }else{
    my ($evt) = @_;
    main::Log 1,"[RoombaUtils] uncaught event ".$evt
      if( $evt ne "$name" );
    return
  }
}

Gruß,
Thomas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 12 Januar 2021, 09:03:44
Das ist in der Tat etwas verunstaltet und folgt nicht meiner Philosophie.

Erstens dachte ich, dass das mit battery jetzt erledigt sei Und zweitens habe ich bisher nichts davon gehört, dass progWeek auch nicht klappen würde.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: loetmeister am 12 Januar 2021, 18:42:27
Hallo pah,

ja, progWeek wird bei meinem Roomba Modell mit cleanMissionStatus und batPct zusammen geschickt. Beides wurde von elsif( $evt =~ /cleanMissionStatus/) "blockiert". Es gibt noch mehr Abweichungen... die Daten sind alle da, leider nur anders zusammengestellt.

Falls es bei den anderen Modellen ebenfalls etwas unterschiedlich strukturiert ist, wäre es gut die Auswertung der MQTT Daten etwas flexibler zu gestalten. Was sich bestimmt eleganter als in meinem "quick & dirty" Ansatz lösen lässt...

Ich wollte mir noch ein weitere Werte Auslesen (batInfo, mName, mDate; estCap; softwareVer), "estCap"/"bbchg3" ist z.B. bei mir in:
{"state":{"reported":{"bbmssn":{"nMssn":8,"nMssnOK":4,"nMssnF":4,"aMssnM":0,"nMssnC":0,"aCycleM":0},"bbpause":{"pauses":[13,14,0,0,0,0,0,0,0,0]},"bbrstinfo":{"nNavRst":0,"nMobRst":0,"causes":"0000"},"bbpanic":{"panics":[17,14,11,15,11]},"bbchg3":{"nAvail":6,"estCap":2050},"r2a":{"monits":false,"params":{"monitIds":[],"monitPeriodMs":1000,"monitConditions":"8"}}}}}

EDIT: Kann jemand bestätigen, ob "cCount" chargeCount, also Anzahl der Ladevorgänge ist? Als Teil von batInfo wäre das durchaus plausiebel.
$dec->{'state'}->{'reported'}->{'batInfo'}->{'cCount'};

Gruß,
Thomas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: FSausF am 28 Januar 2021, 19:11:25
Ich habe über die Anbindung der Roomba-Roboter einen Wiki-Eintrag geschrieben, das Hilfsmodul 99_RoombaUtils.pm befindet sich ab sofort im FHEM-Ordner contrib/Roomba.
https://wiki.fhem.de/wiki/Roomba
Es gibt in diesem Wiki-Eintrag auch eine noch etwas rudimentäre Beschreibung, wie man die interaktiven Reinigungskarten erzeugt und verwaltet. [/b]
Hallo zusammen,

Das Wiki ist in Zusammenhang mit etwas Erfahrung und Geduld super geglückt!
Ich würde nicht sagen, dass die Einbindung des roomba 960 ein Durchmarsch war, aber möglich.

Chapeau für Eure detaillierte Forschung zum Thema!

Es ist ein wenig gewöhnungsbedürftig, dass das Gerät von sich aus keine Readings an fhem sendet, wenn es aufgrund des eigenen Zeitplans loseiert. Aber man kann es ja von fhem losschicken lassen...

Allein bei den Reinigungskarten hab' ich noch Probleme. Daher folgende Fragen:
1.) Die IP-Adresse für den Link im Reading cmMap scheint im Coding statisch zu sein?
2.) Die Map-Verwaltung tut bei mir nicht so richtig. Das Löschen alter Einträge mit so etwas wie "set roomba mapdel 1" funktioniert nicht.
3.) Die Zusammenfassung der Karten am Ende der Reinigung legt mein fhem für eine ganze Zeit komplett lahm. Kann man die Kartenfunktion komplett abschalten? Reicht es, dafür das SVG-Template und die userattribs im Device zu löschen?
4.) Lässt sich das Löschen alter Reinigungskarten über das Modul steuern? Wäre da nicht so ein Attribut wie "nur die letzten X Pfade behalten" praktisch?

Danke im Voraus für Euer Hirnschmalz,

FSausF
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 29 Januar 2021, 04:43:35
Zitat
Das Wiki ist in Zusammenhang mit etwas Erfahrung und Geduld super geglückt!
Tja. Pädagoge.

Zitat
1.) Die IP-Adresse für den Link im Reading cmMap scheint im Coding statisch zu sein?
Oops, das ist noch ein Bug. Werde ich demnächst beheben

Zitat
2.) Die Map-Verwaltung tut bei mir nicht so richtig. Das Löschen alter Einträge mit so etwas wie "set roomba mapdel 1" funktioniert nicht.
Damit kann ich nicht viel anfangen.

Zitat
3.) Die Zusammenfassung der Karten am Ende der Reinigung legt mein fhem für eine ganze Zeit komplett lahm. Kann man die Kartenfunktion komplett abschalten? Reicht es, dafür das SVG-Template und die userattribs im Device zu löschen?
Es reicht, das Attribut SVG_room zu löschen.

Zitat
4.) Lässt sich das Löschen alter Reinigungskarten über das Modul steuern? Wäre da nicht so ein Attribut wie "nur die letzten X Pfade behalten" praktisch?
Erstens: Ja. Ist in Arbeit. Zweitens: Das will ich gar nicht.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: knorxi am 29 Januar 2021, 11:38:37
Hallo zusammen,
Auch von mir ein großes Lob zu eurer Arbeit.
Bei meinem Roomba 980 hatte ich das Problem, dass er während der SSL-Aushandlung sehr langsam antwortet.
Leider so langsam, dass in HttpUtils der Standard-Timeout zuschlägt und die Verbindung kappt (siehe Bild Wireshark-Trace im Anhang).
Bei mir blieb der Client einfach "disconnected" ohne Fehlermeldung.
Ich habe mir so geholfen, dass ich ein neues Attribut "TIMEOUT" in 00_MQTT2_CLIENT.pm hinzugefügt habe.
Hier der Patch:
--- /opt/fhem/FHEM/00_MQTT2_CLIENT.pm   2021-01-29 11:03:11.661987165 +0100
+++ 00_MQTT2_CLIENT_neu.pm      2021-01-29 11:02:13.092978830 +0100
@@ -51,6 +51,7 @@
     subscriptions
     SSL
     sslargs
+    TIMEOUT
     username
   );
   use warnings 'qw';
@@ -282,6 +283,11 @@
     $hash->{SSL} = $param[0] ? $param[0] : 1;
   }

+  if($attrName eq "TIMEOUT") {
+    delete($hash->{TIMEOUT});
+    $hash->{TIMEOUT} = $param[0] if($type eq "set");
+  }
+
   if($type eq "set" && $attrName eq "ignoreRegexp") {
     my $re = join(" ",@param);
     return "bad $devName ignoreRegexp: $re" if($re eq "1" || $re =~ m/^\*/);

Und dann noch das TIMEOUT Attribut auf 6 Sekunden gestellt:
attr RoombaFegerClient TIMEOUT 6
Da ich kein Perl-/ FHEM-Experte bin, weiß ich nicht, ob das so OK ist.
Vielleicht könnte man den Patch oder etwas Besseres zu 00_MQTT2_CLIENT.pm hinzufügen.

Auch ich habe die Probleme mit "Maps" wie FSauF.
Habe in die setting-Funktion in 99_RoombUtils.pm in den else-Zweig mal eine zusätzliche Log-Zeile hinter $cmd=... eingefügt.
main::Log 1,"[RoombaUtils] setting: cmd: ".$cmd;Im Log sieht man dann nach
set RoombaFeger maplistfolgendes:
[RoombaUtils] setting: cmd: delta {"state": {"vacHigh":false}}Da scheint also noch etwas schief zu gehen.


Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MichaelT am 30 Januar 2021, 13:32:13
Hallo pah,

danke auch von meiner Seite.
Ich habe bei mir das Problem, dass beim Verbindungsaugbau eine Fehler kommt.

HttpUtils: https://192.168.4.145:8883/: Can't connect(2) to https://192.168.4.145:8883:  SSL wants a read first

Internals:
   BUF       
   CFGFN     
   DEF        192.168.4.145:8883
   DeviceName 192.168.4.145:8883
   FUUID      60154f0e-f33f-a152-bf40-7027f4812d986ff8
   NAME       myRoombaClient
   NEXT_OPEN  1612009737.4758
   NR         147929
   PARTIAL   
   SSL        1
   STATE      disconnected
   TYPE       MQTT2_CLIENT
   clientId   8...0
   connecting 1
   nextOpenDelay 5
   READINGS:
     2021-01-30 13:28:52   state           disconnected
   sslargs:
     SSL_version SSLv23
Attributes:
   SSL        1
   autocreate simple
   clientId   8...0
   mqttVersion 3.1.1
   room       Roomba
   sslargs    SSL_version:SSLv23
   username   8...0
   verbose    5

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1

Einer eine Idee was das sein könnte
 Danke schon mal

Gruß
Michael

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 30 Januar 2021, 14:22:41
Zitat
Da scheint also noch etwas schief zu gehen.
Nö, das ist vorerst (!) so beabsichtigt.

@MichaelT: https://forum.fhem.de/index.php?topic=43794.0

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MichaelT am 30 Januar 2021, 15:22:45

@MichaelT: https://forum.fhem.de/index.php?topic=43794.0


Danke pah,

Hinweis war gut. Habe nun das Timeout von knorxi, dann geht's.

Schönes WE
Michael
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 02 Februar 2021, 14:48:29
Hallo zusammen,

für mich ist die Reinigung einzelner Räume der häufigste Anwendungsfall. Ein reines "Start" führe ich eigentlich nie aus.
Ich besitze einen Roomba i7, Firmware 3.12.

Folgende Ergänzungen habe ich dafür gemacht:

# in 99_RoombaUtils.pm
my %rooms = ("Kueche" => {'regionId' => 7, 'type' => 'rid'},
             "Wohnzimmer" => {'regionId' => 5, 'type' => 'rid'});

# nach sub command eine neue Methode 'cleanRoom' einfügen

sub cleanRoom($$$$) {
  my ($name,$pmapId,$userPmapvId,$evt) = @_;
  my $hash = $main::defs{$name};

  my @dings = split(' ',$evt);
  my $roomName = $dings[1];
  my $regionId = $rooms{$roomName}{'regionId'};
  my $regionType = $rooms{$roomName}{'type'};

  my $cmd = 'cmd {"command": "start", "pmap_id": "'.$pmapId.'", "regions": [{"region_id": "'.$regionId.'", "type": "'.$regionType.'"}], "user_pmapv_id": "'.$userPmapvId.'", "time": '.time().', "initiator": "localApp"}';
  return $cmd;
}

Das setList im MQTT-Device um folgenden Eintrag ergänzen:
cleanRoom:Kueche,Wohnzimmer {roomba::cleanRoom($NAME,"5xxxxxxxxxxxxxxxxxxxxw","2xxxxxxxxxxx4",$EVENT)}

Der Parameter 5xxxxxxxxxxxxxxxxxxxxw kommt aus dem Reading state_reported_lastCommand_pmap_id
Der Parameter 2xxxxxxxxxxx4 kommt aus dem Reading state_reported_lastCommand_user_pmapv_id

ID und Type für einen Raum bekommt man, indem man in der App den Reinigungsbefehl für einen Raum ausführt.
Die richtigen Werte sind dann in den Readings state_reported_lastCommand_regions_1_region_id und state_reported_lastCommand_regions_1_type ersichtlich.
Wenn man in der App mehrere Räume zur Reinigung auswählt, gibt es entsprechende weitere Readings (..._regions_2_region_...).

Möchte man mehrere Etagen reinigen, empfehle ich, mehrere 'cleanRoom' Befehle in setList anzulegen. Die Etage definiert sich über pmap_id und user_pmapv_id.
cleanErdgeschoss:Kueche,Wohnzimmer {roomba::cleanRoom($NAME,"5xxxxxxxxxxxxxxxxxxxxw","2xxxxxxxxxxx4",$EVENT)}
cleanObergeschoss:Badezimmer,Schlafzimmer{roomba::cleanRoom($NAME,"anderePmapId","andereUserPmapvId",$EVENT)}
Ich hatte selber noch nicht die Zeit dazu, das umzusetzen, werde es aber bei Gelegenheit nachreichen. Ebenso das gleichzeitige Ausführen für mehrere Räume.
Es sollte übrigens für alle Geräte, die Einzelraumreinigung unterstützen (zB auch Braava Jet m6) funktionieren, das konnte ich aber noch nicht verifizieren.

Ich weiß auch nicht, wie lange pmapId und user_pmapv_id stabil sind, bislang funktionieren die Werte, die ich einmalig hinterlegt habe.

Feedback welcome

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: FSausF am 02 Februar 2021, 21:47:31
Ich bin da jetzt voll aus der Kurve geflogen...

Für ein Paar Tage ging alles prächtig: FHEM hat den Roomba losgeschickt, nach gegebenenfalls manueller Aktualisierung des Devices die Reinigungskarte angezeigt, und gut.

Heute dann das Ende: Der Roomba wurde von fhem losgeschickt und hat seine Runde beendet.
Die Reinigungskarte wurde jedoch nicht fortgeschrieben. Seitdem er in seine Basis zurückgekehrt ist, spricht er nicht mehr mit fhem.
Mit der Roomba-App schon.

Ein Neustart von fhem bringt nix, auch nicht auf Debian-Ebene (PI).
Das MQTT-Device sagt auf Geschwätzigkeitslevel 5:
Zitat
2021.02.02 21:37:42 5: HttpUtils url=https://192.168.RICHTIG.RICHTIG:8883/
2021.02.02 21:37:42 4: IP: 192.168.RICHTIG.RICHTIG -> 192.168.RICHTIG.RICHTIG
2021.02.02 21:37:42 5: HttpUtils url=https://192.168.RICHTIG.RICHTIG:8883/
2021.02.02 21:37:42 4: IP: 192.168.2.47 -> 192.168.RICHTIG.RICHTIG

Es sieht mir so aus, als scheitert das auf unterster Protokoll-Ebene.
Erinnere ich mich an den Wiki-Eintrag und führe auf Debian
Zitat
python3 roomba-gettpassword
aus, kriege ich so etwas wie ein Lebenszeichen, das dann aber mir einem Timeout endet:
Zitat
Received: {
  "hostname": "Roomba-3192C22492019700",
  "nc": 0,
  "ip": "192.168.RICHTIG.RICHTIG",
  "ver": "3",
  "robotname": "Heinzelmann",
  "sw": "v2.4.6-3",
  "sku": "R960040",
  "proto": "mqtt",
  "mac": "RICHTIG",
  "cap": {
    "pose": 1,
    "edge": 1,
    "eco": 1,
    "langOta": 1,
    "svcConf": 1,
    "multiPass": 2,
    "pp": 1,
    "binFullDetect": 1,
    "ota": 2,
    "maps": 1
  }
}
Roomba (Heinzelmann) IP address is: 192.168.RICHTIG.RICHTIG
Connection Error timed out
Traceback (most recent call last):
  File "roomba-getpassword", line 11, in <module>
    load_entry_point('Roomba980-Python==1.2.3', 'console_scripts', 'roomba-getpassword')()
  File "/home/pi/.local/lib/python3.5/site-packages/roomba/getpassword.py", line 34, in main
    Password(file=arg.configfile)
  File "/home/pi/.local/lib/python3.5/site-packages/roomba/password.py", line 41, in __init__
    self.get_password()
  File "/home/pi/.local/lib/python3.5/site-packages/roomba/password.py", line 138, in get_password
    wrappedSocket.send(packet)
  File "/usr/lib/python3.5/ssl.py", line 871, in send
    return socket.send(self, data, flags)
socket.timeout: timed out
In meiner /etc/ssl/openssl.cnf habe ich am Ende die vermeintlich magischen Zeilen zu SSL-Problemen eingefügt, aber das rockt es nach einem Neustart leider nicht:
Zitat
[ssl_default_sect]
   MinProtocol = TLSv1.2
   CipherString = DEFAULT:@SECLEVEL=1

Warum spricht das Aas seit dem Docken nicht mehr mit fhem und wie locke ich ihn aus der Reserve?

Ideen?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 03 Februar 2021, 08:05:18
Ist mir auch schon passiert, die Ursache ist noch nicht ganz klar.

Abhilfe: Für 10 Sekunden die Batterie des Roomba ausbauen. Danach sollte es wieder gehen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 03 Februar 2021, 08:48:59
Hier noch das geplante Update zum Saugen einzelner Räume, mehreren Etagen, und auch mehreren Räumen.

Die IDs werden jetzt direkt in 99_RoombaUtils hinterlegt.
Das macht das setList schlanker. Nachteil: dafür muss man bei einer Änderung RoombaUtils neu laden.
Frage an die Runde: Geht das eigentlich zur Laufzeit? Oder muss ein komplettes shutdown restart gemacht werden?
my %rooms = ("EG" => {"__settings" => {"pMapId" => "5xxxxxxxxxxxxxxxxxxxxw", "userPmapvId" => "2xxxxxxxxxxxxxx4"},
                      "Kueche" => {"regionId" => 7, "type" => "rid"},
                      "Esszimmer" => {"regionId" => 1, "type" => "rid"},
                      "Eingangsbereich" => {"regionId" => 2, "type" => "rid"},
                      "WC_EG" => {"regionId" => 4, "type" => "rid"},
                      "Abstellraum" => {"regionId" => 6, "type" => "rid"},
                      "Wohnzimmer" => {"regionId" => 5, "type" => "rid"}
                     },
             "OG" => {"__settings" => {"pMapId" => "Hxxxxxxxxxxxxxxxxxxxxg", "userPmapvId" => "2xxxxxxxxxx4"},
                      "Buero" => {"regionId" => 1, "type" => "rid"},
                      "Flur" => {"regionId" => 5, "type" => "rid"},
                      "Schrank" => {"regionId" => 10, "type" => "rid"},
                      "WC_OG" => {"regionId" => 20, "type" => "rid"},
                      "Lounge" => {"regionId" => 22, "type" => "rid"},
                      "Schlafzimmer" => {"regionId" => 23, "type" => "rid"},
                      "Badezimmer" => {"regionId" => 24, "type" => "rid"}
                     },
             "KG" => {"__settings" => {"pMapId" => "6xxxxxxxxxxxxxxxxxxxxA", "userPmapvId" => "2xxxxxxxxxx9"},
                      "Studio" => {"regionId" => 1, "type" => "rid"},
                      "Rumpelkammer" => {"regionId" => 2, "type" => "rid"},
                      "Flur" => {"regionId" => 3, "type" => "rid"}
            });

Die Methode cleanRoom ändert sich in folgender Weise.

sub cleanRoom($$$) {
  my ($name,$levelName,$evt) = @_;
  my $hash = $main::defs{$name};

  my @evts = split(' ',$evt);
  my $pmapId = $rooms{$levelName}{__settings}{pMapId};
  my $userPmapvId = $rooms{$levelName}{__settings}{userPmapvId};

  my $regionString = '"regions": [';
  my $nrRegions = @evts;

  for(my $regIdx = 1; $regIdx < $nrRegions; $regIdx++){
    my $regionName = $evts[$regIdx];
    my $regionId = $rooms{$levelName}{$regionName}{regionId};
    my $regionType = $rooms{$levelName}{$regionName}{type};

    $regionString = $regionString.'{"region_id": "'.$regionId.'", "type": "'.$regionType.'"}';
    if ($regIdx +1 < $nrRegions) {
      $regionString = $regionString.',';
    }
  }
  $regionString = $regionString.']';

  my $cmdString = '{"command": "start", "pmap_id": "'.$pmapId.'", '.$regionString.', "user_pmapv_id": "'.$userPmapvId.'", "ordered": 1, "time": '.time().', "initiator": "localApp"}';
#  main::Log 1,"============>cleanRoom: $cmdString";
  my $cmd = 'cmd '.$cmdString;
  return $cmd;
}

Entsprechend ändert sich auch setList
cleanBasement:Rumpelkammer,Studio,Flur {roomba::cleanRoom($NAME,"KG",$EVENT)}
cleanGroundfloor:Kueche,Wohnzimmer,Esszimmer,Eingangsbereich,WC_EG,Abstellraum {roomba::cleanRoom($NAME,"EG",$EVENT)}
cleanUpperfloor:Buero,Flur,Schrank,WC_OG,Lounge,Schlafzimmer,Badezimmer {roomba::cleanRoom($NAME,"OG",$EVENT)}

Damit ist jetzt auch das Reinigen mehrerer Räume möglich. Zum Beispiel
set iRobotRoomba cleanGroundfloor Kueche Esszimmer Wohnzimmer

Die Reihenfolge der Reinigung entspricht der Reihenfolge, wie die Räume angegeben werden. Wer das nicht möchte, kann in cleanRoom das Attribut "ordered":1 wegnehmen.

Ich würd mich sehr freuen, wenn diese Funktionalität es ins contrib schafft. Meine Perl-Syntax ist stark verbesserungswürdig, aber so ist das nun mal mit diesen Java-Entwicklern ;-)
Verbesserungsvorschläge zum Coding-Style nehme ich gern an.

Grundsätzlich werde ich wohl noch daran tüfteln, zb die IDs als Attribute zu hinterlegen, anstatt direkt im Utils, um etwas flexibler auf Änderungen reagieren zu können. Ideal wäre, den gesamten rooms-Hash (oder den Großteil daraus) direkt ins FHEM-UI zu bekommen.

schöne Grüße
Martin

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: FSausF am 03 Februar 2021, 11:03:18
Ist mir auch schon passiert, die Ursache ist noch nicht ganz klar.
Abhilfe: Für 10 Sekunden die Batterie des Roomba ausbauen. Danach sollte es wieder gehen.
Ich glaube, hier gibt es eine noch kürzere Lösung als den Ausbau der Batterie - zumindest hat das bei mir gerockt:
Neustart des Roboters, und zwar so:
https://homesupport.irobot.com/app/answers/detail/a_id/10881/~/neustart-oder-reset-des-roboters

Was mir auffiel ist Folgendes:
Ich habe den Roboter sowohl gestern als auch heute dann mit der App auf Reisen geschickt. Dabei konnte er auch für die App keine Karte erzeugen. Also hat er für sich schon einen Knoten im Hirn. Kann wohl auch bei KI passieren.

Ich habe folgenden Verdacht:
Wenn ich es richtig verstehe, wird die Vektor-Karte in fhem erzeugt, wenn der Roboter dockt.
Kann das sein, dass der Zustand dann unsicher wird, wenn während der Berechnung der MQTT-Timeout zuschlägt und auf einer Seite der Leitung noch was unbestätigt in der Queue hängt?
Und, dass dann vonseiten fhem der Reinigungsauftrag protokollarisch nicht so richtig als abgeschlossen vermerkt wird? Oder auf Seite des Roboters?
Wie wäre es, während der Kartenberechnung so etwas wie einen keepalive einzubauen?

Ich bin nach dem Reset fürs erste wieder häppi, werde die Kartenerzeugung abklemmen und mal schauen, ob das Ding dann länger als drei Tage stabil integriert durchhält. Ich werde berichten.

Wenn ich meine laienhaften Finger in den Dienst der weiteren Forschung stellen kann, lass' es mich bitte wissen!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 03 Februar 2021, 17:17:37
OK, das mit dem Neustart an der clean-Taste werde ich gerne mal probieren. Ich habe eine neue Version des Hilfsmoduls, die ich hier mal anhänge. Sie setzt während des Reinigungsvorgangs das disconnectAfter-Attribut hoch, funktioniert bei mir über die letzte Woche hinweg sehr gut.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: FSausF am 04 Februar 2021, 09:37:37
So, neuer Tag, neues Glück:
Gestern Abend die neue RoombaUtils eingespielt und die Attribute für die Kartenausgabe wieder gesetzt, um die Feldforschung auf eigener Krume zu unterstützen.

Ergebnis:
Also nur teilweise erfolgreich.
Ich lasse das Mapping noch mal ein Paar Tage mitlaufen und schaue, ob es sich irgendwie eingroovt.

Aber die wesentliche Funktion (Roomba reagiert auf fhem und bollert los) ist zunächst mal gegeben.
Ich berichte über die Stabilität.

P.S.: Hatte ich eigentlich erwähnt, dass mein Roomba-Täterä ein einfacher 960er mit aktueller Firmware ist, keine hochgezüchtete i-Series?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 05 Februar 2021, 10:01:11
Das sind leider unzureichende Informationen.
- Wie sind die Attributwerte für das Mapping?
- Was sagt das Log dazu?
- Was ist der Wert des Readings cmMap?

Evtl. mal probieren, in der FHEM-Kommadozeile einzugeben

{roomba::finalizemap($defs{"<hier Devicename>"})}
LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 05 Februar 2021, 10:55:49
Hallo,

das Modul läuft soweit zu meiner vollsten Zufriedenheit.
Super timing, dass hier genau dann damit begonnen wurde, als ich mir das Teil gekauft hab :-)

Ich hab versucht, bei meinem i7 das Mapping zu nutzen.
Bisher sind durch set maplist keine dafür spezifischen Readings (cmMap?) aufgetaucht.
Auch im Log ist darauf keine Reaktion zu sehen.
Entweder ich mach was falsch, oder der i7 benötigt etwas extra. Firmware ist 3.12.x

Beim Ausführen von
{roomba::finalizemap($defs{"iRobotRoomba"})}
kommt im Log
2021.02.05 10:20:06 1: [RoombaUtils] Finalization of map for device iRobotRoomba not possible, path undefined

Welcher path ist denn damit gemeint?

Das sind die Attribute, die ich am MQTT-Device gesetzt hab:

attr iRobotRoomba LOG_dir /tmp
attr iRobotRoomba SVG_collect SVG_Roomba.xml
attr iRobotRoomba SVG_color1 green:lightgreen
attr iRobotRoomba SVG_color2 orange:yellow
attr iRobotRoomba SVG_color3 red:pink
attr iRobotRoomba SVG_color4 blue:lightblue.
attr iRobotRoomba SVG_final SVG_Roomba.svg
attr iRobotRoomba SVG_room SVG_EG.svg

Mein Anliegen ist eindeutig als low-prio zu deklarieren, ich bin gern bereit, hier aktiv mitzuhelfen.

Danke
schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 05 Februar 2021, 14:33:54
Der Pfad ist das Array, in welchem die Punkte einer Mission aufgesammelt werden.

OK, fragen wir mal die Details ab.

1. Werden während einer Reinigungsmission regelmäßig die Readings
Zitat
position
positionCount
positionTheta
upgedated?   

2. Was ergibt der Befehl
{Dumper($defs{'<hier Devicename>'}->{helper})}Vor, während und nach einer Reinigungsmission?

2.

Was steht in den Dateien
Zitat
SVG_Roomba.xml
SVG_EG.svg

Das mit dem Reinigen einzelner Räume werde ich irgendwann einbauen - und hoffe, meine beiden Roboter auch dazu zu bewegen. Prinzipiell sollte es möglich sein, per API die Kiste an einen bestimmten Ort zu bewegen und die virtuelle Raumbegrenzung in FHEM einzubauen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 05 Februar 2021, 15:04:29
1. Werden während einer Reinigungsmission regelmäßig die Readingsupgedated?   
Grundsätzlich ja. Bei mir sind das aber
state_reported_pose_point_x
state_reported_pose_point_y
state_reported_pose_theta
Und ich denke, da liegt auch schon die Ursache des Problems.
Ich bin so frei und schau mir mal selber den Code soweit durch, dass ich vielleicht selber etwas experimentiere, bevor ich mehr deiner Zeit beanspruche

2. Was ergibt der Befehl
{Dumper($defs{'<hier Devicename>'}->{helper})}Vor, während und nach einer Reinigungsmission?
Undef

Was steht in den Dateien
Nix. Wahrscheinlich ein Folgefehler der vorigen zwei Fragen.

Danke, ich geb Bescheid, wenn ich entweder was Lösen konnte, oder feststecke.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 05 Februar 2021, 17:34:39
state_reported_pose_point_x
state_reported_pose_point_y
state_reported_pose_theta
Kann eigentlich nur vorkommen, wenn die readingList nicht richtig gesetzt wird. Sonst würde das durch das Unterprogramm pose() abgefangen.
sub pose($$){
  my ($name,$evt) = @_;
 
  my $hash = $main::defs{$name};
 
  #-- getting events of the type
  # {"state":{"reported":{"pose":{"theta":0,"point":{"x":311,"y":-21}}}}}    <============== Hier ein Beispiel für den JSON-Code, der hiermit abgefangen wird
  my $dec   = decode_json($evt);
  my $theta = $dec->{'state'}->{'reported'}->{'pose'}->{'theta'};
  my $px    = $dec->{'state'}->{'reported'}->{'pose'}->{'point'}->{'x'};
  my $py    = $dec->{'state'}->{'reported'}->{'pose'}->{'point'}->{'y'};
 
  if($hash->{helper}{initmap}==1){
    $hash->{helper}{startx} = $px;
    $hash->{helper}{starty} = $py;
    $hash->{helper}{initmap}=0;
  }
  $px -= $hash->{helper}{startx};
  $py -= $hash->{helper}{starty};
 
  my $dir = main::AttrVal($name,"startdir","north");
  my ($pxp,$pyp);
  if($dir eq "north"){
    $pxp = -$py;
    $pyp =  $px;
  }elsif($dir eq "east"){
    $pxp = $px;
    $pyp = $py;
  }elsif($dir eq "south"){
    $pxp =  $py;
    $pyp = -$px;
  }elsif($dir eq "west"){
    $pxp = -$px;
    $pyp = -$py;
  }else{
    main::Log 1,"[RoombaUtils] invalid start direction $dir";
  }

  #-- Reduction not useful
  push(@{$hash->{helper}{theta}},$theta);
  push(@{$hash->{helper}{path}},$pxp,$pyp);
  my $count = $hash->{helper}{pcount};
  $count++;
  $hash->{helper}{pcount}=$count;
   
  my %ret   = ("positionTheta",$theta,"positionCount",$count,"position","(".$pxp.",".$pyp.")");
  return {%ret};
}
Klar ist auch, dass dann kein Pfad existiert, wenn das nicht abgefangen wird.

UndefKann nicht sein, wenn das Device existiert


LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: thoweiss am 06 Februar 2021, 09:33:28
Hallo an alle Roombauser,

seit gestern tut "Horst" (Roomba e5) hier seinen Dienst.

Würde die Anbindung an FHEM beim e5 über MQTT auch funktionieren?

Allerdings hat der e5 keine Kartennavigation und brummt zufällig durch die Bude.

Gruß,
Thorsten
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 06 Februar 2021, 13:07:25
Zitat
Kann eigentlich nur vorkommen, wenn die readingList nicht richtig gesetzt wird. Sonst würde das durch das Unterprogramm pose() abgefangen.
Und da haben wir auch schon die Lösung. Ich dachte, die Methode reading() ist nur dazu da, ungewollte Readings zu entfernen.  Ich hatte folgenden Wert für readingList gesetzt.
$DEVICETOPIC:.* { json2nameValue($EVENT) }
Aber ja, es steht grundsätzlich im Wiki. Dass das für die Mapping funktion essentiell ist, war mir nicht klar.

Und das undef kam daher, weil es {helper} tatsächlich nicht gab.

Nun funktioniert alles. Ohne Änderung. Perfekt.
Danke.

Würde die Anbindung an FHEM beim e5 über MQTT auch funktionieren?
Indem der e5 App-Steuerung hat, würde ich schon annehmen, dass das funktioniert.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 06 Februar 2021, 14:51:30
Ich nun wieder mit der Raum-Sache:

Das %room-Hash aus 99_RombaUtils ist mit folgenden Ergänzungen nicht mehr nötig, da alle Daten hiermit aus Attributen kommen.
Um das Erstellen der Attribute zu vereinfachen, kann man zu RoombaUtils folgende Methoden hinzufügen:
(und auch die Methode cleanRoom hat sich geändert, da die Werte ja nun nicht mehr aus dem %rooms Hash kommen)
sub cleanRoom($$$) {
  my ($name,$levelName,$evt) = @_;
  my $hash = $main::defs{$name};

  my @evts = split(' ',$evt);

  my $pmapId = main::AttrVal($name, 'floor_'.$levelName.'_pMapId', '');
  my $userPmapvId = main::AttrVal($name, 'floor_'.$levelName.'_userPmapvId', '');

  my $regionString = '"regions": [';
  my $nrRegions = @evts;

  for(my $regIdx = 1; $regIdx < $nrRegions; $regIdx++){
    my $regionName = $evts[$regIdx];
    my $regionId = main::AttrVal($name, 'room_'.$regionName.'_id', '');
    my $regionType = main::AttrVal($name, 'room_'.$regionName.'_type', '');

    $regionString = $regionString.'{"region_id": "'.$regionId.'", "type": "'.$regionType.'"}';
    if ($regIdx +1 < $nrRegions) {
      $regionString = $regionString.',';
    }
  }
  $regionString = $regionString.']';

  my $cmdString = '{"command": "start", "pmap_id": "'.$pmapId.'", '.$regionString.', "user_pmapv_id": "'.$userPmapvId.'", "ordered": 1, "time": '.time().', "
initiator": "localApp"}';
  main::Log 1,"============>cleanRoom: $cmdString";
  my $cmd = 'cmd '.$cmdString;
  return $cmd;
}

sub createFloor($$) {
  my ($name, $evt) = @_;
  my $hash = $main::defs{$name};

  my @evts = split(' ',$evt);
  my $floorName = main::makeReadingName($evts[1]);
  my $pMapId = $evts[2];
  my $userPmapvId = $evts[3];

  my $attrName = 'floor_'.$floorName.'_label';
  main::addToDevAttrList($name, $attrName);
  $main::attr{$name}{$attrName} = $evts[1];

  $attrName = 'floor_'.$floorName.'_pMapId';
  main::addToDevAttrList($name, $attrName);
  $main::attr{$name}{$attrName} = $pMapId;

  $attrName = 'floor_'.$floorName.'_userPmapvId';
  main::addToDevAttrList($name, $attrName);
  $main::attr{$name}{$attrName} = $userPmapvId;
}

sub createRoom($$) {
  my ($name, $evt) = @_;
  my $hash = $main::defs{$name};

  my @evts = split(' ',$evt);
  my $roomName = main::makeReadingName($evts[1]);
  my $floor = $evts[2];
  my $roomId = $evts[3];
  my $roomType = $evts[4];

  my $attrName = 'room_'.$roomName.'_label';
  main::addToDevAttrList($name, $attrName);
  $main::attr{$name}{$attrName} = $evts[1];

  $attrName = 'room_'.$roomName.'_floor';
  main::addToDevAttrList($name, $attrName);
  $main::attr{$name}{$attrName} = $floor;

  $attrName = 'room_'.$roomName.'_id';
  main::addToDevAttrList($name, $attrName);
  $main::attr{$name}{$attrName} = $roomId;

  $attrName = 'room_'.$roomName.'_type';
  main::addToDevAttrList($name, $attrName);
  $main::attr{$name}{$attrName} = $roomType;
}

setList erhält entsprechend folgende neuen Einträge:
createFloor {roomba::createFloor($NAME, $EVENT)}
createRoom {roomba::createRoom($NAME, $EVENT)}

Dann legt man die Etagen an. zB mit
set device createFloor <Etagenname> <pMapId> <userPmapvId>
set device createFloor Erdgeschoss 5yyyyyyyxxxxxxxxw 2xxxxxTyyyyy4

Dadurch werden pro Etage folgende Attribute angelegt
floor_EG_label       EG
floor_EG_pMapId     5yyyyyyyxxxxxxxxw
floor_EG_userPmapvId 2xxxxxTyyyyy4

Räume werden so angelegt:
set device createRoom <Raumname> <Etagenname> <Raum-ID> <Raum-Typ>
set device createRoom Kueche EG 7 rid

Dadurch erhält man folgende Attribute pro Raum
room_Kueche_floor EG
room_Kueche_id 7
room_Kueche_label Kueche
room_Kueche_type rid
Im Attributnamen ist nur der Name des Raums drin, nicht jener der Etage. Wer also zwei WCs besitzt, muss verschiedene Raumnamen vergeben (zB WC_EG, WC_OG), weil der zweite Aufruf von createRoom sonst die Werte des ersten Raumes überschreibt.

Ganz wichtig: unbedingt "Save config" klicken, auch wenn kein Fragezeichen angezeigt wird. Die gesetzten Attribute gehen sonst bei einem Neustart verloren.
Ein Bug in main::addToDevAttrList?


Mit dieser Änderung sind alle Variablen aus 99_RoombaUtils verschwunden und somit sollten diese Methoden eigentlich stabil sein.
Ständiger Wartungsaufwand und FHEM Restarts bei Änderungen sind also nicht mehr nötig.

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 06 Februar 2021, 19:00:45
Ich denk mal drüber nach...

Zitat
Aber ja, es steht grundsätzlich im Wiki.
Wieso "grundsätzlich" ? Ich würde sagen "wörtlich".

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: loetmeister am 06 Februar 2021, 20:16:08
Würde die Anbindung an FHEM beim e5 über MQTT auch funktionieren?
Hi,

ja, hab auch einen Roomba E5 (E5158) und die Einrichtung funktioniert wie im Wiki beschrieben. Bloß die "Komfortfunktionen für Readings" funktionieren nicht alle, ich musste 99_RoombaUtils.pm etwas anpassen. Kann ich dir gerne schicken. Oder du lässt es bei dem readingList $DEVICETOPIC:.* { json2nameValue($EVENT) } mit allen MQTT readings.
Siehe https://forum.fhem.de/index.php/topic,114166.msg1119270.html#msg1119270 und folgende.

Gruß,
Thomas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 06 Februar 2021, 21:03:07
Wieso "grundsätzlich" ? Ich würde sagen "wörtlich".

Ich denke, meine Wahrnehmung wurde durch den Begriff "Komfortfunktion" verfälscht, da ich erstmal gern alle Readings sehen wollte.
Ein Satz wie "Die Funktion readings() ist außerdem zum Erstellen der Reinigungskarten nötig" hätte sogar mir die Augen geöffnet  ;D
 
schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 06 Februar 2021, 22:12:07
Zitat
ich musste 99_RoombaUtils.pm etwas anpassen
Wie?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: thoweiss am 07 Februar 2021, 09:18:25
Hi,

ja, hab auch einen Roomba E5 (E5158) und die Einrichtung funktioniert wie im Wiki beschrieben.
Gruß,
Thomas

Dann erde ich mich damit einmal beschäftigen, Fuktioniert die Steuerung über fhem auch parallel mit der Roomba App.


Gruß,
Thorsten
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 07 Februar 2021, 15:39:10
Was ist mit "parallel" gemeint? Die App kann zwar benutzt werden - allerdings teilt der Roboter FHEM nicht von sich aus mit, dass er gestartet ist. Dafür müsste FHEm ihn regelmäßig kontaktieren - und das ist derzeit noch nicht gut gelöst.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: thoweiss am 08 Februar 2021, 19:07:09
Ich meine ob die APP auch noch funktioniert, wenn ich den Roomba in FHEM "anmelde".

Oder geht nur "entweder FHEM oder die APP"

Danke und Gruß,
Thorsten Weiss
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: FSausF am 13 Februar 2021, 13:11:05
Ich meine ob die APP auch noch funktioniert, wenn ich den Roomba in FHEM "anmelde".

Oder geht nur "entweder FHEM oder die APP"

Danke und Gruß,
Thorsten Weiss
Nach meinen Erfahrungen geht beides.
Aber die tauschen sich nicht allzu gut aus.
Du kannst über fhem zum Beispiel die Attribute für die Reinigungszeiten in der APP setzen, und er würde dann auch von sich aus losrumpeln (beziehungsweise den Reinigungszeitplan in der App zeigen).
Allerdings von sich aus, und ohne fhem Bescheid zu geben.
Wenn Du ihn von fhem aus losschickst, sieht die Sache anders aus:
Die Äpp kriegt es mit.

Für mich ist die Lösung aktuell:
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 13 Februar 2021, 18:09:38
Zitat
Die APP macht die Reinigungskarten. Denn die Kartenfunktion des Moduls schiesst mir so etwa ein Mal pro Woche fhem ab.

Erstens ist es kein Modul, sondern nur eine Sammlung von Hilfsfunktionen.
Zweitens sollten bei einer solchen Aussage irgendwelche Fehlermeldungen mitgeliefert werden, "abschießen" ist ziemlich dünn.
Drittens tauschen sich App und FHEM GAR NICHT aus - wie auch? Bitte nicht solche Nebelkerzen zünden.

Die Roomba-App fragt periodisch den Roboter nach seinem Status, nur darum wird davon ein Start per FHEM festgestellt. Das kann man problemlos auch ich FHEM einstellen, dann wird in FHEM auch der Start per App festgestellt. Das habe ich aus Zeitgründen bisher noch nicht in die Hilfsroutinen eingebaut.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: thoweiss am 16 Februar 2021, 18:30:51
Hallo zusammen,
ich habe es jetzt hinbekommen.

Mein E5 ist in FHEM eingebunden, die parallele Steuerung über FHEM und Roomba-App funktioniert problemlos.

Leider stellt mein E5 ja keine Positionsdaten bereit, da er ja nach dem Chaosprinzip reinigt.

Mal sehen welche Verknüpfungen mir jetzt einfallen.

Dank auch an Prof. Dr. Peter Henning für die Modulentwicklung.

Gruß,
Thorsten
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 16 Februar 2021, 20:35:48
Zitat
Leider stellt mein E5 ja keine Positionsdaten bereit, da er ja nach dem Chaosprinzip reinigt.
Hmmm. "Chaos" ist etwas anderes, der E5 benutzt zufällige Richtungsänderungen. Allerdings habe ich Zweifel, dass er keine Positionsdaten kennt - denn irgendwie muss er ja zur Basis zurückfinden. Vorschlag: Mal mit dem "nackten" Wert für readingsList
Zitat
$DEVICETOPIC:.* { json2nameValue($EVENT) }
laufen lassen und ein Listing aller Readings hier posten.

LG

pah

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 18 Februar 2021, 12:06:43
Hallo zusammen,

bin ein absoluter Neuling und habe es geschafft, meinen E5 mit FHEM zu verbinden - jippieh. Auch ein Gerät, in dem die Readings angezeigt werden, habe ich erstellt.

Leider scheitere ich daran, die setlist "funktionierend" in FHEM zu kopieren aus dem Wiki.

Was ist daran falsch:

attr Roomba_E5_Device setList start cmd {"command": "start", "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"}

Vielen Dank für Eure Hilfe.

Marco
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 18 Februar 2021, 12:21:31
Was ist daran falsch:
betr. Forum: Fehlende Code-Tags (das Kreuz)
betr. dein FHEM (vermutlich) das Missverständnis, was die Bachslashes (\) angeht:
Die kommen aus einer RAW-Darstellung, und bedeuten dort einen escapten Zeilenumbruch. Du scheinst was anderes daraus gemacht zu haben. Würde empfehlen, das über "das grüne Plus" einzugeben und darauf zu achten, dass jeweils (direkt!) nach jedem Backslash dann der Zeilenumbruch kommt.

Wenn's dann nicht klappt, bitte eine komplette RAW-DEF hier posten (in der Detailansicht in fHEMWEB ganz unten aufzurufen).
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 18 Februar 2021, 12:53:46
Komischerweise ist das grüne Kreuz gar nicht da >:(. Habe gestern das System aufgesetzt und das eine oder andere installiert. Warum das weg ist, weiss ich nicht...

hier der Raw-Output:

defmod Roomba_E5_Device MQTT2_DEVICE 3167072470415630
attr Roomba_E5_Device IODev Roomba_E5
attr Roomba_E5_Device devicetopic 3167072470415630
attr Roomba_E5_Device readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
attr Roomba_E5_Device setList start cmd {"command": "start", "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"}

setstate Roomba_E5_Device dock
setstate Roomba_E5_Device 2021-02-18 12:20:33 state dock
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_batInfo_cCount 387
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_batInfo_mData 3030303330343032000000000000000000000000000000000000000000000000
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_batInfo_mDate 2018-05-23
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_batInfo_mDaySerial 22370
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_batInfo_mLife 0C650A84108009C34E36000C04ADF53100C2FE7C2CFCFFFF11AC340E00000000
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_batInfo_mName PanasonicEnergy
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_batPct 100
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_batteryType F12432832R
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbchg3_estCap 1686
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbchg3_nAvail 1776
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbmssn_aCycleM 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbmssn_aMssnM 24
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbmssn_nMssn 632
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbmssn_nMssnC 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbmssn_nMssnF 47
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbmssn_nMssnOK 585
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpanic_panics_1 15
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpanic_panics_2 17
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpanic_panics_3 15
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpanic_panics_4 12
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpanic_panics_5 17
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_1 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_10 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_2 6
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_3 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_4 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_5 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_6 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_7 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_8 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbpause_pauses_9 9
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrstinfo_causes 0000
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrstinfo_nMobRst 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrstinfo_nNavRst 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_hr 632
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_min 36
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_nCBump 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_nCliffsF 5174
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_nCliffsR 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_nMBStll 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_nPanics 5490
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_nPicks 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_nScrubs 1600
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_nStuck 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_nWStll 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bbrun_sqft 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_binPause false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bin_full false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bin_present true
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_bootloaderVer 2.5
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cap_eco 1
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cap_ota 1
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cap_svcConf 1
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_carpetBoost false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_cycle clean
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_error 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_expireM 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_expireTm 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_initiator localApp
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_mssnM 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_mssnStrtTm 1613647098
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_nMssn 632
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_notReady 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_phase hmUsrDock
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_rechrgM 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanMissionStatus_sqft 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_cycle_1 none
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_cycle_2 start
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_cycle_3 start
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_cycle_4 start
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_cycle_5 start
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_cycle_6 start
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_cycle_7 none
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_h_1 6
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_h_2 9
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_h_3 9
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_h_4 9
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_h_5 9
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_h_6 9
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_h_7 9
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_m_1 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_m_2 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_m_3 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_m_4 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_m_5 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_m_6 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_cleanSchedule_m_7 0
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_cloudEnv prod
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_country DE
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_dock_known true
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_ecoCharge false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_hardwareRev 4
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_10_nl-NL 5
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_11_da-DK 6
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_12_sv-SE 7
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_13_nb-NO 8
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_14_fi-FI 16
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_15_pl-PL 10
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_16_cs-CZ 17
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_17_ru-RU 18
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_18_he-IL 20
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_19_ja-JP 13
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_1_en-US 0
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_20_zh-CN 14
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_21_zh-TW 9
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_2_en-GB 15
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_3_fr-FR 1
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_4_de-DE 2
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_5_es-ES 3
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_6_es-XL 11
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_7_pt-PT 12
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_8_pt-BR 19
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_langs_9_it-IT 4
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_language 2
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_lastCommand_command dock
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_lastCommand_initiator localApp
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_lastCommand_time 1
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_lastDisconnect 2
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_mac 80:c5:f2:dc:ff:40
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_mobilityVer 1086
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_name Rüdiger
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_netinfo_addr 3232235608
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_netinfo_bssid 98:9b:cb:bd:a6:f6
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_netinfo_dhcp true
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_netinfo_dns1 3232235530
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_netinfo_dns2 0
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_netinfo_gw 3232235530
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_netinfo_mask 4294967040
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_netinfo_sec 4
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_noAutoPasses false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_noPP false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_openOnly false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_r2a_monits false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_r2a_params_monitConditions 8
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_r2a_params_monitPeriodMs 1000
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_schedHold false
setstate Roomba_E5_Device 2021-02-18 12:18:22 state_reported_signal_rssi -51
setstate Roomba_E5_Device 2021-02-18 12:18:22 state_reported_signal_snr 38
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_sku e515440
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_softwareVer 3.4.62+95
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_soundVer 14
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_svcEndpoints_svcDeplId v005
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_timezone Europe/Berlin
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_twoPass false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_tz_events_1_dt 1604232000
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_tz_events_1_off 60
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_tz_events_2_dt 1616893201
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_tz_events_2_off 120
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_tz_events_3_dt 1635642001
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_tz_events_3_off 60
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_tz_ver 9
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_vacHigh false
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_wifiAnt 1
setstate Roomba_E5_Device 2021-02-18 12:20:44 state_reported_wifiSwVer 3.4.62+95
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_wifistat_cloud 1
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_wifistat_uap false
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_wifistat_wifi 1
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_wlcfg_sec 7
setstate Roomba_E5_Device 2021-02-18 12:20:43 state_reported_wlcfg_ssid 373339302D4C573261
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 18 Februar 2021, 13:00:55
@marboj Du scheinst verwirrt  ::)
https://forum.fhem.de/index.php/topic,71806.0.html
https://wiki.fhem.de/wiki/Import_von_Code_Snippets

Der Code richtig aus dem Wiki - so in der Raw Def eingeben!
attr Roomba_E5_Device setList start cmd {"command": "start", "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"}
oder so in DEF (attr Editor)
start cmd {"command": "start", "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"}
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 18 Februar 2021, 13:01:38
Und das Ding heißt wirklich "Rüdiger" ?

Ich sehe wirklich keine Koordinatenangaben. Doofe Kiste.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 18 Februar 2021, 13:07:41
@Otto123 Vielen Dank, passt jetzt....

@Prof. Dr. Peter Henning Yepp, unser Bügelrobot heißt Karl-Günther ;-)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 18 Februar 2021, 13:12:38
betr. Forum: Fehlende Code-Tags (das Kreuz)
...immer noch! ("Kreuz" => '#'-Button)

Was das fehlende "grüne Kreuz" angeht: Es gibt irgendeinen "neuen" Videoblogger, der meint, man müsse f18 ("Select style") gleich durch irgendwas anderes ersetzen. Vermutlich hast du dich da inspirieren lassen...? (Hände weg von "Erklärvideos" dieser Art und Güte...! Im Zweifel führt das nur dazu, dass hier keiner helfen kann oder eine Idee hat, wo das herkommt...)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 18 Februar 2021, 13:30:51
Sorry, habe FHEM noch keine 24 Stunden.

@Beta-User: Habe gestern mal die Styles durchgespielt und dann auf default gestellt. Das war der Fehler...

Danke für Eure promte Hilfe...

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 18 Februar 2021, 14:14:15
@Beta-User: Habe gestern mal die Styles durchgespielt und dann auf default gestellt. Das war der Fehler...
Ich weiß das ist hier OT aber weil wir gerade beieinander sind: Ist das nicht ne "Leiche" https://forum.fhem.de/index.php?topic=90983.0 nach 2 Jahren? Ich meine man kann default mit Voreinstellung übersetzen.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: rudolfkoenig am 18 Februar 2021, 14:18:11
Nein, das ist keine Leiche, sondern eine daemliche Entscheidung vor 15 Jahren.
Ich weiss nicht, wie ich default ohne Aerger umbenennen soll.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 18 Februar 2021, 14:28:31
Ich weiss nicht, wie ich default ohne Aerger umbenennen soll.

Eine abschließende Idee habe ich dazu nicht, aber bevor wir in 15 Jahren noch darüber diskutieren: Wie wäre es, für eine längere Übergangsphase (12 Monate?) die User dadurch zu beglücken, dass bei jedem Neustart "default" nach "old_default" umbenannt wird und "default" nicht mehr zur Auswahl steht? Damit sollte "nichts" => f18 möglich werden und verhindert sein, dass Neulinge in diese seltsame Falle tappen...
Und die, die den "gewohnten" Style wollen, können ihn weiter ohne größere Eingriffe haben.

(Das verhindert zwar nicht, dass Videoblogger trotzedem unglückliche Empfehlungen geben, aber "Spielkinder" finden dann den Weg evtl. besser zurück und "f25" könnte leichter "f18" ersetzen (womit nicht gesagt sein soll, dass Bedarf an Ersatz für f18 bestünde)).
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 18 Februar 2021, 21:34:43
Lass Rudi seine Leichen!

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: dk3572 am 19 Februar 2021, 09:37:41
Hallo,

ich habe meinen Roomba nach Anleitung aus dem Wiki in Fhem installiert.
Nach Abschluss eines Reinigungsauftrages erhalte ich nachstehende Meldung und Fhem ist nicht mehr erreichbar (eingefroren).

2021.02.19 06:21:15.973 1: [RoombaUtils] Device Roomba_neu phase transition stop -> charge
2021.02.19 06:37:07.045 1: [RoombaUtils] transition charge -> run should start intialization
2021.02.19 06:37:07.046 1: [RoombaUtils] Initialization of map for device Roomba_neu
2021.02.19 06:37:13.933 1: [RoombaUtils] pausing run -> stop
2021.02.19 06:37:16.967 1: [RoombaUtils] transition stop -> hmUsrDock should start finalization
2021.02.19 06:37:16.967 1: [RoombaUtils] Finalization of map for device Roomba_neu
2021.02.19 06:37:16.968 1: PERL WARNING: Use of uninitialized value in subtraction (-) at /usr/share/perl5/Math/ConvexHull.pm line 88.

Kann mir hier jemand weiterhelfen?

Vielen Dank im Voraus und schönes Wochenende schon mal.
Dieter
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 19 Februar 2021, 18:48:46
Hallo,

auch ich habe heute meinen Roomba nach der Anleitung aus dem Wiki installiert.
Hätte aber dazu eine Frage.
Im Wiki ist auch erklärt, wie man eine Reinigungskarte erstellt.

Geht das auch, wenn man den Roomba i7 in 2 Geschoßen (EG und OG) einsetzen möchten?

Danke im Voraus
lg, Gerhard

p.s.: kleine Anmerkungen:
- Die Datei "99_RoombaUtils.pm" ist bei mir nicht unter "fhem/contrib" zu finden. Im contrib gibt es kein Verzeichnis "Roomba" und keine Datei "". Habe sie dann aus svn.fhem.de kopiert.
- Man muss noch die folgenden perl-Module installieren "Math::ConvexHull" und "Math::Polygon::Calc".
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 20 Februar 2021, 05:51:52
Zitat
Kann mir hier jemand weiterhelfen?
Der Aufruf zur Bestimmung der konvexen Hülle ist gekapselt
eval(@newhull = @{convex_hull(\@newpoints)}) ;und bringt FHEM eigentlich nicht zum Absturz. Und was mit "Einfrieren" gemeint ist, verstehe ich nicht ganz.

Also bitte mal das Attribut SVG_room löschen, dann wird das Hin und Her mit den Dateien gar nicht erst veranstaltet. Dafür LOG_dir setzen, dann wird eine einfachere Protokollierung der erhaltenen Daten durchgeführt. Und dann sehen wir weiter.

Zitat
Geht das auch, wenn man den Roomba i7 in 2 Geschoßen (EG und OG) einsetzen möchten?
Klar. Dazu setzt man beim Wechsel des Geschosses durch einen FHEM-Befehl die Attribute SVG_room, SVG_final, startx, starty, startdir auf andere Werte.

Zitat
Die Datei "99_RoombaUtils.pm" ist bei mir nicht unter "fhem/contrib" zu finden
Natürlich nicht. Wie man an vielen Stellen im Forum nachlesen kann, wird der Ordner contrib nicht automatisch upgedatet...Wie man das macht, ist dort ebenfalls nachzulesen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: dk3572 am 20 Februar 2021, 08:54:19
Der Aufruf zur Bestimmung der konvexen Hülle ist gekapselt
eval(@newhull = @{convex_hull(\@newpoints)}) ;und bringt FHEM eigentlich nicht zum Absturz. Und was mit "Einfrieren" gemeint ist, verstehe ich nicht ganz.

Also bitte mal das Attribut SVG_room löschen, dann wird das Hin und Her mit den Dateien gar nicht erst veranstaltet. Dafür LOG_dir setzen, dann wird eine einfachere Protokollierung der erhaltenen Daten durchgeführt. Und dann sehen wir weiter.

LG

pah

Hallo und danke für die Unterstützung.

Mit "Einfrieren" meine ich, dass ich in der Web Oberfläche nichts mehr anwählen bzw. steuern kann.

Das Attribut SVG_room existiert bei mir nicht da ich mit der Kartenerstellung noch nichts gemacht habe.

Kann daher der Fehler rühren?

Danke und VG
Dieter
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 20 Februar 2021, 08:59:13
Nein.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: dk3572 am 20 Februar 2021, 10:39:37
Nein.

Das hilft mir jetzt leider nicht weiter.
Was kann oder soll ich noch tun?
Werden noch weitere Infos benötigt?

VG Dieter
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 20 Februar 2021, 14:07:25
Klar. Dazu setzt man beim Wechsel des Geschosses durch einen FHEM-Befehl die Attribute SVG_room, SVG_final, startx, starty, startdir auf andere Werte.
Natürlich nicht. Wie man an vielen Stellen im Forum nachlesen kann, wird der Ordner contrib nicht automatisch upgedatet...Wie man das macht, ist dort ebenfalls nachzulesen.
Hallo Pah,

Ich lese eigentlich viel mit, aber das mit dem contrib-Verzeichnis ist mir neu.
Das schau ich mir gleich mal an.

Natürlich kann man das mit den Attributen so machen.
Allerdings verändert man dadurch auch jedesmal die Konfig und fhem zeigt das „?“ im Menü.

Zwei Dinge sind mir noch aufgefallen:
- Im Reading „cmMap“ wird die IP-Adresse des fhem falsch angegeben.
   Da wird in der Datei „99_RoombaUtils.pm“ in der Funktion „finalizemap“ noch eine fixe Adresse verwendet.
   Oder habe ich eine alte Version aus dem svg gezogen?
- bei mir wird kein Reading „battery“ angelegt.
   Wo kann ich da ansetzen?

Vielen Dank jedenfalls für Deine tolle Arbeit.
Lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 21 Februar 2021, 04:55:52
Zitat
   Oder habe ich eine alte Version aus dem svg gezogen?
Ja.

Zitat
   Wo kann ich da ansetzen?

Die aktuelle Version steht weiter oben irgendwo im Anhang, ist aber inzwischen auch eingecheckt.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: dk3572 am 21 Februar 2021, 09:36:16
Hallo,

wie kann ich das Erstellen von Reinigungskarten deaktivieren?

Danke und VG
Dieter
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 21 Februar 2021, 16:21:32
Die aktuelle Version steht weiter oben irgendwo im Anhang, ist aber inzwischen auch eingecheckt.

Danke. Mit der Version weiter vorne klappt es.
Echt tolle Arbeit!

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter, Readings beim i7
Beitrag von: hapege am 21 Februar 2021, 18:32:32
Hallo,

Je mehr "Spielzeug" ich mir zulege, desto mehr bin ich froh damals auf fhem gesetzt zu haben - Roomba i7 ausgepackt, mit fhem gekoppelt, läuft  :-) Danke für die tolle Arbeit!

Ich kann den i7 starten, stoppen, ins Dock schicken... allerdings komme ich mit den Readings nicht wirklich weit. Der i7 spuckt jede Menge Infos aus, aber offensichtlich fast alle zusammen in einer einzelnen großen Message. In fhem tauchen dann nur ein paar Readings auf, namentlich die "cm*" und "signalRSSI" (das ist auch die einzige "Einzelnachricht" die ich sonst im log sehe). Ich kann nicht wirklich Perl, aber wenn ich die 99_RoombaUtils durchflöhe dann sieht das so aus, als würde die sub readings() mit return geplant in den ifs beenden, wenn irgendeine der Abfragen zieht. In diesem Fall eben "cleanMissionStatus", womit alle anderen Infos nicht mehr ausgewertet werden. Somit kommt auch z. B. nie ein batPct an :-( Interpretiere ich das richtig? Wenn ja, wie müsste man das angehen, um die gesamte, große Nachricht zu parsen?

Offensichtlich behandelt der i7 auch die Schedules anders. Das ReadingsVal "ProgWeek", das in der setschedule() gelesen werden will gibt's bei mir nicht (taucht auch in der Message vom i7 nicht auf), und cleanSchedule heißt beim i7 wohl cleanSchedule2_1 (wenn ich in der Roomba app einen Zeitplan anlege), mit start_day_n (n=1...7). Zumindest sehe ich das beim parsen der Message. Wohl ein anderer Mechanismus...

Übrigens ist meine 99_RoombaUtil in /fhem/contrib lt. diff identisch zu der aus https://svn.fhem.de/fhem/trunk/fhem/contrib/Roomba/ - wird das nun doch automatisch aktualisiert, oder suche ich an der falschen Stelle?

Danke und VG,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 21 Februar 2021, 20:00:15
Hallo,

funktioniert bei Dir die Datei-Version aus svn?

Da hat sich anscheinend ein Fehler in der Zeile 210 eingeschlichen.
Es fehlt eine ")" in der if-Abfrage:
    if(main::Value($iodev) ne "opened"{
lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: loetmeister am 21 Februar 2021, 20:04:52
Hallo Hermann,

bei dem E5 sind die MQTT Nachrichten auch anders strukturiert, ich hatte 99_RoombaUtils.pm etwas angepasst... Siehe https://forum.fhem.de/index.php/topic,114166.msg1120926.html#msg1120926, bzw. https://forum.fhem.de/index.php/topic,114166.msg1119270.html#msg1119270 und folgende.

99_RoombaUtils.pm must du manuell aktualisieren..

Gruß,
Thomas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 21 Februar 2021, 20:09:58
Zitat
Da hat sich anscheinend ein Fehler in der Zeile 210 eingeschlichen.
Werde ich morgen ansehen - so etwas kann immer passieren, weil ich meine aktuelle Version (immerhin "work in progress") kurzerhand ins SVN geschickt habe.

Darum steht das ja auch im contrib, und nicht in der Hauptdistribution...

Heut bin ich nach eine schönen sonnigen Golfrunde nicht in Stimmung, morgen muss ich noch 40 Klausuren korrigieren, und dann kommt wieder Roomba dran.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 21 Februar 2021, 23:25:53
kein Thema, Job und Privates gehen immer vor  ;)

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 21 Februar 2021, 23:33:35
Hi Thomas,

super, Danke! Die ifs habe ich auch schon mal testweise auseinandergezogen, aber mit den hashes / returns bin ich nicht zurechtgekommen. Über Deinen Post mit den Anpassungen habe ich tatsächlich drübergelesen, aber nicht erkannt - sorry.

Wird die Woche gleich ausprobiert!

"Manuell aktualisieren" - von hier: https://svn.fhem.de/fhem/trunk/fhem/contrib/Roomba/ ? Oder geht das nur über subversion?

Danke schon mal,

Hermann

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 22 Februar 2021, 11:29:37
Somit kommt auch z. B. nie ein batPct an
Bei mir heißt das Reading "battery"

Interpretiere ich das richtig? Wenn ja, wie müsste man das angehen, um die gesamte, große Nachricht zu parsen?
Du kannst in der Methode reading angeben, wie du die Readings verarbeiten willst (und welche du behalten willst).

Wenn du die ganz "rohen" Readings haben willst, kannst du im Attribut readingList anstatt $DEVICETOPIC:.* {roomba::reading($NAME,$EVENT)} nur $DEVICETOPIC:.* { json2nameValue($EVENT) } verwenden. Dann funktioniert aber auch zB die Kartenerstellung nicht mehr, und auch die interessanteren Readings (Akkustand, aktueller Status, etc) heißen dann anders.



Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: dk3572 am 23 Februar 2021, 15:15:47
Hallo,

ich habe meinen Roomba nach Anleitung aus dem Wiki in Fhem installiert.
Nach Abschluss eines Reinigungsauftrages erhalte ich nachstehende Meldung und Fhem ist nicht mehr erreichbar (eingefroren).

2021.02.19 06:21:15.973 1: [RoombaUtils] Device Roomba_neu phase transition stop -> charge
2021.02.19 06:37:07.045 1: [RoombaUtils] transition charge -> run should start intialization
2021.02.19 06:37:07.046 1: [RoombaUtils] Initialization of map for device Roomba_neu
2021.02.19 06:37:13.933 1: [RoombaUtils] pausing run -> stop
2021.02.19 06:37:16.967 1: [RoombaUtils] transition stop -> hmUsrDock should start finalization
2021.02.19 06:37:16.967 1: [RoombaUtils] Finalization of map for device Roomba_neu
2021.02.19 06:37:16.968 1: PERL WARNING: Use of uninitialized value in subtraction (-) at /usr/share/perl5/Math/ConvexHull.pm line 88.

Kann mir hier jemand weiterhelfen?

Vielen Dank im Voraus und schönes Wochenende schon mal.
Dieter

Hallo,

ist hier evtl. einer so nett und hilft mir weiter?
Wir würde schon eine Erklärung reichen, wie ich die Erstellung der Karten deaktivieren kann.

Vielen Dank und Gruß
Dieter
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 23 Februar 2021, 18:56:18
Hi Dieter,

Wir würde schon eine Erklärung reichen, wie ich die Erstellung der Karten deaktivieren kann.

Das wurde in einem Vorpost mal so beantwortet:
Es reicht, das Attribut SVG_room zu löschen.

Ich gehe davon aus, dass das jetzt immer noch so ist.

Ansonsten hilft wohl Löschen und Neu einrichten vom Device laut Anleitung. Den Teil mit Kartenerstellung dann einfach weglassen :-)

LG
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: dk3572 am 23 Februar 2021, 19:57:16
Hi Dieter,

Das wurde in einem Vorpost mal so beantwortet:
Ich gehe davon aus, dass das jetzt immer noch so ist.

Ansonsten hilft wohl Löschen und Neu einrichten vom Device laut Anleitung. Den Teil mit Kartenerstellung dann einfach weglassen :-)

LG
Martin

Hallo Martin,

danke für deine Unterstützung.

Wie im Vorpost auch zu lesen ist, gibt es das Attribut SVG_room bei mir nicht, da ich den Teil mit Kartenerstellung erst gar nicht hinzugefügt habe.

Hast du noch einen weiteren Tipp?
Evtl. in der 99_RoombaUtils.pm etwas aus kommentieren?

Danke und VG
Dieter
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 23 Februar 2021, 20:31:34
Wie im Vorpost auch zu lesen ist, gibt es das Attribut SVG_room bei mir nicht, da ich den Teil mit Kartenerstellung erst gar nicht hinzugefügt habe.

Hast du noch einen weiteren Tipp?
Evtl. in der 99_RoombaUtils.pm etwas aus kommentieren?
Also ich hab das mit der Kartenerstellung ja auch nicht mit drin, und da blockiert dann auch nix bei mir.
Als ich sie drin hatte, ging der FHEM Perl-Prozess schon auch auf 100% CPU-Last, aber mit dem Entfernen des Attributs wie beschrieben war dann wieder alles gut bei mir.
Und für genauere Analysen hatte ich noch keine Zeit.

Ganz generisches Fehlersuchmuster: bist du dir sicher, dass es die Kartenerstellung ist, die blockiert?
Der Log-Eintrag, der unmittelbar vorm Einfrieren da sein müsste, wäre sowas wie "[RoombaUtils] Finalization of map for device ...". Auf Log-Level 1. Also bitte sicherstellen, dass global verbose auf 1 steht. Eine Änderung im Device selber ändert in einer Utils-Methode nix (würde sie vielleicht, aber hier wird Log statt Log3 verwendet, was aufs globale log-level geht - wohl, weil es sich ohnehin um Utility Methoden handelt)

Wenn es die Kartenerstellung ist, dann sollte das Auskommentieren der Zeile #612 diesen Aufruf (finalizemap) entfernen. Dann is aber immer noch fraglich, warum das überhaupt eintritt, wenn es das Attribut nicht gibt. Vielleicht einer dieser feinen Unterschiede zwischen den Produktreihen, die dann unterschiedliches Verhalten bewirken... wurde hier schon ein- zwei mal erwähnt.

Jo, mehr fällt mir dazu auch nicht ein.
Viel Glück

schöne Grüße
Martin


Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 26 Februar 2021, 11:13:37
Habe mal ne kurze Frage zum Roomba.

Habe ihn erfolgreich in FHEM integriert. Habe auch schon rausgefunden, dass immer dann, wenn sich dem MQTT2-Client connected, das MQTT2-Device des Roomba neue Readings übertragen bekommt.

Bei mir passiert diese Aktualisierung gefühlt zweimal am Tag. Kann man die Häufigkeit ändern? Wie wird überhaupt das Aktualisieren angestoßen?

Gruß
Marco
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 26 Februar 2021, 11:40:08
Kann man die Häufigkeit ändern? Wie wird überhaupt das Aktualisieren angestoßen?

Wenn du am IODevice vom Roomba (also am MQTT2-Client device, nicht direkt am Roomba-Device) ein connect machst, werden die Readings automatisch aktualisiert.
So würde das zB alle 15 Minuten passieren:
define atRoombaUpdate at *00:15 set iRobotRoombaClient connect
Der Disconnect erfolgt dann ohnehin automatisch nach einigen Sekunden.

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 26 Februar 2021, 12:40:08
ok. An den at-Befehl habe ich auch gedacht. Ich hatte gedacht, es gibt beim Device eine Art "refresh".

Nun gut, so mache ich das, allerdings besser so:

define atRoombaUpdate at +*00:15 set iRobotRoombaClient connect
Damit es sich wiederholt ;-)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 26 Februar 2021, 12:45:07
Eine Anfängerfrage noch zu den 99_RoombaUtils.pm:

Habe gem. Wiki-Eintrag das stateformat wie folgt definiert: attr Roomba_E5 stateFormat cmPhaseE (battery %)
Readingslist auch : readingList $DEVICETOPIC:.* {roomba::reading($NAME,$EVENT)}
Die 99_RoombaUtils.pm in den entsprechenden Ordner /opt/fhem/FHEM kopiert.

FHEM neu gestartet.

Leider wird der Status immer noch so angezeigt: cmPhaseE (battery %)

Wie werden denn die "neuen" Readings erstellt? Was muss ich noch tun?

Hier mein Device:
defmod Roomba_E5_Device MQTT2_DEVICE 3167072470415630
attr Roomba_E5_Device IODev Roomba_E5
attr Roomba_E5_Device devicetopic 3XXXXXXXXXX0
attr Roomba_E5_Device icon vacuum_top
attr Roomba_E5_Device readingList $DEVICETOPIC:.* {roomba::reading($NAME,$EVENT)}
attr Roomba_E5_Device room 10_Wohnzimmer
attr Roomba_E5_Device setList start cmd {"command": "start", "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"}
attr Roomba_E5_Device stateFormat cmPhaseE (battery %)
attr Roomba_E5_Device webCmd start:dock:resume:pause

Hier das Log:
2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2644) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2645) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2646) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2647) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2648) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2649) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2651) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2652) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2653) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2656) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2658) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2660) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2661) line 1.

2021.02.26 12:56:53 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $EVTPART2=   $evalSpecials->{'%EVTPART2'};my $EVTPART3=   $evalSpecials->{'%EVTPART3'};my $EVTPART4=   $evalSpecials->{'%EVTPART4'};my $EVTPART5=   $evalSpecials->{'%EVTPART5'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2663) line 1.

2021.02.26 12:56:54 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Undefined subroutine &roomba::reading called at (eval 2666) line 1.

Es fehlen wohl noch perl-module:

Can't locate Math/Polygon/Calc.pm in @INC (you may need to install the Math::Polygon::Calc module) (@INC contains: ./lib ./FHEM . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/arm-linux-gnueabihf/perl5/5.28 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/arm-linux-gnueabihf/perl-base) at ./FHEM/99_RoombaUtils.pm line 45.
BEGIN failed--compilation aborted at ./FHEM/99_RoombaUtils.pm line 45.

Wie installiere ich die?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 26 Februar 2021, 13:40:06
bin ein Stück weiter:

habe die folgenden Module installiert:

sudo apt-get install libmath-polygon-perl
sudo apt-get install libmath-convexhull-perl

Nun kommen zwar keine Hinweise auf fehlendes Perl, aber trotzdem sieht es nicht schön aus:

2021.02.26 13:34:37 1: PERL WARNING: "my" variable $name masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 230.
2021.02.26 13:34:37 1: PERL WARNING: "my" variable $data masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 230.
2021.02.26 13:34:37 1: PERL WARNING: "state" variable @_ masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 230.
2021.02.26 13:34:37 1: PERL WARNING: "my" variable @evt masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 231.
2021.02.26 13:34:37 1: PERL WARNING: "my" variable $cmd masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 263.
2021.02.26 13:34:37 1: reload: Error:Modul 99_RoombaUtils deactivated:
 syntax error at ./FHEM/99_RoombaUtils.pm line 210, near ""opened"{"
Global symbol "$cmd" requires explicit package name (did you forget to declare "my $cmd"?) at ./FHEM/99_RoombaUtils.pm line 214.
Global symbol "$cmd" requires explicit package name (did you forget to declare "my $cmd"?) at ./FHEM/99_RoombaUtils.pm line 214.
Global symbol "$cmd" requires explicit package name (did you forget to declare "my $cmd"?) at ./FHEM/99_RoombaUtils.pm line 215.
syntax error at ./FHEM/99_RoombaUtils.pm line 216, near "}"
Can't use global @_ in "my" at ./FHEM/99_RoombaUtils.pm line 219, near "= @_"
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/99_RoombaUtils.pm line 220.
syntax error at ./FHEM/99_RoombaUtils.pm line 227, near "}"
Can't use global @_ in "my" at ./FHEM/99_RoombaUtils.pm line 230, near "= @_"
syntax error at ./FHEM/99_RoombaUtils.pm line 265, near "}"
./FHEM/99_RoombaUtils.pm has too many errors.

Was kann icht jetzt tun?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 26 Februar 2021, 13:41:59
Was kann icht jetzt tun?
Da ist noch ein Tippfehler im eingecheckten Code. Wird in einem Vorpost mal erwähnt. Du musst wo eine schließende Klammer dazugeben, wenn ich mich recht erinnere
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 26 Februar 2021, 14:40:37
OK, das mit dem Neustart an der clean-Taste werde ich gerne mal probieren. Ich habe eine neue Version des Hilfsmoduls, die ich hier mal anhänge. Sie setzt während des Reinigungsvorgangs das disconnectAfter-Attribut hoch, funktioniert bei mir über die letzte Woche hinweg sehr gut.

LG

pah

Wie kann ich den Dateianhang herunterladen? Offenbar bin ich zu blöd...

Habe das:    if(main::Value($iodev) ne "opened"{) in der Dateium die ) ergänzt und auch, weil ich an meinen Augen zweifle, mit } probiert.

Die Fehler sind immer noch da.

Vermutlich ist die angehängte Datei ready-to-use, oder?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 26 Februar 2021, 15:13:59
Da der Dateianhang nicht mehr da zu sein scheint, habe ich aus dem svn die letzte Version geladen, die Klammer zu ) ergänzt und nun folgenden Fehler:

2021.02.26 15:10:00 1: PERL WARNING: Bareword found where operator expected at ./FHEM/99_RoombaUtils.pm line 211, near ")
      main::fhem"
2021.02.26 15:10:00 1: PERL WARNING: (Missing operator before main::fhem?)
2021.02.26 15:10:00 1: PERL WARNING: "my" variable $name masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 230.
2021.02.26 15:10:00 1: PERL WARNING: "my" variable $data masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 230.
2021.02.26 15:10:00 1: PERL WARNING: "state" variable @_ masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 230.
2021.02.26 15:10:00 1: PERL WARNING: "my" variable @evt masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 231.
2021.02.26 15:10:00 1: PERL WARNING: "my" variable $cmd masks earlier declaration in same scope at ./FHEM/99_RoombaUtils.pm line 263.
2021.02.26 15:10:00 1: reload: Error:Modul 99_RoombaUtils deactivated:
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: loetmeister am 26 Februar 2021, 17:17:28
Hallo,

Vermutlich nicht die richtige Stelle korrigiert?  ;)
Hier steht wo die klammer hin gehört: https://forum.fhem.de/index.php/topic,114166.msg1134544.html#msg1134544

Edit, ok, so klar war der Beitrag nicht, daher:
if(main::Value($iodev) ne "opened"){
Gruß,
Thomas
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 26 Februar 2021, 17:30:58
Also, irgendwie hab ich (vielleicht) voll das Brett vorm Kopf:

Das ist der Beitrag:

Da hat sich anscheinend ein Fehler in der Zeile 210 eingeschlichen.
Es fehlt eine ")" in der if-Abfrage:
Code: [Auswählen]

    if(main::Value($iodev) ne "opened"{


lg, Gerhard

Leider bin ich kein Programmierer, aber so   if(main::Value($iodev)) ne "opened"{
läuft es auch nicht  :(

Update: Es läuft... so if(main::Value($iodev) ne "opened"){
Gruß
Marco

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 26 Februar 2021, 18:04:36
Leider bin ich kein Programmierer, aber so   if(main::Value($iodev)) ne "opened"{
läuft es auch nicht  :(

Nö. So muss Code
if(main::Value($iodev) ne "opened"){

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 27 Februar 2021, 10:00:26
Zitat
Leider bin ich kein Programmierer
.
Gut so, ich würde mich gegen eine solch abwertende Bezeichnung auch wehren...

So, die 99_RoombaUtils haben jetzt größere Änderungen erfahren. Unter Anderem kann man mit einem User-Attribut das Datensammeln für eine Karte komplett unterbinden, siehe Wiki.

Außerdem gibt es ein Internal "Version".

Bei der Auswertung der Statusmeldungen vom Roomba geht die Software jetzt maximal flexibel vor, alle Modelle sollten damit zu Recht kommen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 01 März 2021, 00:04:26
Hallo Pah,

vielen Dank für die neue Version - läuft bei mir bis jetzt ohne Probleme.

Ich habe aber noch eine Bitte:
In Deinem Code habe ich gesehen, dass es auch ein Event names "netinfo" und darin ein Feld "bssid" gibt.
Wie kann ich dessen Wert in ein Reading bringen?
Könntest Du mir da bitte einen Tipp geben?

Der Hintergrund ist folgender:
Ich habe mehrere APs in meiner Wohnung und so kann ich automatisch erkennen, wenn sich der Roomba in einen anderen AP einloggt.
Und damit weiß ich z.B. dass er im OG oder im EG ist und kann dann die Maps entsprechend automatisch umstellen.

Danke im Voraus
lg, Gerhard

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 01 März 2021, 09:23:42
Hallo,

mir ist noch nicht ganz klar, was man mit dem neuen Befehl "periodicCmd" so alles anfangen kann.
Ich wollte mir wie hier https://forum.fhem.de/index.php/topic,114166.msg1135599.html#msg1135599 (https://forum.fhem.de/index.php/topic,114166.msg1135599.html#msg1135599), ein at definieren, um den myRoombaMQTTClient periodisch zu öffnen.

Aber eigentlich geht das mit dem "periodicCmd" im Staubsauger-Device eleganter:
Dazu habe ich mir einen Befehl update in setList definiert:
update:noArg {fhem("set ".InternalVal($NAME,"IODev","") . "connect")}
Und rufe das "update" alle z.B. 15min auf.
attr myRoomba periodicCmd update:15
Wäre das so gedacht?
Was könnte man damit noch machen?

Kann man das Senden der MQTT-Felder im Roomba auch irgendwie anstossen (z.B. ein "announce" o.ä. senden)? Momentan muss man ja warten, bis der Roomba was schickt.
Oder habe ich da was missverstanden?

Danke im Voraus
lg, Gerhard

Edit: Zum Öffnen des Devices muss natürlich "connect" statt "open" verwendet werden
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 01 März 2021, 10:22:26
Hallo ihr,

habe siet dem neuesten Update folgende Einträge im Log:
2021.03.01 09:12:02 1: [RoombaUtils] uncaught event {"state":{"reported":{"utctime":1614586321}}}
2021.03.01 09:12:07 1: [RoombaUtils] uncaught event {"state":{"reported":{"name": "Rüdiger"}}}

Was machen die bzw. was heißt das?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 01 März 2021, 10:28:38
habe siet dem neuesten Update folgende Einträge im Log:
2021.03.01 09:12:02 1: [RoombaUtils] uncaught event {"state":{"reported":{"utctime":1614586321}}}
2021.03.01 09:12:07 1: [RoombaUtils] uncaught event {"state":{"reported":{"name": "Rüdiger"}}}

Was machen die bzw. was heißt das?
Das heißt mWn, dass in den RoombaUtils noch nicht festgelegt wurde, ob diese Informationen als Readings gespeichert, oder verworfen werden sollen.
In diesem Fall werden sie wohl auch verworfen, allerdings mit diesen Hinweisen im Log.

Das ist eine ganz hervorragende Möglichkeit für einen Entwickler, Dinge ganz klar zu sehen, die bei ihm lokal nicht auftreten.
Wenn dich die Einträge stören, einfach verbose auf 0 stellen.

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 01 März 2021, 11:58:33
Nachdem ich nunmehr die 99_Roomba_Utils installiert habe, gehen meine Webbuttons nicht mehr:

<button>start</button>:<button>dock</button>:<button>resume</button>:<button>pause</button>:<button>stop</button>
Wie muß ich die denn nun anpassen, damit die wieder funktionieren?

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 01 März 2021, 15:01:54
Nachdem ich nunmehr die 99_Roomba_Utils installiert habe, gehen meine Webbuttons nicht mehr:

<button>start</button>:<button>dock</button>:<button>resume</button>:<button>pause</button>:<button>stop</button>
Wie muß ich die denn nun anpassen, damit die wieder funktionieren?
Die funktionieren bei mir immer noch. Allerdings ist mir auch aufgefallen, dass man seit einiger Zeit 2x den Befehl ausführen muss, damit der Robot dann auch wirklich loslegt.
Als ob beim ersten Mal der Connect hergestellt würde, und dann beim zweiten Mal erst das tatsächliche Start-Kommando.

Versuch mal, nach 2 Sekunden den Befehl nochmal abzuschicken.
Welches Device hast du nochmal? Ich hab den i7, vielleicht gibts hier wieder mal Modellbezogene Eigenheiten.

Was anderes:
ich hab hier ein template File angehängt, das bei der Ersteinrichtung hilfreich ist, da es haufenweise copy/paste erspart.

Wenn man das nach FHEM/lib/AttrTemplate/ kopiert, kann man beim MQTT2_DEVICE mit set iRobotRoomba attrTemplate iRobotDevice auswählen.
Damit kriegt man dann im Web-UI als erstes eine Vorschau aller Attribute, die benötigt werden (setList, etc).
Klickt man dann set muss man nur den nötigen Parameter angeben (die blid), und alle Attribute werden automatisch gesetzt.

Die Attribute zur Kartenerstellung sind hier noch nicht mit drin, kann ich aber bei Interesse gern noch dazugeben.

Der MQTT2_CLIENT devicetype unterstützt leider keine Attribute. Die nötigen Teile wären im Templatefile drin, das set attrTemplate wird im UI aber nicht angezeigt.

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 01 März 2021, 15:18:01
? Soll ich das in das allg. m2-template-file integrieren und dann gleich noch den download der myUtils aus dem contrib mit reinpacken?

Das mit dem Client kann man so lösen, dass man es als attrTemplate mit passendem Filter nur auf ein M2-Device mit passendem model loslassen kann; dann muss man nur vorher sicherstellen, dass das "richtige" IO eingestellt ist (man könnte absichern, dass man das nur mit Devices des TYPE M2C kann...), die Attribute würden dann "quer" gesetzt... (Sowas gibt es schon mit den ignoreRegexp und auch die mehrkanaligen machen im Prinzip nichts anderes als "andere Devices" zu konfigurieren.)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 01 März 2021, 16:25:17
und auch die mehrkanaligen machen im Prinzip nichts anderes als "andere Devices" zu konfigurieren.
Könntest du mir da bitte ein Beispiel nennen und in welchem Template ich das finde? Davon lass ich mich gern inspirieren.

? Soll ich das in das allg. m2-template-file integrieren und dann gleich noch den download der myUtils aus dem contrib mit reinpacken?
Die Frage geht, denk ich, nicht an mich. Ich weiß offen gestanden nicht, ob pah denkt, das hier alles ist schon stabil genug - meine Intepretation wäre eher, dass wir damit noch etwas warten sollten.

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 01 März 2021, 17:01:55
Könntest du mir da bitte ein Beispiel nennen und in welchem Template ich das finde? Davon lass ich mich gern inspirieren.
"Einfaches" Beispiel:
tasmota_2channel_split

Ansonsten, falls du ZWave kennst: FGR223_Roller_Mode in zwave.template (das ist ein schönes Beispiel für Modularität, Nutzerabfragen und das begleitende Konfigurieren der Sprachsteuerung).
Für Freunde/Kenner von MQTT_GENERIC_BRIDGE gäbe es auch noch eine übersichtliche file, da wird auch das wenigste an der Bridge selbst gemacht...

Zitat
Die Frage geht, denk ich, nicht an mich. Ich weiß offen gestanden nicht, ob pah denkt, das hier alles ist schon stabil genug - meine Intepretation wäre eher, dass wir damit noch etwas warten sollten.

schöne Grüße
Martin
Mir ist das gleich; wäre nicht das erste "unfertige" template, kann man ja in der desc vermerken, wo man sich beschweren kann ;D .
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 01 März 2021, 19:53:43
Ein AttrTemplate habe ich auch schon in Arbeit, doppelte Arbeit sollten wir vermeiden. Abgesehen davon heißt es bei mir wie das Package: RoombaTemplate.

Ich habe das bisher noch nicht zur Verfügung gestellt, weil die RoombaUtils eben noch nicht stabil ist - insofern rate ich auch dazu, das mit dem Einbau in das m2-template noch aufzuschieben.

Beispiel für Instabilität: Das mit dem 2x Absenden des Start-Befehls. Dieser unerwünschte Effekt tritt bei mir auch auf, seitdem ich das Mission Management in ein Unterprogramm ausgelagert habe. Da muss ich noch etwas Gehirnschmalz hineinpacken.

Die bssid kann man natürlich auch bekommen. Einfach nach Zeile 376 in die Datei einfügen:
  #-- getting events of the type
  # # {"state":{"reported":{"netinfo":{""bssid":"44:.............:20"}}}}
  my $bssid   = $staterep->{'netinfo'}->{'bssid'};
  $ret{"signalBssid"} = $bssid
    if(defined($bssid));

Das Reading heißt signalBssid, damit es sich in der Device-Übersicht direkt vor der Signalstärke befindet.  Es ist problemlos möglich, mit einem userReading
signalAP:signalBssid.* {((ReadingsVal('RoombaFeger','signalBssid','')=~/44.*20/)?'FritzBox':'Was Anderes')}den Namen des AP dort einzusetzen (muss man natüriich noch tiefer schachteln, wenn es mehr als 2 AP sind).

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 01 März 2021, 21:45:02
Die funktionieren bei mir immer noch. Allerdings ist mir auch aufgefallen, dass man seit einiger Zeit 2x den Befehl ausführen muss, damit der Robot dann auch wirklich loslegt.
Als ob beim ersten Mal der Connect hergestellt würde, und dann beim zweiten Mal erst das tatsächliche Start-Kommando.

Versuch mal, nach 2 Sekunden den Befehl nochmal abzuschicken.
Welches Device hast du  nochmal?


schöne Grüße
Martin

Ich hab den E5. Vor den Utils könnte ich die webcmd mit <button>  </button> aufhübschen.  Damit wird anstelle des Ljnks ein Button angezeigt. Die funktionieren nun nicht mehr. Links gegen bei mir auch noch.
Gruß
Marco
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 02 März 2021, 00:53:56
Die bssid kann man natürlich auch bekommen. Einfach nach Zeile 376 in die Datei einfügen:
  #-- getting events of the type
  # # {"state":{"reported":{"netinfo":{""bssid":"44:.............:20"}}}}
  my $bssid   = $staterep->{'netinfo'}->{'bssid'};
  $ret{"signalBssid"} = $bssid
    if(defined($bssid));

Das Reading heißt signalBssid, damit es sich in der Device-Übersicht direkt vor der Signalstärke befindet.  Es ist problemlos möglich, mit einem userReading
signalAP:signalBssid.* {((ReadingsVal('RoombaFeger','signalBssid','')=~/44.*20/)?'FritzBox':'Was Anderes')}den Namen des AP dort einzusetzen (muss man natüriich noch tiefer schachteln, wenn es mehr als 2 AP sind).

Funktioniert einwandfrei. Danke!
lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 02 März 2021, 09:05:03
Hallo,

heute habe ich den folgenden Fehler in den log-Einträgen entdeckt.
Ich bin leider nicht früher drauf gekommen, weil ich immer nach anderen Einträgen gefiltert habe.
2021.03.02 08:54:39.392 3: MQTT2_DEVICE set myRoomba update
2021.03.02 08:54:42.404 4: MQTT2_DEVICE_Parse: myRoomba $aws/things/D6DBF1F7DA88458CBC34ED564C42DCD1/shadow/update => {roomba::reading($NAME,$EVENT)}
2021.03.02 08:54:42.429 1: ============> {"state":{"reported":{"batPct": 100, "batteryType": "F12432832R", "batInfo": {"mDate": "2019-4-16", "mName": "F12432832R", "mDaySerial": 32072, "mData": "303030333034303200000000000000000000000000", "mLife": "0C400B0A107E0C564DF7000C04F4F6C800CAFEB4290AFFFF000000C000000000", "cCount": 7, "afCount": 0}, "batAuthEnable": true, "bbchg": {"nChatters": 6, "nKnockoffs": 383, "nLithF": 26, "nChgOk": 424, "aborts": [5, 5, 5], "smberr": 57344}, "bbchg3": {"estCap": 1845, "nAvail": 871, "hOnDock": 6856, "avgMin": 64}, "bbmssn": {"aCycleM": 79, "nMssnF": 15, "nMssnC": 46, "nMssnOk": 410, "aMssnM": 150, "nMssn": 474}, "bbnav": {"aMtrack": 99, "nGoodLmrks": 0, "aGain": 21, "aExpo": 64}, "bbpause": {"pauses": [14, 2, 46, 2, 48, 38, 16, 101, 101, 101]}, "bbrun": {"nOvertemps": 0, "nCBump": 0, "nWStll": 0, "nMBStll": 8419, "nEvacs": 607, "nPanics": 897, "nPicks": 711, "nOpticalDD": 162, "nPiezoDD": 31, "nScrubs": 219, "nStuck": 207, "sqft": 2262, "min": 23, "hr": 412, "nCliffsF": 14956, "nCliffsR": 0}, "bbswitch": {"nBumper": 345595, "nDrops": 1259, "nDock": 112, "nSpot": 87, "nClean": 334}, "bbsys": {"min": 58, "hr": 7639}, "behaviorFwk": true, "bin": {"present": true, "full": false}, "binPause": false, "bleDevLoc": false, "cap": {"binFullDetect": 2, "dockComm": 1, "wDevLoc": 2, "bleDevLoc": 0, "edge": 0, "maps": 3, "pmaps": 5, "tLine": 2, "area": 1, "eco": 1, "multiPass": 2, "pose": 1, "team": 1, "pp": 0, "lang": 2, "5ghz": 1, "prov": 3, "sched": 1, "svcConf": 1, "ota": 2, "log": 2, "langOta": 0, "tileScan": 1}, "carpetBoost": false, "cleanMissionStatus": {"cycle": "none", "phase": "charge", "expireM": 0, "rechrgM": 0, "error": 0, "notReady": 0, "mssnM": 0, "expireTm": 0, "rechrgTm": 0, "mssnStrtTm": 1614578460, "initiator": "manual", "nMssn": 474}, "cleanSchedule2": [], "cloudEnv": "prod", "connected": true, "country": "AT", "deploymentState": 0, "dock": {"known": true, "pn": null, "state": null, "id": null, "fwVer": null}, "evacAllowed": true, "ecoCharge": false, "hwPartsRev": {"csscID": 0, "mobBrd": 7, "mobBlid": "2B95EFC6E22DEDEC851C166B6918478E", "navSerialNo": "CF09209PV", "wlan0HwAddr": "50:14:79:04:27:22", "NavBrd": 0}, "hwDbgr": {"swVer": "", "hw": "", "status": 0}, "langs": null, "langs2": {"sVer": "1.0", "dLangs": {"ver": "0.20", "langs": ["cs-CZ", "da-DK", "de-DE", "en-GB", "en-US", "es-ES", "es-XL", "fi-FI", "fr-CA", "fr-FR", "he-IL", "it-IT", "ja-JP", "ko-KR", "nb-NO", "nl-NL", "pl-PL", "pt-BR", "pt-PT", "ru-RU", "sv-SE", "zh-CN", "zh-HK", "zh-TW"]}, "sLang": "de-DE", "aSlots": 0}, "language": null, "lastCommand": {"command": "dock", "initiator": "manual", "time": 1614578625}, "lastDisconnect": 2, "mapUploadAllowed": true, "missionTelemetry": {"aux_comms": 1, "bat_stats": 1, "camera_settings": 1, "map_hypotheses": 1, "map_load": 1, "vital_stats": 1, "vslam_report": 1}, "mssnNavStats": {"nMssn": 474, "gLmk": 0, "lmk": 0, "reLc": 0, "plnErr": "none", "mTrk": 99, "kdp": 0, "sfkdp": 0, "nmc": 7, "nmmc": 0, "nrmc": 1, "mpSt": "idle", "l_drift": 0, "h_drift": 0, "l_squal": 0, "h_squal": 0}, "name": "Roomba", "noAutoPasses": false, "noPP": false, "openOnly": false, "pmapLearningAllowed": true, "pmaps": [{"Qy6JsQPLQaC8cqDAnPARpQ": "210219T212951"}, {"8iTvnlmpSnerXyAsKbRaag": "210228T153035"}, {"J2uFT80TTdKEiH43D7GdCw": "210221T103328"}, {"ZMLEee7KS6COwI2K73h8HA": "210221T103331"}, {"mRtGVa2WTvKiFO6Otr-gFQ": "210221T150855"}, {"rELbOvuZQ4yD3JhrLP9TCw": "210227T134434"}], "pmapCL": true, "pmapFmt": "3", "rankOverlap": 15, "reflexSettings": {"rlWheelDrop": {"enabled": 0}}, "sceneRecog": 1, "schedHold": false, "secureBoot": {"log": 2, "flip": 0, "sbl1Ver": "B3.2.0_PPUB", "stublVer": "B3.2.02_PPUB", "efuse": 1, "blType": 1, "enforce": 2, "lastRst": "200000000042", "recov": "linux+2.4.2+lewis-release-rt320+13", "idSwitch": 0}, "sku": "i755840", "softwareVer": "lewis+3.12.8+lewis-release-420+10", "subModSwVer": {"nav": "lewis-nav+3.12.8+ubuntu-HEAD-09318572a78+10", "mob": "3.12.8+ubuntu-HEAD-09318572a78+10", "pwr": "0.5.5+ubuntu-HEAD-09318572a78+10", "sft": "1.2.0+Lewis-Builds/Lewis-Certified-Safety/lewis-safety-ca6f27d09c6+31", "mobBtl": "4.0", "linux": "linux+3.8.0.2+lewis-release-420+10", "con": "3.8.61-@8419265a/ubuntu"}, "svcEndpoints": {"svcDeplId": "v007"}, "timezone": "Europe/Vienna", "tls": {"tzbChk": 1, "privKType": 2, "lcCiphers": [0, 0, 0, 0, 0, 0, 0, 50380848, 50331708, 50380847]}, "twoPass": false, "tz": {"events": [{"dt": 1604232000, "off": 60}, {"dt": 1616893201, "off": 120}, {"dt": 1635642001, "off": 60}], "ver": 9}, "vacHigh": false, "wDevLoc": false}}}
2021.03.02 08:54:42.431 1: [RoombaUtils] Device myRoomba hmUsrDock -> charge should start intialization
2021.03.02 08:54:42.716 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $EVTPART10=   $evalSpecials->{'%EVTPART10'};my $EVTPART100=   $evalSpecials->{'%EVTPART100'};my $EVTPART101=   $evalSpecials->{'%EVTPART101'};my $EVTPART102=   $evalSpecials->{'%EVTPART102'};my $EVTPART103=   $evalSpecials->{'%EVTPART103'};my $EVTPART104=   $evalSpecials->{'%EVTPART104'};my $EVTPART105=   $evalSpecials->{'%EVTPART105'};my $EVTPART106=   $evalSpecials->{'%EVTPART106'};my $EVTPART107=   $evalSpecials->{'%EVTPART107'};my $EVTPART108=   $evalSpecials->{'%EVTPART108'};my $EVTPART109=   $evalSpecials->{'%EVTPART109'};my $EVTPART11=   $evalSpecials->{'%EVTPART11'};my $EVTPART110=   $evalSpecials->{'%EVTPART110'};my $EVTPART111=   $evalSpecials->{'%EVTPART111'};my $EVTPART112=   $evalSpecials->{'%EVTPART112'};my $EVTPART113=   $evalSpecials->{'%EVTPART113'};my $EVTPART114=   $evalSpecials->{'%EVTPART114'};my $EVTPART115=   $evalSpecials->{'%EVTPART115'};my $EVTPART116=   $evalSpecials->{'%EVTPART116'};my $EVTPART117=   $evalSpecials->{'%EVTPART117'};my $EVTPART118=   $evalSpecials->{'%EVTPART118'};my $EVTPART119=   $evalSpecials->{'%EVTPART119'};my $EVTPART12=   $evalSpecials->{'%EVTPART12'};my $EVTPART120=   $evalSpecials->{'%EVTPART120'};my $EVTPART121=   $evalSpecials->{'%EVTPART121'};my $EVTPART122=   $evalSpecials->{'%EVTPART122'};my $EVTPART123=   $evalSpecials->{'%EVTPART123'};my $EVTPART124=   $evalSpecials->{'%EVTPART124'};my $EVTPART125=   $evalSpecials->{'%EVTPART125'};my $EVTPART126=   $evalSpecials->{'%EVTPART126'};my $EVTPART127=   $evalSpecials->{'%EVTPART127'};my $EVTPART128=   $evalSpecials->{'%EVTPART128'};my $EVTPART129=   $evalSpecials->{'%EVTPART129'};my $EVTPART13=   $evalSpecials->{'%EVTPART13'};my $EVTPART130=   $evalSpecials->{'%EVTPART130'};my $EVTPART131=   $evalSpecials->{'%EVTPART131'};my $EVTPART132=   $evalSpecials->{'%EVTPART132'};my $EVTPART133=   $evalSpecials->{'%EVTPART133'};my $EVTPART134=   $evalSpecials->{'%EVTPART134'};my $EVTPART135=   $evalSpecials->{'%EVTPART135'};my $EVTPART136=   $evalSpecials->{'%EVTPART136'};my $EVTPART137=   $evalSpecials->{'%EVTPART137'};my $EVTPART138=   $evalSpecials->{'%EVTPART138'};my $EVTPART139=   $evalSpecials->{'%EVTPART139'};my $EVTPART14=   $evalSpecials->{'%EVTPART14'};my $EVTPART140=   $evalSpecials->{'%EVTPART140'};my $EVTPART141=   $evalSpecials->{'%EVTPART141'};my $EVTPART142=   $evalSpecials->{'%EVTPART142'};my $EVTPART143=   $evalSpecials->{'%EVTPART143'};my $EVTPART144=   $evalSpecials->{'%EVTPART144'};my $EVTPART145=   $evalSpecials->{'%EVTPART145'};my $EVTPART146=   $evalSpecials->{'%EVTPART146'};my $EVTPART147=   $evalSpecials->{'%EVTPART147'};my $EVTPART148=   $evalSpecials->{'%EVTPART148'};my $EVTPART149=   $evalSpecials->{'%EVTPART149'};my $EVTPART15=   $evalSpecials->{'%EVTPART15'};my $EVTPART150=   $evalSpecials->{'%EVTPART150'};my $EVTPART151=   $evalSpecials->{'%EVTPART151'};my $EVTPART152=   $evalSpecials->{'%EVTPART152'};my $EVTPART153=   $evalSpecials->{'%EVTPART153'};my $EVTPART154=   $evalSpecials->{'%EVTPART154'};my $EVTPART155=   $evalSpecials->{'%EVTPART155'};my $EVTPART156=   $evalSpecials->{'%EVTPART156'};my $EVTPART157=   $evalSpecials->{'%EVTPART157'};my $EVTPART158=   $evalSpecials->{'%EVTPART158'};my $EVTPART159=   $evalSpecials->{'%EVTPART159'};my $EVTPART16=   $evalSpecials->{'%EVTPART16'};my $EVTPART160=   $evalSpecials->{'%EVTPART160'};my $EVTPART161=   $evalSpecials->{'%EVTPART161'};my $EVTPART162=   $evalSpecials->{'%EVTPART162'};my $EVTPART163=   $evalSpecials->{'%EVTPART163'};my $EVTPART164=   $evalSpecials->{'%EVTPART164'};my $EVTPART165=   $evalSpecials->{'%EVTPART165'};my $EVTPART166=   $evalSpecials->{'%EVTPART166'};my $EVTPART167=   $evalSpecials->{'%EVTPART167'};my $EVTPART168=   $evalSpecials->{'%EVTPART168'};my $EVTPART169=   $evalSpecials->{'%EVTPART169'};my $EVTPART17=   $evalSpecials->{'%EVTPART17'};my $EVTPART170=   $evalSpecials->{'%EVTPART170'};my $EVTPART171=   $evalSpecials->{'%EVTPART171'};my $EVTPART172=   $evalSpecials->{'%EVTPART172'};my $EVTPART173=   $evalSpecials->{'%EVTPART173'};my $EVTPART174=   $evalSpecials->{'%EVTPART174'};my $EVTPART175=   $evalSpecials->{'%EVTPART175'};my $EVTPART176=   $evalSpecials->{'%EVTPART176'};my $EVTPART177=   $evalSpecials->{'%EVTPART177'};my $EVTPART178=   $evalSpecials->{'%EVTPART178'};my $EVTPART179=   $evalSpecials->{'%EVTPART179'};my $EVTPART18=   $evalSpecials->{'%EVTPART18'};my $EVTPART180=   $evalSpecials->{'%EVTPART180'};my $EVTPART181=   $evalSpecials->{'%EVTPART181'};my $EVTPART182=   $evalSpecials->{'%EVTPART182'};my $EVTPART183=   $evalSpecials->{'%EVTPART183'};my $EVTPART184=   $evalSpecials->{'%EVTPART184'};my $EVTPART185=   $evalSpecials->{'%EVTPART185'};my $EVTPART186=   $evalSpecials->{'%EVTPART186'};my $EVTPART187=   $evalSpecials->{'%EVTPART187'};my $EVTPART188=   $evalSpecials->{'%EVTPART188'};my $EVTPART189=   $evalSpecials->{'%EVTPART189'};my $EVTPART19=   $evalSpecials->{'%EVTPART19'};my $EVTPART190=   $evalSpecials->{'%EVTPART190'};my $EVTPART191=   $evalSpecials->{'%EVTPART191'};my $EVTPART192=   $evalSpecials->{'%EVTPART192'};my $EVTPART193=   $evalSpecials->{'%EVTPART193'};my $EVTPART194=   $evalSpecials->{'%EVTPART194'};my $EVTPART195=   $evalSpecials->{'%EVTPART195'};my $EVTPART196=   $evalSpecials->{'%EVTPART196'};my $EVTPART197=   $evalSpecials->{'%EVTPART197'};my $EVTPART198=   $evalSpecials->{'%EVTPART198'};my $EVTPART199=   $evalSpecials->{'%EVTPART199'};my $EVTPART2=   $evalSpecials->{'%EVTPART2'};my $EVTPART20=   $evalSpecials->{'%EVTPART20'};my $EVTPART200=   $evalSpecials->{'%EVTPART200'};my $EVTPART201=   $evalSpecials->{'%EVTPART201'};my $EVTPART202=   $evalSpecials->{'%EVTPART202'};my $EVTPART203=   $evalSpecials->{'%EVTPART203'};my $EVTPART204=   $evalSpecials->{'%EVTPART204'};my $EVTPART205=   $evalSpecials->{'%EVTPART205'};my $EVTPART206=   $evalSpecials->{'%EVTPART206'};my $EVTPART207=   $evalSpecials->{'%EVTPART207'};my $EVTPART208=   $evalSpecials->{'%EVTPART208'};my $EVTPART209=   $evalSpecials->{'%EVTPART209'};my $EVTPART21=   $evalSpecials->{'%EVTPART21'};my $EVTPART210=   $evalSpecials->{'%EVTPART210'};my $EVTPART211=   $evalSpecials->{'%EVTPART211'};my $EVTPART212=   $evalSpecials->{'%EVTPART212'};my $EVTPART213=   $evalSpecials->{'%EVTPART213'};my $EVTPART214=   $evalSpecials->{'%EVTPART214'};my $EVTPART215=   $evalSpecials->{'%EVTPART215'};my $EVTPART216=   $evalSpecials->{'%EVTPART216'};my $EVTPART217=   $evalSpecials->{'%EVTPART217'};my $EVTPART218=   $evalSpecials->{'%EVTPART218'};my $EVTPART219=   $evalSpecials->{'%EVTPART219'};my $EVTPART22=   $evalSpecials->{'%EVTPART22'};my $EVTPART220=   $evalSpecials->{'%EVTPART220'};my $EVTPART221=   $evalSpecials->{'%EVTPART221'};my $EVTPART222=   $evalSpecials->{'%EVTPART222'};my $EVTPART223=   $evalSpecials->{'%EVTPART223'};my $EVTPART224=   $evalSpecials->{'%EVTPART224'};my $EVTPART225=   $evalSpecials->{'%EVTPART225'};my $EVTPART226=   $evalSpecials->{'%EVTPART226'};my $EVTPART227=   $evalSpecials->{'%EVTPART227'};my $EVTPART228=   $evalSpecials->{'%EVTPART228'};my $EVTPART229=   $evalSpecials->{'%EVTPART229'};my $EVTPART23=   $evalSpecials->{'%EVTPART23'};my $EVTPART230=   $evalSpecials->{'%EVTPART230'};my $EVTPART231=   $evalSpecials->{'%EVTPART231'};my $EVTPART232=   $evalSpecials->{'%EVTPART232'};my $EVTPART233=   $evalSpecials->{'%EVTPART233'};my $EVTPART234=   $evalSpecials->{'%EVTPART234'};my $EVTPART235=   $evalSpecials->{'%EVTPART235'};my $EVTPART236=   $evalSpecials->{'%EVTPART236'};my $EVTPART237=   $evalSpecials->{'%EVTPART237'};my $EVTPART238=   $evalSpecials->{'%EVTPART238'};my $EVTPART239=   $evalSpecials->{'%EVTPART239'};my $EVTPART24=   $evalSpecials->{'%EVTPART24'};my $EVTPART240=   $evalSpecials->{'%EVTPART240'};my $EVTPART241=   $evalSpecials->{'%EVTPART241'};my $EVTPART242=   $evalSpecials->{'%EVTPART242'};my $EVTPART243=   $evalSpecials->{'%EVTPART243'};my $EVTPART244=   $evalSpecials->{'%EVTPART244'};my $EVTPART245=   $evalSpecials->{'%EVTPART245'};my $EVTPART246=   $evalSpecials->{'%EVTPART246'};my $EVTPART247=   $evalSpecials->{'%EVTPART247'};my $EVTPART248=   $evalSpecials->{'%EVTPART248'};my $EVTPART249=   $evalSpecials->{'%EVTPART249'};my $EVTPART25=   $evalSpecials->{'%EVTPART25'};my $EVTPART250=   $evalSpecials->{'%EVTPART250'};my $EVTPART251=   $evalSpecials->{'%EVTPART251'};my $EVTPART252=   $evalSpecials->{'%EVTPART252'};my $EVTPART253=   $evalSpecials->{'%EVTPART253'};my $EVTPART254=   $evalSpecials->{'%EVTPART254'};my $EVTPART255=   $evalSpecials->{'%EVTPART255'};my $EVTPART256=   $evalSpecials->{'%EVTPART256'};my $EVTPART257=   $evalSpecials->{'%EVTPART257'};my $EVTPART258=   $evalSpecials->{'%EVTPART258'};my $EVTPART259=   $evalSpecials->{'%EVTPART259'};my $EVTPART26=   $evalSpecials->{'%EVTPART26'};my $EVTPART260=   $evalSpecials->{'%EVTPART260'};my $EVTPART261=   $evalSpecials->{'%EVTPART261'};my $EVTPART262=   $evalSpecials->{'%EVTPART262'};my $EVTPART263=   $evalSpecials->{'%EVTPART263'};my $EVTPART264=   $evalSpecials->{'%EVTPART264'};my $EVTPART265=   $evalSpecials->{'%EVTPART265'};my $EVTPART266=   $evalSpecials->{'%EVTPART266'};my $EVTPART267=   $evalSpecials->{'%EVTPART267'};my $EVTPART268=   $evalSpecials->{'%EVTPART268'};my $EVTPART269=   $evalSpecials->{'%EVTPART269'};my $EVTPART27=   $evalSpecials->{'%EVTPART27'};my $EVTPART270=   $evalSpecials->{'%EVTPART270'};my $EVTPART271=   $evalSpecials->{'%EVTPART271'};my $EVTPART272=   $evalSpecials->{'%EVTPART272'};my $EVTPART273=   $evalSpecials->{'%EVTPART273'};my $EVTPART274=   $evalSpecials->{'%EVTPART274'};my $EVTPART275=   $evalSpecials->{'%EVTPART275'};my $EVTPART276=   $evalSpecials->{'%EVTPART276'};my $EVTPART277=   $evalSpecials->{'%EVTPART277'};my $EVTPART278=   $evalSpecials->{'%EVTPART278'};my $EVTPART279=   $evalSpecials->{'%EVTPART279'};my $EVTPART28=   $evalSpecials->{'%EVTPART28'};my $EVTPART280=   $evalSpecials->{'%EVTPART280'};my $EVTPART281=   $evalSpecials->{'%EVTPART281'};my $EVTPART282=   $evalSpecials->{'%EVTPART282'};my $EVTPART283=   $evalSpecials->{'%EVTPART283'};my $EVTPART284=   $evalSpecials->{'%EVTPART284'};my $EVTPART285=   $evalSpecials->{'%EVTPART285'};my $EVTPART286=   $evalSpecials->{'%EVTPART286'};my $EVTPART287=   $evalSpecials->{'%EVTPART287'};my $EVTPART288=   $evalSpecials->{'%EVTPART288'};my $EVTPART289=   $evalSpecials->{'%EVTPART289'};my $EVTPART29=   $evalSpecials->{'%EVTPART29'};my $EVTPART290=   $evalSpecials->{'%EVTPART290'};my $EVTPART291=   $evalSpecials->{'%EVTPART291'};my $EVTPART292=   $evalSpecials->{'%EVTPART292'};my $EVTPART293=   $evalSpecials->{'%EVTPART293'};my $EVTPART294=   $evalSpecials->{'%EVTPART294'};my $EVTPART295=   $evalSpecials->{'%EVTPART295'};my $EVTPART296=   $evalSpecials->{'%EVTPART296'};my $EVTPART297=   $evalSpecials->{'%EVTPART297'};my $EVTPART298=   $evalSpecials->{'%EVTPART298'};my $EVTPART299=   $evalSpecials->{'%EVTPART299'};my $EVTPART3=   $evalSpecials->{'%EVTPART3'};my $EVTPART30=   $evalSpecials->{'%EVTPART30'};my $EVTPART300=   $evalSpecials->{'%EVTPART300'};my $EVTPART301=   $evalSpecials->{'%EVTPART301'};my $EVTPART302=   $evalSpecials->{'%EVTPART302'};my $EVTPART303=   $evalSpecials->{'%EVTPART303'};my $EVTPART304=   $evalSpecials->{'%EVTPART304'};my $EVTPART305=   $evalSpecials->{'%EVTPART305'};my $EVTPART306=   $evalSpecials->{'%EVTPART306'};my $EVTPART307=   $evalSpecials->{'%EVTPART307'};my $EVTPART308=   $evalSpecials->{'%EVTPART308'};my $EVTPART309=   $evalSpecials->{'%EVTPART309'};my $EVTPART31=   $evalSpecials->{'%EVTPART31'};my $EVTPART310=   $evalSpecials->{'%EVTPART310'};my $EVTPART311=   $evalSpecials->{'%EVTPART311'};my $EVTPART312=   $evalSpecials->{'%EVTPART312'};my $EVTPART313=   $evalSpecials->{'%EVTPART313'};my $EVTPART314=   $evalSpecials->{'%EVTPART314'};my $EVTPART315=   $evalSpecials->{'%EVTPART315'};my $EVTPART316=   $evalSpecials->{'%EVTPART316'};my $EVTPART317=   $evalSpecials->{'%EVTPART317'};my $EVTPART318=   $evalSpecials->{'%EVTPART318'};my $EVTPART319=   $evalSpecials->{'%EVTPART319'};my $EVTPART32=   $evalSpecials->{'%EVTPART32'};my $EVTPART320=   $evalSpecials->{'%EVTPART320'};my $EVTPART321=   $evalSpecials->{'%EVTPART321'};my $EVTPART322=   $evalSpecials->{'%EVTPART322'};my $EVTPART323=   $evalSpecials->{'%EVTPART323'};my $EVTPART324=   $evalSpecials->{'%EVTPART324'};my $EVTPART325=   $evalSpecials->{'%EVTPART325'};my $EVTPART326=   $evalSpecials->{'%EVTPART326'};my $EVTPART327=   $evalSpecials->{'%EVTPART327'};my $EVTPART328=   $evalSpecials->{'%EVTPART328'};my $EVTPART329=   $evalSpecials->{'%EVTPART329'};my $EVTPART33=   $evalSpecials->{'%EVTPART33'};my $EVTPART330=   $evalSpecials->{'%EVTPART330'};my $EVTPART331=   $evalSpecials->{'%EVTPART331'};my $EVTPART332=   $evalSpecials->{'%EVTPART332'};my $EVTPART333=   $evalSpecials->{'%EVTPART333'};my $EVTPART334=   $evalSpecials->{'%EVTPART334'};my $EVTPART335=   $evalSpecials->{'%EVTPART335'};my $EVTPART336=   $evalSpecials->{'%EVTPART336'};my $EVTPART337=   $evalSpecials->{'%EVTPART337'};my $EVTPART338=   $evalSpecials->{'%EVTPART338'};my $EVTPART339=   $evalSpecials->{'%EVTPART339'};my $EVTPART34=   $evalSpecials->{'%EVTPART34'};my $EVTPART340=   $evalSpecials->{'%EVTPART340'};my $EVTPART341=   $evalSpecials->{'%EVTPART341'};my $EVTPART342=   $evalSpecials->{'%EVTPART342'};my $EVTPART343=   $evalSpecials->{'%EVTPART343'};my $EVTPART344=   $evalSpecials->{'%EVTPART344'};my $EVTPART345=   $evalSpecials->{'%EVTPART345'};my $EVTPART346=   $evalSpecials->{'%EVTPART346'};my $EVTPART347=   $evalSpecials->{'%EVTPART347'};my $EVTPART348=   $evalSpecials->{'%EVTPART348'};my $EVTPART349=   $evalSpecials->{'%EVTPART349'};my $EVTPART35=   $evalSpecials->{'%EVTPART35'};my $EVTPART350=   $evalSpecials->{'%EVTPART350'};my $EVTPART351=   $evalSpecials->{'%EVTPART351'};my $EVTPART352=   $evalSpecials->{'%EVTPART352'};my $EVTPART353=   $evalSpecials->{'%EVTPART353'};my $EVTPART354=   $evalSpecials->{'%EVTPART354'};my $EVTPART355=   $evalSpecials->{'%EVTPART355'};my $EVTPART356=   $evalSpecials->{'%EVTPART356'};my $EVTPART357=   $evalSpecials->{'%EVTPART357'};my $EVTPART358=   $evalSpecials->{'%EVTPART358'};my $EVTPART359=   $evalSpecials->{'%EVTPART359'};my $EVTPART36=   $evalSpecials->{'%EVTPART36'};my $EVTPART360=   $evalSpecials->{'%EVTPART360'};my $EVTPART361=   $evalSpecials->{'%EVTPART361'};my $EVTPART362=   $evalSpecials->{'%EVTPART362'};my $EVTPART363=   $evalSpecials->{'%EVTPART363'};my $EVTPART364=   $evalSpecials->{'%EVTPART364'};my $EVTPART365=   $evalSpecials->{'%EVTPART365'};my $EVTPART366=   $evalSpecials->{'%EVTPART366'};my $EVTPART367=   $evalSpecials->{'%EVTPART367'};my $EVTPART368=   $evalSpecials->{'%EVTPART368'};my $EVTPART369=   $evalSpecials->{'%EVTPART369'};my $EVTPART37=   $evalSpecials->{'%EVTPART37'};my $EVTPART370=   $evalSpecials->{'%EVTPART370'};my $EVTPART371=   $evalSpecials->{'%EVTPART371'};my $EVTPART372=   $evalSpecials->{'%EVTPART372'};my $EVTPART373=   $evalSpecials->{'%EVTPART373'};my $EVTPART374=   $evalSpecials->{'%EVTPART374'};my $EVTPART375=   $evalSpecials->{'%EVTPART375'};my $EVTPART376=   $evalSpecials->{'%EVTPART376'};my $EVTPART377=   $evalSpecials->{'%EVTPART377'};my $EVTPART378=   $evalSpecials->{'%EVTPART378'};my $EVTPART379=   $evalSpecials->{'%EVTPART379'};my $EVTPART38=   $evalSpecials->{'%EVTPART38'};my $EVTPART380=   $evalSpecials->{'%EVTPART380'};my $EVTPART381=   $evalSpecials->{'%EVTPART381'};my $EVTPART382=   $evalSpecials->{'%EVTPART382'};my $EVTPART383=   $evalSpecials->{'%EVTPART383'};my $EVTPART384=   $evalSpecials->{'%EVTPART384'};my $EVTPART385=   $evalSpecials->{'%EVTPART385'};my $EVTPART386=   $evalSpecials->{'%EVTPART386'};my $EVTPART387=   $evalSpecials->{'%EVTPART387'};my $EVTPART388=   $evalSpecials->{'%EVTPART388'};my $EVTPART389=   $evalSpecials->{'%EVTPART389'};my $EVTPART39=   $evalSpecials->{'%EVTPART39'};my $EVTPART390=   $evalSpecials->{'%EVTPART390'};my $EVTPART391=   $evalSpecials->{'%EVTPART391'};my $EVTPART392=   $evalSpecials->{'%EVTPART392'};my $EVTPART393=   $evalSpecials->{'%EVTPART393'};my $EVTPART394=   $evalSpecials->{'%EVTPART394'};my $EVTPART395=   $evalSpecials->{'%EVTPART395'};my $EVTPART396=   $evalSpecials->{'%EVTPART396'};my $EVTPART397=   $evalSpecials->{'%EVTPART397'};my $EVTPART398=   $evalSpecials->{'%EVTPART398'};my $EVTPART399=   $evalSpecials->{'%EVTPART399'};my $EVTPART4=   $evalSpecials->{'%EVTPART4'};my $EVTPART40=   $evalSpecials->{'%EVTPART40'};my $EVTPART400=   $evalSpecials->{'%EVTPART400'};my $EVTPART401=   $evalSpecials->{'%EVTPART401'};my $EVTPART402=   $evalSpecials->{'%EVTPART402'};my $EVTPART403=   $evalSpecials->{'%EVTPART403'};my $EVTPART404=   $evalSpecials->{'%EVTPART404'};my $EVTPART405=   $evalSpecials->{'%EVTPART405'};my $EVTPART406=   $evalSpecials->{'%EVTPART406'};my $EVTPART407=   $evalSpecials->{'%EVTPART407'};my $EVTPART408=   $evalSpecials->{'%EVTPART408'};my $EVTPART409=   $evalSpecials->{'%EVTPART409'};my $EVTPART41=   $evalSpecials->{'%EVTPART41'};my $EVTPART410=   $evalSpecials->{'%EVTPART410'};my $EVTPART411=   $evalSpecials->{'%EVTPART411'};my $EVTPART412=   $evalSpecials->{'%EVTPART412'};my $EVTPART413=   $evalSpecials->{'%EVTPART413'};my $EVTPART414=   $evalSpecials->{'%EVTPART414'};my $EVTPART415=   $evalSpecials->{'%EVTPART415'};my $EVTPART416=   $evalSpecials->{'%EVTPART416'};my $EVTPART417=   $evalSpecials->{'%EVTPART417'};my $EVTPART418=   $evalSpecials->{'%EVTPART418'};my $EVTPART419=   $evalSpecials->{'%EVTPART419'};my $EVTPART42=   $evalSpecials->{'%EVTPART42'};my $EVTPART420=   $evalSpecials->{'%EVTPART420'};my $EVTPART421=   $evalSpecials->{'%EVTPART421'};my $EVTPART422=   $evalSpecials->{'%EVTPART422'};my $EVTPART423=   $evalSpecials->{'%EVTPART423'};my $EVTPART424=   $evalSpecials->{'%EVTPART424'};my $EVTPART425=   $evalSpecials->{'%EVTPART425'};my $EVTPART426=   $evalSpecials->{'%EVTPART426'};my $EVTPART427=   $evalSpecials->{'%EVTPART427'};my $EVTPART428=   $evalSpecials->{'%EVTPART428'};my $EVTPART429=   $evalSpecials->{'%EVTPART429'};my $EVTPART43=   $evalSpecials->{'%EVTPART43'};my $EVTPART430=   $evalSpecials->{'%EVTPART430'};my $EVTPART431=   $evalSpecials->{'%EVTPART431'};my $EVTPART432=   $evalSpecials->{'%EVTPART432'};my $EVTPART433=   $evalSpecials->{'%EVTPART433'};my $EVTPART434=   $evalSpecials->{'%EVTPART434'};my $EVTPART435=   $evalSpecials->{'%EVTPART435'};my $EVTPART436=   $evalSpecials->{'%EVTPART436'};my $EVTPART437=   $evalSpecials->{'%EVTPART437'};my $EVTPART438=   $evalSpecials->{'%EVTPART438'};my $EVTPART439=   $evalSpecials->{'%EVTPART439'};my $EVTPART44=   $evalSpecials->{'%EVTPART44'};my $EVTPART440=   $evalSpecials->{'%EVTPART440'};my $EVTPART441=   $evalSpecials->{'%EVTPART441'};my $EVTPART442=   $evalSpecials->{'%EVTPART442'};my $EVTPART443=   $evalSpecials->{'%EVTPART443'};my $EVTPART444=   $evalSpecials->{'%EVTPART444'};my $EVTPART445=   $evalSpecials->{'%EVTPART445'};my $EVTPART446=   $evalSpecials->{'%EVTPART446'};my $EVTPART447=   $evalSpecials->{'%EVTPART447'};my $EVTPART448=   $evalSpecials->{'%EVTPART448'};my $EVTPART449=   $evalSpecials->{'%EVTPART449'};my $EVTPART45=   $evalSpecials->{'%EVTPART45'};my $EVTPART450=   $evalSpecials->{'%EVTPART450'};my $EVTPART451=   $evalSpecials->{'%EVTPART451'};my $EVTPART452=   $evalSpecials->{'%EVTPART452'};my $EVTPART453=   $evalSpecials->{'%EVTPART453'};my $EVTPART454=   $evalSpecials->{'%EVTPART454'};my $EVTPART455=   $evalSpecials->{'%EVTPART455'};my $EVTPART456=   $evalSpecials->{'%EVTPART456'};my $EVTPART457=   $evalSpecials->{'%EVTPART457'};my $EVTPART458=   $evalSpecials->{'%EVTPART458'};my $EVTPART459=   $evalSpecials->{'%EVTPART459'};my $EVTPART46=   $evalSpecials->{'%EVTPART46'};my $EVTPART460=   $evalSpecials->{'%EVTPART460'};my $EVTPART461=   $evalSpecials->{'%EVTPART461'};my $EVTPART462=   $evalSpecials->{'%EVTPART462'};my $EVTPART463=   $evalSpecials->{'%EVTPART463'};my $EVTPART464=   $evalSpecials->{'%EVTPART464'};my $EVTPART465=   $evalSpecials->{'%EVTPART465'};my $EVTPART466=   $evalSpecials->{'%EVTPART466'};my $EVTPART467=   $evalSpecials->{'%EVTPART467'};my $EVTPART468=   $evalSpecials->{'%EVTPART468'};my $EVTPART469=   $evalSpecials->{'%EVTPART469'};my $EVTPART47=   $evalSpecials->{'%EVTPART47'};my $EVTPART470=   $evalSpecials->{'%EVTPART470'};my $EVTPART471=   $evalSpecials->{'%EVTPART471'};my $EVTPART472=   $evalSpecials->{'%EVTPART472'};my $EVTPART473=   $evalSpecials->{'%EVTPART473'};my $EVTPART474=   $evalSpecials->{'%EVTPART474'};my $EVTPART475=   $evalSpecials->{'%EVTPART475'};my $EVTPART48=   $evalSpecials->{'%EVTPART48'};my $EVTPART49=   $evalSpecials->{'%EVTPART49'};my $EVTPART5=   $evalSpecials->{'%EVTPART5'};my $EVTPART50=   $evalSpecials->{'%EVTPART50'};my $EVTPART51=   $evalSpecials->{'%EVTPART51'};my $EVTPART52=   $evalSpecials->{'%EVTPART52'};my $EVTPART53=   $evalSpecials->{'%EVTPART53'};my $EVTPART54=   $evalSpecials->{'%EVTPART54'};my $EVTPART55=   $evalSpecials->{'%EVTPART55'};my $EVTPART56=   $evalSpecials->{'%EVTPART56'};my $EVTPART57=   $evalSpecials->{'%EVTPART57'};my $EVTPART58=   $evalSpecials->{'%EVTPART58'};my $EVTPART59=   $evalSpecials->{'%EVTPART59'};my $EVTPART6=   $evalSpecials->{'%EVTPART6'};my $EVTPART60=   $evalSpecials->{'%EVTPART60'};my $EVTPART61=   $evalSpecials->{'%EVTPART61'};my $EVTPART62=   $evalSpecials->{'%EVTPART62'};my $EVTPART63=   $evalSpecials->{'%EVTPART63'};my $EVTPART64=   $evalSpecials->{'%EVTPART64'};my $EVTPART65=   $evalSpecials->{'%EVTPART65'};my $EVTPART66=   $evalSpecials->{'%EVTPART66'};my $EVTPART67=   $evalSpecials->{'%EVTPART67'};my $EVTPART68=   $evalSpecials->{'%EVTPART68'};my $EVTPART69=   $evalSpecials->{'%EVTPART69'};my $EVTPART7=   $evalSpecials->{'%EVTPART7'};my $EVTPART70=   $evalSpecials->{'%EVTPART70'};my $EVTPART71=   $evalSpecials->{'%EVTPART71'};my $EVTPART72=   $evalSpecials->{'%EVTPART72'};my $EVTPART73=   $evalSpecials->{'%EVTPART73'};my $EVTPART74=   $evalSpecials->{'%EVTPART74'};my $EVTPART75=   $evalSpecials->{'%EVTPART75'};my $EVTPART76=   $evalSpecials->{'%EVTPART76'};my $EVTPART77=   $evalSpecials->{'%EVTPART77'};my $EVTPART78=   $evalSpecials->{'%EVTPART78'};my $EVTPART79=   $evalSpecials->{'%EVTPART79'};my $EVTPART8=   $evalSpecials->{'%EVTPART8'};my $EVTPART80=   $evalSpecials->{'%EVTPART80'};my $EVTPART81=   $evalSpecials->{'%EVTPART81'};my $EVTPART82=   $evalSpecials->{'%EVTPART82'};my $EVTPART83=   $evalSpecials->{'%EVTPART83'};my $EVTPART84=   $evalSpecials->{'%EVTPART84'};my $EVTPART85=   $evalSpecials->{'%EVTPART85'};my $EVTPART86=   $evalSpecials->{'%EVTPART86'};my $EVTPART87=   $evalSpecials->{'%EVTPART87'};my $EVTPART88=   $evalSpecials->{'%EVTPART88'};my $EVTPART89=   $evalSpecials->{'%EVTPART89'};my $EVTPART9=   $evalSpecials->{'%EVTPART9'};my $EVTPART90=   $evalSpecials->{'%EVTPART90'};my $EVTPART91=   $evalSpecials->{'%EVTPART91'};my $EVTPART92=   $evalSpecials->{'%EVTPART92'};my $EVTPART93=   $evalSpecials->{'%EVTPART93'};my $EVTPART94=   $evalSpecials->{'%EVTPART94'};my $EVTPART95=   $evalSpecials->{'%EVTPART95'};my $EVTPART96=   $evalSpecials->{'%EVTPART96'};my $EVTPART97=   $evalSpecials->{'%EVTPART97'};my $EVTPART98=   $evalSpecials->{'%EVTPART98'};my $EVTPART99=   $evalSpecials->{'%EVTPART99'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Can't use an undefined value as a HASH reference at ./FHEM/99_RoombaUtils.pm line 331.

Hat das sonst noch jemand?

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 02 März 2021, 09:17:06
Ein AttrTemplate habe ich auch schon in Arbeit, doppelte Arbeit sollten wir vermeiden. Abgesehen davon heißt es bei mir wie das Package: RoombaTemplate.

Ich habe das bisher noch nicht zur Verfügung gestellt, weil die RoombaUtils eben noch nicht stabil ist - insofern rate ich auch dazu, das mit dem Einbau in das m2-template noch aufzuschieben.
Kein Ding, bitte melden, wenn ich aktiv werden soll...
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 02 März 2021, 20:50:09
Hallo,

mit der neuen Version der 99_RoombaUtils bekomme ich beim Laden (reload 99_RoombaUtils.pm) folgende Fehlermeldungen:
Too many arguments for roomba::mission at ./FHEM/99_RoombaUtils.pm line 326, near "%ret)"
Too many arguments for roomba::schedule at ./FHEM/99_RoombaUtils.pm line 332, near "%ret)"


Mach ich was falsch?

LG,
Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 03 März 2021, 09:05:03
Hallo Hermann,

das ist eigenartig. Die Version wird bei mir zumindest einwandfrei geladen.

Bist Du sicher, dass Du die neueste Version hast?
https://forum.fhem.de/index.php/topic,114166.msg1135778.html#msg1135778 (https://forum.fhem.de/index.php/topic,114166.msg1135778.html#msg1135778)

Was steht denn bei Dir in den Zeilen 326 und 332?
#326    mission($name,\%mission,\%ret);
#332    schedule(\%cleans,\%ret);

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 03 März 2021, 20:36:48
Hallo,

Danke für Deine Antwort!
Lösung gefunden (oder Bug entdeckt?): Offenbar lädt fhem bei "reload" das betreffende Modul nicht korrekt. Die betreffenden subroutinen hatten in der alten Version einen Übergabeparameter, in der neuen nun zwei ($$). fhem scheint genau das beim "reload" Befehl nicht neu einzulesen und geht weiter von nur einem Übergabeparameter aus. Wenn ich die Übergabeparameter auf einen reduziere, dann klappts nämlich. Bei einem restart liest fhem die 99_RoombaUtils.pm wohl komplett neu ein, inkl. Definition der subs, dann kommt der Fehler nicht mehr...Zumindets mein Nicht-Informatiker-Erklärungsversuch.

Danke fürs Gedanken machen!

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 04 März 2021, 04:58:44
@hapege: Es ist immer eine große Freude und führt zur allgemeinen Zufriedenheit, wenn Newcomer gleich von einem "Bug" reden.  ::) ::)

Die 99_RoombaUtils sind "Work in progress" - darum stehen sie auch im contrib-Ordner. Und da nehme ich mir die Freiheit, auch mal die Anzahl der Übergabeparameter zu ändern. Selbstverständlich wirft Perl dann eine Fehlermeldung aus, weil es bei einem einem einfachen Reload noch die alten sub-Definitionen kennt. Dann macht man eben mal einen Restart, fertig.

Ich werde jedenfalls nicht mit forward declarations arbeiten, um das zu verhindern.

pah

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 04 März 2021, 07:29:24
Hi,

sorry, ich wollte niemand zu nahe treten, mir war nicht transparent dass beim "reload" was anders passiert als beim fhem restart. Dass nur der Code der subs, aber nicht die Definition derselben neu gelesen wird hätte ich halt nicht angenommen. Kein Vorwurf oder Beschwerde Richtung der RoombaUtils, tut mir leid wenn Du das so verstanden hast. So "selbstverständlich" klar ist mir das nicht, aber ich bin auch kein Informatiker. Aber lernfähig, also wieder was dazugelernt, Danke!

LG,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 04 März 2021, 13:06:04
Zitat
Dass nur der Code der subs, aber nicht die Definition derselben neu gelesen wird hätte ich halt nicht angenommen
Nee, eben nicht. Umgekehrt: Es werden Aufrufe der Unterprogramme gelesen, obwohl diese (noch) mit anderer Parameterzahl im Speicher stehen und erst im weiterenVerlauf überschrieben werden. Um das zu vermeiden, müsste ich sie (temporär) _vor_ dem ersten Aufruf deklarieren, zumindest mit der aktuell gültigen Parameterzahl. Diese Mehrarbeit will ich mir aber gerne sparen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 07 März 2021, 09:17:05
Hallo,

@pah: Danke für die nette Erklärung!
Und weil ich mein neues Wissen überprüfen wollte, habe ich demzufolge einfach mal die Definition
sub testme ($$) { #tu was }
_vor_ den Aufruf
sub tesme (bla1, bla2) gestellt, und - tataa, also korrekt verstanden - ich kann lustig Parameter hinzufügen oder wegnehmen, ohne dass beim reload eine Fehlermeldung kommt oder ein kompletter Restart nötig ist. QED  :)
Vorsichtige Frage des Laien: Warum brauche ich die Parameter ($$) in der Definition der sub überhaupt, ein sub testme { #tu was } funktioniert auch, und da scheint es dann egal zu sein ob es im Code vor oder hinter dem Aufruf der sub steht...oder ist das unsauber?
(Bitte richtig verstehen, ich kritisiere nichts und will nicht klugscheissern, nur verstehen...)

Und weil ich so langsam ein bisschen verstehe was der Code "macht" habe ich mal eine kleine Ergänzung komponiert, die auch für den i7 die Schedules ausliest (/cleanSchedule/ gibts bei meinem i7 nicht, dafür ein anders aufgebautes array (?) /cleanSchedule2/), und bekomme damit in den Readings auch meine in der App konfigurierten Schedules (die App will ich eigentlich loswerden, ist aber wohl noch ein bisschen Weg dahin...). Was haltet ihr davon:

1) in der sub reading ergänzt:
  if( $evt =~ /cleanSchedule2/){
    my %cleans = %{$staterep};
    scheduleI7(\%cleans,\%ret);
  }

2) eine neue sub "scheduleI7" eingebaut:
#############################################################################
#
#  schedule data for I7
#
#############################################################################
sub scheduleI7($$){
  #-- getting events of the type
  # {"state":{"reported":{"cleanSchedule2": [{"enabled": true, "type": 0,
  #  "start": {"day": [2, 4, 6], "hour": 11, "min": 0},
  #  "cmd": {"command": "start", "ordered": 1, "pmap_id": "xxxxxxxxxxxxx",
  #  "regions": [{"region_id": "10", "type": "rid"}, {"region_id": "6", "type": "rid"},
  #  {"region_id": "5", "type": "rid"}, {"region_id": "8", "type": "rid"}],
  #  "user_pmapv_id": "210220T092737"}}]}}}
  #my ($dec) = @_;
  my ($evtptr,$retptr) = @_;
  my @weekdays = ("So","Mo","Di","Mi","Do","Fr","Sa");
  my @enabled;
  my @starthour;
  my @startmin;
  my @startday;
  my @userpmapvid;
  my @pmapid;
  my $nsched;
  my %answer = ();
  for (my $i = 0; $i<4; $i++){
    # j is needed since @startday does somehow not work with $i...
    my $j = $i;
    $nsched = $i+1;
   
    $enabled[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'enabled'};

    if(!defined($enabled[$i])) {
      $retptr->{"NumOfSchedules"} = $i;
      last;
    }

    $retptr->{"Schedule".$nsched."Enabled"} = booltoyesno($enabled[$i]) if(defined($enabled[$i]));

    $starthour[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'start'}->{'hour'};
    $startmin[$i] = sprintf("%02d", $evtptr->{'cleanSchedule2'}->[$i]->{'start'}->{'min'});
    $retptr->{"Schedule".$nsched."Time"} = $starthour[$i].":".$startmin[$i] if(defined($starthour[$i]));

    $userpmapvid[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'cmd'}->{'user_pmapv_id'};
    $retptr->{"Schedule".$nsched."UserPMapvID"} = $userpmapvid[$i] if(defined($userpmapvid[$i]));

    $pmapid[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'cmd'}->{'pmap_id'};
    $retptr->{"Schedule".$nsched."PMapID"} = $pmapid[$i] if(defined($pmapid[$i]));
   
    @startday = @{$evtptr->{'cleanSchedule2'}->[$j]->{'start'}->{'day'}};
    for (@startday) {s/0/So/g;s/1/Mo/g;s/2/Di/g;s/3/Mi/g;s/4/Do/g;s/5/Fr/g;s/6/Sa/g;}
    $retptr->{"Schedule".$nsched."WeekDays"} = join(",",@startday);
  }
  return
}

3) Damit bei den "ScheduleEnabled" statt 0/1 ein yes/no steht die Sektion helper um eine sub ergänzt (hauptsächlich copy & paste)
sub booltoyesno($){
  my ($num) = @_;
  my $ret = (($num==1)?"yes":"no");
  #$ret = $num;
  return $ret;
}

Was mich wurmt ist die brachiale Hilfsdefinition von "my $j = $i;" in der scheduleI7. Aber mit der eigentlichen Zählvariable "$i" funktioniert der folgende Aufruf nicht (geht nur wenn ich $j verwende)
@startday = @{$evtptr->{'cleanSchedule2'}->[$j]->{'start'}->{'day'}};Was mache ich da falsch?

Und noch ein vermutlich unsauberes Konstrukt: Ich lese nur maximal 4 schedules in der for Schleife ein. Könnte man sicher auch als unbegrenzte Schleife mit der ja schon enthaltenen Abbruchbedingung lösen, aber ich wollte damit nicht riskieren bei Fehlern oder späteren API Änderungen in eine Endlosschleife stecken zu bleiben. Wie geht das besser?

Vielleicht ist das ja auch für andere nützlich und findet irgendwann bzw gerne verbessert (wie gesagt, ich bin kein Informatiker oder Perl Experte) mal Platz in den RoombaUtils.

LG,

Hermann

UPDATE 14.03.21:

ad 1) Beim Aufruf $name mit übergeben
  if( $evt =~ /cleanSchedule2/){
    my %cleans = %{$staterep};
    scheduleI7($name,\%cleans,\%ret);
  }
 

ad 2) Schleife auf 14 Schedules erweitert (empirisch ermittelte Maximalzahl der Zeitpläne im I7), Löschen alter Schedule Readings, wenn ein Zeitplan in der App wieder gelöscht wurde.
#############################################################################
#
#  schedule data for I7
#
#############################################################################
sub scheduleI7($$$){
  #-- getting events of the type
  # {"state":{"reported":{"cleanSchedule2": [{"enabled": true, "type": 0,
  #  "start": {"day": [2, 4, 6], "hour": 11, "min": 0},
  #  "cmd": {"command": "start", "ordered": 1, "pmap_id": "zBzSo0ghQ-SYfM7yqTxZUg",
  #  "regions": [{"region_id": "10", "type": "rid"}, {"region_id": "6", "type": "rid"},
  #  {"region_id": "5", "type": "rid"}, {"region_id": "8", "type": "rid"}],
  #  "user_pmapv_id": "210220T092737"}}]}}}
  #my ($dec) = @_;
  my ($name,$evtptr,$retptr) = @_;
  my @weekdays = ("So","Mo","Di","Mi","Do","Fr","Sa");
  my @enabled;
  my @starthour;
  my @startmin;
  my @startday;
  my @userpmapvid;
  my @pmapid;
  my $nsched;
  my %answer = ();
  my $oldnsched = main::ReadingsVal($name,"NumOfSchedules","");
  for (my $i = 0; $i<14; $i++){
    # j is needed since @startday does somehow not work with $i...
    my $j = $i;
    $nsched = $i+1;
   
    $enabled[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'enabled'};

    # if schedules are no longer present in app or roomba, delete them in fhem, too
    if(!defined($enabled[$i])) {
      $retptr->{"NumOfSchedules"} = $i;
    for (my $k = $i; $k < $oldnsched; $k++) {
    main::Log 1,"[RoombaUtils] deleting old schedule ID $k, oldnsched No was $oldnsched";
    my $hash = $main::defs{$name};
    my $todel = $k+1;
    main::readingsDelete($hash, "Schedule".$todel."Enabled");
    main::readingsDelete($hash, "Schedule".$todel."Time");
    main::readingsDelete($hash, "Schedule".$todel."UserPMapvID");
    main::readingsDelete($hash, "Schedule".$todel."PMapID");
    main::readingsDelete($hash, "Schedule".$todel."WeekDays");
      }
      last;
    }

    $retptr->{"Schedule".$nsched."Enabled"} = booltoyesno($enabled[$i]) if(defined($enabled[$i]));

    $starthour[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'start'}->{'hour'};
    $startmin[$i] = sprintf("%02d", $evtptr->{'cleanSchedule2'}->[$i]->{'start'}->{'min'});
    $retptr->{"Schedule".$nsched."Time"} = $starthour[$i].":".$startmin[$i] if(defined($starthour[$i]));

    $userpmapvid[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'cmd'}->{'user_pmapv_id'};
    $retptr->{"Schedule".$nsched."UserPMapvID"} = $userpmapvid[$i] if(defined($userpmapvid[$i]));

    $pmapid[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'cmd'}->{'pmap_id'};
    $retptr->{"Schedule".$nsched."PMapID"} = $pmapid[$i] if(defined($pmapid[$i]));
   
    @startday = @{$evtptr->{'cleanSchedule2'}->[$j]->{'start'}->{'day'}};
    for (@startday) {s/0/So/g;s/1/Mo/g;s/2/Di/g;s/3/Mi/g;s/4/Do/g;s/5/Fr/g;s/6/Sa/g;}
    $retptr->{"Schedule".$nsched."WeekDays"} = join(",",@startday);
  }
  return
}

(Ob readingsDelete auch mit regexp arbeiten kann, habe ich nicht herausfinden können...)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 07 März 2021, 10:08:46
Hallo,

seit ein paar Tagen (ich denke, wahrscheinlich seit dem letzten Update), klappt bei mir das Einlesen des Ladestatus nicht mehr.
Es scheinen mehrere Events für die Batterie zu kommen:
2021.03.06 09:44:29.382 1: ============> {"state":{"reported":{"batPct": 16}}}
2021.03.06 09:56:41.666 1: ============> {"state":{"reported":{"batPct": 29}}}
2021.03.06 10:08:45.954 1: ============> {"state":{"reported":{"batPct": 42}}}
2021.03.06 10:20:50.537 1: ============> {"state":{"reported":{"batPct": 55}}}
2021.03.06 10:32:55.880 1: ============> {"state":{"reported":{"batPct": 68, "batteryType": "F12432832R", "batInfo": {"mDate": "2019-4-16", "mName": "F12432832R", "mDaySerial": 32072, "mData": "303030333034303200000000000000000000000000", "mLife": "0C400B0A107F0BF34DFA000E04F4F6C800CAFEB4290AFFFF0000013700000000", "cCount": 11, "afCount": 0}, "batAuthEnable": true, "bbchg": {"nChatters": 6, "nKnockoffs": 383, "nLithF": 26, "nChgOk": 426, "aborts": [5, 5, 5], "smberr": 57344}, "bbchg3": {"estCap": 1824, "nAvail": 875, "hOnDock": 6900, "avgMin": 61}, "bbmssn": {"aCycleM": 79, "nMssnF": 15, "nMssnC": 49, "nMssnOk": 412, "aMssnM": 150, "nMssn": 479}, "bbnav": {"aMtrack": 0, "nGoodLmrks": 0, "aGain": 0, "aExpo": 0}, "bbpause": {"pauses": [46, 46, 14, 2, 46, 2, 48, 38, 16, 101]}, "bbrun": {"nOvertemps": 0, "nCBump": 0, "nWStll": 0, "nMBStll": 8419, "nEvacs": 607, "nPanics": 908, "nPicks": 716, "nOpticalDD": 162, "nPiezoDD": 31, "nScrubs": 220, "nStuck": 209, "sqft": 2265, "min": 13, "hr": 413, "nCliffsF": 15212, "nCliffsR": 0}, "bbswitch": {"nBumper": 346891, "nDrops": 1280, "nDock": 113, "nSpot": 87, "nClean": 344}, "bbsys": {"min": 16, "hr": 7701}, "behaviorFwk": true, "bin": {"present": true, "full": false}, "binPause": true, "bleDevLoc": false, "cap": {"binFullDetect": 2, "dockComm": 1, "wDevLoc": 2, "bleDevLoc": 0, "edge": 0, "maps": 3, "pmaps": 5, "tLine": 2, "area": 1, "eco": 1, "multiPass": 2, "pose": 1, "team": 1, "pp": 0, "lang": 2, "5ghz": 1, "prov": 3, "sched": 1, "svcConf": 1, "ota": 2, "log": 2, "langOta": 0, "tileScan": 1}, "carpetBoost": false, "cleanMissionStatus": {"cycle": "none", "phase": "charge", "expireM": 0, "rechrgM": 0, "error": 0, "notReady": 0, "mssnM": 0, "expireTm": 0, "rechrgTm": 0, "mssnStrtTm": 0, "initiator": "none", "nMssn": 479}, "cleanSchedule2": [], "cloudEnv": "prod", "connected": true, "country": "AT", "deploymentState": 0, "dock": {"known": true, "pn": null, "state": null, "id": null, "fwVer": null}, "evacAllowed": true, "ecoCharge": false, "hwPartsRev": {"csscID": 0, "mobBrd": 7, "mobBlid": "2B95EFC6E22DEDEC851C166B6918478E", "navSerialNo": "CF09209PV", "wlan0HwAddr": "50:14:79:04:27:22", "NavBrd": 0}, "hwDbgr": {"swVer": "", "hw": "", "status": 0}, "langs": null, "langs2": {"sVer": "1.0", "dLangs": {"ver": "0.20", "langs": ["cs-CZ", "da-DK", "de-DE", "en-GB", "en-US", "es-ES", "es-XL", "fi-FI", "fr-CA", "fr-FR", "he-IL", "it-IT", "ja-JP", "ko-KR", "nb-NO", "nl-NL", "pl-PL", "pt-BR", "pt-PT", "ru-RU", "sv-SE", "zh-CN", "zh-HK", "zh-TW"]}, "sLang": "de-DE", "aSlots": 0}, "language": null, "lastCommand": {"command": null, "initiator": null, "time": null}, "lastDisconnect": 4, "mapUploadAllowed": true, "missionTelemetry": {"aux_comms": 1, "bat_stats": 1, "camera_settings": 1, "map_hypotheses": 1, "map_load": 1, "vital_stats": 1, "vslam_report": 1}, "name": "Roomba", "noAutoPasses": false, "noPP": false, "openOnly": false, "pmapLearningAllowed": true, "pmaps": [{"Qy6JsQPLQaC8cqDAnPARpQ": "210219T212951"}, {"8iTvnlmpSnerXyAsKbRaag": "210304T105450"}, {"J2uFT80TTdKEiH43D7GdCw": "210221T103328"}, {"ZMLEee7KS6COwI2K73h8HA": "210221T103331"}, {"mRtGVa2WTvKiFO6Otr-gFQ": "210221T150855"}, {"rELbOvuZQ4yD3JhrLP9TCw": "210303T113419"}], "pmapCL": true, "pmapFmt": "3", "rankOverlap": 15, "reflexSettings": {"rlWheelDrop": {"enabled": 0}}, "sceneRecog": 1, "schedHold": false, "secureBoot": {"log": 2, "flip": 0, "sbl1Ver": "B3.2.0_PPUB", "stublVer": "B3.2.02_PPUB", "efuse": 1, "blType": 1, "enforce": 2, "lastRst": "40", "recov": "linux+2.4.2+lewis-release-rt320+13", "idSwitch": 0}, "sku": "i755840", "softwareVer": "lewis+3.12.8+lewis-release-420+10", "subModSwVer": {"nav": "lewis-nav+3.12.8+ubuntu-HEAD-09318572a78+10", "mob": "3.12.8+ubuntu-HEAD-09318572a78+10", "pwr": "0.5.5+ubuntu-HEAD-09318572a78+10", "sft": "1.2.0+Lewis-Builds/Lewis-Certified-Safety/lewis-safety-ca6f27d09c6+31", "mobBtl": "4.0", "linux": "linux+3.8.0.2+lewis-release-420+10", "con": "3.8.61-@8419265a/ubuntu"}, "svcEndpoints": {"svcDeplId": "v007"}, "timezone": "Europe/Vienna", "tls": {"tzbChk": 1, "privKType": 2, "lcCiphers": [0, 0, 0, 0, 0, 0, 0, 50380848, 50331708, 50380847]}, "twoPass": false, "tz": {"events": [{"dt": 1604232000, "off": 60}, {"dt": 1616893201, "off": 120}, {"dt": 1635642001, "off": 60}], "ver": 9}, "vacHigh": false, "wDevLoc": false}}}
Also eine wo "nur" das "batPct" kommt und andere, die sehr viel detaillierter sind.

Die nur mit "batPct" funktionieren, sprich das Reading "battery" wird upgedatet; bei den anderen nicht.
In fhem wird "batPct" mit 55% und dem Zeitstempel "2021-03-06 10:20:50" angezeigt. So wie im Log zu sehen ist.

Hat das noch jemand?

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 07 März 2021, 10:44:31
Hi,

hm, bis vor 10 Minuten hat das bei mir funktioniert auch mit der ausführlichen Message
{"state":{"reported":{"batPct": 100, "batteryType": "F12432832R", "batInfo": {....


Dann habe ich fhem aktualisiert - nun geht nix mehr. Im Log sehe ich nur
HttpUtils: 192.168.x.y: Connection refused (111)
Zwischen "klappt" und "nix geht mehr" lag nur das update...

LG,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 07 März 2021, 11:24:01
Hallo,

die Fehlermeldung "HttpUtils: 192.168.x.y: Connection refused (111)" kommt bei mir nicht.
Bin mir aber nicht sicher, ob das die Roomba-Utils überhaupt httpUtils verwenden.

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 07 März 2021, 11:50:08
@hapege: Prima. Ich werde das gerne weitgehend übernehmen, testen müsste das dann nochjemand anders mit i7.

@gestein: Kommt mir seltsam vor - weil der Beginn mit state->reported immer das größere hash anlegt, in dem dann batPct gefüllt ist. Und wenn es gefüllt ist, wird auch ein Update gemacht.

Die httpUtils werden von MQTT2_DEVICE verwendet, der Fehler kommt also daher. Habe ich aber noch nicht gesehen.

LG

pah


Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 07 März 2021, 12:07:47
Hm,

ich hab jetzt alles durchprobiert was ich hier so gefunden habe, also openssl erweitern
https://forum.fhem.de/index.php/topic,114166.msg1103514.html#msg1103514

Und Roomba zurücksetzen
https://forum.fhem.de/index.php/topic,114166.msg1128658.html#msg1128658

restart, reboot, apt update, die Kiste streicheln...

--> nada.
2021.03.07 11:57:29 4: IP: 192.168.x.y -> 192.168.x.y
2021.03.07 11:57:29 4: HttpUtils: 192.168.x.y: Connection refused (111)

Ratlosigkeit am Sonntag Morgen  :(

@pah: "Weitgehend" klingt gut  ;)

LG,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 07 März 2021, 12:24:17
Bitte zu diesem Fehler einen neuen Thread aufmachen, in diesem Unterforum hier, Titel "MQTT2_DEVICE mit httpUtils_Fehler".

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 07 März 2021, 13:08:34
@hapege: Prima. Ich werde das gerne weitgehend übernehmen, testen müsste das dann nochjemand anders mit i7.

@gestein: Kommt mir seltsam vor - weil der Beginn mit state->reported immer das größere hash anlegt, in dem dann batPct gefüllt ist. Und wenn es gefüllt ist, wird auch ein Update gemacht.

Das kann ich gerne testen. Habe einen i7.

Das mit dem batPct schaue ich mir mal genauer an.

Lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 07 März 2021, 13:16:05
Bitte zu diesem Fehler einen neuen Thread aufmachen, in diesem Unterforum hier, Titel "MQTT2_DEVICE mit httpUtils_Fehler".

LG

pah

Done: https://forum.fhem.de/index.php/topic,119367.0.html
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 07 März 2021, 14:26:05
Hallo pah,

bei mir kommt immer wieder dieser Fehler: "2021.03.07 14:10:56.651 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=  ....."

Siehe auch hier: https://forum.fhem.de/index.php/topic,114166.msg1136619.html#msg1136619 (https://forum.fhem.de/index.php/topic,114166.msg1136619.html#msg1136619)

Wo kann ich da ansetzen?
Im Code ist es hier:
  if( $evt =~ /cleanSchedule/){
    #main::Log 1,"[RoombaUtils] schedule event ".$evt;
-->    my %cleans = %{$staterep->{'cleanSchedule'}};
    schedule(\%cleans,\%ret);
  }

Ich habe den i7, kann das mit dem zu haben:
https://forum.fhem.de/index.php/topic,114166.msg1137830.html#msg1137830 (https://forum.fhem.de/index.php/topic,114166.msg1137830.html#msg1137830)

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 07 März 2021, 15:25:16
Beim I7 gibt's cleanSchedule nicht... Nur cleanSchedule2.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 07 März 2021, 15:52:31
Die Herren mit i7: Bitte mal die angehängte Version testen - ich brauche einen vollständigen Event von cleanSchedule2 aus dem Log.

Außerdem folgende Fragen an i7-Besitzer:
Kann die Kiste tatsächlich nur 4 verschiedene Programme?
Bieibt z.B. Programm Nr. 3 erhalten, wenn man Programm Nr. 2 deaktiviert? Oder wird alles, was nicht aktiviert ist, automatisch gelöscht?
Sehe ich das richtig, dass man nicht ein Programm pro Wochentag vorgibt, sondern für jedes Reinigungsprogramm außer der Startzeit die Wochentage und Regionen auswählt?

Roadmap: Ich werde aus den RoombaUtils ein echtes Device-Modul machen - das allerdings alle internen Routinen des MQTT2-Device nutzt. Der Hintergrund ist, dass ich dann die Darstellungsroutinen im FHEMWEB-Frontend umbiegen kann - um beispielsweise die aktuelle Position als Graifk in Echtzeit anzuzeigen.


LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 07 März 2021, 16:55:22
Hallo,

aber gerne doch :)

Zitat
ich brauche einen vollständigen Event von cleanSchedule2 aus dem Log
2 Zeitpläne, einmal aktiviert, einmal nicht aktiviert
"cleanSchedule2": [{"enabled": false, "type": 0, "start": {"day": [1, 3], "hour": 9, "min": 0}, "cmd": {"command": "start", "ordered": 1, "pmap_id": "zBzSo0ghQ-SYfM7yqTxZUg", "regions": [{"region_id": "10", "type": "rid"}], "user_pmapv_id": "210227T111225"}}, {"enabled": true, "type": 0, "start": {"day": [2, 4, 6], "hour": 11, "min": 0}, "cmd": {"command": "start", "ordered": 1, "pmap_id": "zBzSo0ghQ-SYfM7yqTxZUg", "regions": [{"region_id": "10", "type": "rid"}, {"region_id": "6", "type": "rid"}, {"region_id": "5", "type": "rid"}, {"region_id": "8", "type": "rid"}], "user_pmapv_id": "210227T111225"}}],


Zitat
Kann die Kiste tatsächlich nur 4 verschiedene Programme?
Nein, die 4 haben ich willkürlich gewählt, ich habe gerade mal probiert in der App 7 Zeitpläne einzurichten: Geht. Vermutlich auch mehr, ich kann heute abend mal ausloten was geht.
Zitat
Bieibt z.B. Programm Nr. 3 erhalten, wenn man Programm Nr. 2 deaktiviert?
Ja, bleibt erhalten, "enabled" geht für das Programm dann auf "false"
Zitat
Oder wird alles, was nicht aktiviert ist, automatisch gelöscht?
Nein, aber die Reihenfolge in cleanSchedule2 ändert sich. Kann ich grad wegen der Arbeitsverweigerung der httputils nicht systematisch testen.
Zitat
Sehe ich das richtig, dass man nicht ein Programm pro Wochentag vorgibt, sondern für jedes Reinigungsprogramm außer der Startzeit die Wochentage und Regionen auswählt?
Man kann pro Zeitplan folgendes einstellen bzw. auswählen: Startzeit (hh:mm), einen oder mehrere Wochentag(e), Geschoß (bzw map, ich habe 2 Geschosse kartografiert), und Raum/Räume = Region.

Testen würde ich gerne, aber die httputils sind gegen mich :(

LG,

Hermann

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 07 März 2021, 17:01:22
Hmmm. So wie ich das sehe, wurden weder httpUtils, noch MQTT2_DEVICE upgedated - aber MQTT2_CLIENT.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 07 März 2021, 18:48:24
Hallo,

Die neue Version läuft schon - sogar mein "bssid" ist drinnen. Danke.

Ich bin noch nicht dazugekommen, das Schedule zu testen, aber mir ist zu meinem Fehler etwas aufgefallen.

Über "periodicCmd" verbinde ich alle 15min den MQTT2_CLIENT (also über set myRoombaMQTTClient connect).
periodicCmd update:15Den Befehl "update" habe ich definiert als setList: update:noArg {fhem("set ".InternalVal($NAME,"IODev","") . "connect")}
Damit kommen dann die folgenden log-Einträge:
2021.03.07 17:26:48.992 3: MQTT2_DEVICE set myRoomba update
2021.03.07 17:26:50.684 4: MQTT2_DEVICE_Parse: myRoomba $aws/things/D6DBF1F7DA88458CBC34ED564C42DCD1/shadow/update => {roomba::reading($NAME,$EVENT)}
2021.03.07 17:26:50.709 1: ERROR evaluating my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $EVTPART10=   $evalSpecials->{'%EVTPART10'};my $EVTPART100=   $evalSpecials->{'%EVTPART100'};my $EVTPART101=   $evalSpecials->{'%EVTPART101'};my $EVTPART102=   $evalSpecials->{'%EVTPART102'};my $EVTPART103=   $evalSpecials->{'%EVTPART103'};my $EVTPART104=   $evalSpecials->{'%EVTPART104'};my $EVTPART105=   $evalSpecials->{'%EVTPART105'};my $EVTPART106=   $evalSpecials->{'%EVTPART106'};my $EVTPART107=   $evalSpecials->{'%EVTPART107'};my $EVTPART108=   $evalSpecials->{'%EVTPART108'};my $EVTPART109=   $evalSpecials->{'%EVTPART109'};my $EVTPART11=   $evalSpecials->{'%EVTPART11'};my $EVTPART110=   $evalSpecials->{'%EVTPART110'};my $EVTPART111=   $evalSpecials->{'%EVTPART111'};my $EVTPART112=   $evalSpecials->{'%EVTPART112'};my $EVTPART113=   $evalSpecials->{'%EVTPART113'};my $EVTPART114=   $evalSpecials->{'%EVTPART114'};my $EVTPART115=   $evalSpecials->{'%EVTPART115'};my $EVTPART116=   $evalSpecials->{'%EVTPART116'};my $EVTPART117=   $evalSpecials->{'%EVTPART117'};my $EVTPART118=   $evalSpecials->{'%EVTPART118'};my $EVTPART119=   $evalSpecials->{'%EVTPART119'};my $EVTPART12=   $evalSpecials->{'%EVTPART12'};my $EVTPART120=   $evalSpecials->{'%EVTPART120'};my $EVTPART121=   $evalSpecials->{'%EVTPART121'};my $EVTPART122=   $evalSpecials->{'%EVTPART122'};my $EVTPART123=   $evalSpecials->{'%EVTPART123'};my $EVTPART124=   $evalSpecials->{'%EVTPART124'};my $EVTPART125=   $evalSpecials->{'%EVTPART125'};my $EVTPART126=   $evalSpecials->{'%EVTPART126'};my $EVTPART127=   $evalSpecials->{'%EVTPART127'};my $EVTPART128=   $evalSpecials->{'%EVTPART128'};my $EVTPART129=   $evalSpecials->{'%EVTPART129'};my $EVTPART13=   $evalSpecials->{'%EVTPART13'};my $EVTPART130=   $evalSpecials->{'%EVTPART130'};my $EVTPART131=   $evalSpecials->{'%EVTPART131'};my $EVTPART132=   $evalSpecials->{'%EVTPART132'};my $EVTPART133=   $evalSpecials->{'%EVTPART133'};my $EVTPART134=   $evalSpecials->{'%EVTPART134'};my $EVTPART135=   $evalSpecials->{'%EVTPART135'};my $EVTPART136=   $evalSpecials->{'%EVTPART136'};my $EVTPART137=   $evalSpecials->{'%EVTPART137'};my $EVTPART138=   $evalSpecials->{'%EVTPART138'};my $EVTPART139=   $evalSpecials->{'%EVTPART139'};my $EVTPART14=   $evalSpecials->{'%EVTPART14'};my $EVTPART140=   $evalSpecials->{'%EVTPART140'};my $EVTPART141=   $evalSpecials->{'%EVTPART141'};my $EVTPART142=   $evalSpecials->{'%EVTPART142'};my $EVTPART143=   $evalSpecials->{'%EVTPART143'};my $EVTPART144=   $evalSpecials->{'%EVTPART144'};my $EVTPART145=   $evalSpecials->{'%EVTPART145'};my $EVTPART146=   $evalSpecials->{'%EVTPART146'};my $EVTPART147=   $evalSpecials->{'%EVTPART147'};my $EVTPART148=   $evalSpecials->{'%EVTPART148'};my $EVTPART149=   $evalSpecials->{'%EVTPART149'};my $EVTPART15=   $evalSpecials->{'%EVTPART15'};my $EVTPART150=   $evalSpecials->{'%EVTPART150'};my $EVTPART151=   $evalSpecials->{'%EVTPART151'};my $EVTPART152=   $evalSpecials->{'%EVTPART152'};my $EVTPART153=   $evalSpecials->{'%EVTPART153'};my $EVTPART154=   $evalSpecials->{'%EVTPART154'};my $EVTPART155=   $evalSpecials->{'%EVTPART155'};my $EVTPART156=   $evalSpecials->{'%EVTPART156'};my $EVTPART157=   $evalSpecials->{'%EVTPART157'};my $EVTPART158=   $evalSpecials->{'%EVTPART158'};my $EVTPART159=   $evalSpecials->{'%EVTPART159'};my $EVTPART16=   $evalSpecials->{'%EVTPART16'};my $EVTPART160=   $evalSpecials->{'%EVTPART160'};my $EVTPART161=   $evalSpecials->{'%EVTPART161'};my $EVTPART162=   $evalSpecials->{'%EVTPART162'};my $EVTPART163=   $evalSpecials->{'%EVTPART163'};my $EVTPART164=   $evalSpecials->{'%EVTPART164'};my $EVTPART165=   $evalSpecials->{'%EVTPART165'};my $EVTPART166=   $evalSpecials->{'%EVTPART166'};my $EVTPART167=   $evalSpecials->{'%EVTPART167'};my $EVTPART168=   $evalSpecials->{'%EVTPART168'};my $EVTPART169=   $evalSpecials->{'%EVTPART169'};my $EVTPART17=   $evalSpecials->{'%EVTPART17'};my $EVTPART170=   $evalSpecials->{'%EVTPART170'};my $EVTPART171=   $evalSpecials->{'%EVTPART171'};my $EVTPART172=   $evalSpecials->{'%EVTPART172'};my $EVTPART173=   $evalSpecials->{'%EVTPART173'};my $EVTPART174=   $evalSpecials->{'%EVTPART174'};my $EVTPART175=   $evalSpecials->{'%EVTPART175'};my $EVTPART176=   $evalSpecials->{'%EVTPART176'};my $EVTPART177=   $evalSpecials->{'%EVTPART177'};my $EVTPART178=   $evalSpecials->{'%EVTPART178'};my $EVTPART179=   $evalSpecials->{'%EVTPART179'};my $EVTPART18=   $evalSpecials->{'%EVTPART18'};my $EVTPART180=   $evalSpecials->{'%EVTPART180'};my $EVTPART181=   $evalSpecials->{'%EVTPART181'};my $EVTPART182=   $evalSpecials->{'%EVTPART182'};my $EVTPART183=   $evalSpecials->{'%EVTPART183'};my $EVTPART184=   $evalSpecials->{'%EVTPART184'};my $EVTPART185=   $evalSpecials->{'%EVTPART185'};my $EVTPART186=   $evalSpecials->{'%EVTPART186'};my $EVTPART187=   $evalSpecials->{'%EVTPART187'};my $EVTPART188=   $evalSpecials->{'%EVTPART188'};my $EVTPART189=   $evalSpecials->{'%EVTPART189'};my $EVTPART19=   $evalSpecials->{'%EVTPART19'};my $EVTPART190=   $evalSpecials->{'%EVTPART190'};my $EVTPART191=   $evalSpecials->{'%EVTPART191'};my $EVTPART192=   $evalSpecials->{'%EVTPART192'};my $EVTPART193=   $evalSpecials->{'%EVTPART193'};my $EVTPART194=   $evalSpecials->{'%EVTPART194'};my $EVTPART195=   $evalSpecials->{'%EVTPART195'};my $EVTPART196=   $evalSpecials->{'%EVTPART196'};my $EVTPART197=   $evalSpecials->{'%EVTPART197'};my $EVTPART198=   $evalSpecials->{'%EVTPART198'};my $EVTPART199=   $evalSpecials->{'%EVTPART199'};my $EVTPART2=   $evalSpecials->{'%EVTPART2'};my $EVTPART20=   $evalSpecials->{'%EVTPART20'};my $EVTPART200=   $evalSpecials->{'%EVTPART200'};my $EVTPART201=   $evalSpecials->{'%EVTPART201'};my $EVTPART202=   $evalSpecials->{'%EVTPART202'};my $EVTPART203=   $evalSpecials->{'%EVTPART203'};my $EVTPART204=   $evalSpecials->{'%EVTPART204'};my $EVTPART205=   $evalSpecials->{'%EVTPART205'};my $EVTPART206=   $evalSpecials->{'%EVTPART206'};my $EVTPART207=   $evalSpecials->{'%EVTPART207'};my $EVTPART208=   $evalSpecials->{'%EVTPART208'};my $EVTPART209=   $evalSpecials->{'%EVTPART209'};my $EVTPART21=   $evalSpecials->{'%EVTPART21'};my $EVTPART210=   $evalSpecials->{'%EVTPART210'};my $EVTPART211=   $evalSpecials->{'%EVTPART211'};my $EVTPART212=   $evalSpecials->{'%EVTPART212'};my $EVTPART213=   $evalSpecials->{'%EVTPART213'};my $EVTPART214=   $evalSpecials->{'%EVTPART214'};my $EVTPART215=   $evalSpecials->{'%EVTPART215'};my $EVTPART216=   $evalSpecials->{'%EVTPART216'};my $EVTPART217=   $evalSpecials->{'%EVTPART217'};my $EVTPART218=   $evalSpecials->{'%EVTPART218'};my $EVTPART219=   $evalSpecials->{'%EVTPART219'};my $EVTPART22=   $evalSpecials->{'%EVTPART22'};my $EVTPART220=   $evalSpecials->{'%EVTPART220'};my $EVTPART221=   $evalSpecials->{'%EVTPART221'};my $EVTPART222=   $evalSpecials->{'%EVTPART222'};my $EVTPART223=   $evalSpecials->{'%EVTPART223'};my $EVTPART224=   $evalSpecials->{'%EVTPART224'};my $EVTPART225=   $evalSpecials->{'%EVTPART225'};my $EVTPART226=   $evalSpecials->{'%EVTPART226'};my $EVTPART227=   $evalSpecials->{'%EVTPART227'};my $EVTPART228=   $evalSpecials->{'%EVTPART228'};my $EVTPART229=   $evalSpecials->{'%EVTPART229'};my $EVTPART23=   $evalSpecials->{'%EVTPART23'};my $EVTPART230=   $evalSpecials->{'%EVTPART230'};my $EVTPART231=   $evalSpecials->{'%EVTPART231'};my $EVTPART232=   $evalSpecials->{'%EVTPART232'};my $EVTPART233=   $evalSpecials->{'%EVTPART233'};my $EVTPART234=   $evalSpecials->{'%EVTPART234'};my $EVTPART235=   $evalSpecials->{'%EVTPART235'};my $EVTPART236=   $evalSpecials->{'%EVTPART236'};my $EVTPART237=   $evalSpecials->{'%EVTPART237'};my $EVTPART238=   $evalSpecials->{'%EVTPART238'};my $EVTPART239=   $evalSpecials->{'%EVTPART239'};my $EVTPART24=   $evalSpecials->{'%EVTPART24'};my $EVTPART240=   $evalSpecials->{'%EVTPART240'};my $EVTPART241=   $evalSpecials->{'%EVTPART241'};my $EVTPART242=   $evalSpecials->{'%EVTPART242'};my $EVTPART243=   $evalSpecials->{'%EVTPART243'};my $EVTPART244=   $evalSpecials->{'%EVTPART244'};my $EVTPART245=   $evalSpecials->{'%EVTPART245'};my $EVTPART246=   $evalSpecials->{'%EVTPART246'};my $EVTPART247=   $evalSpecials->{'%EVTPART247'};my $EVTPART248=   $evalSpecials->{'%EVTPART248'};my $EVTPART249=   $evalSpecials->{'%EVTPART249'};my $EVTPART25=   $evalSpecials->{'%EVTPART25'};my $EVTPART250=   $evalSpecials->{'%EVTPART250'};my $EVTPART251=   $evalSpecials->{'%EVTPART251'};my $EVTPART252=   $evalSpecials->{'%EVTPART252'};my $EVTPART253=   $evalSpecials->{'%EVTPART253'};my $EVTPART254=   $evalSpecials->{'%EVTPART254'};my $EVTPART255=   $evalSpecials->{'%EVTPART255'};my $EVTPART256=   $evalSpecials->{'%EVTPART256'};my $EVTPART257=   $evalSpecials->{'%EVTPART257'};my $EVTPART258=   $evalSpecials->{'%EVTPART258'};my $EVTPART259=   $evalSpecials->{'%EVTPART259'};my $EVTPART26=   $evalSpecials->{'%EVTPART26'};my $EVTPART260=   $evalSpecials->{'%EVTPART260'};my $EVTPART261=   $evalSpecials->{'%EVTPART261'};my $EVTPART262=   $evalSpecials->{'%EVTPART262'};my $EVTPART263=   $evalSpecials->{'%EVTPART263'};my $EVTPART264=   $evalSpecials->{'%EVTPART264'};my $EVTPART265=   $evalSpecials->{'%EVTPART265'};my $EVTPART266=   $evalSpecials->{'%EVTPART266'};my $EVTPART267=   $evalSpecials->{'%EVTPART267'};my $EVTPART268=   $evalSpecials->{'%EVTPART268'};my $EVTPART269=   $evalSpecials->{'%EVTPART269'};my $EVTPART27=   $evalSpecials->{'%EVTPART27'};my $EVTPART270=   $evalSpecials->{'%EVTPART270'};my $EVTPART271=   $evalSpecials->{'%EVTPART271'};my $EVTPART272=   $evalSpecials->{'%EVTPART272'};my $EVTPART273=   $evalSpecials->{'%EVTPART273'};my $EVTPART274=   $evalSpecials->{'%EVTPART274'};my $EVTPART275=   $evalSpecials->{'%EVTPART275'};my $EVTPART276=   $evalSpecials->{'%EVTPART276'};my $EVTPART277=   $evalSpecials->{'%EVTPART277'};my $EVTPART278=   $evalSpecials->{'%EVTPART278'};my $EVTPART279=   $evalSpecials->{'%EVTPART279'};my $EVTPART28=   $evalSpecials->{'%EVTPART28'};my $EVTPART280=   $evalSpecials->{'%EVTPART280'};my $EVTPART281=   $evalSpecials->{'%EVTPART281'};my $EVTPART282=   $evalSpecials->{'%EVTPART282'};my $EVTPART283=   $evalSpecials->{'%EVTPART283'};my $EVTPART284=   $evalSpecials->{'%EVTPART284'};my $EVTPART285=   $evalSpecials->{'%EVTPART285'};my $EVTPART286=   $evalSpecials->{'%EVTPART286'};my $EVTPART287=   $evalSpecials->{'%EVTPART287'};my $EVTPART288=   $evalSpecials->{'%EVTPART288'};my $EVTPART289=   $evalSpecials->{'%EVTPART289'};my $EVTPART29=   $evalSpecials->{'%EVTPART29'};my $EVTPART290=   $evalSpecials->{'%EVTPART290'};my $EVTPART291=   $evalSpecials->{'%EVTPART291'};my $EVTPART292=   $evalSpecials->{'%EVTPART292'};my $EVTPART293=   $evalSpecials->{'%EVTPART293'};my $EVTPART294=   $evalSpecials->{'%EVTPART294'};my $EVTPART295=   $evalSpecials->{'%EVTPART295'};my $EVTPART296=   $evalSpecials->{'%EVTPART296'};my $EVTPART297=   $evalSpecials->{'%EVTPART297'};my $EVTPART298=   $evalSpecials->{'%EVTPART298'};my $EVTPART299=   $evalSpecials->{'%EVTPART299'};my $EVTPART3=   $evalSpecials->{'%EVTPART3'};my $EVTPART30=   $evalSpecials->{'%EVTPART30'};my $EVTPART300=   $evalSpecials->{'%EVTPART300'};my $EVTPART301=   $evalSpecials->{'%EVTPART301'};my $EVTPART302=   $evalSpecials->{'%EVTPART302'};my $EVTPART303=   $evalSpecials->{'%EVTPART303'};my $EVTPART304=   $evalSpecials->{'%EVTPART304'};my $EVTPART305=   $evalSpecials->{'%EVTPART305'};my $EVTPART306=   $evalSpecials->{'%EVTPART306'};my $EVTPART307=   $evalSpecials->{'%EVTPART307'};my $EVTPART308=   $evalSpecials->{'%EVTPART308'};my $EVTPART309=   $evalSpecials->{'%EVTPART309'};my $EVTPART31=   $evalSpecials->{'%EVTPART31'};my $EVTPART310=   $evalSpecials->{'%EVTPART310'};my $EVTPART311=   $evalSpecials->{'%EVTPART311'};my $EVTPART312=   $evalSpecials->{'%EVTPART312'};my $EVTPART313=   $evalSpecials->{'%EVTPART313'};my $EVTPART314=   $evalSpecials->{'%EVTPART314'};my $EVTPART315=   $evalSpecials->{'%EVTPART315'};my $EVTPART316=   $evalSpecials->{'%EVTPART316'};my $EVTPART317=   $evalSpecials->{'%EVTPART317'};my $EVTPART318=   $evalSpecials->{'%EVTPART318'};my $EVTPART319=   $evalSpecials->{'%EVTPART319'};my $EVTPART32=   $evalSpecials->{'%EVTPART32'};my $EVTPART320=   $evalSpecials->{'%EVTPART320'};my $EVTPART321=   $evalSpecials->{'%EVTPART321'};my $EVTPART322=   $evalSpecials->{'%EVTPART322'};my $EVTPART323=   $evalSpecials->{'%EVTPART323'};my $EVTPART324=   $evalSpecials->{'%EVTPART324'};my $EVTPART325=   $evalSpecials->{'%EVTPART325'};my $EVTPART326=   $evalSpecials->{'%EVTPART326'};my $EVTPART327=   $evalSpecials->{'%EVTPART327'};my $EVTPART328=   $evalSpecials->{'%EVTPART328'};my $EVTPART329=   $evalSpecials->{'%EVTPART329'};my $EVTPART33=   $evalSpecials->{'%EVTPART33'};my $EVTPART330=   $evalSpecials->{'%EVTPART330'};my $EVTPART331=   $evalSpecials->{'%EVTPART331'};my $EVTPART332=   $evalSpecials->{'%EVTPART332'};my $EVTPART333=   $evalSpecials->{'%EVTPART333'};my $EVTPART334=   $evalSpecials->{'%EVTPART334'};my $EVTPART335=   $evalSpecials->{'%EVTPART335'};my $EVTPART336=   $evalSpecials->{'%EVTPART336'};my $EVTPART337=   $evalSpecials->{'%EVTPART337'};my $EVTPART338=   $evalSpecials->{'%EVTPART338'};my $EVTPART339=   $evalSpecials->{'%EVTPART339'};my $EVTPART34=   $evalSpecials->{'%EVTPART34'};my $EVTPART340=   $evalSpecials->{'%EVTPART340'};my $EVTPART341=   $evalSpecials->{'%EVTPART341'};my $EVTPART342=   $evalSpecials->{'%EVTPART342'};my $EVTPART343=   $evalSpecials->{'%EVTPART343'};my $EVTPART344=   $evalSpecials->{'%EVTPART344'};my $EVTPART345=   $evalSpecials->{'%EVTPART345'};my $EVTPART346=   $evalSpecials->{'%EVTPART346'};my $EVTPART347=   $evalSpecials->{'%EVTPART347'};my $EVTPART348=   $evalSpecials->{'%EVTPART348'};my $EVTPART349=   $evalSpecials->{'%EVTPART349'};my $EVTPART35=   $evalSpecials->{'%EVTPART35'};my $EVTPART350=   $evalSpecials->{'%EVTPART350'};my $EVTPART351=   $evalSpecials->{'%EVTPART351'};my $EVTPART352=   $evalSpecials->{'%EVTPART352'};my $EVTPART353=   $evalSpecials->{'%EVTPART353'};my $EVTPART354=   $evalSpecials->{'%EVTPART354'};my $EVTPART355=   $evalSpecials->{'%EVTPART355'};my $EVTPART356=   $evalSpecials->{'%EVTPART356'};my $EVTPART357=   $evalSpecials->{'%EVTPART357'};my $EVTPART358=   $evalSpecials->{'%EVTPART358'};my $EVTPART359=   $evalSpecials->{'%EVTPART359'};my $EVTPART36=   $evalSpecials->{'%EVTPART36'};my $EVTPART360=   $evalSpecials->{'%EVTPART360'};my $EVTPART361=   $evalSpecials->{'%EVTPART361'};my $EVTPART362=   $evalSpecials->{'%EVTPART362'};my $EVTPART363=   $evalSpecials->{'%EVTPART363'};my $EVTPART364=   $evalSpecials->{'%EVTPART364'};my $EVTPART365=   $evalSpecials->{'%EVTPART365'};my $EVTPART366=   $evalSpecials->{'%EVTPART366'};my $EVTPART367=   $evalSpecials->{'%EVTPART367'};my $EVTPART368=   $evalSpecials->{'%EVTPART368'};my $EVTPART369=   $evalSpecials->{'%EVTPART369'};my $EVTPART37=   $evalSpecials->{'%EVTPART37'};my $EVTPART370=   $evalSpecials->{'%EVTPART370'};my $EVTPART371=   $evalSpecials->{'%EVTPART371'};my $EVTPART372=   $evalSpecials->{'%EVTPART372'};my $EVTPART373=   $evalSpecials->{'%EVTPART373'};my $EVTPART374=   $evalSpecials->{'%EVTPART374'};my $EVTPART375=   $evalSpecials->{'%EVTPART375'};my $EVTPART376=   $evalSpecials->{'%EVTPART376'};my $EVTPART377=   $evalSpecials->{'%EVTPART377'};my $EVTPART378=   $evalSpecials->{'%EVTPART378'};my $EVTPART379=   $evalSpecials->{'%EVTPART379'};my $EVTPART38=   $evalSpecials->{'%EVTPART38'};my $EVTPART380=   $evalSpecials->{'%EVTPART380'};my $EVTPART381=   $evalSpecials->{'%EVTPART381'};my $EVTPART382=   $evalSpecials->{'%EVTPART382'};my $EVTPART383=   $evalSpecials->{'%EVTPART383'};my $EVTPART384=   $evalSpecials->{'%EVTPART384'};my $EVTPART385=   $evalSpecials->{'%EVTPART385'};my $EVTPART386=   $evalSpecials->{'%EVTPART386'};my $EVTPART387=   $evalSpecials->{'%EVTPART387'};my $EVTPART388=   $evalSpecials->{'%EVTPART388'};my $EVTPART389=   $evalSpecials->{'%EVTPART389'};my $EVTPART39=   $evalSpecials->{'%EVTPART39'};my $EVTPART390=   $evalSpecials->{'%EVTPART390'};my $EVTPART391=   $evalSpecials->{'%EVTPART391'};my $EVTPART392=   $evalSpecials->{'%EVTPART392'};my $EVTPART393=   $evalSpecials->{'%EVTPART393'};my $EVTPART394=   $evalSpecials->{'%EVTPART394'};my $EVTPART395=   $evalSpecials->{'%EVTPART395'};my $EVTPART396=   $evalSpecials->{'%EVTPART396'};my $EVTPART397=   $evalSpecials->{'%EVTPART397'};my $EVTPART398=   $evalSpecials->{'%EVTPART398'};my $EVTPART399=   $evalSpecials->{'%EVTPART399'};my $EVTPART4=   $evalSpecials->{'%EVTPART4'};my $EVTPART40=   $evalSpecials->{'%EVTPART40'};my $EVTPART400=   $evalSpecials->{'%EVTPART400'};my $EVTPART401=   $evalSpecials->{'%EVTPART401'};my $EVTPART402=   $evalSpecials->{'%EVTPART402'};my $EVTPART403=   $evalSpecials->{'%EVTPART403'};my $EVTPART404=   $evalSpecials->{'%EVTPART404'};my $EVTPART405=   $evalSpecials->{'%EVTPART405'};my $EVTPART406=   $evalSpecials->{'%EVTPART406'};my $EVTPART407=   $evalSpecials->{'%EVTPART407'};my $EVTPART408=   $evalSpecials->{'%EVTPART408'};my $EVTPART409=   $evalSpecials->{'%EVTPART409'};my $EVTPART41=   $evalSpecials->{'%EVTPART41'};my $EVTPART410=   $evalSpecials->{'%EVTPART410'};my $EVTPART411=   $evalSpecials->{'%EVTPART411'};my $EVTPART412=   $evalSpecials->{'%EVTPART412'};my $EVTPART413=   $evalSpecials->{'%EVTPART413'};my $EVTPART414=   $evalSpecials->{'%EVTPART414'};my $EVTPART415=   $evalSpecials->{'%EVTPART415'};my $EVTPART416=   $evalSpecials->{'%EVTPART416'};my $EVTPART417=   $evalSpecials->{'%EVTPART417'};my $EVTPART418=   $evalSpecials->{'%EVTPART418'};my $EVTPART419=   $evalSpecials->{'%EVTPART419'};my $EVTPART42=   $evalSpecials->{'%EVTPART42'};my $EVTPART420=   $evalSpecials->{'%EVTPART420'};my $EVTPART421=   $evalSpecials->{'%EVTPART421'};my $EVTPART422=   $evalSpecials->{'%EVTPART422'};my $EVTPART423=   $evalSpecials->{'%EVTPART423'};my $EVTPART424=   $evalSpecials->{'%EVTPART424'};my $EVTPART425=   $evalSpecials->{'%EVTPART425'};my $EVTPART426=   $evalSpecials->{'%EVTPART426'};my $EVTPART427=   $evalSpecials->{'%EVTPART427'};my $EVTPART428=   $evalSpecials->{'%EVTPART428'};my $EVTPART429=   $evalSpecials->{'%EVTPART429'};my $EVTPART43=   $evalSpecials->{'%EVTPART43'};my $EVTPART430=   $evalSpecials->{'%EVTPART430'};my $EVTPART431=   $evalSpecials->{'%EVTPART431'};my $EVTPART432=   $evalSpecials->{'%EVTPART432'};my $EVTPART433=   $evalSpecials->{'%EVTPART433'};my $EVTPART434=   $evalSpecials->{'%EVTPART434'};my $EVTPART435=   $evalSpecials->{'%EVTPART435'};my $EVTPART436=   $evalSpecials->{'%EVTPART436'};my $EVTPART437=   $evalSpecials->{'%EVTPART437'};my $EVTPART438=   $evalSpecials->{'%EVTPART438'};my $EVTPART439=   $evalSpecials->{'%EVTPART439'};my $EVTPART44=   $evalSpecials->{'%EVTPART44'};my $EVTPART440=   $evalSpecials->{'%EVTPART440'};my $EVTPART441=   $evalSpecials->{'%EVTPART441'};my $EVTPART442=   $evalSpecials->{'%EVTPART442'};my $EVTPART443=   $evalSpecials->{'%EVTPART443'};my $EVTPART444=   $evalSpecials->{'%EVTPART444'};my $EVTPART445=   $evalSpecials->{'%EVTPART445'};my $EVTPART446=   $evalSpecials->{'%EVTPART446'};my $EVTPART447=   $evalSpecials->{'%EVTPART447'};my $EVTPART448=   $evalSpecials->{'%EVTPART448'};my $EVTPART449=   $evalSpecials->{'%EVTPART449'};my $EVTPART45=   $evalSpecials->{'%EVTPART45'};my $EVTPART450=   $evalSpecials->{'%EVTPART450'};my $EVTPART451=   $evalSpecials->{'%EVTPART451'};my $EVTPART452=   $evalSpecials->{'%EVTPART452'};my $EVTPART453=   $evalSpecials->{'%EVTPART453'};my $EVTPART454=   $evalSpecials->{'%EVTPART454'};my $EVTPART455=   $evalSpecials->{'%EVTPART455'};my $EVTPART456=   $evalSpecials->{'%EVTPART456'};my $EVTPART457=   $evalSpecials->{'%EVTPART457'};my $EVTPART458=   $evalSpecials->{'%EVTPART458'};my $EVTPART459=   $evalSpecials->{'%EVTPART459'};my $EVTPART46=   $evalSpecials->{'%EVTPART46'};my $EVTPART460=   $evalSpecials->{'%EVTPART460'};my $EVTPART461=   $evalSpecials->{'%EVTPART461'};my $EVTPART462=   $evalSpecials->{'%EVTPART462'};my $EVTPART463=   $evalSpecials->{'%EVTPART463'};my $EVTPART464=   $evalSpecials->{'%EVTPART464'};my $EVTPART465=   $evalSpecials->{'%EVTPART465'};my $EVTPART466=   $evalSpecials->{'%EVTPART466'};my $EVTPART467=   $evalSpecials->{'%EVTPART467'};my $EVTPART468=   $evalSpecials->{'%EVTPART468'};my $EVTPART469=   $evalSpecials->{'%EVTPART469'};my $EVTPART47=   $evalSpecials->{'%EVTPART47'};my $EVTPART470=   $evalSpecials->{'%EVTPART470'};my $EVTPART471=   $evalSpecials->{'%EVTPART471'};my $EVTPART472=   $evalSpecials->{'%EVTPART472'};my $EVTPART473=   $evalSpecials->{'%EVTPART473'};my $EVTPART474=   $evalSpecials->{'%EVTPART474'};my $EVTPART475=   $evalSpecials->{'%EVTPART475'};my $EVTPART48=   $evalSpecials->{'%EVTPART48'};my $EVTPART49=   $evalSpecials->{'%EVTPART49'};my $EVTPART5=   $evalSpecials->{'%EVTPART5'};my $EVTPART50=   $evalSpecials->{'%EVTPART50'};my $EVTPART51=   $evalSpecials->{'%EVTPART51'};my $EVTPART52=   $evalSpecials->{'%EVTPART52'};my $EVTPART53=   $evalSpecials->{'%EVTPART53'};my $EVTPART54=   $evalSpecials->{'%EVTPART54'};my $EVTPART55=   $evalSpecials->{'%EVTPART55'};my $EVTPART56=   $evalSpecials->{'%EVTPART56'};my $EVTPART57=   $evalSpecials->{'%EVTPART57'};my $EVTPART58=   $evalSpecials->{'%EVTPART58'};my $EVTPART59=   $evalSpecials->{'%EVTPART59'};my $EVTPART6=   $evalSpecials->{'%EVTPART6'};my $EVTPART60=   $evalSpecials->{'%EVTPART60'};my $EVTPART61=   $evalSpecials->{'%EVTPART61'};my $EVTPART62=   $evalSpecials->{'%EVTPART62'};my $EVTPART63=   $evalSpecials->{'%EVTPART63'};my $EVTPART64=   $evalSpecials->{'%EVTPART64'};my $EVTPART65=   $evalSpecials->{'%EVTPART65'};my $EVTPART66=   $evalSpecials->{'%EVTPART66'};my $EVTPART67=   $evalSpecials->{'%EVTPART67'};my $EVTPART68=   $evalSpecials->{'%EVTPART68'};my $EVTPART69=   $evalSpecials->{'%EVTPART69'};my $EVTPART7=   $evalSpecials->{'%EVTPART7'};my $EVTPART70=   $evalSpecials->{'%EVTPART70'};my $EVTPART71=   $evalSpecials->{'%EVTPART71'};my $EVTPART72=   $evalSpecials->{'%EVTPART72'};my $EVTPART73=   $evalSpecials->{'%EVTPART73'};my $EVTPART74=   $evalSpecials->{'%EVTPART74'};my $EVTPART75=   $evalSpecials->{'%EVTPART75'};my $EVTPART76=   $evalSpecials->{'%EVTPART76'};my $EVTPART77=   $evalSpecials->{'%EVTPART77'};my $EVTPART78=   $evalSpecials->{'%EVTPART78'};my $EVTPART79=   $evalSpecials->{'%EVTPART79'};my $EVTPART8=   $evalSpecials->{'%EVTPART8'};my $EVTPART80=   $evalSpecials->{'%EVTPART80'};my $EVTPART81=   $evalSpecials->{'%EVTPART81'};my $EVTPART82=   $evalSpecials->{'%EVTPART82'};my $EVTPART83=   $evalSpecials->{'%EVTPART83'};my $EVTPART84=   $evalSpecials->{'%EVTPART84'};my $EVTPART85=   $evalSpecials->{'%EVTPART85'};my $EVTPART86=   $evalSpecials->{'%EVTPART86'};my $EVTPART87=   $evalSpecials->{'%EVTPART87'};my $EVTPART88=   $evalSpecials->{'%EVTPART88'};my $EVTPART89=   $evalSpecials->{'%EVTPART89'};my $EVTPART9=   $evalSpecials->{'%EVTPART9'};my $EVTPART90=   $evalSpecials->{'%EVTPART90'};my $EVTPART91=   $evalSpecials->{'%EVTPART91'};my $EVTPART92=   $evalSpecials->{'%EVTPART92'};my $EVTPART93=   $evalSpecials->{'%EVTPART93'};my $EVTPART94=   $evalSpecials->{'%EVTPART94'};my $EVTPART95=   $evalSpecials->{'%EVTPART95'};my $EVTPART96=   $evalSpecials->{'%EVTPART96'};my $EVTPART97=   $evalSpecials->{'%EVTPART97'};my $EVTPART98=   $evalSpecials->{'%EVTPART98'};my $EVTPART99=   $evalSpecials->{'%EVTPART99'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Not a HASH reference at ./FHEM/99_RoombaUtils.pm line 360.

In Zeile 360 kommt ein "Not a HASH reference at ./FHEM/99_RoombaUtils.pm line 360."

Mache ich etwas falsch?

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 08 März 2021, 05:14:16
Kann ich noch nicht sagen - das ist genau die Zeile, die das cleanSchedule2 auswertet.
Bitte mal die angehängte Version probieren und schauen, was im Log steht.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 08 März 2021, 08:48:45
Hi,

nachdem mein Roomba wieder mag (PW neu ausgelesen, ist identisch, nochmal eingetragen, restart --> geht...):
Folgende Fehlermeldung beim restart:

reload: Error:Modul 99_RoombaUtils deactivated:
Can't use bareword ("evtptr") as an ARRAY ref while "strict refs" in use at ./FHEM/99_RoombaUtils.pm line 604.

und wenn ich ein "reload" der RoombaUtils mache:
Can't use bareword ("evtptr") as an ARRAY ref while "strict refs" in use at ./FHEM/99_RoombaUtils.pm line 604.

LG,

Hermann

PS: Ich hab mal ganz naiv ein "$" vor "evtptr" in Zeile 604 und 613 eingefügt (ja, ohne genau zu wissen was ich tue ;) )
604 my %evstart    = %{$evtptr->[$i]->{'start'}};
613 my %evcmd      = %{$evtptr->[$i]->{'cmd'}};

Dann ergibt ein reload:
Global symbol "$evstart" requires explicit package name (did you forget to declare "my $evstart"?) at ./FHEM/99_RoombaUtils.pm line 605.
Global symbol "$evstart" requires explicit package name (did you forget to declare "my $evstart"?) at ./FHEM/99_RoombaUtils.pm line 606.
Global symbol "$evstart" requires explicit package name (did you forget to declare "my $evstart"?) at ./FHEM/99_RoombaUtils.pm line 609.
Global symbol "$evcmd" requires explicit package name (did you forget to declare "my $evcmd"?) at ./FHEM/99_RoombaUtils.pm line 615.
Global symbol "$evcmd" requires explicit package name (did you forget to declare "my $evcmd"?) at ./FHEM/99_RoombaUtils.pm line 619.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 08 März 2021, 09:04:31
Wollte gerade das gleiche schreiben.
Fehlermeldung bei "reload 99_RoombaUtils":
Can't use bareword ("evtptr") as an ARRAY ref while "strict refs" in use at ./FHEM/99_RoombaUtils.pm line 604.
lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 08 März 2021, 09:40:34
Eines ist mir noch aufgefallen:
Der myRoombaMQTTClient wird normalerweise das "disconnectAfter" auf 300s gesetzt.

In Zeile 725 wird es aber nun auf 7s gesetzt: main::fhem("attr $iodev disconnectAfter 7");
Stimmt das so?

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 08 März 2021, 10:00:56
Eines ist mir noch aufgefallen:
Beim myRoombaMQTTClient wird normalerweise das "disconnectAfter" auf 300s gesetzt.

In Zeile 725 wird es aber nun auf 7s gesetzt: main::fhem("attr $iodev disconnectAfter 7");
Stimmt das so?

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 08 März 2021, 17:36:04
@gestein: Ja, nach Ablauf der Mission.

Zu dem Fehler: Ähem, man schaue bitte auf die Uhrzeit des Posts. Ich sollte nicht vor 5:00 solche Änderungen einfügen. Etwas Geduld, bitte.

LG

pah

Edit: OK, die Anlage sollte jetzt ohne Fehler laufen.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: gestein am 08 März 2021, 17:56:56
Hallo Pah,

Die Zeit des Posting ist mir aufgefallen ;-)

Das mit den 7sec beisst sich dann etwas mit einem Update, wenn man es so macht wie ich.
Oder kann man ein Update per MQTT auslösen?
Aber das probieren ich mal, wenn die Utils wieder laufen.

Eine Frage noch:
Das mit dem Setzen des Attributes "disconnectAfter" beim MQTT2_CLIENT-Device ist etwas unschön, weil fhem dann jedesmal annimmt, dass man die Konfig geändert hat.
Aber damit lässt sich leben.

lg, Gerhard
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 08 März 2021, 18:27:46
Hi,

bei 5:14 war ich auch echt beeindruckt ;)

Danke für das Update - ich habe das neue Modul gerade injiziert und neu gestartet:
Error:Modul 99_RoombaUtils deactivated:
 Global symbol "$evstart" requires explicit package name (did you forget to declare "my $evstart"?) at ./FHEM/99_RoombaUtils.pm line 605.
Global symbol "$evstart" requires explicit package name (did you forget to declare "my $evstart"?) at ./FHEM/99_RoombaUtils.pm line 606.
Global symbol "$evstart" requires explicit package name (did you forget to declare "my $evstart"?) at ./FHEM/99_RoombaUtils.pm line 609.
Global symbol "$evcmd" requires explicit package name (did you forget to declare "my $evcmd"?) at ./FHEM/99_RoombaUtils.pm line 615.
Global symbol "$evcmd" requires explicit package name (did you forget to declare "my $evcmd"?) at ./FHEM/99_RoombaUtils.pm line 619.

Zum disconnectAfter: Könnte man nicht den "alten" Wert auslesen, zwischenspeichern, und danach wieder setzen? Dann bleibt er nicht auf 7 oder 300 stehen...


Ich hatte heute folgende Fehlermeldung im Log:
Illegal division by zero at /usr/local/share/perl/5.30.0/Math/Polygon/Calc.pm line 329

Ich konnte das nur bereinigen, indem ich den Aufruf "finalizemap" kurz auskommentiert habe. Es stand wohl der "old state" auf "dock", obwohl der Roomba schon in "charge" war, hat dann bei jeder Message versucht finalizemap aufzurufen, ist bei "division by zero" ausgestiegen und ist damit nie in "charge" angekommen.  Ich hatte den Roomba vorher manuell in einem Zimmer gestartet, wo er kein Dock hat; er bleibt dann ja brav stehen und wartet dass man ihn zum Dock trägt, aber irgendwie haben die RoombaUtils das nicht richtig mitbekommen.

Mal sehen ob ich das reproduzieren kann...

LG,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 08 März 2021, 19:23:12
Hmmm. Probiermodus, noch eine geänderte Version anbei.


LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 08 März 2021, 20:01:09
Probieren ist immer gut :)

Ergebnis: Jein...RoombaUtils wird nun ohne Fehler eingelesen, aber die Readings sind weiter ohne Schedules, nur die bisherigen Readings (battery, cm*, s*) kommen. (edit: OK, schedule2 Aufruf ist ja auch auskommentiert....)
Logfile:
Zitat
[RoombaUtils] schedule2 event {"state":{"reported":{"batPct": 100, "batteryType": "F12432832R", "batInfo": {"mName": "F12432832R", "mDate": "2020-8-20", "mDaySerial": 36503, "mData": "303030333034303200000000000000000000000000", "mLife": "0C220B5010800C324F14000704C8F61900CBFE9F2611FFFF0047017900000000", "cCount": 8, "afCount": 0}, "batAuthEnable": true, "bbchg": {"nChatters": 0, "nKnockoffs": 313, "nLithF": 0, "nChgOk": 16, "aborts": [0, 0, 0], "smberr": 0}, "bbchg3": {"estCap": 2036, "nAvail": 30, "hOnDock": 421, "avgMin": 61}, "bbmssn": {"aCycleM": 31, "nMssnF": 4, "nMssnC": 2, "nMssnOk": 16, "aMssnM": 45, "nMssn": 22}, "bbnav": {"aMtrack": 0, "nGoodLmrks": 0, "aGain": 0, "aExpo": 0}, "bbpause": {"pauses": [18, 24, 46, 18, 43, 18, 24, 24, 18, 46]}, "bbrstinfo": {"nNavRst": 0, "nMobRst": 0, "causes": "0000", "nSafRst": 0, "safCauses": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}, "bbrun": {"nEvacs": 18, "nCBump": 0, "nOvertemps": 0, "nWStll": 0, "nMBStll": 458, "nPanics": 84, "nPicks": 225, "nOpticalDD": 0, "nScrubs": 0, "nPiezoDD": 0, "nStuck": 13, "sqft": 47, "min": 18, "hr": 12, "nCliffsF": 3111, "nCliffsR": 0}, "bbswitch": {"nBumper": 16552, "nDrops": 413, "nDock": 18, "nSpot": 45, "nClean": 49}, "bbsys": {"min": 54, "hr": 453}, "bin": {"present": true, "full": false}, "binPause": true, "bleDevLoc": false, "cap": {"binFullDetect": 1, "dockComm": 1, "wDevLoc": 2, "bleDevLoc": 1, "edge": 0, "maps": 3, "pmaps": 4, "tLine": 2, "area": 1, "eco": 1, "multiPass": 2, "pose": 1, "team": 1, "pp": 0, "5ghz": 1, "prov": 3, "sched": 1, "svcConf": 1, "ota": 2, "log": 2, "tileScan": 1}, "carpetBoost": false, "cleanMissionStatus": {"cycle": "none", "phase": "charge", "expireM": 0, "rechrgM": 0, "error": 0, "notReady": 0, "mssnM": 10, "sqft": 50, "initiator": "none", "nMssn": 22}, "cleanSchedule2": [{"enabled": false, "type": 0, "start": {"day": [1, 3], "hour": 9, "min": 0}, "cmd": {"command": "start", "ordered": 1, "pmap_id": "xxxxxxxx", "regions": [{"region_id": "10", "type": "rid"}], "user_pmapv_id": "210227T111225"}}, {"enabled": true, "type": 0, "start": {"day": [2, 4, 6], "hour": 11, "min": 0}, "cmd": {"command": "start", "ordered": 1, "pmap_id": "yyyyyyyy", "regions": [{"region_id": "10", "type": "rid"}, {"region_id": "6", "type": "rid"}, {"region_id": "5", "type": "rid"}, {"region_id": "8", "type": "rid"}], "user_pmapv_id": "210227T111225"}}], "cloudEnv": "prod", "connected": true, "country": "DE", "deploymentState": 0, "dock": {"known": true, "pn": "unknown", "state": 301, "id": "zzzzzzzz", "fwVer": "3.0.3"}, "evacAllowed": true, "ecoCharge": false, "hwPartsRev": {"csscID": 0, "mobBrd": 10, "mobBlid": "aaaaaaa", "navSerialNo": "bbbbbbbb", "wlan0HwAddr": "50:14:79:6d:3c:3d", "NavBrd": 1}, "hwDbgr": {"swVer": "", "hw": "", "status": 0}, "langs": [{"cs-CZ": 0}, {"da-DK": 1}, {"de-DE": 2}, {"en-GB": 3}, {"en-US": 4}, {"es-ES": 5}, {"es-XL": 6}, {"fi-FI": 7}, {"fr-CA": 8}, {"fr-FR": 9}, {"he-IL": 10}, {"it-IT": 11}, {"ja-JP": 12}, {"ko-KR": 13}, {"nb-NO": 14}, {"nl-NL": 15}, {"pl-PL": 16}, {"pt-BR": 17}, {"pt-PT": 18}, {"ru-RU": 19}, {"sv-SE": 20}, {"zh-CN": 21}, {"zh-HK": 22}, {"zh-TW": 23}], "language": 2, "lastCommand": {"command": null, "initiator": null, "time": null}, "lastDisconnect": 0, "mapUploadAllowed": true, "missionTelemetry": {"aux_comms": 1, "bat_stats": 1, "camera_settings": 1, "map_hypotheses": 1, "map_load": 1, "vital_stats": 1, "vslam_report": 1}, "name": "Rumpel", "noAutoPasses": false, "noPP": false, "openOnly": false, "pmapLearningAllowed": true, "pmaps": [{"cccccccc": "210307T113149"}, {"dddddddddddd": "210306T171929"}], "pmapCL": true, "rankOverlap": 15, "sceneRecog": 1, "schedHold": false, "secureBoot": {"log": 2, "flip": 0, "sbl1Ver": "B3.2.02_PPUB", "stublVer": "B3.2.02_PPUB", "efuse": 1, "blType": 1, "enforce": 2, "lastRst": "200000001", "recov": "linux+2.1.6_lock-1+lewis-release-rt419+12", "idSwitch": 0}, "sku": "i755840", "softwareVer": "lewis+3.10.8+lewis-release-rt320+13", "subModSwVer": {"nav": "lewis-nav+3.10.8-EPMF+build-HEAD-fed1cd6fdd3+13", "mob": "3.10.8+build-HEAD-fed1cd6fdd3+13", "pwr": "0.5.3+build-HEAD-fed1cd6fdd3+13", "sft": "1.1.0+Lewis-Builds/Lewis-Certified-Safety/lewis-safety-bbbe81f2c82+21", "mobBtl": "4.2", "linux": "linux+2.4.2+lewis-release-rt320+13", "con": "2.4.0-@071b7851/build"}, "svcEndpoints": {"svcDeplId": "v007"}, "timezone": "Europe/Berlin", "tls": {"tzbChk": 1, "privKType": 2, "lcCiphers": [0, 0, 0, 0, 0, 0, 0, 50380848, 50380847, 50331708]}, "twoPass": false, "tz": {"events": [{"dt": 1604232000, "off": 60}, {"dt": 1616893201, "off": 120}, {"dt": 1635642001, "off": 60}], "ver": 9}, "vacHigh": false, "wDevLoc": false}
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 08 März 2021, 22:23:45
Hi,

maximale Anzahl von Schedules beim i7: Ich habe gerade mal fleissig Zeitpläne eingerichtet - der i7 kann maximal 14 Stück speichern.

LG,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 10 März 2021, 20:58:26
Hallo,

ich experimentiere gerade einfach ein wenig, und bräuchte einen kleinen Tipp...ich möchte die Funktion "readingsDelete" aufrufen, um fallweise ein Reading meines i7 zu löschen:
main::readingsDelete($name, "Schedule".$nsched."Enabled")
Offenbar möchte readingsDelete lt. API Beschreibung aber eine Hashreferenz
readingsDelete($hash, $reading);
Ich bin noch nicht firm genug in Perl, und verstehe nicht ganz wie ich vom Namen des Robots $name zu einem Hash komme - und mir ist auch nicht ganz klar warum readingsDelete einen hash braucht, während z.B. ReadingsVal  statt hash "nur" den Namen braucht.
Sorry wenn die Frage trivial ist...

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 11 März 2021, 09:37:39
Erst einmal ist es nicht ganz trivial, so etwas aus den RoombaUtils aufzurufen - da die selber schon innerhalb einer Schleife laufen, die Readings setzt. Besser ist, einen Aufruf
fhem("deleterading <name> <reading>")abzusetzen.

Zweitens: $defs{"<name>"} ist der Hash.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 11 März 2021, 23:21:10
@pah: Dankeschön! Mit
my $hash = $main::defs{$name};
komme ich vermutlich weiter ;)

Noch 2 Findings, bei denen sich der i7 offenbar von den anderen Modellen unterscheidet:
Es gibt drei "uncaught events":
Zitat
uncaught event {"state":{"reported":{"bbswitch": ...
uncaught event {"state":{"reported":{"mssnNavStats":...
uncaught event {"state":{"reported":{"lastDisconnect": 2}}}
Die beide ersten habe ich mal bei "do nothing" ergänzt, für das "lastDisconnect" baue ich mir mal eine Routine.

Und beim missionmanager ist der normale i7 Ablauf wohl
charge -> run -> hmPostMsn -> evac -> hmPostMsn -> run -> charge
Das erklärt, warum bei mir nach jedem Lauf disconnectAfter weiter auf 300 sitzt. Ich habe das elsif mal erweitert um
|| $oldphase.$phase eq "runcharge"(noch nicht getestet - gute Nacht ;) )
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 14 März 2021, 12:29:12
Ich habe meine Routine für die i7 Schedules aktualisiert (Maximalanzahl der Zeitpläne, Readings alter Zeitpläne löschen):
https://forum.fhem.de/index.php/topic,114166.msg1137830.html#msg1137830

@pah: Sorry, basiert nicht auf Deiner letzten Testversion, da ich die nicht zum Laufen gebracht habe :(, aber ich wollte einfach wissen obs geht, und evtl. freut sich zwischenzeitlich jemand drüber.

LG,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 19 März 2021, 17:25:07
Hallo,

ich habe immer wieder Perl Warnings im Log aus den RoombaUtils:
PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/99_RoombaUtilsI7.pm line 671
PERL WARNING: Use of uninitialized value in subtraction (-) at ./FHEM/99_RoombaUtilsI7.pm line 676
PERL WARNING: Use of uninitialized value in subtraction (-) at ./FHEM/99_RoombaUtilsI7.pm line 677
Die lines sind aus "meiner" Testversion (deshalb "RoombaUtilsI7", aber selbstverständlich mit kompletter Nennung des honorierten Autors!) und beziehen sich auf die pose subroutine:
if($hash->{helper}{initmap}==1){
    $hash->{helper}{startx} = $px;
    $hash->{helper}{starty} = $py;
    $hash->{helper}{initmap}=0;
  }
  $px -= $hash->{helper}{startx};
  $py -= $hash->{helper}{starty};
Was passiert ist möglicherweise, dass eine Nachricht vom Device kommt mit "pose", aber vorher die sub "initmap" nicht aufgerufen wurde, weil kein "cleanMissionStatus" vorher empfangen wurde (kann z.B. beim fhem restart passieren).

Könnte man das am Anfang der pose abfangen? Z.B. mit so was wie
if (!$hash->{helper}{initmap}) return;
(Evtl. ein brachialer Vorschlag, aber ich denke nur laut...)

Ich hatte auch schon den Fall, dass wohl gar ein pose kommt, und sich die Calc.pm beschwert bzw verabschiedet in line 329:
PERL WARNING: Use of uninitialized value in multiplication (*) at /usr/local/share/perl/5.30.0/Math/Polygon/Calc.pm line 323
PERL WARNING: Use of uninitialized value in addition (+) at /usr/local/share/perl/5.30.0/Math/Polygon/Calc.pm line 324
PERL WARNING: Use of uninitialized value in addition (+) at /usr/local/share/perl/5.30.0/Math/Polygon/Calc.pm line 325
Illegal division by zero at /usr/local/share/perl/5.30.0/Math/Polygon/Calc.pm line 329

Dann wird "cmPhase" wohl nicht mehr gesetzt, und es entsteht eine loop (zumindest habe ich die "division by zero" dann eine halbe Stunde im Minutentakt im Log), weil er die Meldung nicht mehr komplett auswertet und phase nicht neu setzt - vermute ich. Evtl. kann man das auf die selbe Art lösen - ich übe weiter, bin aber für jeden Denkanstoß dankbar.

LG,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 06 April 2021, 17:47:59
Hallo,

kann mir jemand sagen welches die funktionierende Version der 99_RoombaUtils.pm ist. Habe die beiden letzten von PAH probiert.
Oder liegt mein Fehler woanders?

i7

Log
2021.04.06 17:31:01.526 5: PutzfeeClient: sending PINGREQ (192)(0)
2021.04.06 17:31:01.648 5: PutzfeeClient: received PINGRESP
2021.04.06 17:31:19.698 3: MQTT2_DEVICE set Putzfee start
2021.04.06 17:31:19.699 1: ERROR evaluating my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $NAME=   $evalSpecials->{'%NAME'};{roomba::command($NAME,"start",$EVENT)}: Undefined subroutine &roomba::command called at (eval 2708) line 1.

2021.04.06 17:31:19.699 5: PutzfeeClient: sending PUBLISH 0E(0)(9)Undefinedsubroutine &roomba::command called at (eval 2708) line 1.(10)

list Putzfee
Internals:
   CID        XXXXX
   DEF        XXXXX
   DEVICETOPIC XXXXX
   FUUID      6033ce97-f33f-9eb8-adc1-9ca1b8486c2f6f1a
   FVERSION   10_MQTT2_DEVICE.pm:0.238430/2021-02-27
   IODev      PutzfeeClient
   LASTInputDev PutzfeeClient
   MSGCNT     22
   NAME       Putzfee
   NR         588
   PutzfeeClient_MSGCNT 22
   PutzfeeClient_TIME 2021-04-06 17:39:33
   STATE      start
   TYPE       MQTT2_DEVICE
   READINGS:
     2021-04-06 17:31:19   state           start
Attributes:
   IODev      PutzfeeClient
   autocreate 1
   devicetopic XXXXXX
   readingList $DEVICETOPIC:.* {roomba::reading($NAME,$EVENT)}
   room       MQTT2_DEVICE
   setList    start:noArg {roomba::command($NAME,"start",$EVENT)}
stop:noArg {roomba::command($NAME,"stop",$EVENT)}
dock:noArg {roomba::command($NAME,"dock",$EVENT)}
resume:noArg {roomba::command($NAME,"resume",$EVENT)}
pause:noArg {roomba::command($NAME,"pause",$EVENT)}
CarpetBoost:true,false {roomba::setting($NAME,"carpetBoost",$EVENT)}
TwoPass:true,false {roomba::setting($NAME,"twoPass",$EVENT)}
NoAutoPasses:true,false {roomba::setting($NAME,"noAutoPasses",$EVENT)}
NoPP:true,false {roomba::setting($NAME,"noPP",$EVENT)}
VacHigh:true,false {roomba::setting($NAME,"vacHigh",$EVENT)}
BinPause:true,false {roomba::setting($NAME,"binPause",$EVENT)}
OpenOnly:true,false {roomba::setting($NAME,"openOnly",$EVENT)}
ProgHold:true,false {roomba::setting($NAME,"schedHold",$EVENT)}
ProgSun:time {roomba::setsched($NAME,0,$EVENT)}
ProgMon:time {roomba::setsched($NAME,1,$EVENT)}
ProgTue:time {roomba::setsched($NAME,2,$EVENT)}
ProgWed:time {roomba::setsched($NAME,3,$EVENT)}
ProgThu:time {roomba::setsched($NAME,4,$EVENT)}
ProgFri:time {roomba::setsched($NAME,5,$EVENT)}
ProgSat:time {roomba::setsched($NAME,6,$EVENT)}
maplist:noArg {roomba::setting($NAME,"local:cmMapList={listmaps('$NAME')}",$EVENT)}
mapdel {roomba::setting($NAME,"local:cmMapList={delmap('$NAME','$EVENT')}",$EVENT)}

list PutzfeeClient
Internals:
   BUF       
   Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
   ClientsKeepOrder 1
   DEF        X.X.X.X:8883
   DeviceName X.X.X.X:8883
   FD         157
   FUUID      6033ce2e-f33f-9eb9-1550-748e3271959ff7c7
   FVERSION   00_MQTT2_CLIENT.pm:0.238990/2021-03-06
   NAME       PutzfeeClient
   NR         587
   PARTIAL   
   SSL        1
   STATE      opened
   TYPE       MQTT2_CLIENT
   WBCallback
   clientId   XXXXX
   lastMsgTime 1617723755.80805
   nextOpenDelay 5
   MatchList:
     1:MQTT2_DEVICE ^.
     2:MQTT_GENERIC_BRIDGE ^.
   READINGS:
     2021-04-06 17:26:29   state           opened
   sslargs:
     SSL_version SSLv23
Attributes:
   SSL        1
   autocreate no
   clientId   XXXXX
   mqttVersion 3.1.1
   room       MQTT2_DEVICE
   sslargs    SSL_version:SSLv23
   username   XXXXX
   verbose    5

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 07 April 2021, 00:00:04
Hi,

Du müsstest im Forum etwas zurückgehen, oder die aus dem svn nehmen, die letzten Versionen laufen bei mir auch nicht.

Ich habe inzwischen etwas weiter dran gebaut, und versucht nix kaputt zu machen, dafür ein paar zumindest für mich nützliche Funktionen einzubauen (SysUptime, Runtime, einen ChargeState (weil mich "Wird geladen (100%)" irgendwie stört und ich "Geladen (100%)" korrekter finde), die cleanRoom Routinen von delMar integriert, ein paar unknowns abgefangen, den Logtext bei "finalization" korrigiert, ein catchall eingebaut um einfach mal alle verfügbaren Readings zu bekommen  etc...).

Ich packe meine Version mal hier rein - als "RoombaUtilsI7", bitte als Ergänzung auffassen, ich will keinesfalls so tun als wäre das meine Leistung, die Ehre gehört pah! Deshalb auch als "I7" - sollte aber auch bei den anderen Fegern funktionieren. Ich schreibe demnächst mal zusammen was ich ausprobiert habe, ist im code aber alles sauber mit "#hapege ... #/hapege" geklammert. Da sind noch einige Codestellen drin mit denen ich rumspiele, also lacht mich bitte nicht aus ;-)

Zur Verwendung in fhem einfach den Aufruf "roomba" durch "roombaI7" ersetzen, z.B.
start:noArg {roombaI7::command($NAME,"start",$EVENT)}So kann man weiter parallel bzw hauptsächlich pahs Original verwenden und zum Testen oder für einen I7 relativ einfach auf meine Testversion umschalten.

Have fun...

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 07 April 2021, 16:19:11
Also, hier passiert gerade etwas Ungesundes, das wir mit FHEM seit vielen Jahren zu vermeiden versuchen - nämlich die halbparallele Entwicklung von Software.

Da ich mit dem I7 nicht testen kann, bin ich auf Mithilfe angewiesen, prima, Danke an hapege.
Ebenfalls Danke für die Behebung von ein paar kleinen Ungenauigkeiten

Gleichzeitig werden aber in der "RoombaUtilsI7.pm" dann Änderungen vorgenommen, die ganz andere Bereiche betreffen. Neue Readings erfunden, die wohl überlegte Syntax verändert etc.

Das bedeutet: Wenn ich nicht komplett die Kontrolle verlieren will, muss ich mit hohem Aufwand jeweils überlegen, was das bedeutet oder nicht bedeutet.

Das sollten wir _bitte_ so nicht weiter machen

Ich habe jetzt mal eine konsolidierte Version erstellt, die viele (nicht alle) der Änderungen von hapege übernommen hat und für beide Systeme laufen sollte. Noch nicht ganz - beispielsweise wird - mutmaßlich wegen der Umbauten - im Moment bei mir kein FinalizeMap ausgelöst, muss erst herausfinden, woran das liegt.

Bitte mal wegen der I7-Routinen testen, das ist jetzt sozuagen wieder auf Alpha-Status zurückgefallen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 07 April 2021, 16:53:20
Hallo,

glaube bei mir liegt das Problem noch irgendwo anders. Die Routinen aus den RoombaUtils werden nicht gefunden.

2021.04.07 16:42:54.680 3: MQTT2_DEVICE set Putzfee start
2021.04.07 16:42:54.681 1: ERROR evaluating my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $NAME=   $evalSpecials->{'%NAME'};{roomba::command($NAME,"start",$EVENT)}: Undefined subroutine &roomba::command called at (eval 2895) line 1.

Restart habe ich gemacht
/opt/fhem/FHEM# ls -ltr 99_RoombaUtils.pm 
-rw-r--r-- 1 fhem dialout 53508 Apr  7 16:36 99_RoombaUtils.pm
fehlt mir noch irgendeine Perl dependency, oder habe ich sonst noch etwas vergessen?

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 07 April 2021, 18:11:51
Was sagt denn das Log bei einem

reload 99_RoombaUtils

??

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Eisix am 07 April 2021, 21:20:24
Jep, wie befürchtet

reload 99_RoombaUtils
Can't locate Math/Polygon/Calc.pm in @INC (you may need to install the Math::Polygon::Calc module) (@INC contains: ./lib ./FHEM . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.30.0 /usr/local/share/perl/5.30.0 /usr/lib/x86_64-linux-gnu/perl5/5.30 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.30 /usr/share/perl/5.30 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base ./FHEM/lib) at ./FHEM/99_RoombaUtils.pm line 50.
BEGIN failed--compilation aborted at ./FHEM/99_RoombaUtils.pm line 50.
Die zwei haben bei mir gefehlt

cpanm Math::Polygon::Calc Math::ConvexHull

Funktioniert jetzt, danke!
Jetzt muss ich aber mal nachschauen ob meine Frau den Schock vom meinem ersten Befehl (Dock) überstanden hat. Das Absaugen ist ganz schön laut.

Gruß
Eisix
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 08 April 2021, 04:30:24
Steht "sVacHigh" auf false? Reduziert den Lärm deutlich.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 08 April 2021, 09:39:32
zu vermeiden versuchen - nämlich die halbparallele Entwicklung von Software.

Wohl schon an anderen Stellen diskutiert, deshalb nur kurz der Vollständigkeit halber:
die Git basierten Platformen machen das sehr einfach.

der Knackpunkt: das Mergen in Git ist intelligenter, da es nicht zwei Code-Stände miteinander vergleicht, sondern den Zeitpunkt des Branchings (also wann haben sich die Code-Zweige getrennt) ebenfalls mit einbezogen wird. Sehr oft ist das Zusammenführen dann nur noch eine Frage von ein- zwei Mausklicks, anstatt manuellem Merge im lokalen Editor.

Die Komplexität kann anfangs erschlagen, im Context der Roomba Entwicklung hier würde es aber nur zwei oder drei Dinge geben, die man sich als Entwickler (und Eigentümer) aneignen muss.

Klugscheissen will ich hier aber nicht, ich wollte es nur ins Bewusstsein rufen (Fragen dazu gern per PM, diesen Thread wollen wir aber sauber halten)

Tatsächlich werde ich mir heute noch die Zeit nehmen, die i7 Features aus der letzten Version hier zu checken ;-)

Danke an Alle
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 08 April 2021, 15:52:49
In studentischen Projekten - von denen ich derzeit etwa 10 betreue - nehme ich natürlich Github. Aber da muss ich den Code auch nicht komplett verstehen, weil ich nicht Maintainer bin.

DAS macht den wesentlichen Unterschied aus - nicht das Mergen.

Zum Mergen habe ich ein sehr komfortables Tool, das zusammen mit dem oXygen XML-Editor kommt (den ich auch für Perl nutze).

Mir fehlt aber noch das Tool, das die Gedankengänge anderer Programmersteller an meine Gedankengänge anpasst. Oder umgekehrt.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 08 April 2021, 18:15:27
Bitte mal wegen der I7-Routinen testen, das ist jetzt sozuagen wieder auf Alpha-Status zurückgefallen.
Einzelraumreinigung funktioniert nach wie vor

Danke!

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 09 April 2021, 08:11:14
Hallo pah,

erst mal sorry, ich wollte weder etwas Ungesundes tun, noch gegen Regeln verstoßen, noch Dir Mehrarbeit bescheren! Die offensichtlich "ungesunde" Version habe ich als Spiel- oder Testversion gesehen, eher aus der Not geboren meinen I7 einsetzen und verstehen zu wollen. Ich habe mich bemüht mich an Deine Syntax zu halten, was offensichtlich nicht gelungen ist. Ja, ich habe ein paar mir subjektiv nützlich scheinende Dinge eingebaut und ausprobiert, sorry dass ich das nicht genauer dokumentiert habe. Ich kann gerne noch was dazu schreiben, mir ist schon klar dass das nicht perfekt ist.
Wie ist denn das richtige Vorgehen? Jede Änderung bzw Vorschlag hier posten und diskutieren? Klar, gerne! Ich will keinen Ärger verursachen, nur lernen und soweit möglich ein wenig helfen...(und passe mich gerne an Deine Gedankengänge an, das sollte das passende Tool sein  ;) )

Danke fürs Aufräumen! (Ich komme erst am Wochenende dazu etwas zu testen)

LG,

hapege

PS: Das nicht-Auslösen von finalizemap habe ich auch, wenn ich einen Reinigungsvorgang in einem anderen Stockwerk auslöse und der Roomba das Dock dann halt nicht findet. Das ist der Grund für das gebastelte "finalizemapnow", damit habe ich das dann nachträglich getriggert. Geht sicher eleganter.)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 09 April 2021, 12:58:48
No offense taken, und um mich zu ärgern, bedarf es nach > 40 Jahren in der Lehre und in der Politik deutlich mehr Aufwand...

Allerdings wäre es sinnvoller, die Dinge zu trennen:
- Notwendige und sinnvolle Ergänzungen zum Code
- Experimentelle und/oder individuelle Anpassungen.

Zum Nutzen des "finalizemapnow" habe ich mir z.B. einen Wolf gesucht.

LG

pah



Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 09 April 2021, 21:59:25
Hallo pah,

klingt sinnvoll, und sorry für den Wolf...

Darf ich eine kurze Verständnisfrage stellen?
 
Die sub "schedule2" hat 3 Übergabeparameter (line 753), die auch ausgewertet werden:

sub schedule2($$$){
...
my ($name,$evtptr,$retptr) = @_;
...

Aufgerufen wird sie aber nur mit 2 Parametern (Zeile 484):
schedule2(\%cleans,\%ret);

Ich dachte, der erste Param wäre nötig, um $name zu übergeben, aber offenbar
- stört die Diskrepanz in der Anzahl der Parameter nicht
- brauchts die Übergabe von $name nicht, z.B. die "ReadingsVal" funktionieren dennoch (wo wird dann $name überhaupt gefüllt? Ich bin verwirrt...)

Ich verstehe nicht, warum das funktioniert...

Danke schon mal,

hapege
 



Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 10 April 2021, 09:30:42
OK,

war zu spät gestern, mein Fehler - es funktioniert ja auch nicht :-(

my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Not a HASH reference at ./FHEM/99_RoombaUtils.pm line 483.

Vermutlich weil cleanSchedule2 so aussieht:
"cleanSchedule2": [{"enabled": false, "type": 0, "start": {"day": [1], "hour": 9, "min": 0}, "cmd": {"command": "start", "ordered": 1, "pmap_id": "zBzSo0ghQ-SYfM7yqTxZUg", "regions": [{"region_id": "12", "type": "rid"}], "user_pmapv_id": "210327T093901"}}, {"enabled": false, "type": 0, "start": {"day": [2, 4, 6], "hour": 11, "min": 0}, "cmd": {"command": "start", "ordered": 1, "pmap_id": "zBzSo0ghQ-SYfM7yqTxZUg", "regions": [{"region_id": "12", "type": "rid"}, {"region_id": "6", "type": "rid"}, {"region_id": "8", "type": "rid"}, {"region_id": "10", "type": "rid"}], "user_pmapv_id": "210327T093901"}}]

Deshalb habe ich das so versucht:
...
#-- for i7
    }elsif( defined($1) && $1 eq "2" ){
      my %cleans = %{$staterep};
      schedule2($name,\%cleans,\%ret);
    }

Und in der sub schedule2 ($$$) dann halt überall statt "$evtptr->..." -> "$evtptr->{'cleanSchedule2'}->...", z.B.
$enabled[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'enabled'};

Das ist halt nicht ganz konform mit Deiner Systematik.

LG,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 10 April 2021, 15:15:27
Jetzt verstehe ich nicht so ganz - funktioniert das mit der Anzeige von Schedule in der konsolidierten Version nun, oder nicht?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 10 April 2021, 16:07:19
Hi,

nein, funktioniert nicht, Fehler im Log:
my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Not a HASH reference at ./FHEM/99_RoombaUtils.pm line 483.

Mit der Anpassung von oben
...
#-- for i7
    }elsif( defined($1) && $1 eq "2" ){
      my %cleans = %{$staterep};
      schedule2($name,\%cleans,\%ret);
    }

und in schedule2($$$)
$enabled[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'enabled'};
# dito die anderen Stellen mit $evtpr->
funktioniert es.

Ich habe gerade eine CleanRoom gestartet, klappt, inkl. finalizemap.

LG,

hapege
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 10 April 2021, 20:09:01
Die erste Anpassung hatte ich in meiner letzten Fassung schon drin:
Zitat
if( $evt =~ /cleanSchedule(2?)/){
    #main::Log 1,"[RoombaUtils] schedule event ".$evt;
    #-- older devices
    if( !defined($1) || $1 ne "2" ){
      my %cleans = %{$staterep->{'cleanSchedule'}};
      schedule($name,\%cleans,\%ret);
    #-- for i7
    }elsif( defined($1) && $1 eq "2" ){
      my %cleans = %{$staterep->{'cleanSchedule2'}};
      schedule2($name,\%cleans,\%ret);
    }
  }
Allerding wundert mich, dass es mit
Zitat
   $starthour[$i] = $evtptr->[$i]->{'start'}->{'hour'};
nicht gehen soll.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 10 April 2021, 22:21:00
Hi pah,

also in der letzten Version die ich hier finde (vom 7.4.: https://forum.fhem.de/index.php/topic,114166.msg1146569.html#msg1146569) ist die Anpassung nicht drin, da steht noch
#-- for i7
    }elsif( defined($1) && $1 eq "2" ){
      my %cleans = %{$staterep->{'cleanSchedule2'}};
      schedule2(\%cleans,\%ret);
    }

i.e. ohne "$name".

Und ich habs gerade nochmal probiert, mit
my %cleans = %{$staterep->{'cleanSchedule2'}};
kommt es zu dem beschriebenen Fehler, mit
my %cleans = %{$staterep};
klappt es - dann muss in der sub aber das "cleanSchedule" eingebaut werden:
$enabled[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'enabled'};

Ich kann nur laienhaft spekulieren, in der message hinter "cleanSchedule2" kommt so was wie ein array "[...]", das scheint dann mit der hash reference nicht zu korrspondieren.

Ich kann gerne noch was anderes ausprobieren...

LG,

hapege
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 11 April 2021, 04:39:00
Nene, nix laienhaft, das ist eben keine Hash reference, sondern eine Array reference - habe ich offenbar nicht richtig gelesen.

Das werde ich korrigieren.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 11 April 2021, 10:54:55
Guten Morgen pah,

(wow, sehr-früh-Aufsteher ;-) )

Um sauber zu sein sollte wahrscheinlich auch die "setsched2" aus der Produktivversion herausgenommen werden. Hier habe ich versucht, Zeitpläne der app zu deaktivieren - zieht aber offenbar nicht. Aktuell weiß ich nicht, wie man beim I7 die Zeitpläne setzen oder verändern kann, außer mit der app. Hast Du eine Idee?

Ebenso fairerweise ist es zu erwähnen, dass die "cleanRoom", "createFloor" und "createRoom" von delMar sind, die habe ich nur reinkopiert, alle drei funktionieren.

Was ich noch nützlich finde, auch wenn die Aufnahme von doppeltem code irgendwie schlimm ist, ist die "rewriteSVG". Mich hat gestört, dass "delmap" zwar die map aus dem xml löscht, aber die svg erst aktualisiert wird beim nächsten run - wenn also die svg neu geschrieben wird. Somit wirkt delmap nicht auf die aktuelle Karte. Das geht sicher eleganter als Codeanteile zu kopieren, ich habs aber nicht anders hinbekommen...

Schönen Sonntag,

hapege
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 11 April 2021, 14:13:39
Hier ist erst einmal eine Zwischenversion, in welcher die Anzeige von cleanSchedule2 korrigiert ist.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 11 April 2021, 19:48:30
Hi,

Danke, und jein - die schedules werden nun ausgewertet, bbrun (Runtime), bbsys (SysUptime), ChargeState aber nicht mehr.
Reinigungszyklus habe ich nicht probiert, die Katzen schlafen grad so schön ;-)

Danke und schönen Abend,

hapege
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 11 April 2021, 21:14:55
Runtime und Sysuptime habe ich rausgeworfen - das sind m.E. keine sinnvollen Daten, weil cmTime schon die Laufzeit für die gegenwärtige Mission enthält.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 12 April 2021, 07:37:05
Hi pah,

na ja, das sind schon ganz andere, zusätzliche Daten:
cmTime = Laufzeit der letzten Mission
Runtime = Gesamtlaufzeit aller bisherigen Missionen
SysUptime = genau das ;-) (wie lange lebt der Robot schon bei mir...)

Ich halte das - klar, ebenfalls subjektive "m.E." - für interessant, aber es ist Dein Modul. Kann sich ja jeder selbst reinkopieren.

LG,

hapege
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 26 April 2021, 09:53:40
Meine Arbeit am Roomba wird seit 2 Wochen dadurch blockiert, dass einer meiner beiden Roboter die Zusammenarbeit jetzt komplett verweigert. Mit der App kann ich ihn zwar noch steuern - aber auf jede Kontaktaufnahme seitens FHEM bekomme ich nur

Zitat
021.04.26 09:42:58 4: IP: 192.168.0.xx -> 192.168.0.xx
2021.04.26 09:43:01 4: HttpUtils: https://192.168.0.48:8883/: Can't connect(2) to https://192.168.0.xx:8883:  SSL wants a read first

Ich habe wirklich jetzt schon jeden Trick probiert - sogar die Kiste komplett zurückgesetzt. Bisher hat noch nichts gewirkt.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MichaelT am 26 April 2021, 19:54:42
Meine Arbeit am Roomba wird seit 2 Wochen dadurch blockiert, dass einer meiner beiden Roboter die Zusammenarbeit jetzt komplett verweigert. Mit der App kann ich ihn zwar noch steuern - aber auf jede Kontaktaufnahme seitens FHEM bekomme ich nur

Ich habe wirklich jetzt schon jeden Trick probiert - sogar die Kiste komplett zurückgesetzt. Bisher hat noch nichts gewirkt.

LG

pah

Hattest Du den TIMEOUT von knorxi mal probiert (wahrscheinlich ja  8)). Der hatte bei mir funktioniert. Hatte gleiches Fehlerbild.
https://forum.fhem.de/index.php/topic,114166.msg1126994.html#msg1126994 (https://forum.fhem.de/index.php/topic,114166.msg1126994.html#msg1126994)
Gruß Michael.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 27 April 2021, 08:55:15
Ich versuche gerade, das irgendwie einzugrenzen, bin aber bis inklusive Donnerstag komplett unter Wasser.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 27 April 2021, 10:29:44
Hattest Du den TIMEOUT von knorxi mal probiert

Ich hab das Problem nicht. Zumindest nicht, dass ich wüsste (obwohl die Reaktion auf ein Start-Kommando gelegentlich länger auf sich warten lässt...)

Trotzdem ein Gedanke:
Ich hab im global sslVersion Attribut TLSv12 drin stehen.
Entsprechend dem Wireshark Screenshot von knorxi hat er auch TLSv12.
Vielleicht ist diese Version auch noch nachgiebiger im Bezug auf dieses Problem.

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 27 April 2021, 18:17:50
Es ist ja nicht einfach, mich zu verblüffen - aber mit diesem TIMEOUT klappt es tatsächlich wieder. Danke für den Hinweis, denn das hatte ich eben noch nicht probiert.

LG

pah

Edit: Neueste Nachricht von Rudi König in dieser Sache:

Zitat
Ich habe dieses Attribut jetzt unter dem Namen connectTimeout in MQTT2_CLIENT eingebaut, allerdings habe ich Schwierigkeiten vorzustellen, warum ein Timeout als "SSL wants a read first" gemeldet wird.

Das heißt: Nach dem nächsten Update muss man ggf. das Attribut TIMEOUT durch connectTimeout ersetzen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 02 Mai 2021, 12:01:40
Hi pah,

ich habe einen reprodzierbare Fehlermeldung aus den roombautils bei jedem restart:
2021.05.02 11:25:13 1: PERL WARNING: Use of uninitialized value in multiplication (*) at ./FHEM/99_RoombaUtils.pm line 814.
2021.05.02 11:25:13 3: eval: my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $EVTPART10=
.....

Ich glaube das auch zu verstehen - in line 814 wird benutzt
$evtptr->{'sqft'}

Und den Wert gibts in der Message vom I7 offenbar nicht:
"cleanMissionStatus": {"cycle": "none", "phase": "charge", "expireM": 0, "rechrgM": 0, "error": 0, "notReady": 0, "mssnM": 0, "expireTm": 0, "rechrgTm": 0, "mssnStrtTm": 1619859625, "initiator": "schedule", "nMssn": 66}

Wenn ich das richtig sehe, wir die sub "mission" nur aufgerufen, wenn ein "cleanMissionStatus" in der Meldung steckt, und da fehlt halt "sqft". Mein I7 hat den Parameter außerhalb der "cleanMissionStatus" in "bbrun":
"bbrun": {"nOvertemps": 0, "nEvacs": 50, "nCBump": 0, "nWStll": 0, "nMBStll": 1203, "nPanics": 153, "nPicks": 271, "nOpticalDD": 2, "nPiezoDD": 0, "nScrubs": 2, "nStuck": 18, [b]"sqft": 131,[/b] "min": 37, "hr": 34, "nCliffsF": 6705, "nCliffsR": 0}

Was ich nicht ganz verstehe: Ich würde den Fehler dann jedes Mal bei einer Message erwarten (sqft fehlt immer, wenn nicht gerade ein Saugvorgang läuft/gelaufen ist), und nicht nur beim Restart. Passiert aber nicht bei jeder Message, also irgendwo hat meine vorsichtige Analyse eine Haken, oder ich übersehe etwas...

Ich habe das in der sub "mission" mal so probiert zu fixen:
  # hapege
  if(defined($evtptr->{'sqft'})) {
  my $sqm   = int($evtptr->{'sqft'}*10/10.7639)/10;
  main::Log 1,"[RoombaUtils] sqft is defined with value $sqm ";
  $retptr->{"cmArea"}      = $sqm." m²";
  }
  # /hapege

und in der sub "bbrun" (die "defined" Abfrage habe ich drin gelassen, falls "sqft" bei anderen Roombas nicht enthalten ist):
sub bbrun {
  #-- getting events of the type
  # {"state":{"reported":{"bbrun"}}}
  my ($evtptr,$retptr) = @_;
  my $runh = $evtptr->{'hr'};
  my $runm = $evtptr->{'min'};
  my $evacs = $evtptr->{'nEvacs'};
  $retptr->{"Evacuations"} = $evacs;
  $retptr->{"Runtime"} = $runh.":".$runm;
  $retptr->{"Runtime2"} = int($runh / 24)."d ".($runh % 24)."h ".$runm."m";
 
  if(defined($evtptr->{'sqft'})) {
    my $sqm   = int($evtptr->{'sqft'}*10/10.7639)/10;
    main::Log 1,"[RoombaUtils] sqft is defined with value $sqm ";
    $retptr->{"bbrunArea"} = $sqm." m²";
  }

  return
}

Damit kriege ich (im testweise eingefügten neuen reading "bbrunArea") den Wert für die Fläche geliefert - ich wollte sehen obs klappt.

Damit ist der Fehler beim restart / in cleanMissionStatus weg.

Schönen Sonntag,

hapege

UPDATE:
Mein I7 hat am 21.4. ein FW update auf 3.14.12 eingespielt. Seit diesem Datum liefert er bei im Rahmen von "cleanMissionStatus" für mssnM und sqft immer "0". Damit ist cmArea und cmTime nun immer "0".
"sqft" bei bbrun ist der gesamte bisher gereinigte Bereich (also Summe aller Mission), allerdings in 10e-2 square feet. Muss also mit 100 multipliziert werden, um die "echten" sqft zu bekommen, bzw für Quadratmeter:
int($evtptr->{'sqft'}*100/10.7639);Macht die Readings für "RunTime" und "SysUptime" wieder ein bisschen interessanter  ;)

@pah: Du könntest in Deinen Berechnung eine "10" herauskürzen, "*(10/10.7639)/10" ist recht identisch zu "/10.7639" ;), oder übersehe ich was?

UPDATE2:
Ich bastle gerade daran, aus der "mssnStrtTm" die Dauer der letzten CleanMission zu berechnen (also das verlorengegangene "cmTime").
Dazu ergänze ich in der sub "mission":

# hapege: get time
my $MissionStartTime = $evtptr->{'mssnStrtTm'};
$hash->{helper}{MissionStartTimeUnix} = $MissionStartTime;
my $cmStartTime = calctime($MissionStartTime);
$retptr->{"cmStartTime"} = $cmStartTime;
# /hapege

Und ergänze in der sub "missionmanager" hiter dem Aufruf der "finalizemap":

# hapege - calculate time
my $missiontime = calctimediff($hash->{helper}{MissionStartTimeUnix});
main::fhem("setreading $name cmTime2 $missiontime");
# /hapege - calculate time

Und definiere zwei neue helper subs:

sub calctime ($){
  my ($epoch) = @_;
  my $LocalTZ = DateTime::TimeZone->new( name => 'local' );
  my $dt = DateTime->from_epoch( epoch => $epoch, time_zone => $LocalTZ );
  my $hour   = $dt->hour; # 0-23
  my $minute = $dt->minute; # 0-59 - also 'min'
  my $second = $dt->second; # 0-61 (leap seconds!) - also 'sec'
  return $hour.':'.$minute;
}

sub calctimediff ($){
  my ($epoch) = @_;
  my $now = time;
  my $timediff = $now - $epoch;
  my $dt = DateTime->from_epoch( epoch => $timediff);
  my $hour   = $dt->hour; # 0-23
  my $minute = $dt->minute; # 0-59 - also 'min'
  my $second = $dt->second; # 0-61 (leap seconds!) - also 'sec'
  return $hour.':'.$minute;
}

Damit das läuft braucht's noch unter "package" ein
use DateTime;
"cmTime2" kann man noch passender benennen, ich wollte aber nicht zu sehr von pahs Nomenklatur abweichen.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 18 Mai 2021, 15:30:33
Hallo zusammen,

kurze Frage: Ist es richtig, dass immer, wenn der Roomba einen Job startet und beendet, 2 geänderte Parameter vorhanden sind?

Gruß
Marco
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 18 Mai 2021, 15:43:18
Zitat
@pah: Du könntest in Deinen Berechnung eine "10" herauskürzen, "*(10/10.7639)/10" ist recht identisch zu "/10.7639" ;), oder übersehe ich was?
Ja, die Rundung. Die anderen Sachen baue ich bei Gelegenheit gern ein. Allerdings ist bei mir derzeit "Land unter" wegen eines neuen Forschungsprojektes.

Zitat
kurze Frage: Ist es richtig, dass immer, wenn der Roomba einen Job startet und beendet, 2 geänderte Parameter vorhanden sind?
Was ist damit gemeint?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 18 Mai 2021, 17:13:34
Beim Start des Roomba wird der 1. Wert des Parameters geändert, beim Stop der 2. Wert...

Ist das richtig?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 19 Mai 2021, 17:00:41
Das sind keine "Parameter". Sondern Attribute.

Und ja: Das ist in der verwendeten Version so gewollt. Habe ich zwar inzwischen wieder herausgeworfen, weil es sich als nicht praktikabel herausgestellt hat.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: marboj am 20 Mai 2021, 06:51:15
Ok. Danke für die Antwort. Gibt es denn eine aktuellere Version?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 24 Mai 2021, 11:46:58
Ich habe jetzt unterschiedliche Firmware-Versionen in beiden Robotern :-(

Die ältere Firmware hat noch, so wie es sein soll, die Werte sqft und mssnM im Hash cleanMissionStatus - mit den jeweils aktuellen Daten für die gegenwärtige Mission.

Die neuere Firmware hat die Werte auch im Hash - aber die Daten stehen fest auf 0.

Das ist ganz klar ein Fehler der Firmware, denn in bbrun gehören sie nun einmal nicht, das ist eben für den Gesamtverlauf bestimmt.

Es würde mich interessieren, ob die beim i7 auch noch vorhanden, aber fest auf 0 sind.

LG

pah


Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 24 Mai 2021, 19:59:41
Hi,

beim I7 ist "mssM" im hash "cleanMissionStatus" vorhanden, aber immer "0".
sqft fehlt im hash "cleanMissionStatus", weshalb es in der sub "mission" zu einer Fehlermeldung kommt, die ich so abfange:

  if(defined($evtptr->{'sqft'})) {
  my $sqm   = int($evtptr->{'sqft'}*10/10.7639)/10);
  main::Log 1,"[RoombaUtils] sqft is defined with value $sqm ";
  $retptr->{"cmArea"}      = $sqm." m²";
  }

Ich berechne gerade

Klappt zumindest.

Beste Grüße,

Hermann

PS: Ich arbeite gerade an der Möglichkeit, die Schedules des I7 zu setzen bzw si zu de-/aktivieren - hakelt noch ein wenig ;-)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Stefan_Hvr am 26 Mai 2021, 17:52:26
Ich nun wieder mit der Raum-Sache:
Mit dieser Änderung sind alle Variablen aus 99_RoombaUtils verschwunden und somit sollten diese Methoden eigentlich stabil sein.
Ständiger Wartungsaufwand und FHEM Restarts bei Änderungen sind also nicht mehr nötig.
schöne Grüße Martin
Hallo Martin,
danke, das klappt. Zwei Fragen:
1.) Sind Umlaute tatsächlich ein Problem in 2021 oder nennst Du die Küche aus anderen Gründen Kueche? erledigt: room_label und Name in der App sind unabhängig voneinander. Kann in der App ruhig Küche heissen
edit 2.) Flur hinten habe ich versucht mit Flur%20hinten zu erstellen. Leider erfolglos. Muss ich den ind er App umbenennen? erledigt: room_label und Name in der App sind unabhängig voneinander.

Ein Hinweis: nachdem ich Küche in Kueche in der App umbenannt habe hat sich lastCommand_user_pmapv_id auf das aktuelle Datum/Zeit geändert, womit dann das starten der Raumreinigung aus FHEM nicht mehr funktioniert, bis es in den Attributen angepasst wird.
könnte man die aktuelle Version der Karte nicht abfragen und übernehmen?
Grüße Stefan
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 29 Mai 2021, 09:08:20
Hi Stefan ;-)

Du könntest Dir ein notify anlegen, welches das reading "Schedule1UserPMapvID" bei Änderung ins entsprechende Attribut schreibt. Generisch ist schwierig, weil Du das Attribut ja selbst erstellst und benennst. Und wenn Du mehrere Stockwerke = mehrere Maps hast, dann gibt es mehrere Attribute, und es ist nicht klar welche UserPMapvID in welches Attribut geschrieben werden muss (die Reihenfolge sprich Nummerierung der Schedules in "cleanSchedule2" ändert die app leider immer wieder mal).

Beste Grüße,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 29 Mai 2021, 09:17:35
Hallo,

Thema "app und fehm können nciht gleichzeitig auf den Roomba zugreifen": Ich war bisher der Meinung, und so hat sich das auch bei mir verhalten, dass fhem sich nicht mit dem Roomba verbinden kann solange die App aktiv ist. Zumindest kam bei mir immer ein Connection refused der httpUtils. Nach einer kleinen Diskussion mit Stefan_Hvr (bei dem ein paralleler Zugriff klappt) habe ich folgendes gemacht:
und Voila - App und fhem verbinden sich parallel mit dem Roomba, ein Start in fhem wird sofort in der App auch angezeigt, kein Connection refused mehr etc.
Evtl. war das vorher nur ein Problem bei mir, aber ich dachte das könnte auch für andere von Interesse sein.

Beste Grüße,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 29 Mai 2021, 09:30:41
Und nochmal hallo,

ich habe eine Routine gebastelt, die die Schedules im I7 setzen kann (man möge dem Laien die eine oder andere Unelegantheit im Code verzeihen ;-) ):
sub setschedI7 ($$$){
  #my $cmd = 'delta {"state":{"cleanSchedule2":
  #  [{"enabled": true, "type": 0,
  #  "start": {"day": [2, 4, 6], "hour": 11, "min": 0},
  #  "cmd": {"command": "start", "ordered": 1, "pmap_id": "z....g",
  #  "regions": [{"region_id": "10", "type": "rid"},
  #  {"region_id": "6", "type": "rid"},
  #  {"region_id": "5", "type": "rid"},
  #  {"region_id": "8", "type": "rid"}],
  #  "user_pmapv_id": "2....7"}}]}}
  #
  my ($name,$which,$data) = @_;
  my @time;
  my @hour;
  my @min;
  my @days;
  my @daysnum;
  my @pMapId;
  my @userPmapvId;
  my $cmdpre = 'delta {"state": {"cleanSchedule2": [';
  my $cmdpost = ']}}';
  my @cmdsched="";
  my @cmdregs="";
  my @enabled = "";
  my @setenable = split(' ',$data);
  my $numofsched =  main::ReadingsVal($name,"NumOfSchedules","0");
  my @numofreg;
  my $cmd = $cmdpre;
  for (my $i=1; $i<=$numofsched; $i++) {
    if ($i==$which or $which=="all") {
    $enabled[$i] = $setenable[1];
    #main::Log 1,"[RoombaUtils] Schedule $i is $enabled[$i] with which $which";
    }
    else {
    $enabled[$i] = yesnotobool(main::ReadingsVal($name,"Schedule".$i."Enabled",undef));
    #main::Log 1,"[RoombaUtils] Schedule $i is $enabled[$i] with which $which";
    }
    @time = split(":",main::ReadingsVal($name,"Schedule".$i."Time",undef));
    $hour[$i] = $time[0];
    $min[$i] = $time[1];
    # strip leading zero, otherwise Roomba won't accept
    $min[$i] =~ s/^0//g;
    $days[$i] = main::ReadingsVal($name,"Schedule".$i."WeekDays",undef);
    $days[$i] =~ s/So/0/g;
    $days[$i] =~ s/Mo/1/g;
    $days[$i] =~ s/Di/2/g;
    $days[$i] =~ s/Mi/3/g;
    $days[$i] =~ s/Do/4/g;
    $days[$i] =~ s/Fr/5/g;
    $days[$i] =~ s/Sa/6/g;
    $pMapId[$i] = main::ReadingsVal($name,"Schedule".$i."PMapID",undef);
    $userPmapvId[$i] = main::ReadingsVal($name,"Schedule".$i."UserPMapvID",undef);
    #main::Log 1,"[RoombaUtils] Schedule $i, hour: $hour[$i], min: $min[$i], days: $days[$i], pMapID: $pMapId[$i], UserpMapvID: $userPmapvId[$i]";
    $numofreg[$i] = main::ReadingsVal($name,"Schedule".$i."NumOfRegions",undef);
    $cmdregs[$i]="";
    for ( my $j=1; $j<=$numofreg[$i]; $j++) {
      $cmdregs[$i] = $cmdregs[$i].'{"region_id": "'.main::ReadingsVal($name,"Schedule".$i."Region".$j,undef).'", "type": "rid"}';
      if ( $j < $numofreg[$i] ) {$cmdregs[$i] = $cmdregs[$i].', '}
    }
    $cmdsched[$i] = "";
    $cmdsched[$i] = '{"enabled": '.$enabled[$i].', "type": 0, "start": {"day": ['.$days[$i].'], "hour": '.$hour[$i].', "min": '.$min[$i].'}, "cmd": {"command": "start", "ordered": 1, "pmap_id": "'.$pMapId[$i].'", "regions": ['.$cmdregs[$i].'], "user_pmapv_id": "'.$userPmapvId[$i].'"}}';
    $cmd = $cmd.$cmdsched[$i];
    if ( $i < $numofsched ) {$cmd = $cmd.', '}
   
  }
 
  $cmd = $cmd.$cmdpost;
  main::Log 1,"[RoombaUtils] Command: $cmd";
  #return;
  return $cmd; 
}



(Zur Kontrolle wird das delta command via "main::Log 1,"[RoombaUtils] Command: $cmd";" ins Log geschrieben).

Dazu musste ich meine sub schedule2 erweitern, um die Regions auslesen zu können:
sub schedule2($$$){
  #-- getting events of the type
  # {"state":{"reported":{"cleanSchedule2": [{"enabled": true, "type": 0,
  #  "start": {"day": [2, 4, 6], "hour": 11, "min": 0},
  #  "cmd": {"command": "start", "ordered": 1, "pmap_id": "z...g",
  #  "regions": [{"region_id": "10", "type": "rid"}, {"region_id": "6", "type": "rid"},
  #  {"region_id": "5", "type": "rid"}, {"region_id": "8", "type": "rid"}],
  #  "user_pmapv_id": "2...7"}}]}}}
  #my ($dec) = @_;
  my ($name,$evtptr,$retptr) = @_;
  my @weekdays = ("So","Mo","Di","Mi","Do","Fr","Sa");
  my @enabled;
  my @starthour;
  my @startmin;
  my @startday;
  my @userpmapvid;
  my @pmapid;
  my @region;
  my $nsched;
  my $nreg;
  my %answer = ();
  my $oldnreg;
  my $oldnsched = main::ReadingsVal($name,"NumOfSchedules","");
  for (my $i = 0; $i<14; $i++){
    # j is needed since @startday does somehow not work with $i...
    my $j = $i;
    $nsched = $i+1;
   
    $enabled[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'enabled'};

    # if schedules are no longer present in app or roomba, delete them in fhem, too
    if(!defined($enabled[$i])) {
      $retptr->{"NumOfSchedules"} = $i;
    for (my $k = $i; $k < $oldnsched; $k++) {
    main::Log 1,"[RoombaUtils] deleting old schedule ID $k, oldnsched No was $oldnsched";
    my $hash = $main::defs{$name};
    my $todel = $k+1;
    main::readingsDelete($hash, "Schedule".$todel."Enabled");
    main::readingsDelete($hash, "Schedule".$todel."Time");
    main::readingsDelete($hash, "Schedule".$todel."UserPMapvID");
    main::readingsDelete($hash, "Schedule".$todel."PMapID");
    main::readingsDelete($hash, "Schedule".$todel."WeekDays");
      }
      last;
    }

    $retptr->{"Schedule".$nsched."Enabled"} = booltoyesno($enabled[$i]) if(defined($enabled[$i]));

    $starthour[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'start'}->{'hour'};
    $startmin[$i] = sprintf("%02d", $evtptr->{'cleanSchedule2'}->[$i]->{'start'}->{'min'});
    $retptr->{"Schedule".$nsched."Time"} = $starthour[$i].":".$startmin[$i] if(defined($starthour[$i]));

    $userpmapvid[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'cmd'}->{'user_pmapv_id'};
    $retptr->{"Schedule".$nsched."UserPMapvID"} = $userpmapvid[$i] if(defined($userpmapvid[$i]));

    $pmapid[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'cmd'}->{'pmap_id'};
    $retptr->{"Schedule".$nsched."PMapID"} = $pmapid[$i] if(defined($pmapid[$i]));
   
    @startday = @{$evtptr->{'cleanSchedule2'}->[$j]->{'start'}->{'day'}};
    for (@startday) {s/0/So/g;s/1/Mo/g;s/2/Di/g;s/3/Mi/g;s/4/Do/g;s/5/Fr/g;s/6/Sa/g;}
    $retptr->{"Schedule".$nsched."WeekDays"} = join(", ",@startday);

$oldnreg = main::ReadingsVal($name,"Schedule".$nsched."NumOfRegions","1");
for (my $m = 0; $m < 10; $m++) {
          $nreg = $m + 1;
  $region[$i][$m] = $evtptr->{'cleanSchedule2'}->[$i]->{'cmd'}->{'regions'}->[$m]->{'region_id'};
  $retptr->{"Schedule".$nsched."Region".$nreg} = $region[$i][$m] if(defined($region[$i][$m]));

      if(!defined($region[$i][$m])) {
        $retptr->{"Schedule".$nsched."NumOfRegions"} = $m;
        for (my $k = $m; $k < $oldnreg; $k++) {
          main::Log 1,"[RoombaUtils] deleting old region ID $k, oldnreg No was $oldnreg";
          my $hash = $main::defs{$name};
          my $todel = $k+1;
          main::readingsDelete($hash, "Schedule".$nsched."Region".$todel);
        }
      last;
      }
}
  }
  return
}

In der sub "readings" sieht der Aufruf so aus:
  if( $evt =~ /cleanSchedule(2?)/){
    #main::Log 1,"[RoombaUtils] schedule event ".$evt;
    #-- older devices
    if( !defined($1) || $1 ne "2" ){
      my %cleans = %{$staterep->{'cleanSchedule'}};
      schedule($name,\%cleans,\%ret);
    #-- for i7
    }elsif( defined($1) && $1 eq "2" ){
      my %cleana = %{$staterep};
      schedule2($name,\%cleana,\%ret);
    }
  }

@pah: Sorry, die Übergabeparameter entsprechen nicht Deinem letzten Zwischenstand, da ich mir nicht sicher bin ob Du die Nomenklatur so beibehältst - ich kann das gerne noch anpassen.

Via setlist kann ich nun einzelne oder alle Schedules (de)aktivieren - was sich auch sofort in der App zeigt:
SetScheduleAll:true,false {roomba::setschedI7($NAME,"all",$EVENT)}
SetSchedule1:true,false {roomba::setschedI7($NAME,"1",$EVENT)}
SetSchedule2:true,false {roomba::setschedI7($NAME,"2",$EVENT)}

Geht evtl auch eleganter als für jeden Schedule eine Set, aber mir ist nix anderes eingefallen...

Verbesserungsvorschläge und Kommentare sind gerne willkommen!

Beste Grüße,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: FSausF am 17 Juni 2021, 19:22:12
Hallo Leute,

hat außer mir noch jemand das Problem, dass sein 960er seit dem neuen Firmware-Update (15.06.2021) nicht mehr mit fhem sprechen mag?
Vorher gut drei Monate alles paletti.

Es scheitert auf SSL-Ebene. (HttpUtils: https://192.168.2.47:8883/: Can't connect(2) to https://192.168.2.47:8883:  SSL wants a read first
)
Der Stunt aus dem Wiki von wegen [ssl_delfault_sect] rockt scheinbar nicht.
Der Versuch,
- Debian aktualisiert.
- Roombautils frisch geklont.
- fhem aktualisiert.
- debian neu gestartet.
- Roomba resetted.
hat es nicht gebracht.
Es bleibt dabei.

Der Versuch des gettpassword endet immerhin damit, dass auf dieser Ebene die Credentials (IP, BLID, Password) zurückkommen.
Also scheint die Verbindung grundsätzlich zu stehen.

Aber set RoombaFeger connect tut nix. Im Protokoll steht dann weiter:
2021.06.17 19:18:19 5: HttpUtils url=https://192.168.2.47:8883/ NonBlocking via https
2021.06.17 19:18:19 4: IP: 192.168.2.47 -> 192.168.2.47
2021.06.17 19:18:22 4: HttpUtils: https://192.168.2.47:8883/: Can't connect(2) to https://192.168.2.47:8883:  SSL wants a read first

Wie kriege ich das Ding aus Sicht fhem wieder zum Leben?

MQTT-Device komplett löschen und neu machen?

Habt Ihr eine schicke Idee dazu?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 17 Juni 2021, 21:05:33
Das Problem scheint hier der http-Timeout zu sein.
Auf meine Bitte hin hat Rudi König beim MQTT2_CLIENT das Attribut connectTimeout eingebaut - das habe ich bei mir auf 6 gesetzt, damit läuft es wieder.
   
LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: FSausF am 17 Juni 2021, 21:55:59
Das Problem scheint hier der http-Timeout zu sein.
Auf meine Bitte hin hat Rudi König beim MQTT2_CLIENT das Attribut connectTimeout eingebaut - das habe ich bei mir auf 6 gesetzt, damit läuft es wieder.
Super, Danke, das scheint zu gehen.
Ich hatte das nicht weiter in Erwägung gezogen, denn bislang war das "normale" verhalten, dass der Client auf den Connect reagiert, aber nach Disconnectafter (seconds) wieder weghört.
Wie jetzt allerdings das Firmware-Update des Roomba (in Zusammenhang mit einem nicht gepatchten fhem, das bis zum Tag des Roomba-Updates klaglos tat) zu genau diesem Problem führte, kann ich als Laie nicht mal mutmaßen.
Hat ein Paar Versuche gebraucht, bis der Python connect wieder zu Stande kam.
Danach dachte ich, iRobot hätte mal wieder irgendwie am SSL gespielt oder so...

Vielleicht hilft's, wenn ich Samstags Lavendel auf die Docking Station des Roomba lege.
Das ist ähnlich mystisch, aber zumindest physisch greifbar!

Danke einstweilen!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 21 Juni 2021, 18:13:31
Hallo zusammen,

auch mir hat das Update mit dem connectTimeout geholfen! Danke dafür :)

Allerdings scheitere ich gerade an der setList aus dem Wiki (https://wiki.fhem.de/wiki/Roomba#Komfortfunktionen_f.C3.BCr_set-Befehle (https://wiki.fhem.de/wiki/Roomba#Komfortfunktionen_f.C3.BCr_set-Befehle)). Einen Befehl bekomme ich hinzugefügt (ausführen funktioniert), allerdings nicht die gesamte Liste. Versuche ich das, bekomme ich immer einen
syntax error at (eval 3192) line 1, at EOF
wobei das eval von Ausführung zu Ausführung trotz gleichem Code variiert (immer mehr, nicht weniger).

Was mache ich da falsch? Copy/past Fehler kann ich ausschließen, eigentlich auch falsch kopierte Sonderzeichen...

Danke und Gruß!

Außerdem cmPhaseE (battery %) noch in der Status
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 21 Juni 2021, 18:16:31
Allerdings scheitere ich gerade an der setList aus dem Wiki (https://wiki.fhem.de/wiki/Roomba#Komfortfunktionen_f.C3.BCr_set-Befehle (https://wiki.fhem.de/wiki/Roomba#Komfortfunktionen_f.C3.BCr_set-Befehle)). Einen Befehl bekomme ich hinzugefügt (ausführen funktioniert), allerdings nicht die gesamte Liste. Versuche ich das, bekomme ich immer einen
syntax error at (eval 3192) line 1, at EOF
wobei das eval von Ausführung zu Ausführung trotz gleichem Code variiert (immer mehr, nicht weniger).
Kannst du hier mal reinposten, was du unter setList reinschreibst? Das kann nämlich unendlich viele Gründe haben.
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 21 Juni 2021, 18:57:30
Was mache ich da falsch? Copy/past Fehler kann ich ausschließen, eigentlich auch falsch kopierte Sonderzeichen...
Der Code in der Stelle im Wiki ist für die Raw Definition und nicht für den DEF Editor. https://wiki.fhem.de/wiki/Import_von_Code_Snippets

Gruß Otto
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 21 Juni 2021, 19:42:20
Danke für die schnelle Antwort, Otto. Nutze ich (fast ausschließlich), allerdings in dem Fall ohne Erfolg, siehe Anhang. Stehe auf dem Schlauch..
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 21 Juni 2021, 19:52:31
in Zeile zwei ist hinter dem \ noch ein Leerzeichen - lösch das mal weg.

Edit: Ich habe es im Wiki korrigiert. ;)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 21 Juni 2021, 20:04:52
Haha, funktioniert, tausend Dank :)
Bin etwas irritiert, da ich gestern Abend alles Mögliche durchprobiert hab, mit \, ohne, mit Kommata, ohne ... War wohl spät.

Hast du noch eine Idee bzgl cmPhaseE (battery %)?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Otto123 am 21 Juni 2021, 20:11:42
ich bin in dem Thread nur zuständig für überflüssige Leerzeichen  ;D ;D ;D
Wenn ich das verstehe https://wiki.fhem.de/wiki/Roomba#Komfortfunktionen_f.C3.BCr_Readings
hast Du stateFormat zwar gesetzt aber das Reading selbst fehlt?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 21 Juni 2021, 20:39:28
EDIT.

Scheint also kein Leerzeichen-Problem zu sein  ;D

Mir scheinen die "vereinfachten" Readings zu fehlen bzw. ich habe nur die komplette Liste.

attr RoombaFeger readingList $DEVICETOPIC:.* {roomba::reading($NAME,$EVENT)}aus der Anleitung hatte irgendwie keine Auswirkung.

Habe es jetzt mal mit Neu-Anlegen des Devices versucht, nur mit dem o.g. Code anstatt
attr RoombaFeger readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }

Das hat funktioniert, d.h. habe jetzt die vereinfachten Readings.

EDIT:
battery % fehlt noch, scheint ähnlich zu sein wie hier: https://forum.fhem.de/index.php/topic,114166.msg1119755.html#msg1119755
In sub battery($) wird batPct abgefragt, aber ich finde keinen Fehler. In den Logs heißt es nur: 2021.06.21 22:55:08 1: [RoombaUtils] uncaught event RoombaFeger
Habe den Eindruck, dass im sub reading($$) das batPct elseif nicht erreicht wird.
EDIT ENDE.

Hier die Readings:
READINGS:
     2021-06-21 20:31:15   IODev           RoombaFegerClient
     2021-06-21 20:36:56   cmArea          0 m²
     2021-06-21 20:36:56   cmCycle         quick
     2021-06-21 20:36:56   cmError         None
     2021-06-21 20:36:56   cmErrorD        Kein Fehler
     2021-06-21 20:36:56   cmExpire        Never
     2021-06-21 20:36:56   cmInitiator     localApp
     2021-06-21 20:36:16   cmMap           initialized
     2021-06-21 20:36:56   cmNotReady      0
     2021-06-21 20:36:56   cmPhase         hmUsrDock
     2021-06-21 20:36:56   cmPhaseD        Dockingbefehl
     2021-06-21 20:36:56   cmPhaseE        User Docking
     2021-06-21 20:36:56   cmTime          0 min
     2021-06-21 20:36:51   lastCommand     pause
     2021-06-21 20:36:51   lastCommandInitiator localApp
     2021-06-21 20:36:56   position        (33,9)
     2021-06-21 20:36:56   positionTheta   179
     2021-06-21 20:36:51   progWeek        [Sun:none,Mon:none,Tue:none,Wed:none,Thu:none,Fri:none,Sat:none]
     2021-06-21 20:36:55   signalRSSI      -32
     2021-06-21 20:36:55   state           dock
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 23 Juni 2021, 20:11:27
Na, welche Version der RoombaUtils ist das denn ?

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 25 Juni 2021, 21:36:11
Hallo,

verion liefert mir
# $Id: RoombaUtils.pm 2020-09- pahenning $
Durch deinen Hinweis habe ich manuell nachgeschaut, tatsächlich schien meine 99_RoombaUtils.pm veraltet zu sein. Ein UPD FHEM/99_RoombaUtils.pm hat mir dann eine 99_RoombaUtils.pm mit einem Trac Fehler gezogen. Manuell habe ich jetzt die Version 1.0 nach /opt/fhem/FHEM gezogen und ein reload bzw. shutdown restart gemacht.

Leider funktioniert nun auch nicht mehr der connect in RoombaFegerClient. Das verbose 5 spuckt das hier aus:

2021.06.25 21:21:01 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:21:01 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:21:12 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:21:12 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:21:23 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:21:23 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:21:34 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:21:34 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:21:45 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:21:45 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:21:56 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:21:56 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:22:07 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:22:07 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:22:18 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:22:18 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:22:29 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:22:29 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:22:40 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.25 21:22:40 4: IP: 192.168.178.26 -> 192.168.178.26
2021.06.25 21:22:43 4: HttpUtils: 192.168.178.26: Keine Route zum Zielrechner (113)


Hatte auch RoombaFeger neu angelegt, allerdings bzw. konsequenterweise werden die Readings auch nicht angelegt.

Den Fehler hatte ich vorher noch nicht. Der Sauber ist allerdings im Netz erreichbar.

LG!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 26 Juni 2021, 09:46:36
99_RoombaUtils.pm ist nicht per Update upzudaten...


LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 26 Juni 2021, 14:59:10
Hi,

ich habe mir auch etwas schwer getan, die letzte "gültige" Version  zu finden...
Offiziell ​wohl im SVN (ohne i7 Erweiterungen):

https://svn.fhem.de/fhem/trunk/fhem/contrib/Roomba/99_RoombaUtils.pm

Bzw. die letzte im Forum gepostete Version mit ersten Anpassungen für den i7 findet sich in diesem Beitrag:

https://forum.fhem.de/index.php/topic,114166.msg1148069.html#msg1148069

Zumindest ist das mein Kenntnisstand.

In den Beiträgen danach kommen noch ein paar i7 spezifische Korrekturen/Vorschläge, die aber von pah noch nicht abgesegnet bzw noch nicht übernommen worden sind (Bei mir laufen sie, aber ein paar mehr Tests wären sicher qualitätssichernd ;-) )

Der Befehl "version" gibt für die RoombaUtils keinen korrekten Wert zurück, da in der aktuellen 99_RoombaUtils die Zeile
# $Id: RoombaUtils.pm 2020-09- pahenning $

vermutlich nicht richtig formatiert gefüllt ist bzw an der falschen Stelle steht. Zieht man (ich habe das einfach mit anderen files verglichen) die Zeile als zweite Zeile im File nach oben und ergänzt sie ein wenig, dann gibt "version" einen sauberen Eintrag zurück. Ausprobiert mit:

########################################################################################
# $Id: 99_RoombaUtils.pm 123456 2020-09-01 12:00:00Z pahenning $
#
# RoombaUtils
#
# Collection of various routines
# Prof. Dr. Peter A. Henning
# contributions from hapege
#

ergibt bei "version":
99_RoombaUtils.pm   123456 2020-09-01 12:00:00Z pahenning
Ich hoffe das hilft.

Beste Grüße,

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 26 Juni 2021, 23:30:50
Hallo und danke für eure Hilfe.

Tatsächlich hat die letzte gepostete Version geholfen. Allerdings musste ich die Prototypen aus den Funktionen entfernen, habe sonst immer "Too many arguments for ..." bekommen. Obwohl die Parameteranzahl gestimmt hatte. Naja.

Musste dazu allerdings neustarten, ein reload alleine scheint nicht funktioniert zu haben.

Jetzt bekomme ich meinen Sauger wieder ausgewertet, allerdings kann ich ihn noch nicht starten. RoombaFegerClient connected nicht. Im Log steht trotz verbose 5 nach wie vor außer dem hier nichts:
2021.06.26 23:21:53 5: HttpUtils url=https://192.168.178.26:8883/ NonBlocking via https
2021.06.26 23:21:53 4: IP: 192.168.178.26 -> 192.168.178.26
Macht das Fehlerfinden nicht gerade einfacher.

Danke und Gruß
Ben
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 27 Juni 2021, 07:18:42
Zitat
Allerdings musste ich die Prototypen aus den Funktionen entfernen, habe sonst immer "Too many arguments for ..." bekommen.

Das ist, pardon, auf mangelndes Verständnis von Perl zurückzuführen. Und für Software, die von mir stammt, aber dann modifiziert wurde, leiste ich keinerlei Support.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 27 Juni 2021, 13:31:13
Hi,

nein, von Perl verstehe ich wirklich nicht viel. Habe mich auf den Beitrag von CoolTux bezogen: https://forum.fhem.de/index.php/topic,110316.msg1043883.html#msg1043883

Vielleicht liegt es auch an einer alten Perlversion, die ich einsetze. Das kann ich aber nur vermuten.

Wenn ich das Wiki richtig verstanden habe, sollte RoombaFegerClient auch ohne die 99_RoombaUtils.pm verbinden können - was sie auch mal tat, aber jetzt nicht mehr tut. Damit kann ich also deine Software oder Modifikationen als Fehlerquelle ausschließen. Habe ich das richtig verstanden?

LG Ben
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 27 Juni 2021, 17:39:26
Hi,

Ich bin auch kein Perl Experte, aber ich habe gelernt dass bei geänderten Übergabeparametern (in der letzten Version von pah wurden einige Übergabeparameter in einigen subs geändert) es einen restart braucht, um das korrekt einzulesen (siehe etwas weiter vorne im Forum). Also pahs letzte Version plus kompletter restart sollte das Problem beheben und Dich wieder auf eine unterstützte Version bringen.
Wobei bei einem "disconnected" Client alleine ein manuelles "connect" eine umfangreiche Meldung im Log bringen sollte...

Beste Grüße

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 27 Juni 2021, 19:49:05
Hallo Hermann,

danke für den Hinweis, einen restart habe ich tatsächlich schon öfters gemacht.

Ich kann leider gar nicht nachvollziehen, woran es hängt. Habe inzwischen mehrmals den RoombaFegerClient gelöscht und neu hinzugefügt, ohne Erfolg. Es stellt sich kein connect ein. Ohne das brauche ich beim RoombaFeger natürlich nicht weitermachen. Ein Timeout wie in
https://forum.fhem.de/index.php/topic,114166.msg1126994.html#msg1126994
vorgeschlagen hilft auch nicht. Im Log findet sich außer den besagten NonBlocking Meldungen nichts - wobei die, wenn ich es richtig verstanden habe, keine Fehlermeldung sind.

Ich habe noch einen weiteren MQTT2 Client laufen, gehe aber nicht davon aus, dass es hier Wechselwirkungen gibt. Es lief ja schon mal.

Einen schönen Sonntagabend
Ben
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 27 Juni 2021, 23:16:08
Hallo Ben,

Hm, nach Deinen beiden Meldungen im Log sollte eigentlich ein "sending CONNECT" kommen. Hast Du mal die Attribute des clients überprüft?
Und sorry, nur zur Sicherheit: fhem update gemacht?

Beste Grüße

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 28 Juni 2021, 19:55:11
Es ist ärgerlich, dass iRobot mit den letzten Firmware-Updates etwas eingebaut hat, dass die Kontaktaufnahme seitens FHEM verhindert. Ich habe auf beiden Kisten die Version 2.4.16-126.

Auf dem neueren 981er wurde das automatische Update im April durchgeführt ==> Nur ein Werksreset mit kompletter Neuanmeldung hat geholfen.
Auf dem älteren 960er kam das Update erst im Juni - seitdem ist er aus FHEM nicht mehr aufzuwecken. Muss wahrscheinlich auch den kompletten Reset machen.

Allerdings kriegt FHEM Kontakt zu ihm, wenn er über die App gestartet wurde. Aktuell suche ich immer noch nach einer dauerhafteren Lösung, ersaufe aber derzeit in Arbeit in meinem Brot-und-Butter-Job.

LG

pah

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 28 Juni 2021, 21:19:41
Hi,

auf meinem i7 läuft 3.14.16, aktualisiert am 4.6.21.
Seitdem fehlen cmTime und cmArea, aber Kontakt zwischen fhem und Robot klappt. Noch...

Beste Grüße

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 28 Juni 2021, 22:44:43
Guten Abend,

auf meinem läuft dieselbe Software seit dem 4.6. Aber danach ging es ja definitiv.
Kann es sein, dass der Roboter sich eine bekannte und vertraute Verbindung merkt - und diese nach einem Löschen des RoombaFeger(Client) verloren gegangen ist?

Im Log steht tatsächlich noch nicht mal das "sending CONNECT". FHEM ist aktuell, wobei heute noch
UPD FHEM/lib/AttrTemplate/httpmod.template
reinkam. Wird wohl keinen Unterschied machen, aber ich update trotzdem mal :)
Einen Verbindungsaufbau nach Start über die Taste am 960 bzw. über die App bekomme ich auch nicht hin. Werde die Tage mal den Komplett-Reset versuchen.

pah, das ist wirklich frustrierend, wenn mit Firmware-Updates Interface-Änderungen reinkommen und die Arbeit nicht in Weiterentwicklung sondern Wartung fließt. Trotzdem bin ich dankbar für die vielen tausende Stunden Arbeit, die die Community hier reingesteckt hat. Es ist wirklich toll und es macht Spaß, zu tüfteln :)

Liebe Grüße!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 30 Juni 2021, 13:05:44
OK, es hat funktioniert. Werksreset des 960er, komplettes Neu-Anlernen, Abfrage des neuen (!) Passworts - und er läuft wieder mit FHEM.

Habe das jetzt also bei beiden Kisten so gemacht, es handelt sich um ein reproduzierbares Ergebnis. Möglicherweise ein Effekt dieses FW-Update.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Cerex am 01 Juli 2021, 19:53:06
Hi,

habe auch gerade zurücksetzen können. Jetzt läuft es, komplett. Kann auch bestätigen, dass das Vorgehen nach Anleitung nun funktioniert (inkl. Leerzeichen ;-). Auf das Rücksetzen des Roboters wäre ich nie gekommen.

War ein wichtiger Hinweis, das neue Passwort abzufragen. Die GeräteID bleibt logischerweise die selbe.
Tatsächlich war es jetzt auch das erste Mal bei mir, dass die passwort.py ohne Fehler durchgelaufen ist. Beim letzten Mal hatte ich das Passwort nur über die roomba.py bekommen. Warum auch immer.

Vielen Dank für die Hilfe!!

Jetzt kann ich endlich wieder nachts staubsaugen (lassen). Nachdem die HUE App ihre Timer-Funktion beerdigt hat - und der Roomba natürlich Licht zum Saugen braucht, bleibt mir nur der Weg über FHEM.

Schöne Grüße!
Ben
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 02 Juli 2021, 14:32:51
So, mein dritter Roomba ist auf dem Weg. Ist dann ein i7 - so dass man erwarten kann, dass die Integration in die RoombaUtils besser wird.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 03 Juli 2021, 21:17:28
Hier mal etwas zum Ausprobieren.

Weil ich es unergonomisch fand, die alten Maps mit einem FHEM-Befehl zu löschen, haben sie jetzt einen ordentlichen Button.

Ich habe da etwas mit dem Reading getrickst und würde gerne ein Feedback dazu haben.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 06 Juli 2021, 15:14:40
Frage an die i7-Benutzer: Hat jemand schon eine Möglichkeit gefunden, die Räume und Zonen abzufragen, ohne erst ein Zeitprogramm zu definieren?

Irgendwie muss das gehen, die App jedenfalls kann das.

LG

pah

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 18 Juli 2021, 17:14:49
Hi,

Nein, ich zumindest nicht. Ich habe mal einen MITM Proxy zwischen  app und Robot gehängt, aber auch nichts verwertbares gefunden. Hab aber nicht viel Zeit reingesteckt.
Wobei ich vermute, dass nur die App die Raum-Definitionen hat und IDs in die map schreibt, und mit der Cloud bzw dem Robot nur die map und die IDs in der map austauscht. Ist aber grobe Spekulation.

Beste Grüße

Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 02 August 2021, 06:44:43
So, ich habe mal wieder eine aktualisierte Version der RoombaUitils in den contrib-Ordner geladen. Das Teil läuft inzwischen astrein stabil mit meinen drei Robotern (einer davon ein i7).

Die von hapege beigesteuerten Routinen für den i7 sind im Wesentlichen (noch) unverändert. Eine Neuerung betrifft den Start: Sehr viel sicherer, weil erst abgewartet wird, bis der Roboter sich wirklich gemeldet hat. Eine weitere Neuerung sind Buttons zum Löschen alter Maps.

Das Wiki habe ich noch nicht angepasst, hier wären noch ein paar Absätze mit einer Anleitung zum Erstellen von Zonen etc. für die i7-Reihe sinnvoll, sowie mit den notwendigen Änderungen für die setList.

Als Nächstes werde ich mir die Einstellung von Zeitplänen vornehmen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: cbl am 11 August 2021, 22:33:29
Ich habe gestern einen i7 geliefert bekommen und konnte ihn durch die tolle Wiki-Anleitung abends schon aus FHEM initial starten. Die App, die ich nur für die Einbindung ins WLAN benötigt habe, flog darauf hin gleich wieder vom Smartphone.
Heute Abend habe ich die "Komfortfunktionen" inkl. der RoombaUtils ergänzt und nun erste Linien in der (vorher leeren) SVG-Grafik gesehen.

Großen Dank an Prof. Henning und alle Unterstützer hier im Thread! Ich bin lange um so ein Gerät herum gelaufen und die Historie und das Engagement hier im Thread hat mich zum Kauf bewogen. Es hat sich alles so eingestellt, wie ich es nach der vorherigen Lektüre hier erwartet hatte. Danke!

Jetzt folgen die Feinheiten wie Zonen und FHEM-Aufträge zur Reinigung, damit der WAF gesteigert wird.

Gruß
Christian
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 12 August 2021, 19:52:21
Zitat
Die App, die ich nur für die Einbindung ins WLAN benötigt habe, flog darauf hin gleich wieder vom Smartphone.

Fehler. Die braucht man nämlich zur Festlegung der Zonen und Räume.

Unten mal ein Screenshot eines aktuellen I7-Laufes von heute morgen. Rot=Startpunkt, Gelb bzw. Orange: Schwerpunkt der konvexen Hülle, die ebenfalls eingezeichnet ist. Die unterschiedlichen Positionen der Schwerpunke weisen auf unterschiedliche Kombinationen von Räumen bzw. Zonen hin.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: cbl am 13 August 2021, 19:44:24
Fehler. Die braucht man nämlich zur Festlegung der Zonen und Räume.

Danke für den Hinweis.  :) Ich habe jetzt die Karte mit Räumen und Zonen in der App. Im mittlerweile langen Thread habe ich den Beitrag #189 (https://forum.fhem.de/index.php/topic,114166.msg1129732.html#msg1129732  (https://forum.fhem.de/index.php/topic,114166.msg1129732.html#msg1129732)) gefunden von  delMar mit einer Erweiterung dazu. Danach waren Räume kein Thema mehr. Ist das der Teil, der mittlerweile funktioniert und dessen Doku im Wiki noch zu ergänzen ist? Oder gab es noch Änderungen, die ich übersehen habe? Dann warte ich lieber geduldig auf die Wiki-Erweiterung.

Unten mal ein Screenshot eines aktuellen I7-Laufes von heute morgen. Rot=Startpunkt, Gelb bzw. Orange: Schwerpunkt der konvexen Hülle, die ebenfalls eingezeichnet ist. Die unterschiedlichen Positionen der Schwerpunke weisen auf unterschiedliche Kombinationen von Räumen bzw. Zonen hin.
Schick. Mir fehlt noch eine hübsche Basisgrafik des Raumes und ich muss noch ein wenig mit den Koordinaten und der View spielen, damit es so schick aussieht.

Gruß
Christian
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 14 August 2021, 17:55:21
Zitat
Danach waren Räume kein Thema mehr. Ist das der Teil, der mittlerweile funktioniert und dessen Doku im Wiki noch zu ergänzen ist? Oder gab es noch Änderungen, die ich übersehen habe? Dann warte ich lieber geduldig auf die Wiki-Erweiterung.
1.Ja
2. Nein

Tja, das mit dem Warten dauert mit Sicherheit bis November... Derzeit überlastet und im Tilt-Modus.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: hapege am 18 August 2021, 19:25:32
Hi pah,

ich habe gerade wieder ein wenig Zeit gefunden mit dem Roomba zu "spielen".
Danke für Deine neue Version, der Löschen Button ist eine klasse Idee!
Ich habe ein paar Anmerkungen bzw vorsichtige Vorschläge:

Du verwendest nun "bbrArea" (hies bei mir mal "bbrunArea"), aber m.E. ist die Berechung nicht korrekt. Der Wert von sqft in bbrun ist der gereinigte "Gesamtbereich", der auch in der App angezeigt wird. Der Wert muss aber mit 100 multipliziert werden um ihn korrekt anzeigen zu können, also
$sqm   = int($evtptr->{{'sqft'}*100/10.7639);
statt
$sqm   = int($evtptr->{'sqft'}*10/10.7639)/10;

Die Versionsinfo des Moduls ist bei Dir
# $Id: RoombaUtils.pm 2020-09- pahenning $Nach ein bisschen Stöbern glaube ich das ist nicht korrekt formatiert, sollte m.E. so aussehen:
# $Id: 99_RoombaUtils.pm 00001 2021-08-18 18:59:00Z pahenning $und in der zweiten Codezeile stehen (zumindest machen das andere Module so...). Dann wirds bei "version 99" auch richtig angezeigt.

Beim Löschen von maps über den genialen Button wird die SVG nicht aktualisiert, erst nach dem nächsten Reinigungsvorgang. Ich habe das sehr brachial über eine sub "rewriteSVG", die ich in delmap aufrufe, "gelöst" bzw. hingebastelt (ist viel copy & paste code, nicht so schön).

Ich habe noch Funktionalität entworfen, um die verlorengegangene Zeit für einen Reinigungslauf auszugeben. Ist letztlich eine Substraktion "Endzeit - Startzeit".
Ich habe das alles - mit "hapege" comments - in Deine letzte Version eingebaut. Will ich hier so aber nicht posten, damits kein Versiondurcheinander gibt (Man lernt ja dazu  ;) ). Soll ich Dir das irgendwie zukommen lassen, damit Du irgendwann übernehmen kannst was Du für geeignet hältst?

 Beste Grüße,
 
 Hermann
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 19 August 2021, 14:55:26
OK, Berechnung schaue ich mir an.

Das mit der Version sollte eigentlich beim Upload ins SVN-Repository automatisch gesetzt werden, kann sein, dass das beim contrib-Ordner abgestellt worden ist. Funktioniert bei den inzwischen 21 von mir betreuten Modulen im Hauptrepository jedenfalls gut.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 19 August 2021, 19:23:29
Vermutlich ist die Id-Property nicht gesetzt?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 19 August 2021, 20:47:33
Kann sein, liegt in einem anderen Verzeichnis als die anderen Module. Schau ich morgen mal nach. Allerdings wird das so beim Upload akzeptiert - was im Hauptverzeichnis von FHEM nicht der Fall ist.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: SebastianStorb am 12 September 2021, 13:26:37
2021.09.12 13:00:10 5: Roomba: discarding DISCONNECT (224)(0)
2021.09.12 13:00:10 5: HttpUtils url=https://192.168.1.42:8883/ NonBlocking via https
2021.09.12 13:00:10 4: IP: 192.168.1.42 -> 192.168.1.42
2021.09.12 13:00:15 5: Roomba: sending CONNECT (16)M(0)(4)MQTT(4)(194)(0)(30)(0)(15)(16)3XXXXXXXXXXXXX90(0)(16)3XXXXXXXXXXXXX90(0)(30):1:1XXXXXXXXXXXXXXXXXXXXXXXXuR
2021.09.12 13:00:15 5: DevIo_SimpleWrite Roomba: 104d00044d51545404c2001e000f333738343830433931393137363930001033313738343830433931393137363930001e3a313a313633313334383534363a39306431544d527452595a7a4f527552
2021.09.12 13:00:15 5: 192.168.1.42:8883 reappeared (Roomba)
2021.09.12 13:00:15 5: Roomba: received CONNACK (0)(5)
2021.09.12 13:00:15 1: Roomba: Connection refused, not authorized
2021.09.12 13:00:15 5: Roomba: discarding DISCONNECT (224)(0)
2021.09.12 13:00:15 5: 192.168.1.42:8883 disconnected, waiting to reappear (Roomba)

READINGS:
     2021-09-12 13:00:15   state           disconnected
   sslargs:
     SSL_version SSLv23
Attributes:
   SSL        1
   autocreate no
   clientId   3XXXXXXXXXXXXX90
   connectTimeout 6
   disconnectAfter 5
   mqttVersion 3.1.1
   room       Roomba
   sslargs    SSL_version:SSLv23
   username   3XXXXXXXXXXXXX90
   verbose    5

nano openssl.cnf
[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1

Ich bekomme es einfach nicht hin. Könnte jemand helfen?
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 12 September 2021, 13:30:04
Etwas Kontext würde helfen.

Hast du die Schritte aus dem Wiki befolgt?
Was hast du bisher gemacht?
Welches Modell hast du?
Evtl welche Firmware

Schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: SebastianStorb am 12 September 2021, 14:29:48
Zitat
Hast du die Schritte aus dem Wiki befolgt?
Was hast du bisher gemacht?
Welches Modell hast du?
Evtl welche Firmware

Ich wollte mich auf das wesentliche beschränken, wegen Deiner Nachfrage aber hier die ausführliche Beschreibung:
zu 1.) nach dem Wiki vorgegangen, was teilweise hilfreich war.
zu 2.) Das habe ich aber abgebrochen als ich mit den pip Befehlen gescheitert bin, weil ich das Wiki ab dort nicht mehr verstanden hatte. Daher habe ich diesen Beitrag über mehrere Abende durchgearbeitet, mit dem ich auch nicht weiter gekommen bin. Hiernach habe ich mich der Anleitung in der GitHub zugewendet. Der Roboter ließ sich damit zunächst nicht auf der cmd Ebene mit dem "Git-Skript .py" verbinden. In einem anderen Forum habe ich dann herausgefunden, dass das Einstellungen in der Datei openssl.cnf editiert werden müssen. Nach der Änderung (s. meinen Beitrag oben) habe ich es geschafft zunächst den Roomba auf der Linux Ebene zu verbunden. Daraufhin habe ich mich diesem Forumsbeitrag wieder zugewendet und nach weiteren Nachmittagen und späten Abendstunden, unzähligen Einstellungen und Versuchen (die ich hier nicht mehr im einzelnen wiedergeben kann), zeigte sich das Gerät weiterhin als disconnectet. Irgendwann bin ich dann irgendwie zu eine connect/disconnect Schleife gekommen, nachdem der das Gerät gar nicht mehr ansprechbar war. Gestern habe ich dann den iRoomba noch mal auf Werkeinstellungen gesetzt, was auch keine Abhilfe geschafft hatte. Ich habe dann den iRoombaClient in FHEM immer wieder neu eingerichtet mit dem gleichen Ergebnis. Nach weiteren Extrahieren aus diesem Forumsbeitrag, und Suche in Unterzweigen bin ich darauf gekommen, dass die .pm Datei gar nicht auf meinem Server liegt. Gestern Nachmittag hatte ich mich dann mit SVN Updates (und Installationsschwierigkeiten von svn auf der Linux Ebene) beschäftigt und es war wieder ein erfolgloser Abend vorbei. Heute habe ich das SVN Update geschafft und die erforderliche 99_.pm heruntergeladen und das gesamte SVN aktualisiert, was andere Fehler in FEHM (Gardena) erfreulicher Weise beseitigt hat. Seit heute morgen kam es dann zu dem hier im Forum schon öfter beschriebenen "SSL Zurückweisungen", die ich über das attr ConnectTimer behoben habe. Ich hatte zunächst angenommen, dass hierfür in den Einstellungen etwas grundlegend hinzugefügt werden müsste (wie weiter vorne in diesem Beitrag beschrieben) und bin dann über die Fehlersuche darauf gestoßen, dass es diese attr Einstellung im Modul inzwischen gibt. Die SSL Problematik wurde dadurch behoben jedoch kommt jetzt die o.g. neue Fehlermeldung.

Übrigens hatte ich für die Einbindung meines iRoomba 960 am letzten Wochenende mit der Firmware  unter Home Assistent nur 1-2 Minuten benötigt. Um einer Nachfrage entgegenzuwirken: Ich habe es am letzten Wochenende nicht geschafft Steuerbefehle von FEHM in den iRoomba über Mosquitto via MQTT an Home Assistent zu senden, sonst hätte ich mir die Mühe gar nicht gemacht die Einbindung direkt unter FEHM zu probieren. Warum überhaupt Home Assistent? Weil es mit FEHM nicht direkt möglich ist meinen ICO im Garten zu verbunden und dann Daten in mein FHEM zu senden. In Home Assistent hat die Einrichtung nur wenige Sekunden gedauert. Irgendwann hoffe ich hiermit auch die Einbindung meiner Klimaanlage, die über FHEM ja nicht möglich ist (auch CoolTux hat die Sache irgendwann scheinbar nicht mehr weiter verfolgt). In Home Assistent gibt es dafür aber ein Modul in HACS ( Midea Smart Aircon ) was aber leider zur Zeit noch einen Bug hat.
zu 3.) Roomba960
zu 4.) Roboter-Software 2.4.16-126 (vom 11. Sept. 2021)

Vielen Dank!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 13 September 2021, 11:04:48
Danke für die ausführliche Info.

An dieser Stelle muss leider gesagt werden, dass die Roomba-Anbindung in FHEM noch kein fertiges Modul ist, sondern eben noch in Entwicklung.
Deshalb auch die relativ umfangreiche Konfigurationsarbeit, was definitiv den Unterschied zu fertigen Modulen ausmacht (oder eben auch Home Assistant) und auch das manuelle Runterladen von 99_RoombaUtils.pm.

Nachdem das gesagt ist:
die Einrichtung per pip und python ist einer der wichtigsten Teile am ganzen Prozess, da du daraus die nötigen Infos kriegst, damit FHEM berechtigt ist, mit dem Roomba zu kommunizieren.

Bei copy/paste kommt es immer wieder vor, dass vor oder nach dem eigentlichen String ein Leerzeichen mitkommt, das nicht mitkommen soll.
Hast du schon mal probiert, das set RoombaFegerClient password :######################A nochmal auszuführen?

schöne Grüße
Martin







Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: SebastianStorb am 14 September 2021, 19:18:12
Das habe ich jetzt (noch ein weiteres mal) gemacht und es wird etwas neues ausgespuckt:
2021.09.14 19:06:47 5: 192.168.1.42:8883 reappeared (RoombaClient)
2021.09.14 19:06:47 5: RoombaClient: received CONNACK (0)(5)
2021.09.14 19:06:47 1: RoombaClient: Connection refused, not authorized
2021.09.14 19:06:47 5: RoombaClient: discarding DISCONNECT (224)(0)
2021.09.14 19:06:47 5: 192.168.1.42:8883 disconnected, waiting to reappear (RoombaClient)

Sollte ich die gesamte Einrichtung und Verbindung zum Robo (Reset) noch mal versuchen? Oder gibt es eine Möglichkeit herauszufinden, warum ich nicht autorisiert bin?

PS: Die Einrichtung der Klimaanlage über midea-ac-py (ein HACS Tool in der Hausautomatisierung Home Assistant) funktioniert jetzt sensationell gut! Hierüber können fast alle Klimaanlagen am Markt eingebunden werden! Wahrscheinlich werde ich mich jetzt damit beschäftigen wie ich aus FHEM -> Mosquitto -> MQTT -> Home Assistant Befehle an die dort eingebundenen Geräte schicken kann. Dann kann ich den Robo dort einfach wieder nach dem Reset anmelden und über FHEM bzw. TabletUI betreiben, bis es hier etwas ausgereifter ist.

Vielen Dank!
https://github.com/mac-zhou/midea-ac-py
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 14 September 2021, 20:01:09
Zitat
bis es hier etwas ausgereifter ist
Pfff.

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: delMar am 15 September 2021, 14:14:09
Sollte ich die gesamte Einrichtung und Verbindung zum Robo (Reset) noch mal versuchen? Oder gibt es eine Möglichkeit herauszufinden, warum ich nicht autorisiert bin?
Ich wüsste von keiner Möglichkeit, hier genauere Infos zu kriegen.
Zusätzliche Info wird eigentlich von den Entwicklern absichtlich nicht gegeben (zB Benutzer existiert nicht oder Passwort falsch), weil man diese Info ja ausnutzen könnte, um ein System zu hacken.

Ob du's nochmal versuchen sollst? Das kannst wohl nur du beantworten  ;D

schöne Grüße
Martin
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: SebastianStorb am 15 September 2021, 21:49:50
Pfff.

pah

Ich wollte Sie in keinem Fall verärgern und entschuldige mich, dass Sie meine Einschätzung als Abwertung empfunden haben. Für Spezialisten ist diese neue Tool bestimmt extrem hilfreich und endlich eine neue Lösung Roomba wieder einzubinden! Als Anfänger hatte vor dem Versuch der Installation gehofft, dass die Einrichtung so einfach werden wird, wie es mit dem Pferdekämpfer-Modul Roomba980 war (und ich bedauere, dass es bei mir nicht funktioniert).

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 16 September 2021, 18:48:46
Tipp:

1. Roomba komplett auf Werkseinstellungen zurücksetzen
2. Neu mit dem Python-Skript ansprechen, clientId und Passwort aufheben.
3. Im MQTT2_CLIENT die clientId, den usename (=clientId) und das Passwort setzen.

Dann wird das auch klappen.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: SebastianStorb am 27 September 2021, 18:59:14
Vielen Dank! Ich habe das Gerät jetzt mit FHEM Verbinden können - allerdings bekomme ich nur Informationen und kann das Gerät nicht steuern.

Zunächst hat folgender Teil im Wiki bei mir nicht funktioniert bzw. mit Fehlermeldung abgebrochen:
pip install git+https://github.com/NickWaterton/Roomba980-Python.git Möglicher Weise ist die Anleitung hier nicht korrekt, ungenau oder funktioniert nicht bei jedem:
Möglich war es bei mir mit folgendem Befehl:
pip install git
git clone https://github.com/NickWaterton/Roomba980-Python.git
auf dem RPi:
pip install gitpython
Ab folgendem Punkt der Roomba-Wiki-Anleitung ist die weitere Umsetzung bei mir überhaupt nicht mehr möglich:
Einrichten eines MQTT Device
Wenn ich das Gerät den Vorschriften entsprechend für mein System anpasse bekomme ich keinerlei Informationen vom iRoomba. Erst als ich im MQTT2_CLIENT autocreate auf
complex gestellt habe, bekam ich ein neues Gerät erstellt, in dem ich die Daten des iRoomba gesendet bekomme. Wenn ich hier eine setlist erstelle funktioniert diese leider nicht bzw. fährt der Roboter nicht los - nur der State in FHEM steht entsprechend.

Weiterhin ist Roomba-Wiki für mich auf folgender Eintrag nicht verständlich bzw. nicht nachvollziebar. Ist das für den Start des Gerätes wichtig? Falls ja: Wo muss hier was wie erstellt werden:
Dazu muss natürlich in einem Package roomba die Funktion reading() definiert werden, die je nach einlaufenden Daten entsprechende Readings erzeugt.
Was ist das Package roomba und wo muss die Funktion reading() eingefügt werden. Für mich als Anfänger ist die Anleitung an dem Punkt leider nicht weiter umzusetzen.

zur Info:
Internals:
   Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
   ClientsKeepOrder 1
   DEF        192.168.1.42:8883
   DeviceName 192.168.1.42:8883
   FUUID      613db31e-f33f-ec85-ed39-465a16350756c662
   FVERSION   00_MQTT2_CLIENT.pm:0.249820/2021-09-16
   NAME       RoombaClient
   NR         745
   SSL        1
   STATE      disconnected
   TIMEOUT    6
   TYPE       MQTT2_CLIENT
   WBCallback
   clientId   3XXXXXXXXXXXXXX0
   devioLoglevel 5
   disconnectAt 2021-09-27 18:21:31
   lastMsgTime 1632759631.64682
   nextOpenDelay 5
   MatchList:
     1:MQTT2_DEVICE ^.
     2:MQTT_GENERIC_BRIDGE ^.
   READINGS:
     2021-09-26 14:05:12   lastPublish     start:
     2021-09-27 18:22:22   state           disconnected
   sslargs:
     SSL_version SSLv23
Attributes:
   SSL        1
   autocreate complex
   clientId   3XXXXXXXXXXXXXX0
   connectTimeout 6
   disconnectAfter 60
   mqttVersion 3.1.1
   room       Roomba
   sslargs    SSL_version:SSLv23
   username   3XXXXXXXXXXXXXX0

und:
Internals:
   CID        3XXXXXXXXXXXXXX0
   DEF        3XXXXXXXXXXXXXX0
   DEVICETOPIC RoombaHome
   FUUID      61505c7c-f33f-ec85-de85-09fcb7f8b648bc6d
   FVERSION   10_MQTT2_DEVICE.pm:0.248610/2021-08-20
   IODev      RoombaClient
   LASTInputDev RoombaClient
   MSGCNT     45
   NAME       RoombaHome
   NR         751
   RoombaClient_MSGCNT 45
   RoombaClient_TIME 2021-09-27 18:20:31
   STATE      start
   TYPE       MQTT2_DEVICE
   READINGS:
     2021-09-27 18:18:40   IODev           RoombaClient
     2021-09-27 18:20:12   UNDEFINED_state_reported_localtimeoffset 120
     2021-09-27 18:20:12   UNDEFINED_state_reported_mac d0:c5:d3:ce:49:87
     2021-09-27 18:20:12   UNDEFINED_state_reported_netinfo_addr 3232235818
     2021-09-27 18:20:12   UNDEFINED_state_reported_netinfo_bssid 44:4e:6d:84:18:3b
     2021-09-27 18:20:12   UNDEFINED_state_reported_netinfo_dhcp true
     2021-09-27 18:20:12   UNDEFINED_state_reported_netinfo_dns1 3232235777
     2021-09-27 18:20:12   UNDEFINED_state_reported_netinfo_dns2 0
     2021-09-27 18:20:12   UNDEFINED_state_reported_netinfo_gw 3232235777
     2021-09-27 18:20:12   UNDEFINED_state_reported_netinfo_mask 4294967040
     2021-09-27 18:20:12   UNDEFINED_state_reported_netinfo_sec 4
     2021-09-27 18:20:12   UNDEFINED_state_reported_pose_point_x 167
     2021-09-27 18:20:12   UNDEFINED_state_reported_pose_point_y -34
     2021-09-27 18:20:12   UNDEFINED_state_reported_pose_theta -173
     2021-09-27 18:20:31   UNDEFINED_state_reported_signal_rssi -67
     2021-09-27 18:20:31   UNDEFINED_state_reported_signal_snr 22
     2021-09-27 18:20:12   UNDEFINED_state_reported_utctime 1632759620
     2021-09-27 18:20:12   UNDEFINED_state_reported_wifistat_cloud 1
     2021-09-27 18:20:12   UNDEFINED_state_reported_wifistat_uap false
     2021-09-27 18:20:12   UNDEFINED_state_reported_wifistat_wifi 1
     2021-09-27 18:20:12   UNDEFINED_state_reported_wlcfg_sec 7
     2021-09-27 18:20:12   UNDEFINED_state_reported_wlcfg_ssid 404040
     2021-09-27 18:20:07   state           start
     2021-09-27 18:20:12   update_state_reported_batPct 100
     2021-09-27 18:20:12   update_state_reported_batteryType li26
     2021-09-27 18:20:12   update_state_reported_bbchg3_avgMin 294
     2021-09-27 18:20:12   update_state_reported_bbchg3_estCap 7451
     2021-09-27 18:20:12   update_state_reported_bbchg3_hOnDock 14802
     2021-09-27 18:20:12   update_state_reported_bbchg3_nAvail 6410
     2021-09-27 18:20:12   update_state_reported_bbchg3_nDocks 230
     2021-09-27 18:20:12   update_state_reported_bbchg3_nLithChrg 592
     2021-09-27 18:20:12   update_state_reported_bbchg3_nNimhChrg 0
     2021-09-27 18:20:12   update_state_reported_bbchg_aborts_1 4
     2021-09-27 18:20:12   update_state_reported_bbchg_aborts_2 4
     2021-09-27 18:20:12   update_state_reported_bbchg_aborts_3 4
     2021-09-27 18:20:12   update_state_reported_bbchg_nChgOk 589
     2021-09-27 18:20:12   update_state_reported_bbchg_nLithF 0
     2021-09-27 18:20:12   update_state_reported_bbmssn_aCycleM 21
     2021-09-27 18:20:12   update_state_reported_bbmssn_aMssnM 16
     2021-09-27 18:20:12   update_state_reported_bbmssn_nMssn 727
     2021-09-27 18:20:12   update_state_reported_bbmssn_nMssnC 238
     2021-09-27 18:20:12   update_state_reported_bbmssn_nMssnF 68
     2021-09-27 18:20:12   update_state_reported_bbmssn_nMssnOk 421
     2021-09-27 18:20:12   update_state_reported_bbnav_aExpo 7
     2021-09-27 18:20:12   update_state_reported_bbnav_aGain 9
     2021-09-27 18:20:12   update_state_reported_bbnav_aMtrack 63
     2021-09-27 18:20:12   update_state_reported_bbnav_nGoodLmrks 11
     2021-09-27 18:20:12   update_state_reported_bbpanic_panics_1 8
     2021-09-27 18:20:12   update_state_reported_bbpanic_panics_2 8
     2021-09-27 18:20:12   update_state_reported_bbpanic_panics_3 8
     2021-09-27 18:20:12   update_state_reported_bbpanic_panics_4 8
     2021-09-27 18:20:12   update_state_reported_bbpanic_panics_5 8
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_1 3
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_10 0
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_2 0
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_3 0
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_4 0
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_5 4
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_6 18
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_7 6
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_8 3
     2021-09-27 18:20:12   update_state_reported_bbpause_pauses_9 4
     2021-09-27 18:20:12   update_state_reported_bbrstinfo_causes 0009
     2021-09-27 18:20:12   update_state_reported_bbrstinfo_nMobRst 9
     2021-09-27 18:20:12   update_state_reported_bbrstinfo_nNavRst 90
     2021-09-27 18:20:13   update_state_reported_bbrun_hr 324
     2021-09-27 18:20:13   update_state_reported_bbrun_min 32
     2021-09-27 18:20:13   update_state_reported_bbrun_nCBump 0
     2021-09-27 18:20:13   update_state_reported_bbrun_nCliffsF 11604
     2021-09-27 18:20:13   update_state_reported_bbrun_nCliffsR 9557
     2021-09-27 18:20:13   update_state_reported_bbrun_nMBStll 9
     2021-09-27 18:20:13   update_state_reported_bbrun_nPanics 706
     2021-09-27 18:20:13   update_state_reported_bbrun_nPicks 1330
     2021-09-27 18:20:13   update_state_reported_bbrun_nScrubs 379
     2021-09-27 18:20:13   update_state_reported_bbrun_nStuck 191
     2021-09-27 18:20:13   update_state_reported_bbrun_nWStll 5
     2021-09-27 18:20:13   update_state_reported_bbrun_sqft 1346
     2021-09-27 18:20:12   update_state_reported_bbswitch_nBumper 44074
     2021-09-27 18:20:12   update_state_reported_bbswitch_nClean 571
     2021-09-27 18:20:12   update_state_reported_bbswitch_nDock 230
     2021-09-27 18:20:12   update_state_reported_bbswitch_nDrops 1035
     2021-09-27 18:20:12   update_state_reported_bbswitch_nSpot 62
     2021-09-27 18:20:13   update_state_reported_bbsys_hr 15809
     2021-09-27 18:20:13   update_state_reported_bbsys_min 42
     2021-09-27 18:20:12   update_state_reported_binPause false
     2021-09-27 18:20:12   update_state_reported_bin_full false
     2021-09-27 18:20:12   update_state_reported_bin_present true
     2021-09-27 18:20:12   update_state_reported_bootloaderVer 4042
     2021-09-27 18:20:12   update_state_reported_cap_binFullDetect 1
     2021-09-27 18:20:12   update_state_reported_cap_eco 1
     2021-09-27 18:20:12   update_state_reported_cap_edge 1
     2021-09-27 18:20:12   update_state_reported_cap_langOta 1
     2021-09-27 18:20:12   update_state_reported_cap_maps 1
     2021-09-27 18:20:12   update_state_reported_cap_multiPass 2
     2021-09-27 18:20:12   update_state_reported_cap_ota 2
     2021-09-27 18:20:12   update_state_reported_cap_pose 1
     2021-09-27 18:20:12   update_state_reported_cap_pp 1
     2021-09-27 18:20:12   update_state_reported_cap_svcConf 1
     2021-09-27 18:20:12   update_state_reported_carpetBoost true
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_cycle none
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_error 0
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_expireM 0
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_expireTm 0
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_initiator localApp
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_mssnM 0
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_mssnStrtTm 0
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_nMssn 727
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_notReady 0
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_phase charge
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_rechrgM 0
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_rechrgTm 0
     2021-09-27 18:20:12   update_state_reported_cleanMissionStatus_sqft 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_cycle_1 none
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_cycle_2 none
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_cycle_3 none
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_cycle_4 none
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_cycle_5 none
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_cycle_6 none
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_cycle_7 none
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_h_1 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_h_2 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_h_3 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_h_4 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_h_5 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_h_6 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_h_7 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_m_1 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_m_2 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_m_3 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_m_4 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_m_5 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_m_6 0
     2021-09-27 18:20:12   update_state_reported_cleanSchedule_m_7 0
     2021-09-27 18:20:12   update_state_reported_cloudEnv prod
     2021-09-27 18:20:12   update_state_reported_country DE
     2021-09-27 18:20:12   update_state_reported_dock_known false
     2021-09-27 18:20:12   update_state_reported_ecoCharge false
     2021-09-27 18:20:12   update_state_reported_hardwareRev 3
     2021-09-27 18:20:12   update_state_reported_langs_1_en-UK 0
     2021-09-27 18:20:12   update_state_reported_langs_2_fr-FR 1
     2021-09-27 18:20:12   update_state_reported_langs_3_es-ES 2
     2021-09-27 18:20:12   update_state_reported_langs_4_it-IT 3
     2021-09-27 18:20:12   update_state_reported_langs_5_de-DE 4
     2021-09-27 18:20:12   update_state_reported_langs_6_ru-RU 5
     2021-09-27 18:20:12   update_state_reported_language 0
     2021-09-27 18:20:12   update_state_reported_lastCommand_command pause
     2021-09-27 18:20:12   update_state_reported_lastCommand_initiator localApp
     2021-09-27 18:20:12   update_state_reported_lastCommand_time 1
     2021-09-27 18:20:12   update_state_reported_mapUploadAllowed true
     2021-09-27 18:20:12   update_state_reported_mobilityVer 5938
     2021-09-27 18:20:12   update_state_reported_name Home
     2021-09-27 18:20:12   update_state_reported_navSwVer 01.12.01#1
     2021-09-27 18:20:12   update_state_reported_noAutoPasses false
     2021-09-27 18:20:12   update_state_reported_noPP false
     2021-09-27 18:20:12   update_state_reported_openOnly false
     2021-09-27 18:20:12   update_state_reported_schedHold false
     2021-09-27 18:20:12   update_state_reported_sku R960040
     2021-09-27 18:20:12   update_state_reported_softwareVer v2.4.16-126
     2021-09-27 18:20:12   update_state_reported_soundVer 32
     2021-09-27 18:20:12   update_state_reported_svcEndpoints_svcDeplId v011
     2021-09-27 18:20:12   update_state_reported_timezone Europe/Berlin
     2021-09-27 18:20:12   update_state_reported_twoPass false
     2021-09-27 18:20:12   update_state_reported_tz_events_1_dt 1625140800
     2021-09-27 18:20:12   update_state_reported_tz_events_1_off 120
     2021-09-27 18:20:12   update_state_reported_tz_events_2_dt 1635642001
     2021-09-27 18:20:12   update_state_reported_tz_events_2_off 60
     2021-09-27 18:20:12   update_state_reported_tz_events_3_dt 1648342801
     2021-09-27 18:20:12   update_state_reported_tz_events_3_off 120
     2021-09-27 18:20:12   update_state_reported_tz_ver 11
     2021-09-27 18:20:12   update_state_reported_uiSwVer 4582
     2021-09-27 18:20:12   update_state_reported_umiVer 6
     2021-09-27 18:20:12   update_state_reported_vacHigh false
     2021-09-27 18:20:12   update_state_reported_wifiAnt 1
     2021-09-27 18:20:12   update_state_reported_wifiSwVer 21045
Attributes:
   readingList 3XXXXXXXXXXXXXX0:wifistat:.* { json2nameValue($EVENT, 'UNDEFINED_', $JSONMAP) }
3XXXXXXXXXXXXXX0:\x24aws/things/3XXXXXXXXXXXXXX0/shadow/update:.* { json2nameValue($EVENT, 'update_', $JSONMAP) }
$DEVICETOPIC:.* {roomba::reading($NAME,$EVENT)}
   room       Roomba
   setList    start cmd {"command": "start", "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"}

Nochmals vielen Dank für die Unterstützung!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 28 September 2021, 09:13:02
1. Bitte Anfängerdoku lesen.
2. Modul 99_RoombaUtils.pm installieren.
3. Wiki befolgen: attr <device> readingList $DEVICETOPIC:.* {roomba::reading($NAME,$EVENT)}
LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 05 Oktober 2021, 12:54:31
Hallo,

nach einigem Lesen (nicht nur hier), habe ich es hin bekommen die "Zugangsdaten" aus meinem neuen Roomba J7 auszulesen. (mit der sauteuren iOS-App "Thor HTTP(S) Sniffer") und die beiden MQTTs (Client und Device) anzulegen. Funktioniert soweit. Muss mich nur bissi mehr in den Mechanismus mit dem "SetList" für die Kommandos rein fuchsen...

Allerdings habe ich eine seltsame Auffälligkeit (so wie das Modul "aus der Schachtel purzelt", ohne Veränderungen): Ich sehe zwar gefühlt eine Fantastilliarde Readings, aber nix was den Batterie-/Ladestand preisgibt. Oder ich sehe die Information vor lauter Readings nicht?

Liebe Grüße
Mike
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 05 Oktober 2021, 13:08:12
Hallo,

nach einigem Lesen (nicht nur hier), habe ich es hin bekommen die "Zugangsdaten" aus meinem neuen Roomba J7 auszulesen. (mit der sauteuren iOS-App "Thor HTTP(S) Sniffer") und die beiden MQTTs (Client und Device) anzulegen. Funktioniert soweit. Muss mich nur bissi mehr in den Mechanismus mit dem "SetList" für die Kommandos rein fuchsen...

Allerdings habe ich eine seltsame Auffälligkeit (so wie das Modul "aus der Schachtel purzelt", ohne Veränderungen): Ich sehe zwar gefühlt eine Fantastilliarde Readings, aber nix was den Batterie-/Ladestand preisgibt. Oder ich sehe die Information vor lauter Readings nicht?

Liebe Grüße
Mike

OK, weil ich leicht schizo bin, antworte ich mir mal selbst...
Ich hab nun die "99_RoombaUtils.pm" aus Post #317 genommen, und damit habe ich die Anzahl der Readings auf 3 Fantastilliarden erhöht. Hier ist nun auch ein "state_reported_batPct" dabei. Perfekt!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 05 Oktober 2021, 14:28:11
Bin noch nicht so 100%ig zufrieden...

Am Anfang, nach beachten des Anfänger-WIKIs zum Thema, konnte ich meinen Roomba starten, pausieren und ins Dock fahren.
Jetzt nach dem hin und her Kopieren der "99_RoombaUtils.pm" funktionieren die "set"-Befehle nicht mehr. Connectet ist er, sieht man an den regelmäßigen Aktualisierungen der WLAN-Feldstärken (RSSI, SNR,...). Auch das herstellen der Original "99_RoombaUtils.pm" bringt keine Verbesserung. Was ich seitdem gemacht haben ist ein SetList weiter unten aus dem WIKI:
attr Roomba setList start:noArg {roomba::command($NAME,"start",$EVENT)} \
 stop:noArg {roomba::command($NAME,"stop",$EVENT)} \
 dock:noArg {roomba::command($NAME,"dock",$EVENT)} \
 resume:noArg {roomba::command($NAME,"resume",$EVENT)} \
 pause:noArg {roomba::command($NAME,"pause",$EVENT)} \
 CarpetBoost:true,false {roomba::setting($NAME,"carpetBoost",$EVENT)} \
 TwoPass:true,false {roomba::setting($NAME,"twoPass",$EVENT)} \
 NoAutoPasses:true,false {roomba::setting($NAME,"noAutoPasses",$EVENT)} \
 NoPP:true,false {roomba::setting($NAME,"noPP",$EVENT)} \
 VacHigh:true,false {roomba::setting($NAME,"vacHigh",$EVENT)} \
 BinPause:true,false {roomba::setting($NAME,"binPause",$EVENT)} \
 OpenOnly:true,false {roomba::setting($NAME,"openOnly",$EVENT)} \
 maplist:noArg {roomba::setting($NAME,"local:cmMapList={listmaps('$NAME')}",$EVENT)} \
 mapdel {roomba::setting($NAME,"local:cmMapList={delmap('$NAME','$EVENT')}",$EVENT)}

habe aber auch das mit diesem setList ganz oben aus dem WIKI wieder rückgängig gemacht (hoffe ich):
attr Roomba setList start cmd {"command": "start", "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"}


Im Log steht:
2021.10.05 14:20:16 3: MQTT2_DEVICE set Roomba start
2021.10.05 14:20:16 1: ERROR evaluating my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $NAME=   $evalSpecials->{'%NAME'};{roomba::command($NAME,"start",$EVENT)}: Undefined subroutine &roomba::command called at (eval 372) line 1.

Jetzt stehe ich doch wieder da und bräuchte mal Hilfe...  :(
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 05 Oktober 2021, 18:33:38
Steht doch im Log. Das Package "roomba", also der Inhalt der Datei 99_RoombaUtils.pm, ist nicht bekannt.

Merke: "Hin- und herkopieren" führt in die Irre, wenn man sich nicht an die Anleitung hält.


LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 05 Oktober 2021, 18:38:22
Also eigentlich habe ich es da gelassen, wo ich es auch gefunden hatte:
drwxr-xr-x 2 fhem dial out 4096 Okt 5 14:17 .
drwxr-xr-x 52 fhem dial out 12288 Okt 4 12:14
-rw-r--r-- 1 fhem dial out 56937 Okt 5 14:17 99_RoombaUtils.pm
pi@raspberry:/opt/fhem/contrib/Roomba $

Also unter: /opt/fhem/contrib/Roomba

OK, an "Wer lesen kann ist klar im Vorteil" ist wohl doch was dran!
Hab die "99_RoombaUtils.pm" jetzt wie in der Anleitung beschrieben nach fhem/FHEM kopiert und es geht. Selztsam ist nur, das ich da gar nicht drin rum geleuchtet hatte und es am Anfang trotzdem mal funktioniert hat...
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 06 Oktober 2021, 15:38:55
Ich bin nun an der Map-Integration dran...
...aber anscheinend bin ich wirklich zu blöde um eine einfach Anleitung zu befolgen?
Ich habe den Abschnitt "Reinigungskarten" meiner Meinung nach Step-by-Step komplett durchgearbeitet. Und weil da steht, dass der Bereich noch in Arbeit ist, habe ich die aktuelle (?) Version der "99_RoombaUtils.pm" aus dem SVN genommen.

Meine Attribute sehen aus, wie im Anhang, hier als Text:
Attributes:
IODev      RoombaClient
SVG_collect SVG_Roomba.xml
SVG_color1 green:lightgreen
SVG_color2 orange:yellow
SVG_color3 red:pink
SVG_color4 blue:lightblue
SVG_final  SVG_Roomba.svg
SVG_room   floorplan.svg
devicetopic 33C5CFE4551D4DCBA5F8BB89519869EA
noMap      false
readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
room       _Haushaltsgeräte
setList    start:noArg {roomba::command($NAME,"start",$EVENT)}
           stop:noArg {roomba::command($NAME,"stop",$EVENT)}
           dock:noArg {roomba::command($NAME,"dock",$EVENT)}
           resume:noArg {roomba::command($NAME,"resume",$EVENT)}
           pause:noArg {roomba::command($NAME,"pause",$EVENT)}
           CarpetBoost:true,false {roomba::setting($NAME,"carpetBoost",$EVENT)}
           TwoPass:true,false {roomba::setting($NAME,"twoPass",$EVENT)}
           NoAutoPasses:true,false {roomba::setting($NAME,"noAutoPasses",$EVENT)}
           NoPP:true,false {roomba::setting($NAME,"noPP",$EVENT)}
           BinPause:true,false {roomba::setting($NAME,"binPause",$EVENT)}
           OpenOnly:true,false {roomba::setting($NAME,"openOnly",$EVENT)}
           maplist:noArg {roomba::setting($NAME,"local:cmMapList={listmaps('$NAME')}",$EVENT)}
           mapdel {roomba::setting($NAME,"local:cmMapList={delmap('$NAME','$EVENT')}",$EVENT)}
           startdir   north
           startx     0
           starty     0
           stateFormat state_reported_batPct% (Batterieladung)
           userattr   startdir:north,west,south,east startx starty LOG_dir SVG_dir SVG_room SVG_collect SVG_final SVG_color1 SVG_color2 SVG_color3 SVG_color4 noMap:true,false

Für die Template-SVG habe ich aus dem Wiki als ersten Versuch die erste leere Variante genommen:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="800" viewBox="-30 -30 1200 800">
</svg>

Start- und Endpunkt erstmal auf 0, Ausrichtung Norden

Mit set Roomba maplist bekomme ich aber kein Reading maplist. Egal ob ich es vor oder nach einem Reinigungslauf absetze.
Ebenso wird auch keine XML-Datei mit dem angegebenen Namen erzeugt. (wo müsste die den sein? Habe rekursiv die ganze /opt/fhem-Struktur durchsucht)
Im Log (Verbose=5) steht auch nichts Auffälliges in Richtung Map-Generierung

Und was mir zusätzlich fehlt: Wie mache ich denn eine erstellte Karte im FHEM sichtbar?



LG
Mike

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 06 Oktober 2021, 15:42:04
Vielleicht eine Sache noch:
autocreate ist bei mir disabled, weil ich sonst hunderte von KNX-Objekten bekomme.
Hoffe damit hat es nix zu tun!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 06 Oktober 2021, 18:24:10
Bitte das hier befolgen.
Zitat
      <li><code><b>noMap</b> true|false</code>&nbsp;&nbsp;-&nbsp;&nbsp; if set to true, no map data will be collected</li>
      <li><code><b>LOG_dir</b> <directory name> </code>&nbsp;&nbsp;-&nbsp;&nbsp; directory for writing a log file (in perl format!) of each cleaning mission.
         If this attribute is omitted, no such file will be written</li>
      <li><code><b>SVG_dir</b> <directory name> </code>&nbsp;&nbsp;-&nbsp;&nbsp; directory for reading a graphical room map in SVG format and reading/writing intermediate XML files of each cleaning mission.
         If this attribute is omitted, the default <code>/opt/fhem/www/images</code> will be used</li>. Note: In order to display the files via FHEMWEB frontend, they must reside in the working space of the web server.
      <li><code><b>SVG_room</b> <file name> </code>&nbsp;&nbsp;-&nbsp;&nbsp; filename for reading a graphical room map in SVG format.
         If this attribute is missing, no such file will be written</li>
      <li><code><b>SVG_collect</b> <file name> </code>&nbsp;&nbsp;-&nbsp;&nbsp; filename for reading/writing intermediate XML file of each cleaning mission.
         If this attribute is missing, the default <code>SVG_<device>.xml</code> will be used</li>
      <li><code><b>SVG_final</b> <file name> </code>&nbsp;&nbsp;-&nbsp;&nbsp; filename for writing final SVG file of each cleaning mission.
         If this attribute is missing, the default <code>SVG_<device>.svg</code> will be used</li>


Zitat
Selztsam ist nur, das ich da gar nicht drin rum geleuchtet hatte und es am Anfang trotzdem mal funktioniert hat...
Endlich, die Magie ist entdeckt! Programme funktionieren, ohne dass sie geladen und gestartet werden...

LG pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 06 Oktober 2021, 18:44:35
Bitte das hier befolgen.
Endlich, die Magie ist entdeckt! Programme funktionieren, ohne dass sie geladen und gestartet werden...

Also, ich bin Dipl.-Inform. und seit über 40 Jahren "im Geschäft", und hab schon so ziemlich alles erlebt. Von Reinigungskräften die den Schukostecker so in die Steckdose stecken, das es nur so aussieht als wäre er drinne, über Seiteneffekte, die Sicherheitseinstellungen außer kraft setzen, bis hin zu Programmen die laufen obwohl sie gar nicht da sind (z.B. Netzwerkpfade im User-Path-Env) und und und
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: SebastianStorb am 12 Oktober 2021, 15:53:06
 Ich komme mit der Anleitung nicht klar, weil diese bereits im 2 FHEM System nicht funktionieren und zu Fehlermeldungen führen.

Als Benutzer lässt sich bei meinen Systemen die Anleitung in keine Weise umsetzen. Was funktioniert hat, damit die Installation überhaupt funktioniert ist:

zu su - mit Passwort wechseln dann:
pip3 install paho-mqtt   (klappt nicht (ohne su /pip3)
pip3 install aiohttp      (klappt nicht (ohne su /pip3)
pip3install pillow      (klappt nicht (ohne su /pip3)
pip3 install six

In welches Verzeichnis muss dorita980 kopiert werden? Oder ist das nicht wichtig?

git clone https://github.com/koalazak/dorita980.git
cd dorita980
npm install
npm audit fix --force      

Passwort bekomme ich und Verbindung steht - leider auch der Roboter - keine Reaktion auf nichts!


2021.10.12 15:24:16 3: MQTT2_DEVICE set RoombaFeger start
2021.10.12 15:24:16 5: HttpUtils url=https://192.168.0.32:8883/ NonBlocking via https
2021.10.12 15:24:16 4: IP: 192.168.0.32 -> 192.168.0.32
2021.10.12 15:24:20 5: RoombaFegerClient: sending CONNECT (16)N(0)(4)MQTT(4)(194)(0)(30)(0)(16)3192C22060734880(0)(16)3192C22060734880(0)(30)XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2021.10.12 15:24:20 5: DevIo_SimpleWrite RoombaFegerClient: 104e00044d51545404c2001e001033313932433232303630373334383830001033313932433232303630373334383830001e3a313a313536363330383331323a6b454744577250536d4148534b326e74
2021.10.12 15:24:20 5: 192.168.0.32:8883 reappeared (RoombaFegerClient)
2021.10.12 15:24:20 5: RoombaFegerClient: received CONNACK (0)(0)
2021.10.12 15:24:20 5: RoombaFegerClient: sending SUBSCRIBE (130)(6)(0)(12)(0)(1)#(0)
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"netinfo":{"dhcp":true,"addr":3232235552,"mask":4294967040,"gw":3232235521,"dns1":3232235521,"dns2":0,"bssid":"3c:a6:2f:1e:9e:c4","sec":4}}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"netinfo":{"dhcp":true,"addr":3232235552,"mask":4294967040,"gw":3232235521,"dns1":3232235521,"dns2":0,"bssid":"3c:a6:2f:1e:9e:c4","sec":4}}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"wifistat":{"wifi":1,"uap":false,"cloud":1}}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"wifistat":{"wifi":1,"uap":false,"cloud":1}}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"netinfo":{"dhcp":true,"addr":3232235552,"mask":4294967040,"gw":3232235521,"dns1":3232235521,"dns2":0,"bssid":"3c:a6:2f:1e:9e:c4","sec":4}}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"netinfo":{"dhcp":true,"addr":3232235552,"mask":4294967040,"gw":3232235521,"dns1":3232235521,"dns2":0,"bssid":"3c:a6:2f:1e:9e:c4","sec":4}}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"wlcfg":{"sec":7,"ssid":"404040"}}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"wlcfg":{"sec":7,"ssid":"404040"}}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received SUBACK (0)(12)(0)
2021.10.12 15:24:20 5: RoombaFegerClient: sending PUBLISH 0?(0)(3)cmd{"command": "start", "time": 1, "initiator": "localApp"} \
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"mac":"dc:f5:05:90:83:0b"}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"mac":"dc:f5:05:90:83:0b"}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"country": "DE"}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"country": "DE"}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"cloudEnv": "prod"}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"cloudEnv": "prod"}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"svcEndpoints":{"svcDeplId": "v007"}}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"svcEndpoints":{"svcDeplId": "v007"}}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"wifiAnt":1}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"wifiAnt":1}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"mapUploadAllowed":true}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"mapUploadAllowed":true}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"signal":{"rssi":-47,"snr":42}}}}
2021.10.12 15:24:20 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"signal":{"rssi":-47,"snr":42}}}}
2021.10.12 15:24:20 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:20 5: 192.168.0.32:8883 disconnected, waiting to reappear (RoombaFegerClient)
2021.10.12 15:24:22 5: HttpUtils url=https://192.168.0.32:8883/ NonBlocking via https
2021.10.12 15:24:22 4: IP: 192.168.0.32 -> 192.168.0.32
2021.10.12 15:24:26 5: RoombaFegerClient: sending CONNECT (16)N(0)(4)MQTT(4)(194)(0)(30)(0)(16)3192C22060734880(0)(16)3192C22060734880(0)(30)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2021.10.12 15:24:26 5: DevIo_SimpleWrite RoombaFegerClient: 104e00044d51545404c2001e001033313932433232303630373334383830001033313932433232303630373334383830001e3a313a313536363330383331323a6b454744577250536d4148534b326e74
2021.10.12 15:24:26 5: 192.168.0.32:8883 reappeared (RoombaFegerClient)
2021.10.12 15:24:26 5: RoombaFegerClient: received CONNACK (0)(0)
2021.10.12 15:24:26 5: RoombaFegerClient: sending SUBSCRIBE (130)(6)(0)(11)(0)(1)#(0)
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"netinfo":{"dhcp":true,"addr":3232235552,"mask":4294967040,"gw":3232235521,"dns1":3232235521,"dns2":0,"bssid":"3c:a6:2f:1e:9e:c4","sec":4}}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"netinfo":{"dhcp":true,"addr":3232235552,"mask":4294967040,"gw":3232235521,"dns1":3232235521,"dns2":0,"bssid":"3c:a6:2f:1e:9e:c4","sec":4}}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"wifistat":{"wifi":1,"uap":false,"cloud":1}}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"wifistat":{"wifi":1,"uap":false,"cloud":1}}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"netinfo":{"dhcp":true,"addr":3232235552,"mask":4294967040,"gw":3232235521,"dns1":3232235521,"dns2":0,"bssid":"3c:a6:2f:1e:9e:c4","sec":4}}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"netinfo":{"dhcp":true,"addr":3232235552,"mask":4294967040,"gw":3232235521,"dns1":3232235521,"dns2":0,"bssid":"3c:a6:2f:1e:9e:c4","sec":4}}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received SUBACK (0)(11)(0)
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"wlcfg":{"sec":7,"ssid":"404040"}}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"wlcfg":{"sec":7,"ssid":"404040"}}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"mac":"dc:f5:05:90:83:0b"}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"mac":"dc:f5:05:90:83:0b"}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"country": "DE"}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"country": "DE"}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"cloudEnv": "prod"}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"cloudEnv": "prod"}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"svcEndpoints":{"svcDeplId": "v007"}}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"svcEndpoints":{"svcDeplId": "v007"}}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"wifiAnt":1}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"wifiAnt":1}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"mapUploadAllowed":true}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"mapUploadAllowed":true}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:26 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"localtimeoffset":120,"utctime":1634045065,"pose":{"theta":99,"point":{"x":34,"y":-15}}}}}
2021.10.12 15:24:26 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"localtimeoffset":120,"utctime":1634045065,"pose":{"theta":99,"point":{"x":34,"y":-15}}}}}
2021.10.12 15:24:26 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:27 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"batPct":100,"dock":{"known":true},"bin":{"present":true,"full":false},"cleanMissionStatus":{"cycle":"none","phase":"charge","expireM":0,"rechrgM":0,"error":0,"notReady":0,"mssnM":0,"mssnStrtTm":0,"expireTm":0,"rechrgTm":0,"sqft":0,"initiator":"localApp","nMssn":156},"language":4,"noAutoPasses":true,"noPP":false,"ecoCharge":false,"vacHigh":false,"binPause":true,"carpetBoost":true,"openOnly":false,"twoPass":true,"schedHold":false}}}
2021.10.12 15:24:27 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"batPct":100,"dock":{"known":true},"bin":{"present":true,"full":false},"cleanMissionStatus":{"cycle":"none","phase":"charge","expireM":0,"rechrgM":0,"error":0,"notReady":0,"mssnM":0,"mssnStrtTm":0,"expireTm":0,"rechrgTm":0,"sqft":0,"initiator":"localApp","nMssn":156},"language":4,"noAutoPasses":true,"noPP":false,"ecoCharge":false,"vacHigh":false,"binPause":true,"carpetBoost":true,"openOnly":false,"twoPass":true,"schedHold":false}}}
2021.10.12 15:24:27 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:27 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"lastCommand":{"command":"dock","time":1634044399,"initiator":"localApp"},"langs":[{"en-UK":0},{"fr-FR":1},{"es-ES":2},{"it-IT":3},{"de-DE":4},{"ru-RU":5}],"bbnav":{"aMtrack":13,"nGoodLmrks":21,"aGain":12,"aExpo":18},"bbpanic":{"panics":[1,8,8,8,8]},"bbpause":{"pauses":[2,2,17,17,0,6,2,0,0,6]},"bbmssn":{"nMssn":156,"nMssnOk":87,"nMssnC":54,"nMssnF":15,"aMssnM":40,"aCycleM":39},"bbrstinfo":{"nNavRst":31,"nMobRst":0,"causes":"0000"}}}}
2021.10.12 15:24:27 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"lastCommand":{"command":"dock","time":1634044399,"initiator":"localApp"},"langs":[{"en-UK":0},{"fr-FR":1},{"es-ES":2},{"it-IT":3},{"de-DE":4},{"ru-RU":5}],"bbnav":{"aMtrack":13,"nGoodLmrks":21,"aGain":12,"aExpo":18},"bbpanic":{"panics":[1,8,8,8,8]},"bbpause":{"pauses":[2,2,17,17,0,6,2,0,0,6]},"bbmssn":{"nMssn":156,"nMssnOk":87,"nMssnC":54,"nMssnF":15,"aMssnM":40,"aCycleM":39},"bbrstinfo":{"nNavRst":31,"nMobRst":0,"causes":"0000"}}}}
2021.10.12 15:24:27 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:27 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"cap":{"pose":1,"ota":2,"multiPass":2,"pp":1,"binFullDetect":1,"langOta":1,"maps":1,"edge":1,"eco":1,"svcConf":1},"hardwareRev":3,"sku":"R96----","batteryType":"li26","soundVer":"32","uiSwVer":"4582","navSwVer":"01.12.01#1","wifiSwVer":"21045","mobilityVer":"5938","bootloaderVer":"4042","umiVer":"6","softwareVer":"v2.4.16-126","tz":{"events":[{"dt":1633089600,"off":120},{"dt":1635642001,"off":60},{"dt":1648342801,"off":120}],"ver":12},"timezone":"Europe/Berlin","name":"Baltrum"}}}
2021.10.12 15:24:27 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"cap":{"pose":1,"ota":2,"multiPass":2,"pp":1,"binFullDetect":1,"langOta":1,"maps":1,"edge":1,"eco":1,"svcConf":1},"hardwareRev":3,"sku":"R96----","batteryType":"li26","soundVer":"32","uiSwVer":"4582","navSwVer":"01.12.01#1","wifiSwVer":"21045","mobilityVer":"5938","bootloaderVer":"4042","umiVer":"6","softwareVer":"v2.4.16-126","tz":{"events":[{"dt":1633089600,"off":120},{"dt":1635642001,"off":60},{"dt":1648342801,"off":120}],"ver":12},"timezone":"Europe/Berlin","name":"Baltrum"}}}
2021.10.12 15:24:27 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:27 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"cleanSchedule":{"cycle":["none","none","none","none","none","none","none"],"h":[11,11,11,11,11,11,11],"m":[0,0,0,0,0,0,0]},"bbchg3":{"avgMin":220,"hOnDock":2190,"nAvail":985,"estCap":7451,"nLithChrg":124,"nNimhChrg":0,"nDocks":79},"bbchg":{"nChgOk":123,"nLithF":0,"aborts":[4,0,0]},"bbswitch":{"nBumper":40160,"nClean":246,"nSpot":11,"nDock":79,"nDrops":103}}}}
2021.10.12 15:24:27 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"cleanSchedule":{"cycle":["none","none","none","none","none","none","none"],"h":[11,11,11,11,11,11,11],"m":[0,0,0,0,0,0,0]},"bbchg3":{"avgMin":220,"hOnDock":2190,"nAvail":985,"estCap":7451,"nLithChrg":124,"nNimhChrg":0,"nDocks":79},"bbchg":{"nChgOk":123,"nLithF":0,"aborts":[4,0,0]},"bbswitch":{"nBumper":40160,"nClean":246,"nSpot":11,"nDock":79,"nDrops":103}}}}
2021.10.12 15:24:27 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:27 5: RoombaFegerClient: received PUBLISH (0)*$aws/things/3192C22060734880/shadow/update{"state":{"reported":{"bbrun":{"hr":114,"min":38,"sqft":453,"nStuck":47,"nScrubs":101,"nPicks":418,"nPanics":82,"nCliffsF":1508,"nCliffsR":3129,"nMBStll":4,"nWStll":1,"nCBump":0},"bbsys":{"hr":2366,"min":0}}}}
2021.10.12 15:24:27 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000$aws/things/3192C22060734880/shadow/update\000{"state":{"reported":{"bbrun":{"hr":114,"min":38,"sqft":453,"nStuck":47,"nScrubs":101,"nPicks":418,"nPanics":82,"nCliffsF":1508,"nCliffsR":3129,"nMBStll":4,"nWStll":1,"nCBump":0},"bbsys":{"hr":2366,"min":0}}}}
2021.10.12 15:24:27 4: MQTT2_DEVICE_Parse: RoombaFeger $aws/things/3192C22060734880/shadow/update => { json2nameValue($EVENT) }
2021.10.12 15:24:31 5: RoombaFegerClient: received PUBLISH (0)(8)wifistat{"state":{"reported":{"signal":{"rssi":-48,"snr":40}}}}
2021.10.12 15:24:31 5: RoombaFegerClient: dispatch autocreate=no\0003192C22060734880\000wifistat\000{"state":{"reported":{"signal":{"rssi":-48,"snr":40}}}}
2021.10.12 15:24:31 4: MQTT2_DEVICE_Parse: RoombaFeger wifistat => { json2nameValue($EVENT) }
2021.10.12 15:24:36 5: RoombaFegerClient: sending DISCONNECT (224)(0)
2021.10.12 15:24:36 5: DevIo_SimpleWrite RoombaFegerClient: e000
2021.10.12 15:24:54 1: RMDIR: ./restoreDir/save/2021-04-05
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 12 Oktober 2021, 18:16:19
Die Darstellung, irgendetwas "würde nicht klappen", steht im Widerspruch zum Log. Es klappt eben doch.

FHEM verbindet sich mit dem Roboter und empfängt auch Daten. Jetzt muss man "nur" das Richtige senden, dann steuert man ihn auch. Wie das geht, ist im Wiki beschrieben - und das hat _gar nichts_ mit den Installationen zu tun.

Natürlich muss man im RoombaFegerClient "autocreate" auf "simple" stellen, sonst wird das Device eben nicht angelegt.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: SebastianStorb am 13 Oktober 2021, 17:26:19
Ich habe mein (gemäß dem Wiki) angelegten Device also wieder gelöscht und bin durch Ihren Hinweis darauf gekommen, dass ich es gar nicht hätte anlegen müssen. Stattdessen sollte ich Autocreate Simple einstellen damit sich das Device erste einmal selber anlegt. Falls das jetzt so korrekt ist hierr nochmals die Auszüge aus dem Wiki:

zu 1.) im Wiki steht:
Einrichten eines MQTT Device
Definieren Sie in FHEM

define RoombaFeger MQTT2_DEVICE 3###########0
attr RoombaFeger IODev RoombaFegerClient
attr RoombaFeger devicetopic 3###########0
attr RoombaFeger readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
attr RoombaFeger setList start cmd {"command": "start", "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"}
wobei natürlich wieder die oben erhaltene blid für die fett hervorgehobenen Strings eingesetzt wird. Sie erhalten dadurch ein Device, dass Sie mit FHEM-Kommandos starten und anhalten können. Wenn der Roboter läuft, meldet er eine Vielzahl von Daten an FHEM - und nicht alle davon sind informativ.


zu 2. Außerdem steht im Wiki steht:
attr RoombaFegerClient    autocreate no

Ich habe abermals das Wiki gelesen - ohne hiermit in irgend einer Form weiter gekommen zu sein.

Ist es vielleicht das falsche Wiki?
https://wiki.fhem.de/wiki/Roomba


P.S Sobald mein Gerät mal funktioniert bin ich gerne Bereit eine Anleitung zu veröffentlichen, mit der dann auch Anfänger den Roboter zum laufen bringt. Ich wäre sehr froh, wenn Sie mir noch mal einen (hoffentlich letzten) Tipp geben könnten - oder die entscheidende Stelle aus dem Wiki hierhin kopieren.
 

Vielen Dank und beste Grüße

Internals:
   Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
   ClientsKeepOrder 1
   DEF        192.168.0.32:8883
   DeviceName 192.168.0.32:8883
   FUUID      61646ac5-f33f-5bdf-fdac-f79b518718899633
   FVERSION   00_MQTT2_CLIENT.pm:0.249820/2021-09-16
   NAME       RoombaFegerClient
   NR         28
   SSL        1
   STATE      disconnected
   TIMEOUT    6
   TYPE       MQTT2_CLIENT
   WBCallback
   clientId   3192C22060734880
   devioLoglevel 5
   disconnectAt 2021-10-13 17:09:30
   lastMsgTime 1634137765.79081
   nextOpenDelay 5
   MatchList:
     1:MQTT2_DEVICE ^.
     2:MQTT_GENERIC_BRIDGE ^.
   READINGS:
     2021-10-13 17:09:30   state           disconnected
   sslargs:
     SSL_version SSLv23
Attributes:
   SSL        1
   autocreate simple
   clientId   3XXXXXXXXXXXXXX0
   connectTimeout 6
   disconnectAfter 5
   mqttVersion 3.1.1
   room       Roomba
   sslargs    SSL_version:SSLv23
   username   3XXXXXXXXXXXXXX0
   verbose    0

Das Gerät was angelegt wurde habe ich dann wieder umbenannt, was die Funktion auch nicht zum Leben erweckt hat. Vorher war der Name MQTT2_3XXXXXXXXXX

Internals:
   CID       
   DEF       
   DEVICETOPIC
   FUUID      6166f216-f33f-5bdf-756d-42f26b3770f45c74
   FVERSION   10_MQTT2_DEVICE.pm:0.248610/2021-08-20
   IODev      RoombaFegerClient
   LASTInputDev RoombaFegerClient
   MSGCNT     103
   NAME       RoombaFeger
   NR         29
   RoombaFegerClient_MSGCNT 103
   RoombaFegerClient_TIME 2021-10-13 17:09:25
   STATE      start
   TYPE       MQTT2_DEVICE
   READINGS:
     2021-10-13 17:02:50   IODev           RoombaFegerClient
     2021-10-13 17:09:08   state           start
     2021-10-13 17:09:17   state_reported_batPct 100
     2021-10-13 17:09:17   state_reported_batteryType li26
     2021-10-13 17:09:17   state_reported_bbchg3_avgMin 196
     2021-10-13 17:09:17   state_reported_bbchg3_estCap 7451
     2021-10-13 17:09:17   state_reported_bbchg3_hOnDock 2191
     2021-10-13 17:09:17   state_reported_bbchg3_nAvail 988
     2021-10-13 17:09:17   state_reported_bbchg3_nDocks 82
     2021-10-13 17:09:17   state_reported_bbchg3_nLithChrg 126
     2021-10-13 17:09:17   state_reported_bbchg3_nNimhChrg 0
     2021-10-13 17:09:17   state_reported_bbchg_aborts_1 4
     2021-10-13 17:09:17   state_reported_bbchg_aborts_2 0
     2021-10-13 17:09:17   state_reported_bbchg_aborts_3 0
     2021-10-13 17:09:17   state_reported_bbchg_nChgOk 124
     2021-10-13 17:09:17   state_reported_bbchg_nLithF 0
     2021-10-13 17:09:17   state_reported_bbmssn_aCycleM 39
     2021-10-13 17:09:17   state_reported_bbmssn_aMssnM 41
     2021-10-13 17:09:17   state_reported_bbmssn_nMssn 157
     2021-10-13 17:09:17   state_reported_bbmssn_nMssnC 54
     2021-10-13 17:09:17   state_reported_bbmssn_nMssnF 15
     2021-10-13 17:09:17   state_reported_bbmssn_nMssnOk 88
     2021-10-13 17:09:17   state_reported_bbnav_aExpo 8
     2021-10-13 17:09:17   state_reported_bbnav_aGain 11
     2021-10-13 17:09:17   state_reported_bbnav_aMtrack 17
     2021-10-13 17:09:17   state_reported_bbnav_nGoodLmrks 20
     2021-10-13 17:09:17   state_reported_bbpanic_panics_1 8
     2021-10-13 17:09:17   state_reported_bbpanic_panics_2 1
     2021-10-13 17:09:17   state_reported_bbpanic_panics_3 8
     2021-10-13 17:09:17   state_reported_bbpanic_panics_4 8
     2021-10-13 17:09:17   state_reported_bbpanic_panics_5 8
     2021-10-13 17:09:17   state_reported_bbpause_pauses_1 2
     2021-10-13 17:09:17   state_reported_bbpause_pauses_10 6
     2021-10-13 17:09:17   state_reported_bbpause_pauses_2 2
     2021-10-13 17:09:17   state_reported_bbpause_pauses_3 17
     2021-10-13 17:09:17   state_reported_bbpause_pauses_4 17
     2021-10-13 17:09:17   state_reported_bbpause_pauses_5 0
     2021-10-13 17:09:17   state_reported_bbpause_pauses_6 6
     2021-10-13 17:09:17   state_reported_bbpause_pauses_7 2
     2021-10-13 17:09:17   state_reported_bbpause_pauses_8 0
     2021-10-13 17:09:17   state_reported_bbpause_pauses_9 0
     2021-10-13 17:09:17   state_reported_bbrstinfo_causes 0000
     2021-10-13 17:09:17   state_reported_bbrstinfo_nMobRst 0
     2021-10-13 17:09:17   state_reported_bbrstinfo_nNavRst 31
     2021-10-13 17:09:17   state_reported_bbrun_hr 115
     2021-10-13 17:09:17   state_reported_bbrun_min 27
     2021-10-13 17:09:17   state_reported_bbrun_nCBump 0
     2021-10-13 17:09:17   state_reported_bbrun_nCliffsF 1513
     2021-10-13 17:09:17   state_reported_bbrun_nCliffsR 3132
     2021-10-13 17:09:17   state_reported_bbrun_nMBStll 4
     2021-10-13 17:09:17   state_reported_bbrun_nPanics 83
     2021-10-13 17:09:17   state_reported_bbrun_nPicks 418
     2021-10-13 17:09:17   state_reported_bbrun_nScrubs 101
     2021-10-13 17:09:17   state_reported_bbrun_nStuck 47
     2021-10-13 17:09:17   state_reported_bbrun_nWStll 1
     2021-10-13 17:09:17   state_reported_bbrun_sqft 456
     2021-10-13 17:09:17   state_reported_bbswitch_nBumper 41044
     2021-10-13 17:09:17   state_reported_bbswitch_nClean 248
     2021-10-13 17:09:17   state_reported_bbswitch_nDock 82
     2021-10-13 17:09:17   state_reported_bbswitch_nDrops 103
     2021-10-13 17:09:17   state_reported_bbswitch_nSpot 13
     2021-10-13 17:09:17   state_reported_bbsys_hr 2387
     2021-10-13 17:09:17   state_reported_bbsys_min 57
     2021-10-13 17:09:17   state_reported_binPause true
     2021-10-13 17:09:17   state_reported_bin_full false
     2021-10-13 17:09:17   state_reported_bin_present true
     2021-10-13 17:09:17   state_reported_bootloaderVer 4042
     2021-10-13 17:09:17   state_reported_cap_binFullDetect 1
     2021-10-13 17:09:17   state_reported_cap_eco 1
     2021-10-13 17:09:17   state_reported_cap_edge 1
     2021-10-13 17:09:17   state_reported_cap_langOta 1
     2021-10-13 17:09:17   state_reported_cap_maps 1
     2021-10-13 17:09:17   state_reported_cap_multiPass 2
     2021-10-13 17:09:17   state_reported_cap_ota 2
     2021-10-13 17:09:17   state_reported_cap_pose 1
     2021-10-13 17:09:17   state_reported_cap_pp 1
     2021-10-13 17:09:17   state_reported_cap_svcConf 1
     2021-10-13 17:09:17   state_reported_carpetBoost true
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_cycle none
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_error 0
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_expireM 0
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_expireTm 0
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_initiator rmtApp
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_mssnM 0
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_mssnStrtTm 0
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_nMssn 0
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_notReady 0
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_phase charge
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_rechrgM 0
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_rechrgTm 0
     2021-10-13 17:09:17   state_reported_cleanMissionStatus_sqft 0
     2021-10-13 17:09:17   state_reported_cleanSchedule_cycle_1 none
     2021-10-13 17:09:17   state_reported_cleanSchedule_cycle_2 none
     2021-10-13 17:09:17   state_reported_cleanSchedule_cycle_3 none
     2021-10-13 17:09:17   state_reported_cleanSchedule_cycle_4 none
     2021-10-13 17:09:17   state_reported_cleanSchedule_cycle_5 none
     2021-10-13 17:09:17   state_reported_cleanSchedule_cycle_6 none
     2021-10-13 17:09:17   state_reported_cleanSchedule_cycle_7 none
     2021-10-13 17:09:17   state_reported_cleanSchedule_h_1 11
     2021-10-13 17:09:17   state_reported_cleanSchedule_h_2 11
     2021-10-13 17:09:17   state_reported_cleanSchedule_h_3 11
     2021-10-13 17:09:17   state_reported_cleanSchedule_h_4 11
     2021-10-13 17:09:17   state_reported_cleanSchedule_h_5 11
     2021-10-13 17:09:17   state_reported_cleanSchedule_h_6 11
     2021-10-13 17:09:17   state_reported_cleanSchedule_h_7 11
     2021-10-13 17:09:17   state_reported_cleanSchedule_m_1 0
     2021-10-13 17:09:17   state_reported_cleanSchedule_m_2 0
     2021-10-13 17:09:17   state_reported_cleanSchedule_m_3 0
     2021-10-13 17:09:17   state_reported_cleanSchedule_m_4 0
     2021-10-13 17:09:17   state_reported_cleanSchedule_m_5 0
     2021-10-13 17:09:17   state_reported_cleanSchedule_m_6 0
     2021-10-13 17:09:17   state_reported_cleanSchedule_m_7 0
     2021-10-13 17:09:16   state_reported_cloudEnv prod
     2021-10-13 17:09:16   state_reported_country DE
     2021-10-13 17:09:17   state_reported_dock_known false
     2021-10-13 17:09:22   state_reported_echo true
     2021-10-13 17:09:17   state_reported_ecoCharge false
     2021-10-13 17:09:17   state_reported_hardwareRev 3
     2021-10-13 17:09:17   state_reported_langs_1_en-UK 0
     2021-10-13 17:09:17   state_reported_langs_2_fr-FR 1
     2021-10-13 17:09:17   state_reported_langs_3_es-ES 2
     2021-10-13 17:09:17   state_reported_langs_4_it-IT 3
     2021-10-13 17:09:17   state_reported_langs_5_de-DE 4
     2021-10-13 17:09:17   state_reported_langs_6_ru-RU 5
     2021-10-13 17:09:17   state_reported_language 4
     2021-10-13 17:09:17   state_reported_lastCommand_command dock
     2021-10-13 17:09:17   state_reported_lastCommand_initiator rmtApp
     2021-10-13 17:09:17   state_reported_lastCommand_time 1634135991
     2021-10-13 17:09:16   state_reported_localtimeoffset 120
     2021-10-13 17:09:16   state_reported_mac dc:f5:05:90:83:0b
     2021-10-13 17:09:16   state_reported_mapUploadAllowed true
     2021-10-13 17:09:17   state_reported_mobilityVer 5938
     2021-10-13 17:09:17   state_reported_name Roomba
     2021-10-13 17:09:17   state_reported_navSwVer 01.12.01#1
     2021-10-13 17:09:16   state_reported_netinfo_addr 3232235552
     2021-10-13 17:09:16   state_reported_netinfo_bssid 3c:a6:2f:1e:9e:c4
     2021-10-13 17:09:16   state_reported_netinfo_dhcp true
     2021-10-13 17:09:16   state_reported_netinfo_dns1 3232235521
     2021-10-13 17:09:16   state_reported_netinfo_dns2 0
     2021-10-13 17:09:16   state_reported_netinfo_gw 3232235521
     2021-10-13 17:09:16   state_reported_netinfo_mask 4294967040
     2021-10-13 17:09:16   state_reported_netinfo_sec 4
     2021-10-13 17:09:17   state_reported_noAutoPasses true
     2021-10-13 17:09:17   state_reported_noPP false
     2021-10-13 17:09:17   state_reported_openOnly false
     2021-10-13 17:09:16   state_reported_pose_point_x 0
     2021-10-13 17:09:16   state_reported_pose_point_y 0
     2021-10-13 17:09:16   state_reported_pose_theta 0
     2021-10-13 17:09:17   state_reported_schedHold false
     2021-10-13 17:09:25   state_reported_signal_rssi -51
     2021-10-13 17:09:25   state_reported_signal_snr 38
     2021-10-13 17:09:17   state_reported_sku R960040
     2021-10-13 17:09:17   state_reported_softwareVer v2.4.16-126
     2021-10-13 17:09:17   state_reported_soundVer 32
     2021-10-13 17:09:16   state_reported_svcEndpoints_svcDeplId v007
     2021-10-13 17:09:17   state_reported_timezone Europe/Berlin
     2021-10-13 17:09:17   state_reported_twoPass true
     2021-10-13 17:09:17   state_reported_tz_events_1_dt 1633089600
     2021-10-13 17:09:17   state_reported_tz_events_1_off 120
     2021-10-13 17:09:17   state_reported_tz_events_2_dt 1635642001
     2021-10-13 17:09:17   state_reported_tz_events_2_off 60
     2021-10-13 17:09:17   state_reported_tz_events_3_dt 1648342801
     2021-10-13 17:09:17   state_reported_tz_events_3_off 120
     2021-10-13 17:09:17   state_reported_tz_ver 12
     2021-10-13 17:09:17   state_reported_uiSwVer 4582
     2021-10-13 17:09:17   state_reported_umiVer 6
     2021-10-13 17:09:16   state_reported_utctime 1634137755
     2021-10-13 17:09:17   state_reported_vacHigh false
     2021-10-13 17:09:16   state_reported_wifiAnt 1
     2021-10-13 17:09:17   state_reported_wifiSwVer 21045
     2021-10-13 17:09:16   state_reported_wifistat_cloud 1
     2021-10-13 17:09:16   state_reported_wifistat_uap false
     2021-10-13 17:09:16   state_reported_wifistat_wifi 1
     2021-10-13 17:09:16   state_reported_wlcfg_sec 7
     2021-10-13 17:09:16   state_reported_wlcfg_ssid 404040
Attributes:
   IODev      RoombaFegerClient
   devicetopic 
   readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
   room       Roomba
   setList    start cmd {"command": "start", "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"}
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 13 Oktober 2021, 18:23:43
Das Wiki ist schon das richtige. Bei mir hat es auch mit autocreate no geklappt, habe die Devices manuell angelegt, so wie Du ja anscheinend auch.

Hast Du für das MQTT Device die SetList angelegt?
Dann müsstest Du doch in der Weboberfläche oben bei den Set-Kommandos ein "Start" und ein "Stop" (zum Beispiel) haben!?!

Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 13 Oktober 2021, 18:33:43
Ich komme selber aber mit den Maps immer noch nicht weiter.
Ich habe jetzt alle (hoffe ich) fehlenden Attribute nachgezogen :
Attributes
IODev RoombaClient
LOG_dir /opt/fhem/log/roomba
SVG_collect /opt/fhem/log/roomba/SVG_Roomba.xml
SVG_color1 green:lightgreen
SVG_color2 orange:yellow
SVG_color3 red:pink
SVG_color4 blue:lightblue
SVG_dir /opt/fhem/www/images/roomba
SVG_final /opt/fhem/www/images/roomba/SVG_Roomba.svg
SVG_room /opt/fhem/www/images/roomba/floorplan.svg
event-aggregator state_reported_signal_rssi:300:none:v
noMap false
readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
startdir north
startx 0
starty 0
Ich starte den Reinigungslauf aus FHEM heraus und mache vorher und hinterher ein "set Maplist"
Es gibt weder im (siehe oben) Verzeichnis "/opt/fhem/log/roomba" irgendeine neue Datei (ich hätte hier die XML mit der Kartenliste erwartet), noch unter "/opt/fhem/www/images/roomba/" ein Ergebnis-SVG.

Vielleicht liegt es auch daran, dass die ich einen J7 (hier nochmal erwähnt) habe und die Karten bei dem anders funktionieren, als beim I7?
Beim J7 gibt es ja diese Zusatzfunktion mit "Hindernis-Fotos" durch die man Sperrzonen anlegen kann.

LG
Mike
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 13 Oktober 2021, 19:50:03
Zunächst einmal: Es ist vollkommen egal, ob man die Devices selbst anlegt und autocreate abschaltet. Oder sie per autocreate anlegen lässt. Beides führt (wenn man die korrekten Namen verwendet) zum selben Ergebnis.

Ich kann nur mutmaße, warum mit der angegebenen setList die Kommandos an den Roomba nicht befolgt werden. Tipp: verbose=5 im MQTT-Client setzen und prtokollieren, was wirklich herausgeht.

Das LOG_dir ist für eine textuelle (!) Ausgabe bestimmt - _nicht_ für die Bilder.

SVG_dir ist der Verzeichnisname für die Bilder - und ich denke, dass es nur logisch ist, dass dieser Verzeichnisname _nicht_ noch einmal in den Dateinamen SVG_collect, SVG_room und SVG_final auftaucht. Denn: Eine Datei
/opt/fhem/www/images/roomba//opt/fhem/www/images/roomba/floorplan.svggibt es einfach nicht...

Eigentlich sollte dies auch als Fehlermeldung im Log auftauchen.

Die Karten sind übrigens vollkommen unabhängig von der Kartierung in der App, weil nur die alle paar Sekunden übermittelten Positionsdaten verwendet werden.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: MikeR am 13 Oktober 2021, 20:03:52
OK, hätte gedacht, dass ein absoluter Dateiname mit Pfad sicherer ist und das FHEM das "merkt", das es sich nicht um eine relative Pfadangabe (im Extremfall als nur der Dateiname), sondern um eine absolute (der "/" am Anfang) handelt. Bin aber auch auf unixoiden OSen nicht so zu Hause, muss ich zugeben.

Das LogDir, so dachte ich, ist für die Protokollierung der Wegpunkte UND für die erzeugte XML Datei. Bei letzterem kann man natürlich auch argumentieren, dass das ja im Kontext der erzeugten SVGs liegt, als in das SVG_Dir geschrieben wird. Ist das so? Werden die Protokolldateien für den Verfahrensweg nach dem Processing wieder gelöscht, das würde erklären wieso das dann leer ist.

Ich lass den J7 morgen wenn meine Frau weg ist, nochmal mit vollem Log-Gerödel laufen. Der J7 ist zwar im Vergleich zu unserem alten 980er eher unhörbar, aber Ehefrauen sind ja doch etwas sensibler als wir technikaffinen Männer. ;-)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: SebastianStorb am 17 Oktober 2021, 11:22:19
Problem gelöst:
Die SetList muss bei mir so aussehen:

pause cmd {"command": "pause", "time": 1, "initiator": "localApp"}
start cmd {"command": "start", "time": 1, "initiator": "localApp"}
resume cmd {"command": "resume", "time": 1, "initiator": "localApp"}
dock cmd {"command": "dock", "time": 1, "initiator": "localApp"}

am Ende darf kein \ stehen (und nicht so wie es in der Anleitung dargestellt war)

Vielen vielen Dank für die große Mühe und Unterstützung!

;-))
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Beta-User am 17 Oktober 2021, 12:02:38
am Ende darf kein \ stehen (und nicht so wie es in der Anleitung dargestellt war)

Bevor du hier weiter rummaulst: Dir ist schon klar, dass es einen Unterschied gibt, je nachdem, ob man direkt im Attribut editiert oder ein RAW-Listing "für alles" darstellt ::) ?

Für kompletten Code, den man einfach so übernehmen kann, ist RAW-Listing die einfachste Variante, und da gehört dann auch bei Bedarf ein \ an das Ende einer Zeile: https://wiki.fhem.de/wiki/Import_von_Code_Snippets
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 17 Oktober 2021, 18:02:35
Damit erledigt sich dann die Frage, ob besagter User irgendeinen Support bekommt.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: SebastianStorb am 21 Oktober 2021, 21:32:10
Bevor du hier weiter rummaulst: Dir ist schon klar, dass es einen Unterschied gibt, je nachdem, ob man direkt im Attribut editiert oder ein RAW-Listing "für alles" darstellt ::) ?

Für kompletten Code, den man einfach so übernehmen kann, ist RAW-Listing die einfachste Variante, und da gehört dann auch bei Bedarf ein \ an das Ende einer Zeile: https://wiki.fhem.de/wiki/Import_von_Code_Snippets

Ich wollte Anderen mit dem gleichen Problem meinen Fehler zeigen und mich für die Unterstützung bedanken und nicht den Eindruck von "rummaulen" hinterlassen. Entschuldigung wenn ich falsch verstanden wurde.

Bezüglich RAS-Listing vs Attribut war mir bisher der Unterschied nicht klar - jetzt schon. Danke nochmal für den Hinweis!
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Prof. Dr. Peter Henning am 19 November 2021, 12:27:45
Es ist unglaublich: Mit dem Firmware Update für den i7 vom 27.10.2021 haben die Herrschaften von iRobot die regelmäßigen Positionsmeldungen des Roboters unterdrückt. Möglicherweise sind die noch irgendwo versteckt, oder müssen erst wieder eingeschaltet werden - standardmäßig gibt es aber nichts mehr.

LG

pah
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: cbl am 20 November 2021, 12:27:38
Vielen Dank für die Warnung. Dann lasse ich meinen i7 erstmal nicht weiter ins Internet. Er kommt ohne (mir bekannte) Verbindung zur Außenwelt ganz gut klar. ;-)
Titel: Antw:Roomba Staubsaugerroboter
Beitrag von: Jewe am 26 November 2021, 19:21:04
Es ist unglaublich: Mit dem Firmware Update für den i7 vom 27.10.2021 haben die Herrschaften von iRobot die regelmäßigen Positionsmeldungen des Roboters unterdrückt. Möglicherweise sind die noch irgendwo versteckt, oder müssen erst wieder eingeschaltet werden - standardmäßig gibt es aber nichts mehr.

LG

pah

Hallo, gibt es dazu schon neue erkenntnisse? Bin gerade am überlegen einen zweiten Roomba zu kaufen und da käme dann auch der i7 in die engere Auswahl.

LG, Jens