Homematic Gewerk in IP-Symcon ?

Hallo zusammen

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

Hallo …

Genau das hätte ich auch gerne …

Hat da jemand schon ne Lösung … ??

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?

Gesendet von meinem GT-I9000 mit Tapatalk

:eek: Das ganze bitte für Laien. :confused:

Gruß Holli

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.

Gesendet von meinem GT-I9000 mit Tapatalk

Hallo zusammen

Also die Idee mit den Links finde ich gut ist warscheinlich einfacher und übersichtlicher.

Kann ich dann auch hingehen und sagen alles was in der Katergorie Licht ist soll ausgeschaltet werden?

Mfg Stefan

Ja, du kannst über die Links auch Skripte aufrufen, Schalter schalten, etc. Verhalten sich genauso als wäre sie der entsprechende Aktor.

Das Kuckucksei unter den Aktoren :slight_smile:

Hallo mcbelly

Das hört sich doch gut an dann werde ich mich damit mal befassen.

Mfg Stefan

Also für Skripte spreche ich doch keine Links an. Wohl eher direkt die IDs. Mach IMHO mehr Sinn.

Links nutze ich zur besseren Ordnungsmöglichkeit in der Darstellung.

Ok …

Ordner sind angelegt und alles was Licht ist per Link reingelegt.

Wie kann ich jetzt den Ordner per Skript ansprechen und alles was drinnen liegt ausschalten ???

Holli

…indem Du dir ein Skript schreibst, welches genau das macht und dieses in den „Ordner“ hineinpackst. Per Link oder direkt…

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.

Hi …

Ich währe dankbar über ein Beispiel …

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 …

Holli …

Das wird meines Erachtens nach so nicht funktionieren (bitte verbessern falls ich falsch liege).

Was ich mir vorstellen könnte, wäre

a) Du packst alle Lampen in einen Ordner, aus diesen bildest Du dann ein Array, welches Du durchgehst und alle auf „Aus“ setzt

oder wenn das nicht geht

b) Du allen Lampen einen eindeutigen Namen „Lampe xyz“ gibst und diese dann im komplettem Baum durchsuchst und ein Array bildest (siehe Punkt a)

Ich nehme an, wir reden über mehr als 10 Lampen, oder ? In einem normalen Haushalt würde der Aufwand mMn nur als Finger/Verständnisübung Sinn machen…

RWN weiss aber bestimmt mehr ^^

Sollte doch hier mit gehen:

array IPS_GetChildrenIDs (integer $ParentID)

Und dann eine ‚foreach‘ Schleife drauf setzen!? :confused:

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.

Gruß
Jens

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…

Aber auf Links wird das nicht funktionieren…

Ok …

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. :slight_smile:

Holli …

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.)

Hallo zusammen

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

Mfg Stefan

Hallo,

das Probelm ist ein Symtaxfehler in dieser Zeile:

$LinksChild = $GetLink[LinkChildID];

Richtig muss es heissen:

$LinksChild = $GetLink[$LinkChildID];

Viele Gruesse

Adrian