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