ich suche eine einfache Lösung für folgende Problematik:
In Haus befinden sich auf insgesamt 4 Etagen diverse HM-gesteuerte Beleuchtungen.
Es soll eine zentrale Statusanzeige realisiert werden die mit VIER Lämpchen anzeigt in welcher Etage evtl. noch Licht brennt.
Dies soll möglichst zeitnah (idealerweise sofort) bei Änderungen erfolgen.
Zwei Lösungswege sind mir bekannt:
in IPS jedem „Status“ einen Event auf Änderung zuordnen der ein Sammelscript aufruft
nur ein Sammelscript das in regelmäßigen Abständen die Stati prüft (Polling)
Version 1 ist aufwändig bei insgesamt >30 Verbrauchern und variablenfressend
Version 2 ist wegen der Verzögerungen „unschön“
Frage: gibt es eine Version 3 auf die ich nur nicht komme?
Eine weitere Variante fällt mir nicht ein. Aber Version 1 ist doch absolut ok? Ich sehe auch nicht die Notwendigkeit, mehr als 4 Variablen ( 1 pro Etage ) benutzen zu müssen. Du machst pro Etage ein Aktionsskript, das Du bei Änderung jedes Status / Level Deiner HM Komponente laufen lässt. Dann prüfst die Summe der Level ( Bei Dimmern ) bzw. die Status-Variablen bei Schaltern und setzt je nach Ergebnis die EtagenVariable auf TRUE oder FALSE. Bei der Aktion hilft u.U. die Verwendung eines Arrays für die IDs und eine Schleife - dann wird’s übersichtlicher und Du bist flexibel, wenn neue AKtoren hinzukommen.
Ich habe so etwas über Zähler-Variablen gelöst.
Wenn ein Aktor eingeschaltet wird , wird eine Variable um eins erhöht und umgekehrt.
Wenn die Variable > 0 dann StatusLed an ansonsten aus. Klappt bisher problemlos
Hiermit wird die Statusanzeige gesetzt. Es ist die von HM
Ich unterscheide hier nochmal ob es Sicherheitsrelant ist odr nicht --> critical oder info
critical wäre z.B. ein offenes Fenster oder Tür.
Das ist aber ABSICHT.
Denn bei einem neu hinzukommenden Licht mache ich „D&D“ von nur einer Zeile, passe die Statusvariable an und fertig.
Bei deiner Version müsste ich ein neues „v.“ vergeben usw. - ist halt Geschmacksache.
verstehe nicht ganz, warum Du nochmal separate Vars anlegst. Variablen sind ja knapp
Die HM Instanz liefert ja eigentlich per State oder LEVEL alles, was Du zur Auswertung für ein zentrales Skript brauchst ?!
Ich bin halt noch ein Programmierer der ganz alten Garde. Wir haben damals immer gelernt, dass IF-Statements fürchterlich viel CPU Zeit benötigen und den Programmablauf verlangsamen, deshalb versuche ich sie auf ein Minimum zu reduzieren - wohl wissend, dass das heute keine große Rolle mehr spielt. Und die ganzen Klammern nerven mich
<?php
// In dieses Array die StatusVariablen der Aktoren übertragen
$lampen = array (20815,54739,10932);
$etagen_status=FALSE;
for ($count=0; $count < count($lampen); $count++)
{
IF ( GetValue($lampen[$count] ))
{
$etagen_status=TRUE;
$count=count($lampen);
}
}
IF ($etagen_status)
{
// Mach was, wenn positiv
}
ELSE
{
// Mach was, wenn negativ
}
?>
In $lampen einfach die IDs der Status Variablen übertragen und fertig. $etagen_status liefert dann das Ergebnis.
Der Hintergrung ist das ich recht viele Aktoren habe und den Status für jeden Raum darstellen wollte. Deshalb wollte ich nicht jedesmal alle Aktoren abfragen. So kam mir diee Idee den Status jedes Raums in einer Variablen zu speichern. Push statt Poll
Ausserdem sollten verschiedene Aktoren berücksichtet werden (Lampen,Dimmer,Jalousien,Türkontakte etc…).
Ich weiss das Variablen knapp/ teuer sind, aber bisher reichen die 1000 meiner PRO-Lizenz noch
Bei den Levels handelt es sich um Float-Variablen, nicht um Booleans wie bei den Status, deshalb muss das Skript wie folgt geändert werden, wenn Du die Level Vars mit berücksichtigen willst.
<?php
// In dieses Array die StatusVariablen oder LEVEL-Vars der Aktoren übertragen
$lampen = array (34184, 20815, 54739, 10932);
$etagen_status=FALSE;
for ($count=0; $count < count($lampen); $count++)
{
$stat=GetValue($lampen[$count]);
IF (!is_float($stat))
{
IF ($stat) // Checken der Status Bool Vars
{
$etagen_status=TRUE;
$count=count($lampen);
}
}
ELSE
{
IF ( $stat > 0 ) // Checken der Level Float Vars
{
$etagen_status=TRUE;
$count=count($lampen);
}
}
}
IF ($etagen_status)
{
// Mach was, wenn positiv
}
ELSE
{
// Mach was, wenn negativ
}
?>