Neues Modul: BOTVAC (für Neato BotVac Connected)

Begonnen von vuffiraa, 02 April 2016, 22:12:29

Vorheriges Thema - Nächstes Thema

vuffiraa

Zitat von: Eddy1983 am 23 November 2019, 11:46:58
Hallo zusammen,

vielen Dank für das Modul.
Ich habe es gestern mal getestet und es schein zu laufen.
Allerdings wird bei mir das FHEM extrem langsam, sobald ich das Modul einbinde. Das FHEM lässt sich kaum noch bedienen. Das hat auch dazu geführt, dass meine AVM Aktoren nicht mehr ausgelesen werden oder sich bedienen lassen.
Hat jemand einen Tipp woran das liegen kann oder wo ich die Lösung finde?
Wahrscheinlich steht es hier schon wieder irgendwo und ich habe es wieder überlesen.

Vielen Dank schon mal für eure Hilfe.

Hallo Eddy,

ich vermute, dass mit den Abfrageintervall etwas nicht stimmt. Ansonsten sollte FHEM natürlich nicht blockieren.
Kannst du mal ein list von deinem Gerät hier einstellen? Da sollte das Problem zu sehen sein.

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Eddy1983

Hallo vuffiraa,

Hier das List:


   Internals:
   CHANGED   
   DEF        xx@xx-xx.xx [NEATO] [300]
   EMAIL      xx@xx-xx.xx
   FUUID      xx
   INTERVAL   [300]
   NAME       Horst
   NR         475
   SERVICES   softwareUpdate:basic-1, houseCleaning:basic-3, wifi:basic-1, spotCleaning:basic-3, preferences:basic-2, maps:macro-1, generalInfo:basic-1, IECTest:advanced-1, logCopy:basic-1, findMe:basic-1, schedule:basic-1
   STATE      Idle
   TYPE       BOTVAC
   VENDOR     neato
   HELPER:
   OLDREADINGS:
   READINGS:
     2019-11-24 09:58:22   action          0
     2019-11-24 09:55:36   batteryAuthorizationStatus genuine
     2019-11-24 09:55:36   batteryManufacturingDate 2099-10-12
     2019-11-24 09:57:39   batteryPercent  99
     2019-11-24 09:57:33   batteryTimeToEmpty 147
     2019-11-24 09:55:36   batteryTimeToFullCharge 0
     2019-11-24 09:55:36   batteryTotalCharges 83
     2019-11-24 09:55:36   batteryVendor   Panasonic
     2019-11-24 09:56:58   cleaningCategory map
     2019-11-24 09:55:21   cleaningMode    eco
     2019-11-24 09:55:21   cleaningModifier normal
     2019-11-24 09:55:21   cleaningNavigationMode normal
     2019-11-24 09:55:21   cleaningSpotHeight 0
     2019-11-24 09:55:21   cleaningSpotWidth 0
     2019-11-24 09:58:22   dockHasBeenSeen 0
     2019-11-24 09:55:26   event0day       Monday
     2019-11-24 09:55:26   event0mode      eco
     2019-11-24 09:55:26   event0startTime 15:00
     2019-11-24 09:55:26   event1day       Tuesday
     2019-11-24 09:55:26   event1mode      eco
     2019-11-24 09:55:26   event1startTime 15:00
     2019-11-24 09:55:26   event2day       Thursday
     2019-11-24 09:55:26   event2mode      eco
     2019-11-24 09:55:26   event2startTime 15:00
     2019-11-24 09:55:26   event3day       Friday
     2019-11-24 09:55:26   event3mode      eco
     2019-11-24 09:55:26   event3startTime 15:00
     2019-11-24 09:55:26   event4day       Wednesday
     2019-11-24 09:55:26   event4mode      eco
     2019-11-24 09:55:26   event4startTime 11:00
     2019-11-24 09:55:21   firmware        4.5.0-179
     2019-11-24 09:55:19   firmwareLatest  4.5.0-179
     2019-11-24 09:55:54   floorplan_0_boundaries {"type":"polyline","vertices":[[0.5617,0.4675],[0.5639,0.4988]],"name":"","color":"#000000","enabled":true},
{"type":"polyline","vertices":[[0.6217,0.597],[0.5745,0.5961]],"name":"","color":"#000000","enabled":true}
     2019-11-24 09:55:36   floorplan_0_id  2019-11-23T12:41:46Z
     2019-11-24 09:55:36   floorplan_0_name Oben
     2019-11-24 09:55:21   isCharging      0
     2019-11-24 09:58:20   isDocked        1
     2019-11-24 09:55:19   macAddr         fc6947b96126
     2019-11-24 09:55:33   map_area_per_time 0.9
     2019-11-24 09:55:33   map_base_count  2
     2019-11-24 09:55:33   map_category    2
     2019-11-24 09:55:33   map_cleaned_area 63.76
     2019-11-24 09:55:33   map_date        2019-11-23 14:50:58
     2019-11-24 09:55:33   map_delocalized 0
     2019-11-24 09:55:33   map_discharge_per_time 0.8
     2019-11-24 09:55:33   map_duration    69.2
     2019-11-24 09:55:33   map_end_orientation_relative_degrees 2
     2019-11-24 09:55:33   map_expected_area 116
     2019-11-24 09:55:33   map_expected_time 126
     2019-11-24 09:55:33   map_id          2019-11-23T12:41:46Z
     2019-11-24 09:55:33   map_is_docked   1
     2019-11-24 09:55:33   map_launched_from app
     2019-11-24 09:55:33   map_mode        1
     2019-11-24 09:55:33   map_modifier    1
     2019-11-24 09:55:33   map_navigation_mode 1
     2019-11-24 09:55:33   map_run_charge_at_end 40
     2019-11-24 09:55:33   map_run_charge_at_start 95
     2019-11-24 09:55:33   map_run_discharge 55
     2019-11-24 09:55:33   map_status      complete
     2019-11-24 09:55:33   map_suspended_cleaning_charging_count 0
     2019-11-24 09:55:33   map_time_in_error 0
     2019-11-24 09:55:33   map_time_in_pause 0
     2019-11-24 09:55:33   map_time_in_suspended_cleaning 0
     2019-11-24 09:55:33   map_valid_as_persistent_map 1
     2019-11-24 09:55:33   map_version     1
     2019-11-24 09:55:19   model           BotVacD6Connected
     2019-11-24 09:55:19   name            Horst Willfried
     2019-11-24 09:55:19   nucleoUrl       https://nucleo.neatocloud.com:4443
     2019-11-24 09:55:41   pref_brushChangeReminderInterval 6
     2019-11-24 09:55:41   pref_dirtbinAlertReminderInterval 90
     2019-11-24 09:55:41   pref_filterChangeReminderInterval 1
     2019-11-24 09:55:41   pref_robotSounds 1
     2019-11-24 09:57:46   result          ok
     2019-11-24 09:55:19   robot           0
     2019-11-24 09:55:21   scheduleEnabled 1
     2019-11-24 09:55:26   scheduleType    1
     2019-11-24 09:55:19   serial          GPC46318-FC6947B96126
     2019-11-24 09:58:22   state           Idle
     2019-11-24 09:58:22   stateId         1
   helper:
     MAPS:
       HASH(0x3119390)
       HASH(0x2aff740)
       HASH(0x30ae718)
       HASH(0x2ee6780)
       HASH(0x2feaa88)
       HASH(0x2fea2a8)
       HASH(0x2fed170)
       HASH(0x2fed6c8)
       HASH(0x30c3af0)
       HASH(0x3000308)
       HASH(0x302c388)
       HASH(0x31c2088)
       HASH(0x31c8158)
       HASH(0x319b638)
       HASH(0x31a88c8)
       HASH(0x31cdb00)
       HASH(0x3271468)
       HASH(0x32443d0)
       HASH(0x2fed788)
       HASH(0x3204360)
     ROBOTS:
       HASH(0x2feead0)
Attributes:
   webCmd     startCleaning:stop:sendToBase


Vielen Dank schon mal.

vuffiraa

Zitat von: Eddy1983 am 24 November 2019, 10:03:49
Hallo vuffiraa,

Hier das List:


   Internals:
   CHANGED   
   DEF        xx@xx-xx.xx [NEATO] [300]
   EMAIL      xx@xx-xx.xx
   FUUID      xx
   INTERVAL   [300]
   NAME       Horst
   NR         475
   SERVICES   softwareUpdate:basic-1, houseCleaning:basic-3, wifi:basic-1, spotCleaning:basic-3, preferences:basic-2, maps:macro-1, generalInfo:basic-1, IECTest:advanced-1, logCopy:basic-1, findMe:basic-1, schedule:basic-1
   STATE      Idle
   TYPE       BOTVAC
   VENDOR     neato
   HELPER:
   OLDREADINGS:
   READINGS:
     2019-11-24 09:58:22   action          0
     2019-11-24 09:55:36   batteryAuthorizationStatus genuine
     2019-11-24 09:55:36   batteryManufacturingDate 2099-10-12
     2019-11-24 09:57:39   batteryPercent  99
     2019-11-24 09:57:33   batteryTimeToEmpty 147
     2019-11-24 09:55:36   batteryTimeToFullCharge 0
     2019-11-24 09:55:36   batteryTotalCharges 83
     2019-11-24 09:55:36   batteryVendor   Panasonic
     2019-11-24 09:56:58   cleaningCategory map
     2019-11-24 09:55:21   cleaningMode    eco
     2019-11-24 09:55:21   cleaningModifier normal
     2019-11-24 09:55:21   cleaningNavigationMode normal
     2019-11-24 09:55:21   cleaningSpotHeight 0
     2019-11-24 09:55:21   cleaningSpotWidth 0
     2019-11-24 09:58:22   dockHasBeenSeen 0
     2019-11-24 09:55:26   event0day       Monday
     2019-11-24 09:55:26   event0mode      eco
     2019-11-24 09:55:26   event0startTime 15:00
     2019-11-24 09:55:26   event1day       Tuesday
     2019-11-24 09:55:26   event1mode      eco
     2019-11-24 09:55:26   event1startTime 15:00
     2019-11-24 09:55:26   event2day       Thursday
     2019-11-24 09:55:26   event2mode      eco
     2019-11-24 09:55:26   event2startTime 15:00
     2019-11-24 09:55:26   event3day       Friday
     2019-11-24 09:55:26   event3mode      eco
     2019-11-24 09:55:26   event3startTime 15:00
     2019-11-24 09:55:26   event4day       Wednesday
     2019-11-24 09:55:26   event4mode      eco
     2019-11-24 09:55:26   event4startTime 11:00
     2019-11-24 09:55:21   firmware        4.5.0-179
     2019-11-24 09:55:19   firmwareLatest  4.5.0-179
     2019-11-24 09:55:54   floorplan_0_boundaries {"type":"polyline","vertices":[[0.5617,0.4675],[0.5639,0.4988]],"name":"","color":"#000000","enabled":true},
{"type":"polyline","vertices":[[0.6217,0.597],[0.5745,0.5961]],"name":"","color":"#000000","enabled":true}
     2019-11-24 09:55:36   floorplan_0_id  2019-11-23T12:41:46Z
     2019-11-24 09:55:36   floorplan_0_name Oben
     2019-11-24 09:55:21   isCharging      0
     2019-11-24 09:58:20   isDocked        1
     2019-11-24 09:55:19   macAddr         fc6947b96126
     2019-11-24 09:55:33   map_area_per_time 0.9
     2019-11-24 09:55:33   map_base_count  2
     2019-11-24 09:55:33   map_category    2
     2019-11-24 09:55:33   map_cleaned_area 63.76
     2019-11-24 09:55:33   map_date        2019-11-23 14:50:58
     2019-11-24 09:55:33   map_delocalized 0
     2019-11-24 09:55:33   map_discharge_per_time 0.8
     2019-11-24 09:55:33   map_duration    69.2
     2019-11-24 09:55:33   map_end_orientation_relative_degrees 2
     2019-11-24 09:55:33   map_expected_area 116
     2019-11-24 09:55:33   map_expected_time 126
     2019-11-24 09:55:33   map_id          2019-11-23T12:41:46Z
     2019-11-24 09:55:33   map_is_docked   1
     2019-11-24 09:55:33   map_launched_from app
     2019-11-24 09:55:33   map_mode        1
     2019-11-24 09:55:33   map_modifier    1
     2019-11-24 09:55:33   map_navigation_mode 1
     2019-11-24 09:55:33   map_run_charge_at_end 40
     2019-11-24 09:55:33   map_run_charge_at_start 95
     2019-11-24 09:55:33   map_run_discharge 55
     2019-11-24 09:55:33   map_status      complete
     2019-11-24 09:55:33   map_suspended_cleaning_charging_count 0
     2019-11-24 09:55:33   map_time_in_error 0
     2019-11-24 09:55:33   map_time_in_pause 0
     2019-11-24 09:55:33   map_time_in_suspended_cleaning 0
     2019-11-24 09:55:33   map_valid_as_persistent_map 1
     2019-11-24 09:55:33   map_version     1
     2019-11-24 09:55:19   model           BotVacD6Connected
     2019-11-24 09:55:19   name            Horst Willfried
     2019-11-24 09:55:19   nucleoUrl       https://nucleo.neatocloud.com:4443
     2019-11-24 09:55:41   pref_brushChangeReminderInterval 6
     2019-11-24 09:55:41   pref_dirtbinAlertReminderInterval 90
     2019-11-24 09:55:41   pref_filterChangeReminderInterval 1
     2019-11-24 09:55:41   pref_robotSounds 1
     2019-11-24 09:57:46   result          ok
     2019-11-24 09:55:19   robot           0
     2019-11-24 09:55:21   scheduleEnabled 1
     2019-11-24 09:55:26   scheduleType    1
     2019-11-24 09:55:19   serial          GPC46318-FC6947B96126
     2019-11-24 09:58:22   state           Idle
     2019-11-24 09:58:22   stateId         1
   helper:
     MAPS:
       HASH(0x3119390)
       HASH(0x2aff740)
       HASH(0x30ae718)
       HASH(0x2ee6780)
       HASH(0x2feaa88)
       HASH(0x2fea2a8)
       HASH(0x2fed170)
       HASH(0x2fed6c8)
       HASH(0x30c3af0)
       HASH(0x3000308)
       HASH(0x302c388)
       HASH(0x31c2088)
       HASH(0x31c8158)
       HASH(0x319b638)
       HASH(0x31a88c8)
       HASH(0x31cdb00)
       HASH(0x3271468)
       HASH(0x32443d0)
       HASH(0x2fed788)
       HASH(0x3204360)
     ROBOTS:
       HASH(0x2feead0)
Attributes:
   webCmd     startCleaning:stop:sendToBase


Vielen Dank schon mal.

Deine Definition stimmt nicht ganz. In der Dokumentation verwende ich EBNF, um die möglichen Optionen bei der Definition eines Gerätes zu beschreiben. Die eckigen Klammeren [ ] fassen dabei einen Parameter ein, der nicht unbedingt angegeben werden muss. So muss der Hersteller des Roboters nicht angegeben werden. Ohne den Parameter nimmt das Modul an, dass man einen Neato-Roboter steuern möchte. Genauso verhält es sich mit dem Intervall, die Grundeinstellung sind 85 Sekunden.

Du möchtest bei dir erreichen, dass der Status vom Neato alle 5 Minuten abgeholt wird. Ändere mal die Definition auf:
xx@xx-xx.xx 300
Sprich, entferne die eckigen Klammern. Dann sollte sich dein FHEM wieder beruhigen.

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Eddy1983

Tja was soll ich sagen?

Jetzt habe ich schon so viele Jahre einen FHEM Server in Betrieb und die Kleinigkeiten kriege ich immer noch nicht hin oder übersehe sie einfach.

Mit dem Tipp von VuffiRaa funktioniert es natürlich tadellos.

Vielen Dank dafür!

Schlimbo

#634
Hallo zusammen,

hatte hier ja schon mal mein Sub (BOTVAC_GetErrorText) zum umwandeln der Störmeldungen in Menschen freundlichere Texte vorgestellt:
https://forum.fhem.de/index.php/topic,51713.msg936234.html#msg936234

Bin mir aktuell gar nicht mehr sicher ob das wirklich fest in das Modul soll, da über das Sub jeder die Möglichkeit hat die Texte nach seinen Bedürfnissen frei anzupassen.

Wollte hier mal meine Konfig vorstellen, wie ich mir über eine Sprachausgabe verscheide Dinge Melden lasse.

Da ich den Roboter hauptsächlich über FHEM-Alexa starte habe ich mir hierfür ein readingsProxy erstellt, somit sieht man in Alexa-App auch ob er gerade läuft oder nicht:
defmod Robbi readingsProxy Sauger:state
attr Robbi alexaName Sauger;;robby
attr Robbi event-on-change-reading .*
attr Robbi genericDeviceType switch
attr Robbi setFn {($CMD eq "on")?'startCleaning map':'sendToBase'}
attr Robbi setList on off
attr Robbi valueFn {(ReadingsVal($DEVICE, 'state', '') =~ m/^House Cleaning$|^Spot Cleaning$|^Manual Cleaning$|^Map cleaning$|^Recovering Location$|^Docking$/)?"on":"off"}


Damit ich auch eine Info, sowie den Grund gemeldet bekomme, wenn der Roboter eine Befehl mal nicht ausführen kann, habe ich mir ein Notify auf "result command_rejected" angelegt:
defmod BOTVAC_commandRejected.ntfy notify Sauger:result:.command_rejected {\
my $name = ReadingsVal($NAME, 'name', $NAME);;\
my $error = ReadingsVal($NAME, 'error', '');;\
my $action = ReadingsVal($NAME, 'action', 0);;\
my $msg = 'Der '.$name.' könnte das Kommando nicht ausführen.';;\
$msg .= ' Fehler: '.BOTVAC_GetErrorText($error) if ($error ne '');;\
$msg .= ' Der Akkustand von '.$name.' ist zu niedrig für die Reinigung. Die Reinigung wird automatisch gestartet, sobald der Akku genügend aufgeladen wurde.' if ($action == 6 and $error eq '');;\
fhem "msg audio! |BOTVAC| $msg"\
}\


Tritt ein Problem am Roboter auf, lasse ich mir das auch direkt ansagen:
defmod BOTVAC_error.ntfy notify Sauger:error:\s..* {\
my $name = ReadingsVal($NAME, 'name', $NAME);;\
my $msg = 'Der '.$name.' hat ein Problem: '.BOTVAC_GetErrorText($EVTPART1);;\
fhem "msg audio! |BOTVAC| $msg"\
}


defmod BOTVAC_mapError.ntfy notify Sauger:map_error:\s..* {\
  my $name = ReadingsVal($NAME, 'name', $NAME);;\
  my $msg = 'Der '.$name.' hat ein Navigations Problem: '.BOTVAC_GetErrorText($EVTPART1);;\
  fhem "msg audio! |BOTVAC| $msg"\
}


Wenn der Roboter nicht an der Ladestation ist, kann er keine MAP-Cleaning starten, auch das lasse ich mir Melden:
defmod BOTVAC_notOnChargeBase.ntfy notify Sauger:result:.not_on_charge_base {\
  my $name = ReadingsVal($NAME, 'name', $NAME);;\
  my $msg = 'Bitte den '.$name.' an die Ladestation bringen, damit er die Reinigung starten kann.';;\
  fhem "msg audio! |BOTVAC| $msg"\
}


Reicht der Akkuzustand für eine Reinigung nicht aus, kommt es vor dass der Sauger erst los fährt, wenn der Akku ausreichend geladen ist, damit ich auch hier eine Feedback bekommen:
defmod BOTVAC_suspendedCleaning.ntfy notify Sauger:action:.6 {\
  my $name = ReadingsVal($NAME, 'name', $NAME);;\
  my $isDocked = ReadingsVal($NAME, 'isDocked', 0);;\
  my $batteryPercent = ReadingsVal($NAME, 'batteryPercent', 'unbekannt');;\
  my $msg = 'Der Akkustand von '.$name.' ist';;\
   $msg .= ' mit '.$batteryPercent.' Prozent' if ($batteryPercent ne "unbekannt");;\
   $msg .= ' zu niedrig für die Reinigung. Die Reinigung wird automatisch gestartet, sobald der Akku genügend aufgeladen wurde.';;\
   $msg .= ' Bitte bringe den '.$name.' zur Ladestation.' if ($isDocked == 0);;\
  fhem "msg audio! |BOTVAC| $msg"\
}


Nach dem leeren des Staubbehälters steht der alert "dustbin_full" solange an, bis er manuell bestätigt wurde, hierfür habe ich einen "Auto-clear" angelegt:
defmod BOTVAC_dustbinMissing.ntfy notify Sauger:error:.dustbin_missing {\
  my $alert = ReadingsVal($NAME, 'alert', '');;\
  if ($alert eq "dustbin_full"){\
    fhem "set $NAME dismissCurrentAlert"\
  }\
}


Damit nach dem Reinigen die neu MAP automatisch geladen wird:
defmod di_reloadMaps DOIF ([Sauger:stateId] == 1 or [Sauger:stateId] == 4) (set Sauger reloadMaps)
attr di_reloadMaps wait 100


Steht eine neue MAP zur Verfügung lasse ich mir die Neue Karte und sowie einige Infos zur Reinigung per Telegram zuschicken:
defmod BOTVAC_newMap.ntfy notify Sauger:map_date.* {\
my $name = ReadingsVal($NAME, 'name', $NAME);;\
my $map_status = ReadingsVal($NAME, 'map_status', '');;\
my $map_date = ReadingsVal($NAME, 'map_date', 'unknown');;\
my $map_area = ReadingsVal($NAME, 'map_cleaned_area', 0);;\
$map_area = sprintf("%.1f",$map_area);;\
my $dirtbin_cleaning_time = ReadingsVal($NAME, 'dirtbin_cleaning_time', 0);;\
$dirtbin_cleaning_time = sprintf("%.2f",($dirtbin_cleaning_time/60));;\
my $error = ReadingsVal($NAME, 'error', '');;\
my $alert = ReadingsVal($NAME, 'alert', '');;\
my $msg = 'BOTVAC: '.$name;;\
if ($map_status eq "complete") {\
  $msg = '<b>Reinigung beendet!</b>\n';;\
}\
else {\
  $msg = '<b>Reinigung abgebrochen!</b>\n';;\
}\
$msg .= 'Fehler: '.BOTVAC_GetErrorText($error).'\n' if ($error ne '');;\
$msg .= 'Warnung: '.BOTVAC_GetErrorText($alert).'\n' if ($alert ne '');;\
$msg .= 'Gereinigte Fläche: '.$map_area.'qm\n';;\
$msg .= 'Map Date: '.$map_date;;\
fhem "define at_newMap at +00:00:10 set myTelegramBot _msg $msg;;;; set myTelegramBot cmdSend {ReadingsVal(\'$NAME\', '.map_cache', '')}"\
}

Das senden erfolgt mit einer Verzögerung von 10 Sekunden, da die neue MAP erst etwas später zur Verfügung steht.

Sobald eine neue Firmware verfügbar ist, gibt es eine Push nachricht aufs Handy:
defmod BOTVAC_firmware.ntfy notify Sauger:firmwareLatest:.* {\
  my $name = AttrVal($NAME, 'alias', $NAME);;\
  my $firmware = ReadingsVal($NAME, 'firmware', '');;\
  my $firmwareLatest = ReadingsVal($NAME, 'firmwareLatest', '');;\
  if ($firmware ne $firmwareLatest){\
   fhem 'msg push |BOTVAC| BOTVAC Firmware-Update für '.$name.' verfügbar: '.$EVTPART1\
  }\
}


Klingelt die FritzBox während der Roboter Saugt, lasse ich ihn automatisch pausieren solange das Telefonat dauert:
defmod BOTVAC_call.ntfy notify FritzBox:event:.* {\
if ("$EVENT" eq "event: ring" || "$EVENT" eq "event: call")\
{fhem "set Sauger:FILTER=stateId=2 pause"}\
elsif ("$EVENT" eq "event: disconnect")\
{fhem "set Sauger:FILTER=stateId=3 resume"}\
}\


Diese Konfig hat bei mir den WAF extrem erhöht, da gleich bekannt ist was dem Roboter fehlt, und Aussagen wie "Der Sauger ging schon wieder nicht an" der Vergangenheit angehören ;-)

Eventuell ist das ja für den ein oder anderen auch ganz nützlich.

Gruß
Schlimbo

Thomas41587

Hallo zusammen,
das Modul funktioniert bei mir jetzt schon lämgere Zeit einwandfrei. Um die original "Neato" App zu ersetzen, fehlt mir aktuell noch eine "einfache" Möglichkeit, Zonen auszuwählen und entsprechend eine Zonenreinigung zu starten.
Aktuell läuft das bei mir über:
...
fhem("set botvac_neato nextCleaningZone 625af3c6-3763-4cc5-88a1-9317b0e038c1"),
fhem("set botvac_neato startCleaning zone"),
...

innerhalb von einem notify (um bei Abwesenheit automatsich den Flur zu säubern).
Schön wäre jetzt natürlich eine zusätzliche Drop-Down Liste, in der man die einzelnen Zonen (mit Namen, anstatt der Id's) auswählen und anschließend sauber amchen lassen kann.
Gibt es dafür schon Lösungsansätze? Oder kann man das nur "extern" über einen Dummy lösen?

the ratman

#636
mach dir doch ne readingsgroup

der def-teiltatortreiniger:?!nextCleaningZoneKU,<>,?!nextCleaningZoneWZ
tatortreiniger:?!nextCleaningZoneCat,<>,?!nextCleaningZoneEssen
tatortreiniger:?!nextCleaningZoneCouch,<>,?!nextCleaningZoneBuero
tatortreiniger:?!nextCleaningZoneSZ,<>,?!nextCleaningZoneGZ

commands{
'nextCleaningZoneWZ' => 'set doif_tatortreiniger_wz_schalter cmd_3',
'nextCleaningZoneSZ' => 'set doif_tatortreiniger_wz_schalter cmd_8',
'nextCleaningZoneGZ' => 'set doif_tatortreiniger_wz_schalter cmd_10',
'nextCleaningZoneKU' => 'set doif_tatortreiniger_wz_schalter cmd_1',
'nextCleaningZoneCat' => 'set doif_tatortreiniger_wz_schalter cmd_4',
'nextCleaningZoneEssen' => 'set doif_tatortreiniger_wz_schalter cmd_5',
'nextCleaningZoneCouch' => 'set doif_tatortreiniger_wz_schalter cmd_6',
'nextCleaningZoneBuero' => 'set doif_tatortreiniger_wz_schalter cmd_7'
}
du kannst natürlich anstelle "'set doif_tatortreiniger_wz_schalter cmd_3" in den commands auch direkt aufrufen mit z.b. "set tatortreiniger nextCleaningZone 12e15f0a-5b8d-4d23-88d4-e8ac08aa9e47; set tatortreiniger startCleaning zone"

dazu noch das passende valueicon{
'nextCleaningZoneWZ' => 'scene_livingroom',
'nextCleaningZoneSZ' => 'scene_sleeping',
'nextCleaningZoneGZ' => 'scene_visit_guests',
'nextCleaningZoneKU' => 'scene_cooking',
'nextCleaningZoneCat' => 'cat',
'nextCleaningZoneEssen' => 'scene_dinner',
'nextCleaningZoneCouch' => 'couch',
'nextCleaningZoneBuero' => 'office'
}
und fertig ist deine readingsgroup.

info:
mit dem doif (cmd_3 bis cmd_10) hab ich das deswegen gelöst, weil selbiges schon für den unten erwähnten hw-schalter da war. so sieht dann z.b. das doif für "cmd_3" aus([tatortreiniger_wz_schalter:"2002"] and [doif_tag_nacht:zustand] eq "tag" ) ## KATZENECK
( set tatortreiniger nextCleaningZone 12e15f0a-5b8d-4d23-88d4-e8ac08aa9e47; set tatortreiniger startCleaning zone )
( say kurz in die katzenecke putzen. )



alternativ hab ich - und das hat den waf enorm angehoben *g* - einen nicht gebrauchten 4-fach schalter mit symbolen der einzelnen räume beklebt und an die wand getackert.
jetzt kann die holde mit einem knopfdruck 8 verschiedene reinigungen anstarten ...

aja, hier https://forum.fhem.de/index.php/topic,101310.msg947519.html#msg947519 ein bildchen dazu
→do↑p!dnʇs↓shit←

Thomas41587

#637
Danke für die schnelle Antwort! Das klingt wirklich nach einer feinen Lösung. Aber so ganz verstehe ich es noch nicht. Mit dem ReadingsProxy in Kombination mit dem genannten def-teil komme ich aber nur bei einer liste von 4 Wertepaaren raus? Verstehe ich evtl. etwas falsch?
defmod readingsGroup_neato_zonenreinigung readingsGroup botvac_neato:?!nextCleaningZoneKU,<>,?!nextCleaningZoneWZ botvac_neato:?!nextCleaningZoneCat,<>,?!nextCleaningZoneEssen botvac_neato:?!nextCleaningZoneCouch,<>,?!nextCleaningZoneBuero botvac_neato:?!nextCleaningZoneSZ,<>,?!nextCleaningZoneGZ[/s]

EDIT: nach dem 3. mal lesen, hab ichs jetzt verstanden, code schnippsel 1 und 2 gehören natürlich zusammen....

the ratman

ja, sorry, einfach wars sicher ned - ich war ein wenig in eile ... sollts noch fragen geben, fragen. wobei programmiertechnische feinheiten sicher von anderen besser gelöst werden könnten als von mir.
→do↑p!dnʇs↓shit←

Thomas41587

Das 3x lesen war auf meine unfähigkeit bezogen, nicht auf deine Beschreibung  :) Ich brauche nur öfter mal etwas länger, bis es klick macht  ;D
Mit dem ReadingsProxy wurde ich nicht ganz glücklich. Ich habe es aktuell mit einem dummy, der eine Dropdownliste der Zonen darstellt und einem notify, das die Zonen-ID übergibt gelöst.
Falls Interesse besteht:
defmod dummy_neato_zonenreinigung dummy
attr dummy_neato_zonenreinigung eventMap 625af3c6-3763-4cc5-88a1-9317b0e038c1:Eingangsbereich 86452087-7df4-4c7c-b598-ed2e6252b8bb:Küche_Esszimmer 7e19fdd1-b835-44ce-be5b-450696e7d8f3:Esszimmer 78dd6603-ae16-4f12-9b1f-75ffc887da52:Küche 4c216a37-786d-4f0b-b2fa-24e92b13cc35:Fussmatte
attr dummy_neato_zonenreinigung readingList state
attr dummy_neato_zonenreinigung setList state:Eingangsbereich,Küche_Esszimmer,Esszimmer,Küche,Fussmatte
attr dummy_neato_zonenreinigung webCmd state

sowie
defmod notify_neato_zonenreinigung notify dummy_neato_zonenreinigung {\
my $temp = ReadingsVal("dummy_neato_zonenreinigung","state",0);;\
fhem("set botvac_neato nextCleaningZone $temp")\
}

TottiToad

#640
Hi,

die Lösungen von @the ratman @Thomas41587 und @Schlimbo finde ich schon genial und werde später mal schauen was und wie ich was davon bei mir Einbau.

Da ich den Alexa Connector nutze, würde ich gerne Alexa den Befehl geben können "Sauge Wohnzimmer", "Sauge Küche" etc ...

Also direkt über Alexa bestimmt Zone reinigen lassen.

Jemand schon umgesetzt ? Oder eine Idee wie man das ganze lösen könnte ?

Grüße & Danke
Totti

EDIT:
Hatte gedacht en Dummy oder DoIf oder so anzulegen, damit ich im Tablet Ui auch einen Button für jeden Raum anlegen kann damit gesaugt wird.

Schlimbo

Ja, ich nutze auch die Zonenreinigung über Alexa und habe mir hierfür für jede Zone ein DOIF angelegt;
defmod sauge_Esszimmer DOIF (["$SELF: on"])\
(set Sauger nextCleaningZone 855b522f-a566-4225-aabf-c2671f4fff42)(set Sauger startCleaning zone)
attr sauge_Esszimmer alexaName BotvacCleanEsszimmer
attr sauge_Esszimmer cmdState on|off
attr sauge_Esszimmer do always
attr sauge_Esszimmer genericDeviceType switch
attr sauge_Esszimmer room BOTVAC
attr sauge_Esszimmer setList on off
attr sauge_Esszimmer wait 0,1
attr sauge_Esszimmer webCmd on

Die ID der Zone muss natürlich angepasst werden.

In der Alexa App dann noch eine Routine anlegen:
"Alexa, sauge das Esszimmer" ...

Gruß Schlimbo

TottiToad

#642
Danke !!!

Ich habe es jetzt wohl wesentlich umständlicher gelöst :(

Habe für jede Zone ein Dummy angelegt und dann für jedes Dummy zwei notify (jeweils für den on und off Befehl)


define dummy_VR300_kueche dummy
attr dummy_VR300_kueche alexaName Tatortreiniger Küche
attr dummy_VR300_kueche room Kobold
attr dummy_VR300_kueche setList on off
attr dummy_VR300_kueche event-on-change-reading state
attr dummy_VR300_kueche webCmd on:off

define SaugenKuecheAn notify dummy_VR300_kueche:on set Tatortreiniger nextCleaningZone ac60bfae-1e06-489b-8d27-ba27dc92ab67; set Tatortreiniger startCleaning zone
define SaugenKuecheAus notify dummy_VR300_kueche:off set Tatortreiniger sendToBase



Mal sehen ob ich es alles wieder lösche und mit dem DOIF lösen

Welchen Vorteil hätte das ? Bzw. welchen Nachteil hat meine Lösung ?

Grüße & Danke
Totti

P.S.: Hat einer das ganze mit Zonenreinigung etc schon bei sich in TabletUI eingebaut ?
Wäre mal interessant zu sehen und zu wissen wir ?!

schnuddel

Hi,

ich habe immer wieder freezes von ca. 180 Sekunden. Hier mal die Ausgabe des logs von freezemon:

=========================================================
[Freezemon] myFreezemon: possible freeze starting at 15:46:16, delay is 179.938 possibly caused by: tmr-BOTVAC::GetStatus(Horst) tmr-CUL_HM_procQs(N/A) tmr-perfmon_ProcessTimer(N/A)
2020.01.15 15:46:15.038 5: BOTVAC Horst: called function GetStatus()
2020.01.15 15:46:15.039 4: BOTVAC Horst: Read password from file
2020.01.15 15:46:15.040 5: BOTVAC Horst: called function SendCommand()
2020.01.15 15:46:15.040 4: BOTVAC Horst: REQ messages/getRobotState
2020.01.15 15:46:15.040 4: BOTVAC Horst: successors 0: messages,getSchedule 1: messages,getGeneralInfo 2: messages,getPreferences
2020.01.15 15:46:15.040 5: BOTVAC Horst: POST https://nucleo.neatocloud.com:4443/vendors/neato/robots/XXX/messages ({"reqId":"0","cmd":"getRobotState"})
2020.01.15 15:46:15.040 5: BOTVAC Horst: header Accept: application/vnd.neato.nucleo.v1^M
Content-Type: application/json^M
Date: Wed, 15 Jan 2020 14:46:15 GMT^M
Authorization: NEATOAPP XXX
2020.01.15 15:46:15.040 5: HttpUtils url=https://nucleo.neatocloud.com:4443/vendors/neato/robots/XXX/messages
2020.01.15 15:46:15.054 4: IP: nucleo.neatocloud.com -> 54.90.247.80
2020.01.15 15:46:15.387 5: HttpUtils request header:
POST /vendors/neato/robots/XXX/messages HTTP/1.0^M
Host: nucleo.neatocloud.com:4443^M
User-Agent: fhem^M
Accept-Encoding: gzip,deflate^M
Accept: application/vnd.neato.nucleo.v1^M
Content-Type: application/json^M
Date: Wed, 15 Jan 2020 14:46:15 GMT^M
Authorization: NEATOAPP XXX^M
Content-Length: 35^M

2020.01.15 15:46:15.742 4: https://nucleo.neatocloud.com:4443/vendors/neato/robots/XXX/messages: HTTP response code 200
2020.01.15 15:46:15.742 5: HttpUtils https://nucleo.neatocloud.com:4443/vendors/neato/robots/XXX/messages: Got data, length: 757
2020.01.15 15:46:15.742 5: HttpUtils response header:
HTTP/1.0 200 OK^M
server: Cowboy^M
date: Wed, 15 Jan 2020 14:46:14 GMT^M
content-length: 757^M
Access-Control-Allow-Origin: *^M
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS^M
Access-Control-Allow-Headers: Accept,Date,X-Date,Authorization^M
Content-Type: application/json
2020.01.15 15:46:15.742 5: BOTVAC Horst: called function ReceiveCommand() rc: HASH(0x34d1ee0) err:  data: {"version":1,"reqId":"0","result":"ok","data": {},"error":null,"alert":null,"state":1,"action":0,"cleaning": {"category":0,"mode":1,"modifier":1,"navigationMode":1,"spotWidth":0,"spotHeight":0},"details": {"isCharging":false,"isDocked":true,"isScheduleEnabled":false,"dockHasBeenSeen":false,"charge":98},"availableCommands": {"start":true,"stop":false,"pause":false,"resume":false,"goToBase":false},"availableServices": {"findMe":"basic-1","generalInfo":"basic-1","houseCleaning":"basic-4","IECTest":"advanced-1","logCopy":"basic-1","manualCleaning":"basic-1","maps":"basic-2","preferences":"basic-2","schedule":"basic-2","softwareUpdate":"basic-1","spotCleaning":"basic-3","wifi":"basic-1"},"meta": {"modelName":"BotVacD7Connected","firmware":"4.5.3-189"}}
2020.01.15 15:46:15.742 4: BOTVAC Horst: RCV messages/getRobotState
2020.01.15 15:46:15.742 4: BOTVAC Horst: successors 0: messages,getSchedule 1: messages,getGeneralInfo 2: messages,getPreferences
2020.01.15 15:46:15.742 4: BOTVAC Horst: RES messages/getRobotState - {"version":1,"reqId":"0","result":"ok","data": {},"error":null,"alert":null,"state":1,"action":0,"cleaning": {"category":0,"mode":1,"modifier":1,"navigationMode":1,"spotWidth":0,"spotHeight":0},"details": {"isCharging":false,"isDocked":true,"isScheduleEnabled":false,"dockHasBeenSeen":false,"charge":98},"availableCommands": {"start":true,"stop":false,"pause":false,"resume":false,"goToBase":false},"availableServices": {"findMe":"basic-1","generalInfo":"basic-1","houseCleaning":"basic-4","IECTest":"advanced-1","logCopy":"basic-1","manualCleaning":"basic-1","maps":"basic-2","preferences":"basic-2","schedule":"basic-2","softwareUpdate":"basic-1","spotCleaning":"basic-3","wifi":"basic-1"},"meta": {"modelName":"BotVacD7Connected","firmware":"4.5.3-189"}}
2020.01.15 15:46:15.744 4: BOTVAC Horst: Read password from file
2020.01.15 15:46:15.744 5: BOTVAC Horst: called function SendCommand()
2020.01.15 15:46:15.744 4: BOTVAC Horst: REQ messages/getSchedule
2020.01.15 15:46:15.745 4: BOTVAC Horst: successors 0: messages,getGeneralInfo 1: messages,getPreferences
2020.01.15 15:46:15.745 5: BOTVAC Horst: POST https://nucleo.neatocloud.com:4443/vendors/neato/robots/XXX/messages ({"reqId":"0","cmd":"getScheduleEvents"})
2020.01.15 15:46:15.745 5: BOTVAC Horst: header Accept: application/vnd.neato.nucleo.v1^M
Content-Type: application/json^M
Date: Wed, 15 Jan 2020 14:46:15 GMT^M
Authorization: NEATOAPP XXX
2020.01.15 15:46:15.745 5: HttpUtils url=https://nucleo.neatocloud.com:4443/vendors/neato/robots/XXX/messages
2020.01.15 15:46:15.746 4: IP: nucleo.neatocloud.com -> 54.90.247.80
--- log skips   180.191 secs.
2020.01.15 15:49:15.938 4: HttpUtils: https://nucleo.neatocloud.com:4443/vendors/neato/robots/XXX/messages: Can't connect(2) to https://nucleo.neatocloud.com:4443:  SSL wants a read first
2020.01.15 15:49:15.938 5: BOTVAC Horst: called function ReceiveCommand() rc: HASH(0x341c0a0) err: https://nucleo.neatocloud.com:4443/vendors/neato/robots/XXX/messages: Can't connect(2) to https://nucleo.neatocloud.com:4443:  SSL wants a read first data:
2020.01.15 15:49:15.938 4: BOTVAC Horst:messages/getScheduleEvents RCV https://nucleo.neatocloud.com:4443/vendors/neato/robots/XXX/messages: Can't connect(2) to https://nucleo.neatocloud.com:4443:  SSL wants a read first
2020.01.15 15:49:15.938 4: BOTVAC Horst: drop successors
2020.01.15 15:49:15.938 4: BOTVAC Horst: successors 0: messages,getGeneralInfo 1: messages,getPreferences
2020.01.15 15:49:15.938 1: Perfmon: possible freeze starting at 15:46:16, delay is 179.938
2020.01.15 15:49:15.939 5: [Freezemon] myFreezemon: ----------- Starting Freeze handling at 2020.01.15 15:49:15.939 ---------------------
2020.01.15 15:49:15.939 5: [Freezemon] myFreezemon found something that's not a REF CUL_HM_procQs
2020.01.15 15:49:15.939 5: Freezemon: something went wrong CUL_HM_procQs
[Freezemon] myFreezemon: possible freeze starting at 15:46:16, delay is 179.938 possibly caused by: tmr-BOTVAC::GetStatus(Horst) tmr-CUL_HM_procQs(N/A) tmr-perfmon_ProcessTimer(N/A)


Im freezemon-Thread wurde mir empfohlen, den dnsServer im global-device zu setzen (hat nicht geholfen).
Im nächsten Schritt sollte ich den Modulautor fragen, ob er nonblocking_get einsetzt. Wenn nicht, sollte er das tun.... Sehen andere das gleiche Problem?


Und hier noch ein list des devices (ich habe 2 Neato, die beide das gleiche Problem machen):

Internals:
   CHANGED   
   DEF        XXX@XXX.XX NEATO 600
   EMAIL      XX@XXX.XX
   FUUID      XX
   INTERVAL   600
   NAME       Horst
   NR         262
   SERVICES   spotCleaning:basic-3, manualCleaning:basic-1, maps:basic-2, generalInfo:basic-1, preferences:basic-2, schedule:basic-2, findMe:basic-1, IECTest:advanced-1, logCopy:basic-1, houseCleaning:basic-4, softwareUpdate:basic-1, wifi:basic-1
   STATE      Idle
   TYPE       BOTVAC
   VENDOR     neato
   HELPER:
   OLDREADINGS:
   READINGS:
     2019-12-19 11:50:47   action          0
     2019-12-17 10:20:47   alert           
     2019-11-27 22:02:05   batteryAuthorizationStatus genuine
     2019-11-27 22:02:05   batteryManufacturingDate 2099-2-14
     2020-01-16 11:21:56   batteryPercent  99
     2020-01-16 11:21:57   batteryTimeToEmpty 65535
     2020-01-16 11:21:57   batteryTimeToFullCharge 38
     2020-01-14 12:06:09   batteryTotalCharges 22
     2019-11-27 22:02:05   batteryVendor   Panasonic
     2020-01-07 00:10:33   cleaningCategory 0
     2020-01-07 00:10:33   cleaningMode    eco
     2019-11-27 21:52:04   cleaningModifier normal
     2019-12-19 11:10:47   cleaningNavigationMode normal
     2019-11-27 21:52:04   cleaningSpotHeight 0
     2019-11-27 21:52:04   cleaningSpotWidth 0
     2019-12-19 11:50:47   dockHasBeenSeen 0
     2020-01-07 00:10:33   firmware        4.5.3-189
     2019-12-17 00:00:48   firmwareLatest  4.5.3-189
     2020-01-16 11:11:56   isCharging      1
     2019-12-19 11:50:47   isDocked        1
     2019-11-27 21:42:08   macAddr         0479b78947d3
     2019-12-20 00:00:51   map_area_per_time 0.8
     2019-11-28 10:55:21   map_base_count  1
     2019-11-28 10:55:21   map_category    2
     2019-12-20 00:00:51   map_cleaned_area 31.2704
     2019-12-20 00:00:51   map_date        2019-12-19 11:45:17
     2019-11-28 10:55:21   map_delocalized 0
     2019-12-20 00:00:51   map_discharge_per_time 0.9
     2019-12-20 00:00:51   map_duration    38.6
     2019-12-20 00:00:51   map_end_orientation_relative_degrees 359
     2019-12-20 00:00:51   map_expected_area 95
     2019-12-20 00:00:51   map_expected_time 117
     2019-12-20 00:00:51   map_id          2019-12-19T10:06:40Z
     2019-11-28 10:55:21   map_is_docked   1
     2019-12-17 10:50:49   map_launched_from app
     2019-12-20 00:00:51   map_mode        2
     2019-11-28 10:55:21   map_modifier    1
     2019-12-20 00:00:51   map_navigation_mode 1
     2019-12-20 00:00:51   map_run_charge_at_end 63
     2019-12-17 10:50:49   map_run_charge_at_start 96
     2019-12-20 00:00:51   map_run_discharge 33
     2019-11-28 10:55:21   map_status      complete
     2019-11-28 10:55:21   map_suspended_cleaning_charging_count 0
     2019-11-28 10:55:21   map_time_in_error 0
     2019-11-28 10:55:21   map_time_in_pause 0
     2019-11-28 10:55:21   map_time_in_suspended_cleaning 0
     2019-11-28 10:55:21   map_valid_as_persistent_map 0
     2019-11-28 10:55:21   map_version     1
     2019-11-27 21:42:08   model           BotVacD7Connected
     2019-11-27 21:42:08   name            Horst
     2019-11-27 21:42:08   nucleoUrl       https://nucleo.neatocloud.com:4443
     2019-11-27 22:02:06   pref_brushChangeReminderInterval 6
     2019-11-27 22:02:06   pref_dirtbinAlertReminderInterval 90
     2019-11-27 22:02:06   pref_filterChangeReminderInterval 1
     2019-11-27 22:02:06   pref_robotSounds 1
     2019-11-27 21:52:04   result          ok
     2019-11-27 21:42:08   robot           0
     2019-11-27 21:52:04   scheduleEnabled 0
     2019-11-27 21:42:08   serial          GPC31219-0479B78947D3
     2020-01-15 21:51:56   state           Idle
     2019-12-19 11:50:47   stateId         1
   helper:
     ROBOTS:
       HASH(0x42d7c28)
       HASH(0x430a6a0)
Attributes:
   disable    1
   icon       Botvac_VR200
   room       Wohnzimmer
   webCmd     startCleaning:stop:sendToBase


Danke schon mal für jeden Tipp!
Raspi, ZWave, HUE, Neato Botvac, Squeezebox

vuffiraa

Hallo schnuddel,

wie oft tritt das Problem bei dir aus? Ist das regelmäßig?

Das Modul selber benutzt non-blocking Calls, hier sollte das Problem nicht liegen. Aus dem anderen Thread hatte ich damals gelernt, dass es am SSL Handshake liegt, bzw. dabei geht etwas schief.

Du schreibst, dass du 2 Neatos hast, gibt es den Freeze bei beiden?

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean