Ich habe in paar Zustände, die der Bus kennen sollte und die auch über einen Stromausfall hinweg gespeichert sein sollen.
Z.B. habe ich "Erzwinge Wochenende". Wenn ich das per Visu aktiviere, verhält sich alles so wie an einem Wochenende und nicht unter der Woche. So öffnen sich beispielsweise die Rollläden im Schlafzimmer deutlich später.
Meine aktuelle Programmierung (und seit gerade eben im SVN) dafür ist:
Aber:
Ist das alles so richtig?
Sollte man noch etwas einbauen, dass gleich von sich aus den Cache des eibd passend befüllt, damit gerade nach einem WireGate-Restart alles funktioniert?
Jetzt dürfen andere Plugins wohl nur die Variable $plugin_info{'Global_ErzwingeWochenende'} befragen, ein Befragen der GA ist nicht erlaubt, da ja ein Plugin kein anderes per knx_read aufrufen darf IIRC.
Und: Wie kann ich einen knx_write benutzen um ein response zu schicken, aber ohne DPT anzugeben. Oder, fast noch wichtiger, wie kann ich im Plugin herausfinden, welcher DPT zu einer GA gehört?
Z.B. habe ich "Erzwinge Wochenende". Wenn ich das per Visu aktiviere, verhält sich alles so wie an einem Wochenende und nicht unter der Woche. So öffnen sich beispielsweise die Rollläden im Schlafzimmer deutlich später.
Meine aktuelle Programmierung (und seit gerade eben im SVN) dafür ist:
Code:
############################################################################# # Plugin StateSave # V0.5 2011-09-18 # Copyright: Christian Mayer (mail at ChristianMayer.de) # License: GPL (v3) # # Plugin to remember states on the bus if over power failures # # TODO: DPT is currently required - but it should be optional ############################################################################# ############################################################################# # Configuration: # The %states hash defines the global names to use in the plugins in the form of # $plugin_info{'Global_...'} # as well as the KNX GA # Syntax: # 'Global_Name' => [ 'KNX GA', 'Initial Value', 'DPT (optional)' ], my %states = ( 'Global_ErzwingeWochenende' => [ '0/3/20', 0 ], 'Global_WeihnachtsbeleuchtungAutomatik' => [ '0/3/21', 0, 1 ], ); my $reset_states = 0; # set to 1 to reset the states, run script and change to 0 again my $show_debug = 1; # switches debug information that will be shown in the log ############################################################################# # Do NOT change anything below! ############################################################################# ############################################################################# # Initialisation for my $this_state ( keys %states ) { # Initialise global variable an the bus if( $reset_states or not exists $plugin_info{ $this_state } ) { $plugin_info{ $this_state } = $states{ $this_state }[1]; knx_write( $states{ $this_state }[0], $plugin_info{ $this_state }, $states{ $this_state }[2] ); } # subscribe GA $plugin_subscribe{ $states{ $this_state }[0] }{ $plugname } = 1; } # No cycling, run only on request $plugin_info{$plugname.'_cycle'} = 0; my $ret_val = ''; ############################################################################# # Handle the bus traffic # Early exit during a response messeage - it's usually from us... if( $msg{'apci'} eq 'A_GroupValue_Response' ) { return;
Ist das alles so richtig?
Sollte man noch etwas einbauen, dass gleich von sich aus den Cache des eibd passend befüllt, damit gerade nach einem WireGate-Restart alles funktioniert?
Jetzt dürfen andere Plugins wohl nur die Variable $plugin_info{'Global_ErzwingeWochenende'} befragen, ein Befragen der GA ist nicht erlaubt, da ja ein Plugin kein anderes per knx_read aufrufen darf IIRC.
Und: Wie kann ich einen knx_write benutzen um ein response zu schicken, aber ohne DPT anzugeben. Oder, fast noch wichtiger, wie kann ich im Plugin herausfinden, welcher DPT zu einer GA gehört?
Kommentar