Ankündigung

Einklappen
Keine Ankündigung bisher.

Misterhouse: Status einer Gruppe setzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Misterhouse: Status einer Gruppe setzen

    Misterhouse bietet die Möglichkeit mit 'set' den Status einer ganzen Gruppe zu setzen.
    Wenn man zB. die Items:
    Code:
    EIB2, 1/1/0|1/1/1|1/1/21, dimmVZ, Licht,
    EIB2, 1/1/2|1/1/3|1/1/22, dimmVZi, Licht,
    definiert hat, kann man mit
    Code:
    set $Licht ON;
    beide Leuchten schalten.
    Code:
    set $Licht 30;
    dagegen funktioniert nicht. Ursache ist, dass in der Datei Group.pm in der Funktion item_state_exists überprüft wird, ob der übergebe Status zulässig ist und EIB2 Items "on, off, +40, -40, 5%, 30%, 60%, 100%" zugeordnet sind. Um auch Dimmwerte übergeben zu können habe ich die Funktion ergänzt:
    Code:
    sub item_state_exists {
      my $ref = shift;
      my $state = shift;
      if ($ref=~ /^EIB[267]_(.+)/i && $state =~ /^\d+$/) {
        return 1;
      }
      else {
        return (grep $_ eq $state, @{$ref->{states}});
      }
    }
    Wenn es sich um EIB2/6/7 Items handelt und der übergebene Status ein Integerwert ist, wird nun 1 zurückgegeben.
    Das funktioniert bei mir. Vielleicht kann sich einer der Perlcracks das mal ansehen und auf allgemeine Brauchbarkeit prüfen.

    #2
    Hallo Werner,

    so wie du Misterhouse verwendest ist das zwar Misterhouse conform, aber die Gruppen in Misterhouse gibt es nur, weil es in X10 keine (frei definierbaren) Gruppen gibt.

    Für EIB/KNX ist das unpraktisch, da je KNX-Gruppenaddresse ein Telegram geschickt werden muss. Da die Addressen bei KNX "Gruppen"addressen heißen, ist aber schon angedeutet, dass in KNX immer Gruppen gesteuert werden. Ein Aktor kann wiederum Mitglied in vielen Gruppen sein.
    Für die Visualisierung ist es wiederum praktisch wenn es Gruppenaddressen gibt, die den Zustand eines Aktorkanals wiederspiegeln, also in der Gruppe nur ein Aktor enthalten ist.

    Der Autor der ursprünglichen EIB/KNX-Anbindung hat die EIBXG-Items eingeführt. Auch ein Versuch die Zugehörigkeit zu mehreren Gruppen von EIB/KNX abzubilden. Immerhin ist es damit möglich mit nur einem Telegram (also EIB/KNX-Konform) die Aktoren anzusteuern.

    Inzwischen gibt es im SVN eine Version die auch "hörende Gruppenaddressen" unterstützt. Das ist die EIB/KNX konforme Variante die Zugehörigkeit zu mehreren KNX-Gruppenaddressen zu modellieren.

    Das was du definiert hast:
    Code:
    EIB2, 1/1/0|1/1/1|1/1/21, dimmVZ, Licht,
    EIB2, 1/1/2|1/1/3|1/1/22, dimmVZi, Licht,
    hättest du genauso als
    Code:
    EIB2, 1/1/0|1/1/1|1/1/21, dimmVZ, Licht
    definieren können und dann beide Aktoren auf die verwendeten Gruppenaddressen hören lassen.
    Dann muss nur ein Telegramm auf den Bus geschickt werden bei gleicher Funktionalität.

    Mit der SVN-Misterhouse-Version (also neueste Version aus der Sourceverwaltung) könntest du definieren:
    Code:
    EIB2, 1/1/0+1/1/4|1/1/1+1/1/5|1/1/21+1/1/23, dimmVZ, Licht1
    EIB2, 1/1/2+1/1/4|1/1/3+1/1/5|1/1/22+1/1/23, dimmVZ, Licht2
    EIB2, 1/1/4|1/1/5|1/1/23, dimmVZ, LichtGruppe
    An den Aktoren musst du dann natürlich auch die identischen Gruppenadressen vergeben. Dann kannst du über LichtGruppe beide Lampen gleichzeitig und über Licht1/Licht2 die Lampen einzeln über Misterhouse ansteuern.

    Ich bezweifle auch fast, dass du bei deiner Definition in der Lage bist, weitere EIB2-Items zu definieren um die Lampen einzeln über Misterhouse anzusteuern, da der EIB-Teil es nicht mag, wenn KNX-Gruppenaddressen mehrfach verwendet werden. Also

    Code:
    EIB2, 1/1/0|1/1/1|1/1/21, dimmVZ, Licht1
    EIB2, 1/1/2|1/1/3|1/1/22, dimmVZ, Licht2
    EIB2, 1/1/0|1/1/1|1/1/21, dimmVZ, LichtGruppe
    EIB2, 1/1/2|1/1/3|1/1/22, dimmVZ, LichtGruppe
    wird nicht möglich sein. Das zeigt auch, das der EIB-Teil nicht für die Verwendung mit Misterhouse-Gruppen ausgelegt ist.

    Mike

    Kommentar


      #3
      Hallo Mike,

      Danke für Deine Antwort. Du hast natürlich Recht, der Praxisbezug ist so nicht gegeben. Die Leuchten haben sich zum Testen angeboten, deshalb habe ich sie gleich benutzt. Ich verwende Misterhouse-Gruppen um die enthaltenen Items einzeln auszuwerten/zu setzen. Zum Beispiel werte ich meine Reedkontakte so aus:
      Code:
      EIB1, 10/1/0, FKSchiebetuer, Reed|ReedEG, DO|label=Schiebetuer
      EIB1, 10/1/1, FKKueche, Reed|ReedEG, DO|label=Kueche
      EIB1, 10/1/2, FKAZ, Reed|ReedEG, DO|label=Arbeitszimmer
      EIB1, 10/1/3, FKEingangstuer, Reed|ReedEG, DO|label=Eingangstuer
      EIB1, 10/1/4, FKWC, Reed|ReedEG, DO|label=WC EG
      
      EIB1, 10/0/0, FKMarie, Reed|ReedOG, DO|label=MarieFenster
      EIB1, 10/0/1, FKChristine, Reed|ReedOG, DO|label=ChristineFenster
      EIB1, 10/0/2, FKBad, Reed|ReedOG, DO|label=Badfenster
      EIB1, 10/0/3, FKSZ, Reed|ReedOG, DO|label=Schlafzimmer
      EIB1, 10/0/4, FKWCOG, Reed|ReedOG, DO|label=WC OG
      
      if (member_changed $Reed) {
       for my $group_name (&list_objects_by_group('ReedEG')) {
         my $object = &get_object_by_name($group_name);
         if (state_changed $object and state $object eq ON) {
           print_log "$object->{label} wurde geöffnet\n";
         }
         elsif (state_changed $object) {
           print_log "$object->{label} wurde geschlossen\n";
         }
         ....
        }
      }
      Damit kann man mit wenigen Zeilen Code alle Items der Gruppe erfassen. Auch das mehrfache Gruppieren der Items ist möglich. Auf das oa. Problem bin ich bei der Winkelnachführung meiner Jalousien gestossen. Meine Jalousieaktoren bieten ua. KO's für den Jalousiewinkel, die habe ich als EIB6_Items in Misterhouse abgebildet. Mein erster Ansatz war analog Deiner Antwort, eine GA pro Fassade anzulegen. Damit bekommt man aber Probleme, wenn einzelne Fenster von der Nachführung ausgenommen werden sollen. Etwa soll es im Zimmer dunkel bleiben wenn die Kleine schläft, beim Fernsehen, beim Duschen usw. Analog zu den Reedkontakten habe ich die Jalousiewinkel in Misterhouse-Gruppen pro Fassade zusammengefasst und prüfe bei Winkeländerungen für jedes Fenster der gerade besonnten Fassade, ob nachgeführt werden soll oder nicht. In zwei Fällen (wenn es Dunkel wird und bei Abwesenheit) sollen aber alle Jalousien zumachen und aus Faulheit wollte ich, statt alle Objekte der Gruppe anzuführen oder eigene GA's für die Gruppen anzulegen, den Status der Gruppe setzen. Ich tausche den geringeren Aufwand (eine Zeile Perl vs Anlegen und Zuordnen der GA's in der ETS und Eintragen in Misterhouse) gegen einen geringfügig höheren Busverkehr.
      Das Setzen von Gruppenstati ist sicher nichts Wichtiges, mir erscheint es einfach sauber, wenn die in Misterhaus integrierten Funktionen auch mit EIB_Items funktionieren.

      Werner

      Kommentar


        #4
        Ah Entschuldigung, ich bin ja auch in der Spalte verruscht . Ich hatte gedacht dass du die Items gleich bennenst um mehrere EIB Gruppenaddressen mit einem Item anzusprechen ...

        Vergiss also meinen vorigen Beitrag ...

        Kommentar

        Lädt...
        X