Autor Thema: Roborock/Xiaomi Vacuum: Backup und Restore der gespeicherten Karte über MQTT  (Gelesen 2218 mal)

Online MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 5417
  • NIVEAu ist keine Creme...
Und weil ich grad dabei war hab ich ne Sub gebastelt...
...kann man sicher besser machen (ich halt nicht ;)  )...

sub my_makeFHEMcoordinates($)
{
  my ($ValetudoCoordinates) = @_;
  my $Result = "";
 
  $ValetudoCoordinates = (split(/\[/,$ValetudoCoordinates))[1]; # "rauslösen" des Inhalts innerhalb der Eckigen Klammer(n)
  my $X1 = int((split(/,/,$ValetudoCoordinates))[0]); # int() ist vermutlich nicht nötig. War der erste Versuch die "führende" eckige Klammer "loszuwerden" hat leider nicht geklappt / hab's aber drin gelassen schadet ja nicht ;-)
  my $Y1 = int((split(/,/,$ValetudoCoordinates))[1]);
  my $X2 = int((split(/,/,$ValetudoCoordinates))[2]);
  my $Y2 = int((split(/,/,$ValetudoCoordinates))[3]);

  $Y1 = 51200 - $Y1;
  $Y2 = 51200 - $Y2;

  if($X1 > $X2)
  {
    my $X = $X1;
    $X1 = $X2;
    $X2 = $X;
  }
  if($Y1 > $Y2)
  {
    my $Y = $Y1;
    $Y1 = $Y2;
    $Y2 = $Y;
  }
 
  $Result = "[" . $X1 . "," . $Y1 . "," . $X2 . "," . $Y2 . ",1]";
 
  return $Result;
}

Aufruf dann so:

my_makeFHEMcoordinates("[24540, 25827, 26244, 26448, 1]")

Mit oder ohne 1 am Ende ist egal.
Leerzeichen (weil die beim Rauskopieren bei Valetudo [zumindest bei mir] drin sind) sollten kein Problem sein...

Wichtig sind halt die eckigen Klammern, ansonsten muss der erste Split-Aufruf weg...
...bzw. irgendwas mit RegEx (war mir aber zu wild ;)  ) was evtl. vorhandene Klammern etc. "rausnimmt"...
und die Anführungszeichen (also Übergabe eines Strings)!

Hab's aber jetzt nicht intensiv getestet...

Gruß, Joachim
« Letzte Änderung: 20 Juni 2019, 17:43:05 von MadMax-FHEM »
FHEM 5.9 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, HUE, CO2, ESP-Multisensor, FireTV, KODI, alexa-fhem, ...
FHEM 5.9 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.9 PI3 (Test): HM-MOD-PCB, Snips, Google Home, ...

Offline gsbox

  • Jr. Member
  • **
  • Beiträge: 69
Hi.
Hat jemand eine Idee, wie ich die Karte vom letzten Saug-Vorgang in FHEM anzeigen lassen kann ? Wie kann ich das PNG bekommen ? Ich habe mir schon das https://github.com/Hypfer/ICantBelieveItsNotValetudo Projekt angeschaut, aber irgendwie blicke ich da nicht durch... Gibt es da nicht einen einfacheren Weg ?

Viele Grüße
Guido

Online MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 5417
  • NIVEAu ist keine Creme...
Hallo Marcel/rakete123,

ich nehme hier mal Bezug zu dort: https://forum.fhem.de/index.php/topic,73052.msg950459.html#msg950459 (damit das nicht verloren geht bzw. dort evtl. OT wird / ok, dann ist es hier wohl OT / auch nicht besser :-| )...

Zitat von: rakete123/Marcel
Hallo zusammen,

wäre es ggf. sinnvoll das Module zu erweitern damit es mit der Valetudo API auf den Vaccums sprechen kann?
Wir hatten da eine kleine Diskussion wegen der Koordinaten, siehe: https://forum.fhem.de/index.php/topic,101197.msg950415.html#msg950415

Aktiveren mit einem Attribute wie use_valetudo_api und dann könnte man über /api/get_config die Zonen aus Valetudo auslesen und automatisch in das zone_names Attribute übernehmen. Irgendwie mit einem SET Command z.b.

Ich würde auch selber mal versuchen das Module zu erweitern wenn das erlaubt ist.

mfg
Marcel

Das mit /api/get_config geht aber nur (zumindest bei mir), wenn man schon Zonen in Valetudo gespeichert hat...
...um das zu tun muss man entweder per /IP-Sauger/zone welche anlegen und die Koordinaten speichern...
...oder eben per "Entwickleroptionen" den HTTP-Aufruf "zone_clean" von Valetudo an den Sauger "abgreifen" und dort die Koordinaten nehmen...

Was ich überlege ist aus meiner Funktion mittels Notify und userattr beim Sauger folgendes zu ermöglichen:

neues Attribut "valetudo_zones" (userattr)...
Aufbau (praktisch wie zone_names): Zone1Name:[X1,Y1,X2,Y2,Anzahl] Zone2Name:[X1,Y1,X2,Y2,Anzahl]

Dann ein Notify auf "Änderung im Attribut 'valetudo_zones'" wo dann die Berechnung stattfindet und "zone_names" gesetzt wird...

Würde aber dann dort eingetragene (also die NICHT von valetudo_zones kommenden) Zonen "löschen" bzw. halt immer mit den Einträgen von "valetudo_zones" überschreiben...

Nur so als Idee...
...wenn ich das habe poste ich es mal.

@gsbox:

geht es nur um die Anzeige in fhem also beispielsweise in FhemWeb?
Evtl. geht sowas wie weblink, also einfach auf Valetudo "verlinken" oder per iFrame etc.

Ansonsten müsste man sich mal anschauen was dort gemacht wird um das Bild/Karte anzuzeigen.
Glaube nicht, dass das "nur" ein png ist...

EDIT: hab gerade geschaut. Ist kein png (gut dachte ich mir schon) und es ist einiges an Script notwendig um das Bild/Karte anzuzeigen... Evtl. iFrame und dann halt die gesamte Webseite einblenden...

EDIT2: folgendes geht für FhemWeb (RawDefinition) / die Attribute (v.a. bzgl. width/height nat. entsprechend anpassen)
defmod AnzeigeValetudo weblink iframe http://IP-Adresse-Sauger
attr AnzeigeValetudo htmlattr width="480" height="560"
attr AnzeigeValetudo room Valetudo

Gruß, Joachim
« Letzte Änderung: 23 Juni 2019, 13:44:41 von MadMax-FHEM »
FHEM 5.9 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, HUE, CO2, ESP-Multisensor, FireTV, KODI, alexa-fhem, ...
FHEM 5.9 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.9 PI3 (Test): HM-MOD-PCB, Snips, Google Home, ...

Offline gsbox

  • Jr. Member
  • **
  • Beiträge: 69
Hallo Joachim.
Zitat
geht es nur um die Anzeige in fhem also beispielsweise in FhemWeb?
Nein, ich möchte das Bild via Telegram an mich senden. Mal schauen, ob das geht.

Zitat
Ansonsten müsste man sich mal anschauen was dort gemacht wird um das Bild/Karte anzuzeigen.
Ok. Ich versuche mal, das herauszufinden. Falls ich erfolg habe, poste ich das Ergebnis.

Danke erstmal für Deine Antwort.
VG

Online Shojo

  • Developer
  • Full Member
  • ****
  • Beiträge: 371
  • Wie, Was, Wo?
    • DER BASTELBUNKER / Meine kleinen Projekte…
Ich nutze das aktuell schon mit Telegram.
Die Vorgehensweise ist recht simpel, Valetudo sendet über MQTT die Map Daten an ICantBelieveItsNotValetudo und dort kann man dann einfach die Map via URL als Bild abfragen.

Kann man z.B. so im FHEM verarbeiten :
set TelegramBot cmdSend {GetFileFromURL("http://IP:PORT/api/map/image")}
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, HM-MOD-RPI-PCB Mod auf ESP8266 , ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

Offline gsbox

  • Jr. Member
  • **
  • Beiträge: 69
Hallo shojo.
Vielen Dank. Das hört sich ja gut an. Hm, kann ich den Dienst von ICantBelieveItsNotValetudo auch auf meinem raspberry pi laufen lassen? Ich habe keinen anderen Rechner, der die ganze Zeit läuft😕.
Oder läuft das direkt auf dem Robi? Aber das ist ja glaube ich nicht so sinnvoll...

Danke für die Info.
Vg

Online Shojo

  • Developer
  • Full Member
  • ****
  • Beiträge: 371
  • Wie, Was, Wo?
    • DER BASTELBUNKER / Meine kleinen Projekte…
"Früher" lief der Dienst auch direkt auf dem Robi, aber da das rendern der Bilder doch schon etwas Leistung braucht  (und davon hat der Robi auch nicht viel von über) wurde dieser Dienst in ICantBelieveItsNotValetudo  ausgelagert.

Bei mir läuft alles in Docker Containern und daher war es kein Aufwand den Dienst mal eben mit laufen zu lassen.
Aber auf den Raspi sollte das auch kein großes Problem darstellen, man muss halt nur NodeJS am laufen haben.
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, HM-MOD-RPI-PCB Mod auf ESP8266 , ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

Offline gsbox

  • Jr. Member
  • **
  • Beiträge: 69
Ok. Danke. Ich werde es mal versuchen.
Viele Grüße

Offline rakete123

  • Full Member
  • ***
  • Beiträge: 102
Das mit /api/get_config geht aber nur (zumindest bei mir), wenn man schon Zonen in Valetudo gespeichert hat...
...um das zu tun muss man entweder per /IP-Sauger/zone welche anlegen und die Koordinaten speichern...
...oder eben per "Entwickleroptionen" den HTTP-Aufruf "zone_clean" von Valetudo an den Sauger "abgreifen" und dort die Koordinaten nehmen...

Was ich überlege ist aus meiner Funktion mittels Notify und userattr beim Sauger folgendes zu ermöglichen:

neues Attribut "valetudo_zones" (userattr)...
Aufbau (praktisch wie zone_names): Zone1Name:[X1,Y1,X2,Y2,Anzahl] Zone2Name:[X1,Y1,X2,Y2,Anzahl]

Dann ein Notify auf "Änderung im Attribut 'valetudo_zones'" wo dann die Berechnung stattfindet und "zone_names" gesetzt wird...

Würde aber dann dort eingetragene (also die NICHT von valetudo_zones kommenden) Zonen "löschen" bzw. halt immer mit den Einträgen von "valetudo_zones" überschreiben...

Ich hab ein kleines Skript geschrieben, welches die Valetudo API ausliest und dann den passenden Output für FHEM erzeugt. Das kann dann einfach in das Attribute zone_names kopiert werden.

Skript liegt auf github: https://github.com/marcelfischer/fhem_stuff/blob/master/valetudo2fhem.pl

Genial wäre, wenn man das in das XiaomiDevice Module übernehmen würde, dann könnte ich mit einem simplen SET Command die Zonen aus Valetudo übernehmen.

BTW: Ich benutze das Teil ausschließlich über Valetudo aktuell.
Zwave: ZMEEUZB1 (Fibaro, Aeotec, diverse)
Zigbee: Conbee (HUE, Xiaomi, osram)
FS20: S6A
Homematic: HM-MOD-RPI-PCB + diverse HM-CC-RT-DN
Sonstiges: Harmony, Android, Netatmo, Jabber (talk2fhem)

Online MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 5417
  • NIVEAu ist keine Creme...
@rakete123

Muss ich mir mal anschauen...
...allerdings ist jetzt erst mal "Urlaubspause"...  :-\

Ich hab meine noch in der Europacloud von Xiaomi und steuere per fhem-Modul...

Einen hab ich jetzt mal mit Valetudo-FW geflasht...
...nutze ihn aber eigentlich auch nur per fhem-Modul...

Außer zum Karte kucken (geht ja dann nicht mehr anders) und "rumspielen"...
...da schaue ich dann mal "über" Valetudo rein... ;)

Gruß, Joachim
« Letzte Änderung: 23 Juni 2019, 23:32:36 von MadMax-FHEM »
FHEM 5.9 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, HUE, CO2, ESP-Multisensor, FireTV, KODI, alexa-fhem, ...
FHEM 5.9 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.9 PI3 (Test): HM-MOD-PCB, Snips, Google Home, ...

Offline gsbox

  • Jr. Member
  • **
  • Beiträge: 69
@Shoho
Hier meine Rückmeldung :
Ich habe es nun hinbekommen und ein laufendes NodeJS auf meinem Raspi 3 installiert. MQTT ist sowohl auf dem Sauger, als auch auf dem Raspi aktiviert und ich kann meine Karte mittels deines Kommandos "getFileFromUrl()" wunderbar auslesen und senden. Danke nochmal für die Hilfe.

Installieren von NodeJS via folgender Anleitung : https://crycode.de/installation-von-node-js

@rakete123
Vielen Dank für dein tolles perl-Skript für die Konvertierung der Koordinaten. Funktioniert super  :)

VG
« Letzte Änderung: Heute um 09:13:00 von gsbox »
Gefällt mir Gefällt mir x 1 Liste anzeigen

 

decade-submarginal