Ich habe mich gerade mit Arrays auseinandergesetzt und weiß jetzt auch so langsam wie dies Funktionieren :).
Ich setzte das im Moment dafür ein meine Beleuchtung beim Verlassen des Hauses auszuschalten.
Auf der CCU gibt es die möglichkeit Geräte in Gewerke einzuteilen und diese dann durch ein Script das nur Geräte die im Gewerk Licht sind auschaltet.
Jetzt zu meiner Frage
Ich wollte dies jetzt in ähnlicher Form mit IP-Symcon machen und zwar über die Object Info.
Ich würde in jede Info einfach nur Licht reinschreiben und dann regelmäßig alles auslesen und die Instancen mit der Info Licht in eine Variable schreiben.
Diese könnte ich dann nutzen um alle Geräte auszuschalten ohne immer wieder das Script vervolständigen zu müssen.
Ich würde jetzt gerne wissen ob es noch andere Lösungvorschläge gibt.
Vielen Dank schon mal im Vorraus
Mfg Stefan
Kategorienbäume als physische Ebene und daneben beliebige weitere Strukturierung per Links z.B. ein Baum mit Links auf die Instanzen für die Gewerke, im Unterschied z.B. zum Baum der geographischen Zuordnung für die Visualisierung?
Du kannst dir erstmal per „Kategorien“ die Objekte sehr schön strukturieren.
Oft braucht man aber daneben nochmal dazu abweichend die Objekte in anderen Strukturen, natürlich ohne diese Objekte wirklich mehrfach zu definieren. Dazu gibt es dann die „Links“, das sind virtuelle Doubletten von Objekten. Die kann man auch wieder in Kategorien strukturieren, oder auch inhaltlich mit „Dummy Instanzen“ neu zusammenstellen.
Anwendung sind z.B. einmal Objekte funktional oder nach Typ zusammenzufassen um günstiger per globaler Scripts zu arbeiten, daneben aber z.B. für die Visualisierung nach Räumen oder Etagen zu ordnen (geographisch).
Mein Vorschlag war nun, die Gewerke Analog abzubilden, also z.B. durch einen eigenen Baum (quasi als eigene Sichtweise) oder durch Links in neu zusammengestellte Strukturen o.ä. Damit geht quasi alles.
den Ordner selsbt direkt ansprechen geht mMn nicht, du musst ein Script schreiben und die entsprechenden Variablen dann schalten, entweder das Script direkt in den Ordner oder auch dieses dann verlinken.
Ich möchte ja wenn neue Lampen dazukommen nicht ständig das Skript ändern sondern einfach mehr Links von den Lampen in den Ordner und die werden dann mit ausgeschaltet …
Direkt ALLE mit EINEM Befehl geht so ohne weiteres nicht, bin mir aber nicht sicher ob man da in Zusammenhang mit der CCU doch etwas machen kann, da ich nur einen LAN Adapter besitze.
Ja, WENN alle Lampen in einem Ordner sind, ODER Du sie über einen Suchstring selektieren kannst. Wenn der gesamte Baum nach Räumen geordnet ist, geht’s sonst schief…
Im Moment mache ich es über einen virtuellen Taster und dem Skript aus der CCU Doku.
Bei mir im OG werden es so um die 40 bis 50 Einbaustrahler werden. Alle sind 12V und werden dann über DMX gesteuert. Ich habe gerade bei DMX4all gelesen das man mit einem Befehl alle DMX Kanäle auf einmal ausschalten kann. Damit währe mein Problem ja gelöst schätze ich.
Du hast mich da auf eine Idee gebracht… möchte auch nicht immer alle Skripte anpassen wenn mal wieder eine Lampe hinzugekommen ist.
Funktionsweise:
Suche nach einem Wort in der Bezeichnung und schalte dann entsprechend.
Meine Quick and Dirty-Lösung:
<?
//Für Aktionen für alle Instanzen in einer Kategorie (Ordner)
//Sucht nach Stichwörtern in der Bezeichnung und schaltet dementsprechend
//z. B. Wenn "Licht" in der Bezeichnung vorhanden ist, dann schalte das Licht an
//z. B. Wenn "Dimmer" in der Bezeichnung vorhanden ist, dann Dimme auf 100%
//Es wird nur gefunden, wenn das Wort als Einzelwort erkannt wird
//Suchen nach "Licht" findet es z. B. nicht in "Lichter"
$ParentID = 00000; //ID der Kategorie eintragen ----------------------------------------------WICHTIG
$list = IPS_GetChildrenIDs($ParentID); //Erstelle Array mit allen ID´s welche in der Kategorie liegen
foreach($list as $id) //Für jede ID in dem Ordner...
{
$objekt = IPS_GetObject($id);
$name = $objekt['ObjectName'];
//echo "Bezeichnung: ".$name."
"; //Test
//Dieser bereich kann kopiert werden um weitere Aktion durchzuführe (Dimmer, Rolladen etc.) -----------------------------------------------------------START
$suchmuster = 'Licht'; //Hier den Suchbegriff eingeben nach dem gesucht werden soll
if (preg_match("/\b".$suchmuster."\b/i",$name) == 1) //Wenn in der Bezeichnung gefunden dann...
{
echo '"'.$suchmuster.'" gefunden in: "'.$name.'" - ID: '.$id."
"; //TEST
//Hier die durchzuführende Aktion einfügen
echo "Aktion z. B. LICHT AN für die ID: ".$id."
"; //TEST
//HM_WriteValueBoolean($id, "STATE", TRUE); //z. B. HomeMatic-Aktor, LICHT AN
}
//Dieser bereich kann kopiert werden um weitere Aktion durchzuführe (Dimmer, Rolladen etc.) -----------------------------------------------------------ENDE
} //foreach
?>
Zur Erläuterung:
Das Skript liegt bei mir im Ordner „Lichter“, in diesem Ordner sind alle HomeMatic-Instanzen (Aktore), welche Lichter steuern.
Das Skriptt heißt bei mir „Alle Lichter AN“ und schaltet alle Lichter an.
Es muss für euch angepasst werden:
1 - ID der Kategorie (Ordner) angeben
2 - Suchbegriff anpassen
3 - Aktion anpassen
4 - ggf. nach weiteren Begriffen suchen (Dimmer, Rolladen etc.)
Ich wollte das Thema nochmal aufgreifen.
Ich habe jetzt ein Script mit dem ich in einem bestimmten Ordner alle Links ein und ausschalten kann.
Wenn ich das Script ausführe gehen alle Lampen aus aber ich bekomme eine Meldung im Script.
Vieleicht kann mir ja Jemand sagen was diese Meldung bedeutet.
Hier erstmal das Script
<?
$ParentID = 16903 /*[Gewerke\Licht das bei Abwensheit ausgeschaltet werden soll]*/;
$LinkArray = IPS_GetChildrenIDs ($ParentID);
for($i=0; $i < count($LinkArray); $i++)
{
$GetLink = IPS_GetLink($LinkArray[$i]);
$LinksChild = $GetLink[LinkChildID];
HM_WriteValueBoolean($LinksChild,"STATE",false);
}
?>
Und hier die Meldung
Notice: Use of undefined constant LinkChildID - assumed ‚LinkChildID‘ in C:\IP-Symcon\scripts\11023.ips.php on line 9