Guten Morgen,
ich möchte per Skript gerne meine Saugroboter bei Abwesenheit starten lassen.
Das Skript hierzu sieht wie folgt aus:
<?php
// IDs definieren
$saugroboter1 = 47970; // Integer Variable Saugroboter1
$saugroboter2 = 38716; // Integer Variable Saugroboter2
$abwesenheit1 = 43397; // Boolean Variable Abwesenheit Simon
$abwesenheit2 = 32756; // Boolean Variable Abwesenheit Stefanie
// Tag ermitteln
$dayOfWeek = date('N'); // 1 (for Monday) through 7 (for Sunday)
// Prüfen, ob heute Montag, Mittwoch, Donnerstag ist
if ($dayOfWeek == 1 || $dayOfWeek == 3 || $dayOfWeek == 4) {
// Prüfen, ob die Abwesenheit von Simon und Stefanie erfüllt ist
if (GetValueBoolean($abwesenheit1) && GetValueBoolean($abwesenheit2)) {
// Wait for 60 minutes
IPS_Sleep(3600000); // 60 minutes in milliseconds
// nochmals prüfen, ob beide immer noch abwesend sind
if (GetValueBoolean($abwesenheit1) && GetValueBoolean($abwesenheit2)) {
// Start Saugroboter1 and Saugroboter2
SetValueInteger($saugroboter1, 1); // Startbefehl Saugroboter1
SetValueInteger($saugroboter2, 1); // Startbefehl Saugroboter2
}
}
}
?>
Ich bekomme aber irgendwie die korrekte Erkennung der Abwesenheit nicht hin.
Die Abwesenheit lese ich über das Unifi-Modul und demzufolge über die Handys aus:
Das Skript habe ich mir mit ChatGPT erstellen lassen - ich frage mich jetzt, an welcher Stelle die Abwesenheit=false geprüft wird?
Ich hätte jetzt mit meinem laienhaften Verständnis erwartet, dass noch irgendwo auf „false“ abgefragt wird?
müsste es nicht korrekterweise heißen:
if (GetValueBoolean($abwesenheit1) == false && GetValueBoolean($abwesenheit2) == false) {
Kann mir netterweise jemand auf die Sprünge helfen?
PS:
das fertige und funktionierende Skript ist hier zu finden:
Hi,
oder wie er schrieb == false. Das ist das Problem wenn man abwesend so hat das es false ist wenn man abwesend ist. Ich hätte es nach den Namen auch so wie ChatGPT gemacht. Bei mir heißen die Variablen anwesend und da würde es passen.
Welchen Roboter hast Du denn? Oft muss es ein RequestAction sein.
okay ich musste es auf RequestAction ändern, aber nun funktioniert es wie gewünscht.
Muss jetzt nur noch ergänzen, dass wenn es einmal am Tag ausgeführt wurde, dass es dann erst am Folgetag wieder passiert
Sonst laufen die Roboter die ganze Zeit
der fertige Code sieht dann wie folgt aus und funktioniert:
<?php
// IDs definieren
$saugroboter1 = 47970; // Integer Variable Saugroboter1
$saugroboter2 = 38716; // Integer Variable Saugroboter2
$abwesenheit1 = 43397; // Boolean Variable Abwesenheit Simon
$abwesenheit2 = 32756; // Boolean Variable Abwesenheit Stefanie
$lastRunID = 29795; // String Variable, die das Datum des letzten erfolgreichen Starts speichert
// Tag ermitteln
$dayOfWeek = date('N'); // 1 (for Monday) through 7 (for Sunday)
$today = date('Y-m-d'); // Heutiges Datum
// Letztes Ausführungsdatum ermitteln
$lastRunDate = GetValueString($lastRunID);
// Prüfen, ob heute Montag, Mittwoch, Donnerstag ist
if ($dayOfWeek == 1 || $dayOfWeek == 3 || $dayOfWeek == 4) {
// Prüfen, ob das Skript heute bereits ausgeführt wurde
if ($lastRunDate != $today) {
// Prüfen, ob die Abwesenheit von Simon und Stefanie erfüllt ist (Boolean=false)
if( (GetValueBoolean($abwesenheit1) == false) && (GetValueBoolean($abwesenheit2) == false)) {
// 60 Minuten warten, damit nicht zwischendurch jemand zurückkommt oder man nur kurz einkaufen war
IPS_Sleep(3600000); // 60 minutes in milliseconds
// nochmals prüfen, ob beide immer noch abwesend sind
if( (GetValueBoolean($abwesenheit1) == false) && (GetValueBoolean($abwesenheit2) == false)) {
// Start Saugroboter1 und Saugroboter2
RequestAction($saugroboter1, 1); // Startbefehl Saugroboter1
RequestAction($saugroboter2, 1); // Startbefehl Saugroboter2
// Aktualisiere das letzte Ausführungsdatum
SetValueString($lastRunID, $today);
}
}
}
}
?>
Gratuliere. Ich habe mir von ChatGPT bei Python (Remote Two) auch schon öfter helfen lassen. Ist besser/schneller als per Google zu suchen In Discord haben wir aber festgestellt man muss sehr genau fragen dann sind die Antworten ziemlich brauchbar.
Danke!
Ich versuche auch immer sehr konkret vorzugeben was ich benötige.
so ganz ohne Fachexpertise geht es dann doch nicht (wie z.B. beim RequestAction) - aber für mich als absoluten Programmierlaien ist es echt hilfreich zumindest mal das grobe Gerüst zu bekommen
Den Befehl IPS_Sleep(3600000); würde ich an deiner Stelle nicht verwenden.
So blockierst du dein Script für 60 Min.
Wenn du im Grunde mehre solche Scripte hast wird irgendwann kein Script mehr verarbeitet.
Ist hier beschrieben.
Guten Morgen,
der Start funktioniert schon mal, allerdings löst das Script in der jetzigen Form mehrfach am Tag aus und nicht nur einmalig.
Könntest du das Coding dahingehend bitte nochmals prüfen, dass es die Variable