Ankündigung

Einklappen
Keine Ankündigung bisher.

Entwicklung eines Plugins - Möglichkeiten

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • swiss
    antwortet
    Zu 1... Da würde ich die Raffstoren aus der Szene nemen und das Plugin die ansteuerung übernehmen lassen...

    Zu 2... Jup genau so

    Zu 3... Das würde ich nicht zyklisch sondern beim eintreffen eines Telegramms machen. Wie Szenenlogik auch

    Einen Kommentar schreiben:


  • Jache
    antwortet
    Noch eine Frage als Nachtrag.

    Ich habe nun mit diesem Plugin ja eigentlich nichts anderes als eine Szene dargestellt.

    Was ist nun eigentlich sinnvoller?

    Solche Szenen über das WG abbilden, wie Kochen, Essen, Fernsehen, etc.
    Oder dies mittels den Szenen meiner MDT Taster bzw. gira TS3 Komfort?

    Oder Szenen soweit wie möglich direkt in der ETS abbilden und nur Logiken dann per WG? Das heißt ich greife per WG Plugin den Wert der Szenen GA ab und reagiere auf den gewünschten Wert und überschreibe zum Beispiel eine Aktion.

    Beispiel: Szene Fernsehen.

    Ich nutze die internen Szenen meines TS3.
    Spots Aus
    Lichtvoute an
    Raffstoren runter fahren.

    Nun möchte ich Logik drinnen haben.
    1. Raffstoren sollen nur runterfahren wenn es draußen hell ist und die Sonne in den Raum scheint(Helligkeitssensor)
    Dazu würde ich per WG Plugin auf die GA der Szene reagieren (Tastendruck) und die Bedingungen prüfen und ggf. Die Raffstoren direkt wieder hochfahren lassen, oder sollte ich die Raffstoren dann garnicht über die Szene steuern, sondern direkt über das Plugin nach Prüfung der Befingungen.

    2. Szene Fernsehen soll noch den TV per IRTrans einschalten.
    Ich greife per Plugin ebenfalls den Tastendruck ab und schalte per Plugin noch den TV ein?

    3. die Szene TV soll automatisch aufgerufen werden, wenn der TV eingeschaltet wird.
    Hier würde ich per Plugin auf die GA reagieren wo der aktuelle Stromverbrauch des Aktors vom TV drauf liegt und bei Überschreitung von x Watt die Szene TV starten.
    Der Taster TV hört dann darauf um mitzubekommen, dass die Szene aktiv ist.
    Das Plugin würde man dann periodisch aufrufen oder starten wenn die GA vom Stromverbrauch was empfängt?

    Einen Kommentar schreiben:


  • Jache
    antwortet
    Ich auch, ist schlampig geschrieben und war mein erster Test. Sachen die ich hier "veröffentliche" werden sauberer geschrieben, versprochen

    Wollte erst mal das Prinzip verstehen

    Danke dir!

    Einen Kommentar schreiben:


  • swiss
    antwortet
    Sieht gut aus Hätte ich für mich auch nicht anders gelöst.

    Wenn ich sowas für andere/die Community schreibe, gestalte ich das ganze modular mit Array damit jederzeit beliebig viele GA's und Zustände einfach eingepflegt werden können ohne die Programmierung anzufassen

    Einen Kommentar schreiben:


  • Jache
    antwortet
    Hallo,

    Danke fürs verschieben

    Habe nun mein erstes Plugin fertig und es funktioniert

    Die Frage ist nur, ob das elegant so ist oder katastrophal

    Die Taster GA 0/1/203 hat dazu noch alle Sperrobjekte von allen PM´s in der ETS verknüpft dann muss ich das nicht noch hier in dem Plugin machen. Oder sollte man das nicht tun?
    Code:
    # Plugin Schlafen/Aufstehen
    # V1.0 2014-01-11
    
    ### Definitionen
    my $taster_ga = "0/1/203";
    
    #Alle Raffstoren in einem Array
    my $raffstore_nord = "3/3/0";
    my $raffstore_sued = "3/4/0";
    my $raffstore_west = "3/5/0";
    my $raffstore_schlafzimmer = "3/6/0";
    my $raffstore_ankleide = "3/7/0";
    
    #Alles aus
    my $zentral_aus = "1/0/248";
    
    #Lueftung
    my $lueftung_soll_ga = "6/0/4";
    
    # Plugin an Gruppenadresse "anmelden"
    $plugin_subscribe{$taster_ga}{$plugname} = 1;
    
    # Plugin anmelden
    if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $taster_ga) {
       
    plugin_log($plugname,"Taster gedrückt: Wert: " . $msg{'value'});
       
       if ($msg{'value'} eq 1) {
         #sende 25% für Stufe 2
         knx_write($lueftung_soll_ga,25,5);
       
         #sende 1 für ab
         knx_write($raffstore_nord,1,1);
         knx_write($raffstore_sued,1,1);
         knx_write($raffstore_west,1,1);
         knx_write($raffstore_schlafzimmer,1,1);
         knx_write($raffstore_ankleide,1,1);
       
         #sende 0 fuer alles aus
         knx_write($zentral_aus,0,1);
       } 
       if ($msg{'value'} eq 0) {
         #sende 50% für Stude 5
         knx_write($lueftung_soll_ga,50,5);
       
         #sende 0 für auf
         knx_write($raffstore_nord,0,1);
         knx_write($raffstore_sued,0,1);
         knx_write($raffstore_west,0,1);
         knx_write($raffstore_schlafzimmer,0,1);
         knx_write($raffstore_ankleide,0,1);
       
       }
       
    }

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    Hab das Thema mal in's WG-Forum verschoben, da es mit der CV nichts zu tun hat.

    Einen Kommentar schreiben:


  • ZeitlerW
    antwortet
    Hallo Jache,

    ich würde mir eine GA definieren, die "Schlafen" bedeutet, die kannst Du dann triggern.
    Im WG hört ein Plugin auf diese GA und schaltet alle aus.

    Parallel gibts ein Plugin, welches alle "Lichter" verodert. Dieses gibt das Ergebnis auf eine GA "mindestens ein Licht an":

    Hier mal meine Plugins:

    Schlafen
    Code:
    #return 0;
    # COMPILE_PLUGIN
    
    
    my @Ausgang_ga;
    
    my $Schlafen_ga="5/0/2";
    my $PM_sperren_ga="5/0/1";
    my $VDR_aus_ga="0/3/30";
    
    
    
    
    push @Ausgang_ga, { name => "Flur Altbau aus", ga => "5/0/240"};
    push @Ausgang_ga, { name => "Wohnzimmer aus", ga => "0/0/200"};
    push @Ausgang_ga, { name => "Küche aus", ga => "2/0/0"};
    push @Ausgang_ga, { name => "Flur Neubau aus", ga => "4/0/200"};
    push @Ausgang_ga, { name => "Büro aus", ga => "1/0/200"};
    push @Ausgang_ga, { name => "Wohnzimmer Stern", ga => "0/0/34"};
    push @Ausgang_ga, { name => "Wohnzimmer Vase", ga => "0/0/35"};
    push @Ausgang_ga, { name => "Büro Vase", ga => "1/0/43"};
    push @Ausgang_ga, { name => "Terrasse aus", ga => "5/0/210"};
    push @Ausgang_ga, { name => "Kinderbad Steckdose", ga => "4/0/111"};
    push @Ausgang_ga, { name => "Durchgang Steckdose", ga => "4/0/191"};
    push @Ausgang_ga, { name => "Küche Steckdose", ga => "2/0/31"};
    push @Ausgang_ga, { name => "Hausplatz Steckdose", ga => "5/0/81"};
    push @Ausgang_ga, { name => "Flur Altbau aus", ga => "5/0/240"};
    push @Ausgang_ga, { name => "Außenbeleuchtung Neubau Hand aus", ga => "15/3/13"};
    push @Ausgang_ga, { name => "Außenbeleuchtung Neubau aus", ga => "15/3/11"};
    
    
    
    $plugin_info{$plugname . '_cycle'} = 0; # Aufrufzyklus - never
    
    
    my $sec; #Sekunde
    my $min; # Minute
    my $hour; #Stunde
    my $mday; #Monatstag
    my $mon; #Monatsnummer
    my $year; #Jahr
    my $wday; #Wochentag 0-6
    my $yday; #Tag ab 01.01.xxxx
    my $isdst;
    
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    $year += 1900;
    $mon += 1;
    
    
    
    
    if ($msg{'apci'} eq "A_GroupValue_Write") { # Telegramm eingetroffen
            if ($msg{'dst'} eq $Schlafen_ga) {
                return if $msg{'value'} == 1;
    
    
    # Fernseher ausschalten
    knx_write($VDR_aus_ga,1,1);
    
    foreach my $element (@Ausgang_ga) {
    
    # Alle ausschalten
            plugin_log($plugname,$element->{name});
            knx_write($element->{ga},0,1);
            usleep(200);
            }
            }
    # Bei Nacht PM im Flur sperren
            if ($hour <5 or $hour>20) {
            plugin_log($plugname,"PM gesperrt");
            knx_write ($PM_sperren_ga,1,1);
            }
    } else { # zyklischer Aufruf/initialisierung
        #subscribe GAs
            $plugin_subscribe{$Schlafen_ga}{$plugname} = 1;
    }
    return;
    Einer an:
    Code:
    # COMPILE_PLUGIN
    
    my @Oder_ga;
    my $Ausgang_ga="15/0/201";
    
    
    push @Oder_ga, { name => "Wohnzimmer", ga => "0/0/201"};
    push @Oder_ga, { name => "Küche", ga => "2/0/201"};
    push @Oder_ga, { name => "Büro", ga => "1/0/201"};
    push @Oder_ga, { name => "Moritz", ga => "3/0/201"};
    push @Oder_ga, { name => "Felix", ga => "4/0/1"};
    push @Oder_ga, { name => "Flur Neubau", ga => "4/0/201"};
    push @Oder_ga, { name => "Flur Altbau", ga => "5/0/241"};
    push @Oder_ga, { name => "Schlafzimmer", ga => "6/0/201"};
    
    
    $plugin_info{$plugname.'_cycle'} = 0;
    
    if ($msg{apci} eq 'A_GroupValue_Response'){
            return ;
            }
    
    my $Oderwert;
    my $Oderwert1;
    foreach my $element (@Oder_ga) {
            $plugin_subscribe{$element->{ga}}{$plugname} = 1;
            $Oderwert1=knx_read($element->{ga},0,1);
    #       plugin_log($plugname,$element->{name}.' '.$Oderwert1);
            $Oderwert=$Oderwert || $Oderwert1;
            }
    if (knx_read($Ausgang_ga,0,1)!=$Oderwert){
            knx_write($Ausgang_ga,$Oderwert,1);
            }
    
    return ;
    vG
    Wolfgang

    Einen Kommentar schreiben:


  • Jache
    antwortet
    Hallo,

    ok, dann werde ich vorerst bei den WG Plugins bleiben.

    Eine Szene "Schlafen", bei welcher mehrere GAs angesprochen werden sollen mit unterschiedlichen DPT´s, dafür würde ich dann ein Plugin schreiben, richtig?

    Einen Kommentar schreiben:


  • swiss
    antwortet
    Nein nicht ganz...

    Das Pluginsystem ist so aufgebaut, dass alle Plugins und noch andere Funktionen in einem einzigen grossen "Prozess" abgearbeitet werden. Natürlich kann mit dem plugin_subscribe auf eine GA reagiert werden. Solange du nur einpaar kleine Plugins hast,die schnell abgearbeitet werden, funktioniert dass auch. Wenn du aber Plugins einsetzt, die einiges an Laufzeit benötigen, verzögert sich auch die Abarbeitung der nachfolgenden Plugins und demzufolge auch die Reaktion auf eine GA.

    Fry's Logikprozessor mit gepatchtem wiregated.pl wird vorkompiliert was die Ausfürungsdauer erheblich reduziert. So bleibt auch ein Fettes Plugin flink und bremst nicht das gesammte Pluginsystem aus.

    linknx läuft paralell in einem eigenen "Prozess" und wird nicht durch die fetten Wiregateplugins ausgebremst.

    Wie gesagt... Bis zu einem bestimmten Punkt funktionieren Wiregate Plugins sehr gut.Aber sobald du dich darauf verlassen musst,dass es wirklich verzögerungsfrei arbeitet, würde ich es nicht als Plugin lösen. Denn das Problem geht noch weiter... Durch die unterennbare verknüpfung aller Plugins kann es auch sein, dass es heute super flink läuft und morgen tüftelst du an einem neuen Plugin was vieleicht einen Fehler enthält und die zuvor super funktionierende Logik wird brutal träge macht.

    Wenn du dir dessen bewust bist, kannstdu relativ viel mit Wiregate Plugins machen aber eben immer mit vorsicht.

    Einen Kommentar schreiben:


  • Jache
    antwortet
    Hallo Swiss,
    Danke auch dir.

    Was ich nicht verstehe ist das Thema Echtzeit.

    Ich kann ja auch ein normales WG Plugin in Echtzeit auf einer GA hören lassen mit plugin_sibscripe und dann mit dem $msg Objekt.

    Das ist doch auch in Echtzeit oder nicht?

    Einen Kommentar schreiben:


  • swiss
    antwortet
    Hallo Jache

    Eine Logikengine ist einfach ein stück Software dass in echtzeit auf Ereignisse reagiert und entsprechend der Konfiguration eine Handlung ausführt...

    Wenn du kleine einfache Aufgaben hast die nicht sonderlich Zeitkritisch sind, kannst du direkt ein WG Plugin schreiben/verwenden. Soll es aber komplex und in echtzeit sein, kommst du um eine spezialisierte Lösung nicht herum...

    Logikprozessor von Fry: Wird erst richtig sinnvoll einsetzbar mit dem ebenfalls von ihm gepatchten wiregated.pl oder dem hoffendlich bald von ElabNet kommenden Update.

    linknx: Wenn dich XML editieren nicht abschrekt ist das eine sehr gute Lösung da aufdemWG bereits vorinstalliert und damit einsatzbereit.

    sh.py: Läuft nicht auf dem Wiregate. Dazu wird ein RasperyPi oder ein zusätzlich laufender Linuxserver benötigt. Das Image für den Pi hat den Vorteil, dass es sofort einsatzbereit ist. In die Konfiguration müsstest du dich ebenfalls einlesen. Die Programmiersprache ist Pyton.

    Für Szenen könntest du direkt ein WG Plugin verwenden. Wenn ich mich nicht irre gab es mal ein fertiges Szenenplugin fürdas WG dass du nur noch konfigurierenmüsstest. Damit erspaarst du dir die Arbeit das Rad neu zu erfinden

    Einen Kommentar schreiben:


  • Jache
    antwortet
    Hallo Chris,

    Danke dir.
    Wie ich das verstehe sind das alles Plugins im WG, die ich dafür schreibe, richtig?

    Was hat es mit einer logikengine auf sich? Wofür brauche ich diese? Und was ist hier der Unterschied zwischen sh.py, linKNX bzw. logikprozessor Plugin?

    Installiert man solche Logikengines und schreibt dann dort die Plugins statt direkt im WG?

    Meine letzte Frage, sollte man Szenen mit unterschiedlichen DLP's direkt in der ETS machen, sofern möglich oder dafür ein Plugin schreiben?

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    Zitat von Jache Beitrag anzeigen
    ich habe mal ein paar Fragen zu den Möglichkeiten von Logiker im Wiregate / CV.
    Geht alles mit WG Plugins. Die CV hat damit nichts zu tun.
    => Thema ins andere Forum verschieben?
    Zitat von Jache Beitrag anzeigen
    Als Beispiel würde ich gerne folgendes Realisieren und würde gerne wissen ob das Möglich ist und vielleicht einen kleinen Tipp - wie?

    Wenn Fernseher Strom zieht (Aktor mit Stromerkennung) soll die Fernsehbeleuchtung eingeschaltet werden, wenn es draußen dunkel ist (Wetterstation). Wenn es hell ist soll die Helligkeit im Raum gemessen werden (PM auslesen) und wenn zu hell, sollen die Raffstoren auf Beschattung fahren.
    WG-Plugin auf Strom hören lassen (optimal bzgl. Reakton sendet der Aktor per Schwellwert ein Telegramm, aber auch ein regelmäßiges Senden des Stromwertes mit Schwellwert im WG-Plugin funktioniert).
    Wenn das Plugin läuft und durch das Strom-Telegramm getriggert wurde die Außenhelligkeit abfragen und vergleichen.
    Basierend auf diesen Infos dann entsprechende Aktionen durchführen.

    => Simpel

    Evtl. etwas schwieriger ist dann das ganze definiert wieder zurück zu fahren. Je nach Aufwand könnte sich hier ein Zustandsautomat anbieten (hab dazu mal ein Code-Schnipsel veröffentlicht)
    Zitat von Jache Beitrag anzeigen
    2. Beispiel:

    Wenn Taste "Schlafen" gedrückt wird, sollen alle PM´s deaktiviert werden, zeitgleich soll bei einem PM nur noch der 2. Kanal aktiv sein (andere Leuchte wird geschaltet) und falls ein Fenster noch offen ist, soll eine Nachricht (Prowl) gesendet werden. Ebenso sollen alle Leuchten ausgeschaltet werden.

    Kann mir dazu jemand was sagen, wie sowas und ob sowas funktioniert?
    Du brauchst einen sperrbaren PM (klar würde auch alles per Logik gehen, ist aber nicht so elegant). Den direkt per ETS auf den Schalter hören lassen.
    Gleichzeitig das Wiregate-Plugin auf den Schalter hören lassen, wenn das deswegen läuft da drinnen den Fenster-Staus abfragen und ggf. Nachricht senden.
    Leuchten auch auf den Schalter hören lassen (-> ETS)

    ==> Das sind alles normale Anwendungsfälle für eine Logik

    Einen Kommentar schreiben:


  • Jache
    hat ein Thema erstellt [wiregate] Entwicklung eines Plugins - Möglichkeiten.

    Entwicklung eines Plugins - Möglichkeiten

    Hallo zusammen,

    ich habe mal ein paar Fragen zu den Möglichkeiten von Logiker im Wiregate / CV.

    Als Beispiel würde ich gerne folgendes Realisieren und würde gerne wissen ob das Möglich ist und vielleicht einen kleinen Tipp - wie?

    Wenn Fernseher Strom zieht (Aktor mit Stromerkennung) soll die Fernsehbeleuchtung eingeschaltet werden, wenn es draußen dunkel ist (Wetterstation). Wenn es hell ist soll die Helligkeit im Raum gemessen werden (PM auslesen) und wenn zu hell, sollen die Raffstoren auf Beschattung fahren.

    2. Beispiel:

    Wenn Taste "Schlafen" gedrückt wird, sollen alle PM´s deaktiviert werden, zeitgleich soll bei einem PM nur noch der 2. Kanal aktiv sein (andere Leuchte wird geschaltet) und falls ein Fenster noch offen ist, soll eine Nachricht (Prowl) gesendet werden. Ebenso sollen alle Leuchten ausgeschaltet werden.

    Kann mir dazu jemand was sagen, wie sowas und ob sowas funktioniert?
Lädt...
X