@Dustin723
da geht noch was…
bau das mal noch mit ein:
switch($jahreszeit)
{
case 1: // Frühling
if ($fenster1 == 0)
.....
case 2: // Sommer usw
@Dustin723
da geht noch was…
bau das mal noch mit ein:
switch($jahreszeit)
{
case 1: // Frühling
if ($fenster1 == 0)
.....
case 2: // Sommer usw
ich arbeite übrigens mit Temperaturdifferenzen (innen/aussen) mit einer Hysterese von zzt 30min, damit nicht dauernd eine Warnung kommt: $temp müsste eigentlich $kelvin lauten
Kann man machen, wäre aber zu ungenau. Ich habe eine Variable wo die Tageshöchsttemperatur gespeichert wird. Wenn diese unter 17 Grad war gibt es Warnungen.
Hatte ich auch überlegt, das ist mir aber zu träge. Und wir haben 3 Heizungssysteme im Haus, das müsste man alles mit einbinden das da nicht jemand mit Vollgas ausgleichen möchte
Jahreszeit: stimmt, habe bisher manuell „geswitched“
Differenz: jep, geb ich dir Recht. Bei uns kein Problem
Hi, ich bin auch gerade auf der Suche nach einer Erinnerung an offene Fenster auf diesen Beitrag gestoßen. Angeregt davon hat mir ChatGPT folgendes Skript erstellt.
Das Skript liest aus einer Instanz alle Fenster-Variablen aus und legt diese in einem Array an. Dann wird jede Minute geprüft, ob die Fenster Auf/Zu sind. Wenn die Außentemperatur nun unter einer variablen Schwelle liegt, dann wird nach 15min eine Push-Nachricht versendet und diese nach weiteren 15min offen einmal wiederholt. Die Zeit könnte man natürlich auch noch variabel machen, wenn gewünscht.
<?php
/*****************************************************
* EINSTELLUNGEN
*****************************************************/
<?php
/*****************************************************
* EINSTELLUNGEN
*****************************************************/
$instanzID = 45158; // Instanz mit Fenster-Variablen
$wartezeitMin = 15; // Wartezeit für 1. Push
$visuID = 47723; // Visu-Instanz
$tempID = 12367; // Außentemperatur-Variable
$tempschwelleID = 41971; // Variable für die Temperaturschwelle
$targetID = 45158; // Die ID des Objektes welches beim antippen der Meldung geöffnet wird
$wartezeit = $wartezeitMin * 60; // Sekunden
$temperatur = GetValueFloat($tempID);
$tempschwelle = GetValue($tempschwelleID);
/*****************************************************
* FENSTER-VARIABLEN AUS INSTANZ LADEN
*****************************************************/
$children = IPS_GetChildrenIDs($instanzID);
$fensterIDs = [];
foreach ($children as $cid) {
$obj = IPS_GetObject($cid);
if ($obj['ObjectType'] == 2) { // Variable
$var = IPS_GetVariable($cid);
if ($var['VariableType'] == 0) { // BOOL
$fensterIDs[] = $cid;
}
}
}
/*****************************************************
* LOGIK
*****************************************************/
foreach ($fensterIDs as $id) {
$status = GetValueBoolean($id);
$obj = IPS_GetObject($id);
$name = $obj['ObjectName']; // Variablenname
// ObjectInfo als JSON nutzen
$infoStr = trim($obj['ObjectInfo']);
$info = ($infoStr == "") ? [] : json_decode($infoStr, true);
$openSince = $info['OpenSince'] ?? 0; // Wann wurde geöffnet?
$pushCount = $info['PushCount'] ?? 0; // Wie viele Pushs bereits gesendet?
$lastPush = $info['LastPush'] ?? 0;
/*****************************************************
* FENSTER IST GESCHLOSSEN → ALLES RESETTEN
*****************************************************/
if (!$status) {
if ($infoStr != "") {
IPS_SetInfo($id, "");
}
continue;
}
/*****************************************************
* FENSTER GERADE GEÖFFNET
*****************************************************/
if ($openSince == 0) {
$info = [
'OpenSince' => time(),
'PushCount' => 0,
'LastPush' => 0
];
IPS_SetInfo($id, json_encode($info));
continue;
}
$dauer = time() - $openSince;
/*****************************************************
* TEMPERATURPRÜFUNG – Push nur unter eingestellter Schwelle
*****************************************************/
if ($temperatur >= $tempschwelle) {
continue; // Keine Pushes senden!
}
/*****************************************************
* MAXIMAL 2 PUSHES PRO FENSTER
*****************************************************/
if ($pushCount >= 2) {
continue; // Limit erreicht
}
/*****************************************************
* WANN MUSS PUSH GESENDET WERDEN?
*****************************************************/
$naechstesIntervall = ($pushCount + 1) * $wartezeit;
if ($dauer >= $naechstesIntervall) {
// Nachrichtentexte
if ($pushCount == 0) {
$msg = "Das Fenster '$name' ist seit über $wartezeitMin Minuten geöffnet!";
} else {
$msg = "Das Fenster '$name' ist seit über " . ($wartezeitMin * 2) . " Minuten geöffnet!";
}
// PUSH SENDEN
VISU_PostNotification($visuID, 'Fenster offen', $msg, 'Info', $targetID);
// Werte aktualisieren
$info['PushCount'] = $pushCount + 1;
$info['LastPush'] = time();
IPS_SetInfo($id, json_encode($info));
}
}
?>