Valetudo oder PNG via MQTT als Medien-Bild speichern

Hallo,

bei meinem Putzroboter ist ja nun schon eine Weile Valetudo installiert und den kann ich via MQTT steuern. Nun habe ich bei der Doku von Valetudo festgestellt, das dort auch die Map als PNG mit MQTT übertragen wird
Topic: Valetudo/Robotername/MapData/map-data-hass

Wie kann ich nun dieses Map als Medien-Bild in Symcon abspeichern und dann in der Visu anzeigen?

Ich bin für jeden Denkanstoß dankbar.

Kevin

Ich könnte mir vorstellen, ohne es zu kennen, dass der Inhalt vom Bild als String geliefert werden muss. Zumindest würde ich das mal probieren. Die Dateigröße wird auch wichtig sein. Ich würde das aber nicht in eine IPS Variable schieben. Könnte dir die Konfiguration zerschießen. Also direkt in einem Skript mit requestaction.

Hallo Helmut,

es kommt ja ein MQTT String rein. Als Value-Variable habe ich schon die Symcon. Nur will ich den eher als Datei speichern und mit IPS_CreateMedia oder IPS_SetMediaFile die Mediendatei schreiben, um sie dann in der Visu darstellen zu können. Die jetzige String-Value-Variable ist nicht darstellbar.

Mit dem MQTT-Explorer sieht es mit dem Wert auch nach einer PNG-Datei aus:

Viele Grüße
Kevin

Hab mal eine ersten Versuch probiert.

Die Datei wird auch schön angelegt, ist aber nicht zu lesen:

<?php
$MediaID = IPS_CreateMedia(1); 
IPS_SetMediaFile($MediaID, "Valetudo_map.png", False);
$value = GetValueString(35910);
$value = base64_encode($value);
// json_decode($value);
IPS_SetMediaContent($MediaID, $value);
IPS_SetName($MediaID, "Valetudo-Map");
IPS_SetParent($MediaID, 27612);  
IPS_LogMessage($_IPS["SELF"], "MediaID=".$MediaID);
?>

Irgendwas scheint noch nicht von mir verstanden worden zu sein.

Vielleicht so?

$value = hex2bin(GetValueString(35910));
$value = base64_encode($value);

Michael

Hallo Michael,

besten Dank für deinen Wink mit dem Zaunpfahl. Ich bin einfach nicht drauf gekommen, dass das binär in Hex war.
Jetzt klappt es soweit. Nur wird leider bei Valetudo das PNG File manipuliert und mit JSON angereichert.

Falls es jemand für andere Fälle braucht, hier nochmal das ganze Script mit Ergebnis:

<?php
$MediaID = IPS_CreateMedia(1); //Bild hochladen
$path = IPS_GetKernelDir()."/media";
IPS_SetMediaFile($MediaID, $path."/Valetudo_map.png", False);
$value = hex2bin(GetValueString(35910)); // ObjektID des HEX-codierten Bildes
$value = base64_encode($value);
IPS_SetMediaContent($MediaID, $value);
IPS_SetName($MediaID, "Valetudo-Map");
IPS_SetParent($MediaID, 27612);  // ID an Medienkategorie anpassen
?>

Kevin