MQTT2 für Xiaomi Vacuum Sauger

Begonnen von Otto123, 12 Mai 2021, 12:53:37

Vorheriges Thema - Nächstes Thema

TomLee

Scheint alles zu passen, was ich mit dem Gen1 testen kann.

Ich frage mich warum start,stop,pause,home mit dem operation-settter umgesetzt ist ?
Kann mans nicht einheitlich machen wie es in dem RE-Template und auch in dem XiaomiDevice-Modul umgesetzt ist ?

pause:noArg {qq($DEVICETOPIC/BasicControlCapability/operation/set ).uc($EVTPART0)}
start:noArg {qq($DEVICETOPIC/BasicControlCapability/operation/set ).uc($EVTPART0)}
stop:noArg {qq($DEVICETOPIC/BasicControlCapability/operation/set ).uc($EVTPART0)}
charge:noArg $DEVICETOPIC/BasicControlCapability/operation/set HOME


ZitatZu den Features: ich meine man könnte irgendwo irgendwann (beim Template anwenden oder dann im Device) den Typ (die Features) abfragen und die Dinge entsprechend ein- und ausblenden.

Hab ich immer noch nicht verstanden was genau gemeint ist  8)


Zitat von: Otto123 am 16 Januar 2022, 18:11:49
hmm, ich habe jetzt auf meinem Gen1 mal (da rennt noch valetudoRE) die valetudo binary runtergeladen und dann RE gestoppt und valetudo gestartet ...

Willst du wirklich auf dem Gen1 Valetudo beibehalten ? Du hast kein bin-in-time mehr und die Karten kann man auch nicht speichern/wiederherstellen.

Otto123

Der Operation Setter war für mich erstmal das augenscheinlichste, klar kann man das komatibel machen. War mir auch klar das die Frage kommt :)

zu den Features abfragen, - ein Stück Code sagt mehr als 1000 Worte? - mal was für die Kommandozeile als Idee:
alternativ my $substr='MapSegmentation';;
{
my $NAME='MQTT2_valetudo_xxx';;
my $substr='GoToLocation';;
my $ip=ReadingsVal($NAME,'ip4',(split ',',ReadingsVal($NAME,'ips','error'))[0]);;
my $url="http://$ip/api/v2/robot/capabilities";;
my $string = GetHttpFile($ip, '/api/v2/robot/capabilities');;
index($string, $substr) == -1 ? $substr.' not supported':$substr.' supported';;
}
Im Template dann mit option: alternativen Code ausführen - meint: die Einen bekommen goto die Anderen clean-segment

Das mit dem Gen1 war nur erstmal zum Test, sonst muss ich ja immer auf Dich warten  ;D ;D ;D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

@TomLee Ich habe bei mir auf Github mal noch ne Vorschau mit Feature Abfrage und option im template. Falls Du Lust hast. Ich teste morgen auch noch mal ein wenig.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Achso und hier noch. Ich meld mich nicht weil ich nicht weiß was ich dazu sagen soll wenn alles klappt !  ;D

Das mit option klappt auch bei mir, es wird der goto-setter ergänzt.

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

meier81

Hallo Otto,

hab das Template bei mir heute auch aktualisiert, hab einen V1, funktioniert erstmal alles weiter, echt super.

Eine Frage hätte ich, ich hab bei mir hier ein paar DOIF´s mit denen ich den Status auswerte, hier steht aber im Internal State z.B. <a href="http://192.168.179.26" target="_blank">cleaning</a>, und im Readings State cleaning.

Ist es möglich hier den Internal State auch noch gleich zu setzen wie den Readings State?

Hab dir auch mal einen Screenshot angefügt wie es bei mir zur Zeit aussieht.

Gruß Markus
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb2 und Grafana || HB-RF-ETH || SIGNALduino 433MHz mit Maple mini || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus web KM100 || div. Tasmota-Devices

Otto123

#141
Hallo Markus,

schön das es erstmal passt. Wenn Du einfach das attr stateFormat löschst wird STATE=state.
Ich hatte das eingebaut um per Klick auf die Weboberfläche von valetudo zu kommen.
Es ist immer so eine Sache mit state und STATE. Epmfehlenswert ist eigentlich immer die Auswertung besser mit state anstatt mit STATE zu machen DOIF [device] -> [device:state]
Und den STATE kann man in Verbindung mit devStateIcon für allerlei Optik nutzen, einfaches Beispiel:
attr MQTT2_valetudo_xxx devStateIcon (docked|paused):rc_PLAY:start cleaning:rc_PAUSE:pause returning:refresh:pause
attr MQTT2_valetudo_xxx stateFormat cleanerState\
<div title="Valetudo WEB UI"><a href="http://ip4" target="_blank">state</a></div>


Ein "Nachteil" bei der Verwendung von state ist noch: es gibt per default keinen state Event, deswegen habe ich noch das Reading cleanerState eingeführt worauf man im notify oder userReadings besser triggern kann.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

meier81

Hallo Otto,

vielen Dank für die Erklärung. Das mit dem "stateFormat" hab ich total übersehen und auch nicht mehr drangedacht das dies so im Zusammenhang steht.

Mein DOIF hatte ich ja dann wie du schon geschrieben hast in [device:state] geändert gehabt, das state-reading scheint ja aber aber doch zu triggern, das hat bei mir bezüglich dem DOIF einwandfrei funktioniert.

Was hast du denn bezüglich den MQTT Einstellungen bei dir aktiviert, zur Zeit habe ich eingestellt:


- kein Friendly name
- Identifier "rockrobo"
- Topic prefix "valetudo"

- kein Provide map data
- kein Homie
- kein Home Assistant


Funktioniert eigentlich die Karte beim V1, denke dann bräuchte ich ja mal zumindest das "Provide map data". Denke "Homie" und "Home Assistant" werden ja nicht unbedingt mehr Datenpunkte erzeugen.

Gruß Markus
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb2 und Grafana || HB-RF-ETH || SIGNALduino 433MHz mit Maple mini || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus web KM100 || div. Tasmota-Devices

Otto123

#143
ich habe nicht gesagt man kann nicht triggern :) der Event sieht anders aus, typischerweise fehlt das Reading "state:" im Event. Beispiel:
device cleaning
device cleanerState: cleaning

Dein DOIF triggert, macht aber dann eine Abfrage des Wertes für state. :) https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
das wäre die Alternative https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events

Habe die Einstellung wie Du mit Ausnahme:Provide map-data
Bei Provide map-data (kein Homie, kein Home Assistent) wird die Karte und die segments übertragen. Die Kartendaten schicke ich in den Papierkorb, segments ist bei einem Sauger der es unterstützt wichtig zur Raumansteuerung.
Der v1 unterstützt keine segments.

Die Daten der Karte habe ich noch nicht verstanden. Wenn man ein Bild haben will kann man einen extra Webservice nutzen, den habe ich aber auch nicht verstanden.😳
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Mein Sauger sagt offenbar immer mal "tschüss" und dann kann FHEM ihn nicht mehr steuern. Das tragische: man merkt es eigentlich kaum.
Ich habe mal als Würgaround einen getter gemacht, der liest die mqtt Config, schreibt sie wieder zurück und macht damit ein reconnect für mqtt mit Hilfe der REST API.
attr MQTT2_valetudo_xxx getList reconnectMQTT _state {my $ip = ReadingsVal($NAME,'ip4','error');; my $url = "http://$ip/api/v2/valetudo/config/interfaces/mqtt";; my $val=GetFileFromURL($url);; fhem("\"curl -X 'PUT' '$url' -H 'accept: */*' -H 'Content-Type: application/json' -d '$val'\"")}
Irgendwie habe ich nicht gefunden, wie man mit HTTPUtils 'PUT' machen kann  :-[ deswegen mit dem "orginal" curl Aufruf aus der Swagger UI.
Man sieht den Problem Vorgang im Log an Hand vom _state Reading - hier während eines Saugvorganges:
2022-01-26_09:02:55 MQTT2_valetudo_ClumsyQuirkyCattle batteryPercent: 90
2022-01-26_09:05:17 MQTT2_valetudo_ClumsyQuirkyCattle _state: lost
2022-01-26_09:05:30 MQTT2_valetudo_ClumsyQuirkyCattle _state: init
2022-01-26_09:05:30 MQTT2_valetudo_ClumsyQuirkyCattle _state: ready
2022-01-26_09:05:31 MQTT2_valetudo_ClumsyQuirkyCattle signal: -38
2022-01-26_09:05:31 MQTT2_valetudo_ClumsyQuirkyCattle time: 1500
2022-01-26_09:05:32 MQTT2_valetudo_ClumsyQuirkyCattle area: 340000
mMn macht er ja selbst einen reconnect, die Datenübertragung bleibt auch bestehen, aber er nimmt danach keine Befehle mehr entgegen.
Ich weiß noch nicht wie dem näher auf die Schliche komme. :(

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Hey Otto,

betreffend dem valetudoV2-Template mit event-on-change-reading .* und timestamp-on-change-reading .* mein ich sind wir beide uns einig, das nur noch die nötigsten Events stattfinden und die Zeitstempel auch immer passen.

Wenn ich hier jetzt das lese:

Zitat von: Damian am 30 Januar 2022, 18:03:40
Ich habe bei mir ganz mutig attr .* event-on-change-reading .* für alle Devices gesetzt (Sicherung der Konfiguration kann davor nicht schaden!) und musste es zunächst nur bei einem Device rückgängig machen. Das hat bereits eine Menge unnötiger Events eliminiert.

Dann habe ich mir den Event-Monitor angeschaut und konnte noch regelmäßige Events sehen, die ich überhaupt nicht brauchte. Und selbst die, habe ich per event-on-update-reading eliminieren können.

Komm ich bei "habe ich per event-on-update-reading eliminieren können" nicht mit.
Wenn ich bei einem aktuellen valetudoV2-Template-Device (eocr .*,tocr .* gesetzt) zusätzlich das Attribut event-on-update-reading auf ein beliebiges Reading setze das eigentlich alle 30 Sekunden geschickt wird und mit eocr .* verhindert wird, dann hab ich damit doch wieder ein Event erzeugt ?

Ich hab mich ehrlich gesagt bis jetzt nicht weiter mit beschäftigt und genauer in dem Thread weitergelesen, aber alleine das beschäftigt mich schon.

Ich hatte es bisher so verstanden das ich eour setze wenn ich das in bestimmten Fällen auch brauche, das ich Events damit jetzt eleminiere da komm ich einfach bis jetzt nicht mit.



Otto123

Ich verstehe das Zusammenspiel dieser Attribute auch nicht unbedingt.
Naja Damian schreibt nicht das er eour auf .* gesetzt hat, das macht sicher keinen Sinn. Wenn man eour auf ein spezielles Reading setzt was man wirklich braucht? Was macht dann ein zusätzliches eocr mit .* ? - hat er geschrieben, er hat es beibehalten?

Ich weiß es nicht...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

Ich verstehe das so:

eocr .* - > alle Readings nur Events bei Änderung
eour diesesReading - > Event dieses Readings, selbst wenn der Wert gleich geblieben ist

Alternativ (so verstehe ich das): eocr mit Liste aller Readings bis auf "diesesReading"...

Je nachdem wieviele Readings ein Device hat und wieviele davon man doch haben will ist es u.U. kürzer eocr .* und dann bestimmte Readings wieder mit eour reinnehmen...

Mache ich zumindest so...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

drhirn

Mal eine doofe Frage, weil ich gerade über das Problem gestolpert bin, dass mein Device-Name nicht mit dem MQTT-devicetopic übereinstimmt:

Würde es nicht Sinn machen, Zeile 68 durch folgendes zu ersetzen:

my $devicetopic = AttrVal($NAME,'devicetopic',"valetudo/$NAME");

So funktioniert bei mir dann nämlich auch das Segment-Cleaning, weil das Topic stimmt ;)

Weiß aber nicht, ob das Nebenwirkungen hat.

waldy

Bis zu welcher Valetudo Version ist das Template kompatibel bzw. getestet?

In der 2022.05.0 wurde ja scheinbar "Zone Preset" und "GoTo Location" entfernt.

Ich hab auf meinem V1 jetzt die Version 2022.03.1 - Funktioniert soweit auch super, bis auf clean_zone und goto.

Die Presets werden ausgelesen und auch im Webinterface angezeigt, nur leider ohne Funktion.