Robonect (Automower G3): online

Begonnen von Andi291, 15 Mai 2016, 21:12:56

Vorheriges Thema - Nächstes Thema

rudolfkoenig

Hallo Andi,

Vielen Dank fuers Modul!

Waehrend ich auf die Freischaltung meines Forum-Accounts warte (wg. Firmware-Download), habe ich das Modul angeschaut, und dabei sind ein paar Fragen/Bemerkungen entstanden, die ich nicht verschweigen wollte:

- in Robonect_Undef werden die privaten Daten des KNX Moduls entfernt. Das ist nicht nett. Das Entfernen einzelner $hash Eintraege kann man auch sparen: $hash wird (falls UndefFn undef zurueckliefert) komplett geloescht.

- defptr kann verwendet werden, um z.Bsp. per direkten Lookup vom FS20-Code auf dem FHEM-Device zu schliessen, ohne eine Schleife ueber alle FHEM-Geraete zu machen. Robonect braucht sowas nicht, das Setzen von devptr in DefineFn kann man sich sparen.

- Ob man sich die leeren Funktionen AttrFn/ReadyFn/ShutdownFn drinlaesst oder nicht, ist Geschmacksfrage. Da das Modul pollt, wird ReadyFn nie aufgerufen, die Funktion ist nur bei (Unterbrechung) einer staendigen Verbindung (USB/TCP) sinnvoll.

- Warum ist bei der Definition das Ziel auf IP beschraenkt? Falls man den DNS-Server im Fritzbox oder Vergleichbares nutzt, dann kann sich die zugewiesene IP (jedenfalls theoretisch) aendern. Man koennte die Pruefung im Modul sparen, und HttpUtils_NonblockingGet macht den DNS-Lookup.

- event-on-change-reading auf .* zu setzen ist ein CPU-Intensives no-op, und verursacht mir Kopfschmerzen, falls man auch event-min-interval setzt :) Man sollte auch andere Attribute nicht im Modul setzen (Attribute gehoeren dem Benutzer), man kann ja im AttrVal ein default angeben, falls das Attribut nicht gesetzt ist.

- das optionale [<user> <password>] im define-Usage Meldung ist irrefuehrend: es wird da naemlich ignoriert.

- fuer Speichern von Credentials in einer separaten Datei gibt es die in fhem.pl bereitgestellte Funktionen setKeyValue/getKeyValue. setKeyValue ruft man ueblicherweise per set Befehl auf. Hat auch den Vorteil, dass fuer DB-Fetischisten die Daten in der DB landen :)

- decode_json sollte unbedingt in einem eval ausgefuehrt werden: falls der Webserver keinen gueltigen JSON zurueckliefert, dann verstirbt FHEM.

So, jetzt muss ich fuer weitere Spiele auf mein Firmware warten :)

Vielen Dank fuers Modul
  Rudi

Andi291

Guten morgen Rudi,

au weia, und ich dachte das Modul sei sauber :-)

Nachdem die Anmerkungen vom "Meister" selbst kommen, mach ich mir aber mal nicht allzu große Vorwürfe...

Grüße, Andi

Andi291

Guten morgen zusammen (insbesondere Rudi)!

Da mein kurzer mich heute unchristlich früh geweckt hat, habe ich einen Großteil von Rudis Anmerkungen mit der Bitte um Test / Prüfung einfließen lassen.

@Rudi: mit dem Handling der Credentials-Datei hast Du mich abgehangen. Ich gestehe, das hab ich aus einem anderen Modul gezwickt. Hast Du ein Modul parat, in dem das Handling "richtig" abgewickelt ist?

Grüße, Andi

rudolfkoenig

ZitatHast Du ein Modul parat, in dem das Handling "richtig" abgewickelt ist?
Richtig ist Geschmacksache, aber 00_FBAHAHTTP.pm verwendet es, such da nach KeyValue.

Das angehaengte Modul scheint mit Firmware 0.9c zu kooperieren :) Was auffaellt:

- verbose 3 ist fuer "wichtige" Meldungen vorgesehen, siehe auch https://fhem.de/commandref.html#verbose , die Default-Einstellung (3) sollte nicht das Log vollmuellen.

- warum sind die Events timer-startdatum & -zeit undef? Oder anders: wozu wird das Event generiert, obwohl im JSON nichts passendes drin ist?

- Doku: ich habe Schwierigkeiten die Bedeutung der set Befehle zu verstehen, evtl. hilft eine Umschreibung. Kann dir leider keinen Vorschlag machen, da ich es ja nicht verstehe :). Bei der Formatierung schon: statt eine Zeile bei set wuerde ich das "uebliche" Format fuer set/get/attr (siehe FBAHAHTTP) vorschlagen.

- Falls in eval was schiefgeht, dann wird $@ auf die perl-Fehlermeldung gesetzt. Ist manchmal Hilfreich, wenn man das ausgibt, statt eine allgemeine Meldung.


Gibt es eine Moeglichkeit zu spezifizieren, dass das Geraet ab jetzt fuer X Stunden arbeiten soll? Ich wuerde gerne den taeglichen Timer in FHEM realisiern, damit ich es mit den Wetterdaten verheiraten kann. Ich will nicht so haeufig das Geraet reinigen, aber es ist noetig, wenn es im/direkt nach Regen arbeitet.
Auf der Robonect API-Seite fuer modus setzen scheint sowas moeglich zu sein, ich verstehe es aber bloss nicht, und ich trau mich noch nicht zu experimentieren. :)

Jojo11

Zitat von: rudolfkoenig am 29 April 2017, 13:10:47
[...]
Das angehaengte Modul scheint mit Firmware 0.9c zu kooperieren :)
[...]

Hallo,

das kann ich bestätigen. Habe es jetzt im Einsatz und bisher keinen Fehler gefunden. Danke!

schöne Grüße
Jo

Andi291

Bin ein paar Tage nicht am Rechner. Soviel vorab: der Befehl Feierabend schickt den mäher für den aktuellen timerzyklus nach Hause ohne die Automatik abzuwerfen.
Sprich beim nächsten Startzeitpunkt läuft er wieder los. Das ist erprobt.
Ich nutze am ca 60min Niederschlag den Befehl Feierabend. Meinen mäher reinige ich nur im Winter. Damit fahr ich ganz gut...
Man kann wohl auch komplett manuell fahren. Aber das hab ich noch nie probiert. Auch ist die doku dazu dürftig...

Grüße, andi

Billy

Zitat von: rudolfkoenig am 29 April 2017, 13:10:47

Gibt es eine Moeglichkeit zu spezifizieren, dass das Geraet ab jetzt fuer X Stunden arbeiten soll? Ich wuerde gerne den taeglichen Timer in FHEM realisiern, damit ich es mit den Wetterdaten verheiraten kann. Ich will nicht so haeufig das Geraet reinigen, aber es ist noetig, wenn es im/direkt nach Regen arbeitet.

1. Den Automower/Robonect Timer auf 24h stellen und Mäher auf Home stellen. Damit bleibt er in der Ladestation.
2. Den Mähvorgang Über FHEM-Timer  mit set mower auto starten und über FHEM nach X Stunden mit  set mower home nach Hause schicken!!!

Das Ganze bei Berdarf mit dem Wetter-Timer verheiraten. So mache ich das. :D

Gruß Billy


FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

Andi291

Hallo zusammen,

und die nächste Version mit der Bitte um Test. Bis auf folgenden Punkt sind alle Anmerkungen von Rudi umgesetzt.

Zu Deiner Frage
Zitat- warum sind die Events timer-startdatum & -zeit undef? Oder anders: wozu wird das Event generiert, obwohl im JSON nichts passendes drin ist?
ein Antwortversucht (ohne dass ich es genau weiß):

In der Funktion Robonect_decodeContent werden die empfangenen JSON-Daten durch die Liste %elements gejagt und auf die Schlüssel durchsucht. Wenn ein Schlüssel gefunden wurden, wird auch der entsprechende Wert eingelesen.
Für den (unwahrscheinlichen) Fall, dass kein Wert zu einem Schlüssel gefunden wird, wird diesem in der Zeile 693 der String "undef" verpasst. Könnte auch Hugo heißen, oder leer sein. Nur eben wegfiltern wollte ich die empfangenen Schlüssel nicht.

Ich würde also wetten, das der Schlüssel in der JSON-Antwort drin war, der dazugehörige Wert nicht (wahrscheinlich weil noch nicht gesetzt).

Grüße, Andi

mirgehtsgut

#83
Ich habe meinen Automower 305 erfolgreichh mit WLAN-Modul und robonect.pm in FHEM eingebunden.

Wenn ich aber "get <automower> status" aufrufe, bekomme ich als Fehlermeldung immer "update requested" angezeigt. Ich habe die neueste Firmware "Robonect_Application_V0.9e.rfw" eingespielt und ein Update von FHEM durchgeführt. Im log stehen folgende Meldungen:

2017.05.07 12:04:12 5: parse cmd-table - Set:status, Option:noArg, RetVal:status:noArg
2017.05.07 12:04:15 5: enter get te_mower: te_mower hash: HASH(0x36334f8), attributes: te_mower, status
2017.05.07 12:04:15 5: credentials - found plain data
2017.05.07 12:04:15 5: exit get
2017.05.07 12:04:15 3: callback - url http://192.168.0.15/json?user=XXXXXX&pass=XXXX&cmd=status returned: {"successful": true, "name": "Bruno", "status": {"status": 17, "stopped": false, "duration": 387, "mode": 0, "battery": 100, "hours": 1079}, "timer": {"status": 2}, "wlan": {"signal": -72}}

Irgendeine Idee?

Andi291

Verstehe das Problem nicht. Das ist keine Fehlermeldung, sondern eine info. Daten kommen auch an. Was fehlt dir?

Billy

Zitat von: mirgehtsgut am 07 Mai 2017, 11:47:49
Wenn ich aber "get <automower> status" aufrufe, bekomme ich als Fehlermeldung immer "update requested" angezeigt.
Irgendeine Idee?

Wenn ich mich recht erinnere hatte ich diese Meldung auch, da Winterschlaf statt auf "off" noch auf 0 war.
Vielleicht hilft das auch bei dir.

Gruß Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

Andi291

Falsch erinnert :-) und Winterschlaf ist gefixed. Grüße, andi

mirgehtsgut

Zitat von: Andi291 am 07 Mai 2017, 12:59:36
Verstehe das Problem nicht. Das ist keine Fehlermeldung, sondern eine info. Daten kommen auch an. Was fehlt dir?
Ich habe doch geupdatet. Also ist die Info falsch, oder?

Andi291

Ich verstehe Deine Frage nicht.

Du drückst manuell auf get - ein Popup erscheint um Dir mitzuteilen, das neue Daten vom Mäher angefragt wurden ("Update requested"). Sobald der Mäher eine Antwort schickt, werden die Readings geupdated.

Was passt jetzt bei Dir nicht?

gosteli

Hallo zusammen
Erst mal grosses Kompliment für das Modul! Es funktioniert Alles wirklich sehr gut!
Ein kleines Problem habe ich. Immer wenn die den Status von Mäher abfrage steht im Log:
2017.05.16 14:08:34 1: PERL WARNING: Missing argument in sprintf at (eval 234) line 1.
2017.05.16 14:08:34 1: PERL WARNING: Invalid conversion in sprintf: end of string at (eval 234) line 1.

Ist nicht weiter tragisch, leider wird aber LogFile dadurch recht unübersichtlich.
Hat mir ev. Jemand einen Tipp?
Hier noch der Aufruf:
{ ReadingsVal("Dolly","allgemein-status",0).sprintf(" | %.0f"." %", ReadingsVal("Dolly","allgemein-batteriezustand",0)).sprintf(" | %.0f"." dbm", ReadingsVal("Dolly","wlan-signal",0)) }
Danke und sonnige Grüsse aus der Schweiz
Stef