[Modul] Roborock / Xiaomi Vacuum Cleaner

Moin Fonzo,
ich bin begeistert, funktioniert auf Anhieb. Nach knapp 15 Minuten war meiner neuer S5max mit IPS verbunden, 30 Minuten später in meiner Webseite. Jetzt wird erst mal gesaugt und gewischt bis die erste Akkuladung verbraucht ist.

Vielen Dank für das Top-Modul und die tolle Dokumentation.

BTW: In die Beschreibung der Befehle auf Github hat sich ein kleiner Fehler eingeschlichen: Statt Roborock_Fan_Power muss es Roborock_Set_Fan_Power heißen.


Alles über die Nase im Gesicht Nordfrieslands
Eiderstedt.net

Gibt es da schon etwas zu berichten/etwas neues?

Hi Thomas,

da hatte ich wohl „zones“ mit „segments“ verwechselt :slight_smile: (MQTT: zoned_cleanup not working (custom_command) · Issue #253 · rand256/valetudo · GitHub)
Segmentreinigung ist deutlich komfortabler, da man im Webfrontend nur die Räume benennen muss und diese dann direkt ansteuern kann. Das mit den Koordinaten ist dann auch nicht mehr notwendig.

Funktioniert auch mit dem IPS internen MQTT Server.


$Payload['command'] = 'segmented_cleanup';
$Payload['segment_ids'] = ['Bad'];
$Payload['repeats'] = 1;
$msg = json_encode($Payload);  
RequestAction(37267, $msg);

Hallo Fonzo,

bei mir läuft das Modul schon etliche Monate einwandfrei, vielen Dank für das super Modul.
Mir werden auch alle möglichen Verbrauchsgegenstände mit den Prozent angezeigt.
Wird von der API auch der Stand vom Staubbehälter übertragen? Aktuell bekomme ich nur über die APP die Nachricht, dass der Staubhehälter voll ist?

Es wäre schön, wenn diese Nachricht auch über IPS-View kommen würde. So könnte ich das gleich visualisieren.

VG Alex

Welches Modell nutzt Du denn das Dir anzeigt wann der Staubbehälter voll ist?

Ich habe den Roborock S60.
In der kommt in Nachrichten die Meldung, wenn der Staubbehälter voll ist und im IPhone als Push angezeigt.
In der App ist es unter Profil-Nachrichten zu sehen.

VG Alex

Erstmal Glückwunsch, ist soweit ein gelungenes Modul.
Ich hab aber noch 2 Fragen:

  1. wie funktioniert die Fernbedienung, dazu bin ich wohl zu blöd
  2. ist es OK, dass das Modul so viel Traffic bei den PHP-Scripten verursacht, da läuft echt ne Menge durch… eigentlich läuft da immer was von dem Modul (bei mir ist Aktualisierungs-Intervall auf 15 Sekunden, wenn das zu niedrig ist kann ich auch höher setzen)

Hallo,

super Modul, hat sofort mit meinem neuen „S6 maxV“ geklappt. DANKE!
Ich traue mich kaum zu fragen, aber es scheint ja nicht möglich zu sein die roborock-app neben diesem Modul zu nutzen?! Geht das grundsätzlich nicht? Ist da was absehbar oder muss ich auf die MI-App wechseln, wobei ich zugeben muss, das ich noch nicht geschaut habe ob die mir nicht auch alles bietet was die mi-App hat…

NACHTRAG: Nach Update der Mi Home -App, kann ich glaube ich alles machen was ich will! Nachmals Danke für das tolle Modul, wenn jetzt ohne das Gerät zu root noch die Darstellung der Karte ginge …

Gruß
hardlog

Hi,

ich habe ein problem beim auslesens des Tokens. Die App ist auf dem Stand 5.0.19 installiert. Der Roborock war auch auf Werkseinstellung zurückgesetzt und mit der 5.0.19 App in Betreib genommen. Den Token wollte ich mit der MiToolkit auslesen, funzt aber leider nicht.
USB habe ich auf Debug gestellt und werde auch aufgefordert zuspeichern. Was ich aber ja nicht machen soll. Er schreibt als Fehlermeldung immer, das das Backup zu klein sein und zeigt auch nichts weiter im Tollkit an.

Könntet ihr mir bitte unter die Arme greifen. Ich weiß mom nicht weiter, was ich machen soll.

Besten Dank im Voraus

Hallo zusammen,
ich nutze Valetudo RE 0.10.1 auf meinem Roborock S50 und möchte jetzt gerne die Daten vom Sauger an IPS über MQTT senden lassen. Ich bekomme jedoch in IPS nichts im MQTT-Server (Debug) angezeigt. Folgende Einstellungen habe ich in Valetudo RE gemacht:


Passwort für MQTT wurde keines vergeben.

Grüße, Jürgen

Hallo Fonzo & CodeKing,

habe Heute meinen X6 MaxV in Betrieb genommen :smiley:
Anbindung lief ohne Probleme.

Danke für das Modul :):loveips:

Token habe ich mit iBroker ausgelesen. Mi Anmeldedaten eintragen und schon hat man den token.

Gruß

Hi,

bist du sicher das die URL mqtt:// sein muss?
Ich würde entweder mit http versuchen oder nur die IP eintragen.

Gruß

Danke, das war der richtige Tipp.

Moin.
Es ist geschafft den Roborock mit Symcon zu koppeln.
Habe es fast genauso gemacht, wie es in der Anleitung steht, mit der Abwandlung, das ich das nicht mehr über die App auslesen konnte.(App-Version zu alt) Dazu habe ich mir den Token extractor runtergeladen und damit dann ausgelesen. Ob man dann noch die russische Apk benötigt, kann ich jetzt nicht sagen.

Werde es noch weiter testen. Es nen sehr gutes Modul und ein gr. Dank an die Ersteller

Das rooten den Gerätes ist nicht so einfach, oder? Würde auch gern die Karte mit in Symcom haben wollen.

Ich selber habe einen S6max. Wenn man den rooten will muss man ihn komplett(!) zerlegen und die Hauptplatine ausbauen. Das ist eine Arbeit für bestimmt zwei Stunden und nur ganz Hartgesottenen zuzutrauen.
Das will sehr gut überlegt sein.

Ich habe übrigens das Modul erweitert, so dass es auch die Wischsteuerung unterstützt. Zudem fehlte mir auch die Möglichkeit mehrere Räume zum Saugen anzugeben.

Ich kläre noch mit Fonzo inwieweit er die Änderungen übernehmen will.

Burkhard

1 „Gefällt mir“

Hallo Burkhard,

… Zudem fehlte mir auch die Möglichkeit mehrere Räume zum Saugen anzugeben.

Dies habe ich mit einem Skript lösen können. Es besteht die Möglichkeit einer Manuellen Reinigung (1 Raum oder mehrere Räume) und einer Automatisierten Reinigung, welche sich über das WF einstellen und schalten lässt.



Bei Interesse kann ich es gerne zur Verfügung stellen.

Beste Grüße
Kai

Ich denke, du schickst ihn dann in mehreren Aufträgen in die gewählten Räume.

Etwas eleganter ist es, ihm in einem Auftrag die zu reinigenden Räume mitzugeben. [emoji1]

Schicke mir gerne mal dein Skript. Vielleicht kommen da ja noch mehr Ideen …

Hallo Burkhard,

Etwas eleganter ist es, ihm in einem Auftrag die zu reinigenden Räume mitzugeben.

Genau das macht das Script… :wink:

Aber teste es einfach mal. Vielleicht hast du ja weitere Ideen.
Ich nutze es mit einem Roborock S50.
Die auskommentierten Zeilen so lassen oder löschen, weil ich darüber andere Scripte eingebunden habe.

<?php 
################################################################################
# Scriptbezeichnung: Roborock_Multiroom.ips.php
# Version: 1.0.20201212
# Author:  Oliver Vogt (Housmann) & Kai Marleaux (Karlinho)   
#
# Beschreibung
# =========================
#
# Mit diesem Skript lässt sich die Reinigung der einzelnen Räume einstellen.
# Automatik via ScriptTimer 
# oder Manuell die Räume auswählen und über die Varaibale Starten, die Reinigung ausführen.
#
# Installation:
# -------------
#
# Dieses Skript richtet automatisch alle nötigen Objekte bei manueller
# Ausführung auf der Console ein.
#
# - Kategorie erstellen
# - Neues Skript erstellen
# - Diesen PHP-Code hineinkopieren
# - Abschnitt 'Konfiguration' den eigenen Gegebenheiten anpassen 
# - Skript Abspeichern und Ausführen
#
# --------------------------- Globale Funktionen -------------------------------
# Include Skripte
#include ("function_IPS_SetScriptFile.ips.php");
#include ("include_IPS_SendToNotifyBoard.ips.php");
#
# ------------------------------ Konfiguration ---------------------------------
$DateiName = "Roborock_Multiroom";
#
# ObjektID vom Roborock Modul eintragen
$ModulID = 55615;
#
# Räume anlegen (Zonen aus dem Roborock Modul)
$Raeume_Array = array(
    "Badezimmer"
    ,"Büro"
    ,"Diele"
    ,"Küche"
    ,"Schlafzimmer"
    ,"Wohnküche"
);
#
# Status Zähler wegen doppelter Push-Nachricht Reinigunf
$VAR_Zähler = 42189;
#
# Timer Event anlegen
$NameEvent        		= "Täglich";
$Datumstyp         		= 2; 	// 0 = Kein Datumstyp / 1 = Einmalig / 2 = Täglich / 3 = Wöchentlich / 4 = Monatlich / 5 = Jährlich
$Datumsintervall     	= 1; 	// 0 = Keine Auswertung / 1 = Jeden Tag / 2 = Alle X Tage / 3 = Alle X Wochen / 4 = Alle X Monate / 5 = 1 = Januar … 12 = Dezember
$Datumstage				= 0;	// 0 = Keine Auswertung / 1 = Montag / 2 = Dienstag / 4 = Mittwoch / 8 = Donnerstag / 16 = Freitag / 32 = Samstag / 64 = Sonntag
$Zeittyp         		= 0; 	// 0 = Einmalig / 1 = sekündlich / 2 = minütlich / 3 = stündlich
$Zeitintervall       	= 0; 	// Alle X Sekunden / Minuten / Stunden
$StartStunde			= 11;	// Startzeit Stunde
$StartMinute			= 0;	// Startzeit Minute
$StartSekunde           = 0;    // Startzeit Sekunde
#
################################################################################
# ------------------------- Ab hier nichts mehr ändern -------------------------
$ScriptID   = $_IPS['SELF'];
$ParentID   = IPS_GetParent($ScriptID);

# Aktionsskript anlegen
$ActionScriptID = CreateActionScript($ScriptID);
#SetActionScriptFile ($ActionScriptID, "Aktionsskript_$ActionScriptID");

$Raum_IDs = array();
$Array_Multizone = array();
$Array_Zimmerreinigung = array();

if ($_IPS['SENDER'] == 'Execute') {
    #SetScriptFile ($ScriptID, $DateiName);
    IPS_SetHidden($ScriptID, true);

    foreach ($Raeume_Array as $Raum) {
	
		$Raum_ID = CreateInstance($Raum, $ParentID);
		$Raum_IDs[] = $Raum_ID;
		
		for ($i =3; $i <= 9; $i++) {
			$WD = "";
			if ($i == 3) {
				$WD = "Montag";
			}
			elseif ($i == 4) {
				$WD = "Dienstag";
			}
			elseif ($i == 5) {
				$WD = "Mittwoch";
			}
			elseif ($i == 6) {
				$WD = "Donnerstag";
			}
			elseif ($i == 7) {
				$WD = "Freitag";
			}
			elseif ($i == 8) {
				$WD = "Samstag";
			}
			elseif ($i == 9) {
				$WD = "Sonntag";
			}

            # Variable anlegen
	        $VAR_Manuell = CreateVariable($Raum_ID, "Manuelle Reinigung", 0, "", "", 0, false);
	        CreateVariableProfileBooleanManu($VAR_Manuell, "Roborock.Manuell");
			
            $VAR_Automatik = CreateVariable($Raum_ID, "Automatische Reinigung", 0, "", "", 1, false);
            CreateVariableProfileBooleanAuto($VAR_Automatik, "Roborock.Automatik");

            $VAR_Anzahl = CreateVariable($Raum_ID, "Anzahl Reinigungen", 1, "", "", 2, false);
            CreateVariableProfileInteger($VAR_Anzahl, "Roborock.Anzahl", "Execute", "", "", 1, 5, 1);

            $VAR_Wochentag = CreateVariable($Raum_ID, $WD, 0, "", "", $i, false);
            CreateVariableProfileBooleanDay($VAR_Wochentag, "Roborock.Wochentag");
			
            # Aktionsskript zuweisen
			IPS_SetVariableCustomAction($VAR_Anzahl, $ActionScriptID);
			IPS_SetVariableCustomAction($VAR_Manuell, $ActionScriptID);
			IPS_SetVariableCustomAction($VAR_Automatik, $ActionScriptID);
			IPS_SetVariableCustomAction($VAR_Wochentag, $ActionScriptID);

            # Anzahl Reinigung beim erstellen auf 1 setzen
            $ID_Anzahl_Reinigung = IPS_GetObjectIDByName("Anzahl Reinigungen", $Raum_ID);
            $Anzahl_Reinigung = GetValue($ID_Anzahl_Reinigung);
            
            if ($Anzahl_Reinigung == 0) {
                SetValue($ID_Anzahl_Reinigung, 1);
            }
		}
    }
    # Variable anlegen
    $VAR_Starten = CreateVariable ($ScriptID, "Starten", 1, "", "", 0, false);
	CreateVariableProfileIntegerStart($VAR_Starten, "IPS.Starten");
    CreateEventTriggerValue($VAR_Starten, "EventTrigger_Starten", 4, 1);
    IPS_SetVariableCustomAction($VAR_Starten, $ActionScriptID);


    # Events anlegen
    $VAR_Roborock_Status = IPS_GetObjectIDByName("Status", $ModulID);
    CreateEventTriggerValue($VAR_Roborock_Status, "EventTrigger_Roborock_Status", 4, 100);

    # Timer Event anlegen
    CreateEventTimer($_IPS['SELF'], $NameEvent, $Datumstyp, $Datumsintervall, $Datumstage, $Zeittyp, $Zeitintervall, $StartStunde, $StartMinute, $StartSekunde);
}

########################
# Automatische Reinigung
elseif ($_IPS['SENDER'] == 'TimerEvent') {
	# Wochentag
	$Wochentage = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
	$Wochentag_Heute = time();
	$Tag = $Wochentage[date("w",$Wochentag_Heute)];
	
	$ParentIds = IPS_GetChildrenIds(IPS_GetParent($_IPS['SELF']));
		
	foreach ($ParentIds as $ParentID) {
		if ($ParentID <> $_IPS['SELF']) {
			$Children_IDs = IPS_GetChildrenIds($ParentID);
			$ID_Roborock_Auto = IPS_GetObjectIDByName("Automatische Reinigung", $ParentID);
			
			foreach ($Children_IDs as $Children_ID) {
				switch (IPS_GetName($Children_ID)) {
					case "Anzahl Reinigungen":
					 	$Anzahl_Reinigung = GetValue($Children_ID);
					    break;
					
                    case $Tag:
						if (GetValue($ID_Roborock_Auto)) {
							if (GetValue($Children_ID)) {
								$Raumname = IPS_GetName($ParentID);
								$Raum_Koordinaten = Roborock_GetZoneCoordinatesByName($ModulID, $Raumname);

								$Array_Multizone[] = [$Raum_Koordinaten, $Anzahl_Reinigung];
								$Array_Zimmerreinigung[] = $Raumname;
							}
						}
					    break;
				}
			}
		}
	}
	# Startet die Reinigung
	$Multizone = json_encode($Array_Multizone);
	Roborock_ZoneCleanMultiName($ModulID, $Multizone);

	# Push-Nachricht
	asort($Array_Zimmerreinigung);
	$count_Raumname = count($Array_Zimmerreinigung);
	$Zimmerreinigung = implode(", ", $Array_Zimmerreinigung);
	
	if (!empty($Zimmerreinigung)) {
        # Push-Nachricht
		#$Message = "<b>Roborock S50 Automatische Reinigung...</b>
".$Zimmerreinigung;
        #SendToNotifyBoard("Xiaomi", $Message, "information", "Robot", "Xiaomi", "1", "stumm");

        SetValue($VAR_Zähler, 1);
	}
}

####################
# Manuelle Reinigung
elseif ($_IPS['SENDER'] == 'Variable') {
	$ParentIds = IPS_GetChildrenIds(IPS_GetParent($_IPS['SELF']));

    if ($_IPS['EVENT'] == IPS_GetObjectIDByName("EventTrigger_Roborock_Status", $ScriptID)) {
        foreach ($ParentIds as $ParentID) {
            if ($ParentID <> $_IPS['SELF']) {
			    $Children_IDs = IPS_GetChildrenIds($ParentID);
                foreach ($Children_IDs as $Children_ID) {
                    switch (IPS_GetName($Children_ID)) {
                        case "Manuelle Reinigung":
                            if (GetValue($Children_ID) == 1) {
                                SetValue($Children_ID, false);
                                SetValue($VAR_Zähler, 0);
                            }
                            break;
                    }
                }
            }
        }
    }
    else {
        $VAR_Starten = IPS_GetObjectIDByName("Starten", $ScriptID);
        foreach ($ParentIds as $ParentID) {
            if ($ParentID <> $_IPS['SELF']) {
                $Children_IDs = IPS_GetChildrenIds($ParentID);
        
                foreach ($Children_IDs as $Children_ID) {
                    switch (IPS_GetName($Children_ID)) {
                        case "Anzahl Reinigungen":
                            $Anzahl_Reinigung = GetValue($Children_ID);
                            break;
                            
                        case "Manuelle Reinigung":
                            if (GetValue($Children_ID) == 1) {
                                $Raumname = IPS_GetName($ParentID);
                                $Raum_Koordinaten = Roborock_GetZoneCoordinatesByName($ModulID, $Raumname);
                                $Anzahl_Reinigung = GetValue(IPS_GetObjectIDByName("Anzahl Reinigungen", $ParentID));
                                
                                $Array_Zone[] = [$Raum_Koordinaten, $Anzahl_Reinigung];
                                $Array_Zimmerreinigung[] = $Raumname;
                            }
                            break;
                    }
                }
            }
        }
        # Startet die Reinigung
        $Zone = json_encode($Array_Zone);
        Roborock_ZoneCleanMultiName($ModulID, $Zone);

        IPS_Sleep(500);
        SetValue($VAR_Starten, 0);

        asort($Array_Zimmerreinigung);
        $count_Raumname = count($Array_Zimmerreinigung);
        $Zimmerreinigung = implode(", ", $Array_Zimmerreinigung);
        
        # Push-Nachricht
        #$Message = "<b>Roborock S50 Manuelle Reinigung...</b>
".$Zimmerreinigung;
        #SendToNotifyBoard("Xiaomi", $Message, "information", "Robot", "Xiaomi", "1", "stumm");

        SetValue($VAR_Zähler, 1);
    }
}
#
# IPS_LogMessage
IPS_LogMessage(IPS_GetName($_IPS["SELF"]), "Skript -- " .IPS_GetName($_IPS["SELF"]) ." -- ausgeführt!");
################################################################################
# -------------------------------- FUNKTIONEN ----------------------------------
# Variable mit Logging
function CreateVariable($ParentID, $VarName, $VarTyp, $VarProfile = "", $VarActionScript = "", $Position = 0, $VarLog) {
	$VarID = @IPS_GetVariableIDByName($VarName, $ParentID);
	if($VarID === false) {
		$VarID = IPS_CreateVariable($VarTyp);
		IPS_SetParent($VarID, $ParentID);
		IPS_SetName($VarID, $VarName);
		IPS_SetPosition($VarID, $Position);
		IPS_SetInfo($VarID, $_IPS["SELF"]);
        if ($VarLog == true) {
            $ArchiveID = IPS_GetInstanceListByModuleID ("{43192F0B-135B-4CE7-A0A7-1475603F3060}")[0];
            AC_SetLoggingStatus($ArchiveID, $VarID, $VarLog); 
            IPS_ApplyChanges($ArchiveID);
        }
		if($VarProfile !== "") {
			IPS_SetVariableCustomProfile($VarID, $VarProfile);
		}
		if($VarActionScript !== "") {
			IPS_SetVariableCustomAction($VarID, $VarActionScript);
		}
	}
	return $VarID;
}
# ------------------------------------------------------------------------------
# Variablen Profil Integer
function CreateVariableProfileInteger ($VarID, $ProfileName, $ProfileIcon, $ProfilePrefix, $ProfileSuffix, $ProfileMinValue, $ProfileMaxValue, $ProfileStepSize) { 
    if(!IPS_VariableProfileExists($ProfileName)) {
    	IPS_CreateVariableProfile($ProfileName, 1);																// Variablen Typ Integer
    }
	else {
        $Profile = IPS_GetVariableProfile($ProfileName);
        if($Profile['ProfileType'] != 1)
        throw new Exception("Variable profile type does not match for profile ".$ProfileName);
    }
    IPS_SetVariableProfileIcon($ProfileName, $ProfileIcon);														// Icon
    IPS_SetVariableProfileText($ProfileName, $ProfilePrefix, $ProfileSuffix);									// Präfix, Suffix
    IPS_SetVariableProfileValues($ProfileName, $ProfileMinValue, $ProfileMaxValue, $ProfileStepSize);			// MinimalWert, MaximalWert, Schrittweite
	
	IPS_SetVariableCustomProfile ($VarID, $ProfileName);
}
# ------------------------------------------------------------------------------
# Variablen Profil Integer
function CreateVariableProfileIntegerStart ($VarID, $ProfileName) {
		
		# VariablenProfile vorher löschen
		@IPS_DeleteVariableProfile ($ProfileName);
	
	if (IPS_VariableProfileExists ($ProfileName) === false) {
		IPS_CreateVariableProfile ($ProfileName, 1);										    // Variablen Typ Integer
		 
		IPS_SetVariableProfileAssociation($ProfileName, 0, ">", "", -1);				        // Wert, Name, Icon, Farbe
   		IPS_SetVariableProfileAssociation($ProfileName, 1, "Starten", "", 0x64FF64);
    	IPS_SetVariableProfileIcon($ProfileName, "Script");										// Icon
	}
	IPS_SetVariableCustomProfile ($VarID, $ProfileName);
}
# ------------------------------------------------------------------------------,
# Variablen Profile Boolean
function CreateVariableProfileBooleanManu ($VarID, $ProfileName) {
	if (IPS_VariableProfileExists ($ProfileName) === false) {
		IPS_CreateVariableProfile ($ProfileName, 0);										// Variablen Typ Boolean
		 
		IPS_SetVariableProfileAssociation($ProfileName, 0, ">", "", 0xFF6464);	// Wert, Name, Icon, Farbe
   		IPS_SetVariableProfileAssociation($ProfileName, 1, "Aktiviert", "", 0x64FF64);
    	IPS_SetVariableProfileIcon($ProfileName, "HouseRemote");								// Icon
	}
	IPS_SetVariableCustomProfile ($VarID, $ProfileName);
}
# ------------------------------------------------------------------------------
# Variablen Profile Boolean
function CreateVariableProfileBooleanAuto ($VarID, $ProfileName) {
	if (IPS_VariableProfileExists ($ProfileName) === false) {
		IPS_CreateVariableProfile ($ProfileName, 0);										// Variablen Typ Boolean
		 
		IPS_SetVariableProfileAssociation($ProfileName, 0, "Deaktiviert", "", 0xFF6464);	// Wert, Name, Icon, Farbe
   		IPS_SetVariableProfileAssociation($ProfileName, 1, "Aktiviert", "", 0x64FF64);
    	IPS_SetVariableProfileIcon($ProfileName, "HouseRemote");								// Icon
	}
	IPS_SetVariableCustomProfile ($VarID, $ProfileName);
}
# ------------------------------------------------------------------------------
# Variablen Profile Boolean
function CreateVariableProfileBooleanDay ($VarID, $ProfileName) {
	if (IPS_VariableProfileExists ($ProfileName) === false) {
		IPS_CreateVariableProfile ($ProfileName, 0);										// Variablen Typ Boolean
		 
		IPS_SetVariableProfileAssociation($ProfileName, 0, "Deaktiviert", "", 0xFF6464);	// Wert, Name, Icon, Farbe
   		IPS_SetVariableProfileAssociation($ProfileName, 1, "Aktiviert", "", 0x64FF64);
    	IPS_SetVariableProfileIcon($ProfileName, "Ok");								// Icon
	}
	IPS_SetVariableCustomProfile ($VarID, $ProfileName);
}
# ------------------------------------------------------------------------------
# Actionsskript anlegen
function CreateActionScript($ParentID) {
    $Script = '<?php if ($_IPS[\'SENDER\'] == \'WebFront\') {SetValue($_IPS[\'VARIABLE\'], $_IPS[\'VALUE\']);}elseif ($_IPS["SENDER"] == "VoiceControl") {SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]);}?>';
    $ID_Aktionsskript = @IPS_GetScriptIDByName ( "Aktionsskript", $ParentID );

    if ($ID_Aktionsskript === false) {
        $NewScriptID = IPS_CreateScript ( 0 );
        IPS_SetParent($NewScriptID, $ParentID);
        IPS_SetName($NewScriptID, "Aktionsskript");
        IPS_SetScriptContent($NewScriptID, $Script);

        $ID_Aktionsskript = $NewScriptID;
        #IPS_SetVariableCustomAction($ParentID, $ID_Aktionsskript);
		IPS_SetHidden ($ID_Aktionsskript, true);
    }
    return $ID_Aktionsskript;
}
# ------------------------------------------------------------------------------
# Timer Event anlegen
function CreateEventTimer($ParentID, $NameEvent, $Datumstyp, $Datumsintervall, $Datumstage, $Zeittyp, $Zeitintervall, $StartStunde, $StartMinute, $StartSekunde) {
    $EventId = @IPS_GetEventIDByName($NameEvent, $ParentID);
    if ($EventId === false) {
        $EventId = IPS_CreateEvent(1);
        IPS_SetParent($EventId, $ParentID);
        IPS_SetName($EventId, $NameEvent);
        IPS_SetIdent($EventId, str_replace("-","",str_replace("ö","oe",str_replace("ü","ue",str_replace("ä","ae",str_replace(" ","",$NameEvent))))));
		IPS_SetEventCyclic ($EventId, $Datumstyp, $Datumsintervall, $Datumstage, 0, $Zeittyp, $Zeitintervall);
		IPS_SetEventCyclicTimeFrom($EventId, $StartStunde, $StartMinute, $StartSekunde);
        IPS_SetEventActive($EventId, true);
    }
    return $EventId;
}
# ------------------------------------------------------------------------------
# EventTriggerValue
function CreateEventTriggerValue ($VarID, $EventName, $EventTyp, $EventValue) {
	$ParentID = $_IPS['SELF'];
    $EventId = @IPS_GetEventIDByName($EventName, $ParentID);
    if (is_numeric($EventId) == false) {
        $EventId = IPS_CreateEvent(0);
        IPS_SetEventTrigger($EventId, $EventTyp, $VarID);
		IPS_SetEventTriggerValue($EventId, $EventValue);
        IPS_SetParent($EventId, $ParentID);
        IPS_SetName($EventId, $EventName);
        IPS_SetEventActive($EventId, true);
        IPS_SetEventTriggerSubsequentExecution($EventId, false);
    }
}
# ------------------------------------------------------------------------------
# Instanz erstellen
function CreateInstance ($InstanzName, $ParentID) {
    $VarID = @IPS_GetInstanceIDByName ($InstanzName, $ParentID);

    if ($VarID === false) {
        $VarID = @IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        IPS_SetParent($VarID, $ParentID);
        IPS_SetName($VarID, $InstanzName);
        #IPS_SetPosition($VarID, $Position);    // CreateInstance ($InstanzName, $ParentID, $Position)
    }
    return $VarID;
}
# ------------------------------------------------------------------------------

$Raeume_Array
2021-01-08 11_31_21-IP-Symcon Verwaltungskonsole.png

Automatische Reinigung


Wochentag, Anzahl der Reinigungen / Raum und den Timer einstellen.
Wenn Variable Automatische Reinigung auf Aktiviert steht, werden die eingestellten Räume nach der Reihe angefahren.

Manuelle Reinigung
2021-01-08 11_45_04-Galaxy Tab A7.png
Räume (Variable Manuelle Reinigung) aktivieren und Starten…

Bei Fragen einfach melden.

Beste Grüße
Kai

Hallo Karlinho,

habe einen S6 MaxV. Wie machst das das mit den Zonen? In der App kann ich max. 5 Zonen anlegen die aber nicht gespeichert werden :confused:

Gruß

Hallo sewo,
bei meinem S50 habe ich es über die App FloleVac (Android) gemacht, um mir die Koordinaten zu holen.
Diese werden für das Modul von Fonzo benötigt.
In der App gehst du auf Karte und wählst unten die Zonenreinigung aus.
Den maskierten Bereich legst du dann über einen Raum. Danach drückst du auf Reinigen und hälst gedrückt, bis du die Meldung „In Zwischenablage kopiert“ erhälst.
Die kopierten Koordinaten sollten in etwa so aussehen… [[22891,19514,27341,22564,1]]

Diese musst du dann nur noch in das Modul von Fonzo eintragen.


Die Reihenfolge bleibt dabei unverändert.
Die „,1]]“ am Ende, steht für die Anzahl der Reinigungen… Diese wird nicht benötigt.

Den Raumnamen (Badezimmer) trägst du dann oben ins Script unter $Raeume_Array ein.

Beste Grüße
Kai