Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Steuerung elektrische FBH

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

    [wiregate] - √ - Steuerung elektrische FBH

    Abend,

    ich benötige Unterstützung zur Umsetzung eines Plugins zur Steuerung einer elektrischen FBH.

    Habe eine GA für die Temperatur im Fussboden
    Eine GA für das Schalten des Aktors ein/aus
    Eine Rückmelde-GA -Status Aktor.

    Steuern möchte ich über die Comet Visu.
    Am Ende möchte ich die Steuerung aktivieren/deaktivieren und Soll-Temperaturen über die Visu vorgeben.

    Kann mir da jemand unter die Arme greifen?

    habe fertige Plugins gefunden:
    Heizungsregelung.pl --> da blicke ich Null durch
    Mulit-RTR.pl --> ??

    Scheint mir aber, als wenn das für Wassergeführte Anlagen gedacht ist. Bei mir gibts ja nur ein / aus..

    Vielen Dank.

    MFG
    Steve

    #2
    So, ich habe das plugin "multi-rtr" installiert.

    habe folgendes im plugin-code geändert:

    # --> change values in the conf.d directory!
    my %controllers = ();
    my %default = ();
    my $GlobalDisableGA = '3/2/2';
    my $reset = 0; # set to 1 to reset the states, run script and change to 0 again
    my $show_debug = 0; # switches debug information that will be shown in the log
    ################################################## ###########################


    und folgende Einträge in der .config vorgenommen:
    b/wiregate/plugin/generic/conf.d/Multi-RTR.conf_sample
    @@ -0,0 +1,45 @@
    +#-----------------------------------------------------------------------------
    +# ACHTUNG: Variablen duerfen nur im Plugin mit 'my' definiert werden,
    +# 'my' hier nicht verwenden!
    +#-----------------------------------------------------------------------------
    +
    +################################################# ############################
    +# Configuration:
    +%controllers = (
    + 'OG BAD_FBH-Temperatur' => {
    + 'SetPointGA' => '3/2/1', 'SetPointRRD' => 'OG BAD_FBH-Temperatur_Sollwert',
    + 'SensorGA' => '5/2/15',
    + 'ActuatorGA' => '3/2/0', 'ActuatorRRD' => 'OG BAD_FBH-Temperatur_Regelung',
    + 'ProportionalGain' => 5, 'IntegralTime' => 150
    },
    +);
    +%default = (
    + 'SetPointDPT' => 9.001,
    + 'SensorDPT' => 9.001,
    + 'ActuatorDPT' => 1,
    + 'DisableDPT' => 1,
    + 'SetPointInit' => 21.0,
    + 'SetPointLFlag' => 1, # true
    + 'ActuatorLFlag' => 1, # true
    + 'MinUpdateRate' => 5 * 60, # 5 minutes
    +);
    +
    +$GlobalDisableGA = '3/2/2';
    +
    +$reset = 1; # set to 1 to reset the states, run script and change to 0 again
    +$show_debug = 1; # switches debug information that will be shown in the log
    +
    +################################################# ############################
    +1;
    +
    +# emacs setting
    +# ;;; Local Variables: ***
    +# ;;; modeerl ***
    +# ;;; End: ***
    +# vim: set filetype=perl expandtab tabstop=8 shiftwidth=2 autoindent smartindent:

    Fragen: Woran sehe ich ob das Plugin läuft?
    Haben die Rot markierten einträge eine Bedeutung/Funktion?

    wie oben beschrieben, möchte ich einen Schaltaktor betätigen - daher actor dpt auf 1 gesetzt.
    Alles in allem kann ich sagen: Es funktioniert nicht. Was muss ich verändern oder wo stehts geschrieben?

    So als Rückmeldung als Beginner: Es steht nirgens geschrieben, dass zu einem Plugin noch eine config-Datei zu erstellen ist. Es war bei mir Zufall, dass ich im WireGate unter den aufgelisteteten Plugins auf den Button/link für "config" gedrückt habe..für mich war der Name und config ein link..

    Der Eintrag für GlobalDisableGA = '3/2/2'; habe ich in der config und im plugin angepasst. Richtig oder falsch? - auf diese Addresse sende ich eine 1 mit der Hoffnung, dass Plugin in die Gänge zu bekommen. Und mit 0 wieder zu stoppen. - wäre das korrekt?

    Vielen Dank vom Planlosen.
    Steve

    Kommentar


      #3
      Hallo Steve

      Das mit der Konfiguration in einer separaten Datei steht zwar im Programmcode des Plugins selbst aber ist wirklich nicht sonderlich gut kommuniziert. Man kann nicht generell sagen, dass jedes Plugin eine config braucht. Einen Hinweis dazu steht immer relativ weit oben im Plugin-code...

      Code:
      22:# Configuration: 
      23:# --> change values in the conf.d directory!
      Dies bedeutet, dass nach dem du das Plugin in das Editorfenster kopiert und gespeichert hast, du hinter dem Namen des Plugin auf config klicken und dort noch die separate Konfiguration einfügen musst.

      Der Grund wiso es bei dir wohl nicht funktioniert, ist weil du anscheinen die conf_sample als Dtei kopiert hast. Die Userconfig endet immer mit pluginname.conf was dazu führt, dass deine config gar nicht gelesen wird. Deine config sollte also Multi-RTR.conf ohne _sample heissen

      Im Anhang mal etwas Dokumentation

      Ob das Plugin mit DPT 1.001 umgehen kann, kann ich dir noch nicht sagen. Dazu müsste ich den Programmcode mal etwas genauer durchsehen...
      Angehängte Dateien
      Gruss Patrik alias swiss

      Kommentar


        #4
        Abend,

        vielen Dank für den Tipp. Ich habe das Plugin + config nochmal kmpl. gelöscht und neu begonnen.
        Die kopierte config-Sample Datei habe ich bereinigt um die + -Zeichen vor jeder Zeile und den Einträgen vor "configuration". Außerdem habe ich nur die Gruppenadressen angepasst und den Rest gelassen wie er war.

        Das Plugin läuft und scheint soweit zu funktionieren. )
        Was aber wohl nicht klappt ist das stoppen des Plugins über die in der config hinterlegten $GlobalDisableGA = '3/2/2';

        Habe eben in der Plugin Datei die Adresse der DisableGA angepasst. evtl. klappt es ja jetzt.
        In jedem Fall bin ich schon mal freudig eregt, das das grundsätzlich funktioniert.
        Gibts hier einen Freiwilligen, der mir Pearl beibringt?

        Kommentar


          #5
          Ich habe nochmal kurz in den Programmcode geschaut. Anscheinend wird $GlobalDisableGA garnicht verwendet...

          Wäre aber sehr einfach das noch einzubauen...

          Einfach z.B. in der Zeile 69 des Programmcode folgenden Codeschnipsel einfügen:

          Code:
          if (knx_read($GlobalDisableGA,0,1) == 1) {
              return;
          }
          Eine Programmiersprache erlernt man nicht in 2-3- Säzen Ich selber hangle mich mehr schlecht als recht durch. Aber Perl ist eine recht dankbare Sprache in die man sich mit der Zeit immer besser hineindenken kann

          Wenn du konkrete Fragen hast, wird dir hier bestimmt gerne geholfen
          Gruss Patrik alias swiss

          Kommentar


            #6
            Das könnte aber Probleme geben wenn die GA nicht gelesen werden kann.

            Ich habe bei mir auch eben dieses Plugin im Einsatz und bin damals über die gleiche Stelle im Code gestolpert. Anscheinend wurde der Teil noch nicht umgesetzt. Ich fand's aber trotzdem toll sowas zu haben (haben inzwischen alle meine Plugins bekommen) und habe mir mal überlegt wie das am besten umzusetzen wäre. Meine Lösung sieht so aus...

            Code:
            my $ga_Plugin_Hauptschalter = '14/0/0'; #1bit Trigger fuer aktivierung/deaktivierung Plugin, 1=Aktivieren
            my $show_debug = 1;
            # relevante GA's abonnieren
            $plugin_subscribe{$ga_Plugin_Hauptschalter}{$plugname} = 1;
            my $busActive = !(!keys %msg); # true if script was called due to bus traffic
            if( !$busActive ) { # unnecesary during bus traffic
              if( not exists $plugin_info{ $plugname . '_' . '_Hauptschalter' } ) {
                $plugin_info{ $plugname . '_' . '_Hauptschalter' } = 1;
              }
            }
            # Verhalten bei Aufruf durch Busaktivität 
            if( $busActive ) {
              # Response-Telegramme ignorieren - sollten nur vom Plugin selbst kommen...
              if( $msg{'apci'} eq 'A_GroupValue_Response' ) { return; }
              # Read-Telegramme beantworten - erfolgt hier auch bei deaktiviertem Plugin. Bitte mindestens für den Hauptschalter...
              if( $msg{'apci'} eq 'A_GroupValue_Read' ) {
                if( $msg{'dst'} eq $ga_Plugin_Hauptschalter) {
                  my $value = $plugin_info{ $plugname . '_' . '_Hauptschalter' };
                  knx_write( $msg{'dst'}, $value, 1, 1 ); # send response
                }
              # Diesen Teil mehrfach einfuegen für jede GA die beantwortet werden soll
              #    elsif( $msg{'dst'} eq $ga_ANTWORT) {
              #    knx_write( $msg{'dst'}, $ANTWORT, DPT, 1 ); # send response
              #  }
              }
              # Write-Telegramme verarbeiten - erfolgt hier auch bei deaktiviertem Plugin. Bitte mindestens für den Hauptschalter...
              elsif( $msg{'apci'} eq 'A_GroupValue_Write') {
                if( $msg{'dst'} eq $ga_Plugin_Hauptschalter) {
                  $plugin_info{ $plugname . '_' . '_Hauptschalter' } = $msg{'data'};
                }
              }
            }
            # Plugin ohne weitere Aktion beenden wenn Hauptschalter aus
            if ($plugin_info{ $plugname . '_' . '_Hauptschalter' } == 0) {
              if($show_debug > 0){ plugin_log($plugname,"Deaktiviert ueber Hauptschalter-GA."); }
              $plugin_info{$plugname.'_cycle'} = 86400;
              return('deaktiviert');
            }
            else { $plugin_info{$plugname.'_cycle'} = 60; }
            # Ab hier der Hauptteil des Plugins....
            Das kann man bestimmt noch weiter optimieren, wenn man GA's selektiv (nur read, nur write) abonnieren kann. Ich habe aber noch den original wiregated laufen, daher ist eine Fallunterscheidung nötig.
            Endlich umgezogen. Fertig? Noch lange nicht... ;-)

            Kommentar


              #7
              Klar da gebe ich dir absolut recht. War auch nur ein Schnellschuss

              Der Weg über GA Abonierenund zustand zwischenspeichern ist natürlich der sauberste. Braucht aber aucheinpaar Zeilen mehr ^^ Bei meinen Plugins die ich für die Masse bereitstelle betreibe ich den grössten Aufwand den Code widerstandsfähig zu machen.

              Da gehörten dann auch noch sachen hinein wie...

              Wenn in der Variable etwas anderes als eine GA in gültiger Notation steht, dann führe keinen Leseversuch aus

              Oben genannter schnippsel von mir soll also eher als Anregung gesehen werden.

              Wird es deine erweiterte Version im SVN geben?
              Gruss Patrik alias swiss

              Kommentar


                #8
                Zitat von swiss Beitrag anzeigen
                Wird es deine erweiterte Version im SVN geben?
                Ja, so war eigentlich der Plan. Muss ich die Tage mal hochladen. Den Zugang habe ich inzwischen, bin nur noch nicht dazu gekommen.
                Endlich umgezogen. Fertig? Noch lange nicht... ;-)

                Kommentar


                  #9
                  Abend,

                  danke für die Unterstützung.
                  Habe gleich den neuen Part zum aktivieren/deaktivieren im Plugin eingefügt..lässt sich jetzt ausschalten/einschalten aber:
                  die Temperaturen werden nicht mehr verglichen, Heizung bleibt aus..?

                  Anbei für die Profis mein Code aus dem Plugin:

                  ################################################## ###########################
                  # Plugin: Multi RTR
                  # V0.7 2011-11-20
                  # Copyright: Christian Mayer (mail at ChristianMayer.de)
                  # License: GPL (v3)
                  #
                  # Plugin for multiple RTR (room temperature controllers) by using a PI
                  # controller
                  #
                  # Suggested settings:
                  # ===================
                  # floor heating: ProportionalGain = 5 K, IntegralTime = 240 min (*)
                  # hot water heating: ProportionalGain = 5 K, IntegralTime = 150 min (*)
                  #
                  # Uebersetzungshilfe:
                  # ===================
                  # ProportionalGain = Proportionalbereich in Kelvin
                  # IntegralTime = Nachstellzeit in Minuten
                  #
                  # ---------
                  # (*): GIRA manual for TS2+ with RTR 1052-00 / 1055-00, 01/06, page 71
                  ################################################## ###########################

                  ################################################## ###########################
                  # Configuration:
                  # --> change values in the conf.d directory!
                  my %controllers = ();
                  my %default = ();

                  my $reset = 0; # set to 1 to reset the states, run script and change to 0 again
                  my $show_debug = 0; # switches debug information that will be shown in the log

                  ################################################## ###########################
                  # Do NOT change anything below!
                  ################################################## ###########################
                  my $ga_Plugin_Hauptschalter = '3/2/2'; #1bit Trigger fuer aktivierung/deaktivierung Plugin, 1=Aktivieren
                  my $show_debug = 1;
                  # relevante GA's abonnieren
                  $plugin_subscribe{$ga_Plugin_Hauptschalter}{$plugn ame} = 1;
                  my $busActive = !(!keys %msg); # true if script was called due to bus traffic
                  if( !$busActive ) { # unnecesary during bus traffic
                  if( not exists $plugin_info{ $plugname . '_' . '_Hauptschalter' } ) {
                  $plugin_info{ $plugname . '_' . '_Hauptschalter' } = 1;
                  }
                  }
                  # Verhalten bei Aufruf durch Busaktivität
                  if( $busActive ) {
                  # Response-Telegramme ignorieren - sollten nur vom Plugin selbst kommen...
                  if( $msg{'apci'} eq 'A_GroupValue_Response' ) { return; }
                  # Read-Telegramme beantworten - erfolgt hier auch bei deaktiviertem Plugin. Bitte mindestens für den Hauptschalter...
                  if( $msg{'apci'} eq 'A_GroupValue_Read' ) {
                  if( $msg{'dst'} eq $ga_Plugin_Hauptschalter) {
                  my $value = $plugin_info{ $plugname . '_' . '_Hauptschalter' };
                  knx_write( $msg{'dst'}, $value, 1, 1 ); # send response
                  }
                  # Diesen Teil mehrfach einfuegen für jede GA die beantwortet werden soll
                  # elsif( $msg{'dst'} eq $ga_ANTWORT) {
                  # knx_write( $msg{'dst'}, $ANTWORT, DPT, 1 ); # send response
                  # }
                  }
                  # Write-Telegramme verarbeiten - erfolgt hier auch bei deaktiviertem Plugin. Bitte mindestens für den Hauptschalter...
                  elsif( $msg{'apci'} eq 'A_GroupValue_Write') {
                  if( $msg{'dst'} eq $ga_Plugin_Hauptschalter) {
                  $plugin_info{ $plugname . '_' . '_Hauptschalter' } = $msg{'data'};
                  }
                  }
                  }
                  # Plugin ohne weitere Aktion beenden wenn Hauptschalter aus
                  if ($plugin_info{ $plugname . '_' . '_Hauptschalter' } == 0) {
                  if($show_debug > 0){ plugin_log($plugname,"Deaktiviert ueber Hauptschalter-GA."); }
                  $plugin_info{$plugname.'_cycle'} = 86400;
                  return('deaktiviert');
                  }
                  else { $plugin_info{$plugname.'_cycle'} = 60; }
                  # Ab hier der Hauptteil des Plugins....

                  #
                  my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
                  if (! -f $confFile)
                  {
                  plugin_log($plugname, " no conf file [$confFile] found.");
                  }
                  else
                  {
                  plugin_log($plugname, " reading conf file [$confFile].") if( $show_debug > 1);
                  open(CONF, $confFile);
                  my @lines = <CONF>;
                  close($confFile);
                  my $result = eval("@lines");
                  if( $show_debug > 1 )
                  {
                  ($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
                  }
                  if ($@)
                  {
                  plugin_log($plugname, "conf file [$confFile] returned:") if( $show_debug > 1 );
                  my @parts = split(/\n/, $@);
                  if( $show_debug > 1 )
                  {
                  plugin_log($plugname, "--> $_") foreach (@parts);
                  }
                  }
                  }

                  ################################################## ###########################
                  # main()
                  ################################################## ###########################
                  my $busActive = !(!keys %msg); # true if script was called due to bus traffic

                  my $ret_val = '';
                  ################################################## ###########################
                  # Initialisation
                  if( !$busActive ) # unnecesary during bus traffic
                  {
                  for my $this_controller_name ( keys %controllers )
                  {
                  my %this_controller = (%{$controllers{ $this_controller_name }}, %default);

                  # Initialise controller state variables
                  if( $reset or not exists $plugin_info{ $plugname . '_' . $this_controller_name . '_Actuator' } )
                  {
                  $plugin_info{ $plugname . '_' . $this_controller_name . '_SetPoint' } = $this_controller{ 'SetPointInit' };
                  $plugin_info{ $plugname . '_' . $this_controller_name . '_Integral' } = 0;
                  $plugin_info{ $plugname . '_' . $this_controller_name . '_Actuator' } = 0; # Reset
                  if( defined $this_controller{ 'SetPointGA' } and defined $this_controller{ 'SetPointDPT' } )
                  {
                  knx_write( $this_controller{ 'SetPointGA' }, $this_controller{ 'SetPointInit' }, $this_controller{ 'SetPointDPT' } ); # send initial value
                  }
                  # The ActuatorGA doesn't need to be sent here as !$busActive will also
                  # cause the first round of controller calculations
                  }

                  # subscribe SetPointGA
                  if( defined $this_controller{ 'SetPointGA' } )
                  {
                  $plugin_subscribe{ $this_controller{ 'SetPointGA' } }{ $plugname } = 1;
                  }
                  # subscribe SensorGA
                  if( defined $this_controller{ 'SensorGA' } )
                  {
                  $plugin_subscribe{ $this_controller{ 'SensorGA' } }{ $plugname } = 1;
                  }
                  # subscribe ActuatorGA
                  if( defined $this_controller{ 'ActuatorGA' } )
                  {
                  $plugin_subscribe{ $this_controller{ 'ActuatorGA' } }{ $plugname } = 1;
                  }
                  # subscribe DisableGA
                  if( defined $this_controller{ 'DisableGA' } )
                  {
                  $plugin_subscribe{ $this_controller{ 'DisableGA' } }{ $plugname } = 1;

                  $ret_val .= $this_controller_name . ' disabled?';
                  my $active = knx_read( $this_controller{ 'DisableGA' } ) || 1; # active if unreadable
                  if ( !int($active) and defined $this_controller{ 'ActuatorGA' } ) {
                  if (knx_read( $this_controller{ 'ActuatorGA' } ) ne 0) { # only if not already 0
                  knx_write( $this_controller{ 'ActuatorGA' }, 0, $this_controller{ 'ActuatorDPT' } );
                  }
                  $plugin_info{ $plugname . '_' . $this_controller_name . '_Integral' } = 0;
                  $plugin_info{ $plugname . '_' . $this_controller_name . '_Actuator' } = 0; # Reset
                  $ret_val .= ' yes';
                  } else {
                  $ret_val .= ' no';
                  }
                  }
                  }
                  }

                  # Set the update cycle to one minute
                  $plugin_info{$plugname.'_cycle'} = 60;

                  ################################################## ###########################
                  # Handle the bus traffic
                  my $SetPointChange = 0;
                  if( $busActive )
                  {
                  # Early exit during a response messeage - it's usually from us...
                  if( $msg{'apci'} eq 'A_GroupValue_Response' )
                  {
                  return;
                  }

                  # a linear search isn't smart but OK for only a few states:
                  for my $this_controller_name ( keys %controllers )
                  {
                  my %this_controller = (%{$controllers{ $this_controller_name }}, %default);
                  if( $msg{'apci'} eq 'A_GroupValue_Read' )
                  {
                  if( $msg{'dst'} eq $this_controller{ 'SetPointGA' } and $this_controller{ 'SetPointLFlag' })
                  {
                  # A read request for this GA was sent on the bus and the L-flag is set
                  my $value = $plugin_info{ $plugname . '_' . $this_controller_name . '_SetPoint' };
                  my $DPT = $this_controller{ 'SetPointDPT' };
                  knx_write( $msg{'dst'}, $value, $DPT, 1 ); # send response
                  $ret_val .= 'read(' . $msg{'dst'} . '=' . $this_controller_name . ') SetPoint -> ' . $value;
                  } elsif( $msg{'dst'} eq $this_controller{ 'ActuatorGA' } and $this_controller{ 'ActuatorLFlag' })
                  {
                  # A read request for this GA was sent on the bus and the L-flag is set
                  my $value = $plugin_info{ $plugname . '_' . $this_controller_name . '_Actuator' };
                  my $DPT = $this_controller{ 'ActuatorDPT' };
                  knx_write( $msg{'dst'}, $value, $DPT, 1 ); # send response
                  $ret_val .= 'read(' . $msg{'dst'} . '=' . $this_controller_name . ') Actuator -> ' . $value;
                  }
                  }
                  elsif($msg{'apci'} eq 'A_GroupValue_Write')
                  {
                  if( $msg{'dst'} eq $this_controller{ 'SetPointGA' } )
                  {
                  # A new(?) setpoint was sent on the bus => update internal state
                  # read from eibd cache, so we'll get the cast for free:
                  my $value = knx_read( $msg{'dst'}, 0, $this_controller{ 'SetPointDPT' } );
                  $plugin_info{ $plugname . '_' . $this_controller_name . '_SetPoint' } = $value;
                  $SetPointChange = 1;
                  $ret_val .= 'write(' . $msg{'dst'} . '=' . $this_controller_name . ') ' . $value . ' -> SetPoint';
                  }
                  }
                  }
                  } # if( $busActive )

                  ################################################## ###########################
                  # Update the controllers
                  if( !$busActive or $SetPointChange ) # only at init, cycle or set point change
                  {
                  my $dt = time() - $plugin_info{ $plugname . '_tlast' };
                  $plugin_info{ $plugname . '_tlast' } = time();
                  $ret_val .= sprintf( ' dt: %.3f; ', $dt );

                  for my $this_controller_name ( keys %controllers )
                  {
                  my %this_controller = (%{$controllers{ $this_controller_name }}, %default);
                  my $prefix = $plugname . '_' . $this_controller_name;

                  my $Sensor = knx_read( $this_controller{ 'SensorGA' }, 0, $this_controller{ 'SensorDPT' } );
                  my $SetPoint = $plugin_info{ $prefix . '_SetPoint' };
                  my $old = $plugin_info{ $prefix . '_Actuator' };

                  my $kp = 1.0 / $this_controller{ 'ProportionalGain' };
                  my $error = $SetPoint - $Sensor;

                  # caclulate the I part of the PI controller:
                  $plugin_info{ $prefix . '_Integral' } = $plugin_info{ $prefix . '_Integral' } + $error * $dt;
                  my $integral = $plugin_info{ $prefix . '_Integral' } / (60.0 * $this_controller{ 'IntegralTime' });

                  # put together the PI controller:
                  $plugin_info{ $prefix . '_Actuator' } = 100.0 * $kp * ($error + $integral);

                  # clip at maximum to avoid windup:
                  if( $plugin_info{ $prefix . '_Actuator' } > 100 )
                  {
                  $ret_val .= '[>]';
                  $plugin_info{ $prefix . '_Actuator' } = 100;
                  $plugin_info{ $prefix . '_Integral' } = (1.0 / $kp) * 60.0 * $this_controller{ 'IntegralTime' };
                  }
                  # clip at minimum
                  if( $plugin_info{ $prefix . '_Actuator' } < 0 or $plugin_info{ $prefix . '_Integral' } < 0 )
                  {
                  $ret_val .= '[<]';
                  $plugin_info{ $prefix . '_Actuator' } = 0 if $plugin_info{ $prefix . '_Actuator' } < 0;
                  $plugin_info{ $prefix . '_Integral' } = 0;
                  }
                  #$plugin_info{ $prefix . '_Actuator' } = round( $plugin_info{ $prefix . '_Actuator' } );

                  # If a GA is defined, send the new actuator value
                  if( defined $this_controller{ 'ActuatorGA' } and (
                  ($old ne $plugin_info{ $prefix . '_Actuator' }) or (time() - $plugin_info{ $prefix . '_lastSent' } > $this_controller{'MinUpdateRate'} )) )
                  {
                  knx_write( $this_controller{ 'ActuatorGA' }, $plugin_info{ $prefix . '_Actuator' }, $this_controller{ 'ActuatorDPT' } );
                  $plugin_info{ $prefix . '_lastSent' } = time();
                  }

                  if( defined $this_controller{ 'SetPointRRD' } )
                  {
                  update_rrd( $this_controller{ 'SetPointRRD' }, '', $SetPoint );
                  }
                  if( defined $this_controller{ 'ActuatorRRD' } )
                  {
                  update_rrd( $this_controller{ 'ActuatorRRD' }, '', $plugin_info{ $prefix . '_Actuator' } );
                  }

                  $ret_val .= $this_controller_name . ': ' . $SetPoint . '<>' . $Sensor . '=>' . $plugin_info{ $prefix . '_Actuator' } . ' [' . ($error*$kp) . '/' . $integral*$kp . ']; ';
                  }
                  }

                  if( $show_debug ) { return $ret_val; }
                  return;

                  ################################################## ###########################
                  # Version history:
                  # ================
                  #
                  # 0.7:
                  # * change to external config (-> conf.d)
                  # 0.6:
                  # * Bug fix for setups where the WireGate didn't know the ActuatorGA
                  # * Force sending of actuator after x seconds/minutes so that the watchdog in
                  # the actuator doesn't time out
                  # 0.5:
                  # * initial release
                  #
                  ################################################## ###########################
                  # ToDo:
                  # =====
                  # * Limit bus traffic by sending actuator values after a change that is bigger
                  # than x%
                  # * Add GA for sending delta values for the setpoint
                  # * External Config
                  # * Actuator overwrite ("Zwangsstellung")
                  # * Hard temperature limit (min, max)
                  ################################################## ###########################
                  Angehängte Dateien

                  Kommentar


                    #10
                    Mir fallen im Log spontan 2 Dinge auf:
                    1. In dem Zeitraum, in dem das Plugin deaktiviert über Hauptschalter meldet, wird es in Bruchteilen von Sekunden mehrfach ausgeführt. Der cycle sollte in dem Fall auf 86400 gesetzt werden, Plugin sollte also nur 1x am Tag ausgeführt werden.
                    2. in dem Zeitraum, in dem das Plugin aktiv geschaltet ist, wird es ordnungsgemäß ca. alle 60 s ausgeführt. Allein die Ausgabe der Stellgrößen bleibt aus.
                    Beides kann ich mir aktuell nicht erklären, vor allem sehe ich keinen Zusammenhang zum Hauptschalter-Baustein. Bei mir läuft's exakt in der Kombination...
                    Hast du noch was anderes geändert? Plugin-Name? Conf.d gelöscht?
                    Endlich umgezogen. Fertig? Noch lange nicht... ;-)

                    Kommentar


                      #11
                      mh..

                      Meine Änderungen:
                      Plugin Name
                      und die Einträge zur DisableGA gelöscht..

                      lösche nochmal alles und beginne von vorne.

                      Kommentar


                        #12
                        habe alles neu gemacht..geht immer noch nicht.

                        wiregate neustart hat auch nix gebracht.
                        mir scheint, als hätte sich da was aufgehangen - gibt kein update der logfiles mehr..

                        kann man da irgendwas löschen? cache oder so?

                        Kommentar


                          #13
                          Statusupdate für alle mitleser:

                          habs hinbekommen.
                          Lösung:
                          Über Web-Oberfläche alle Plugins gelöscht, anschließend mit notepasd++ und root user auf wire gate und im verzeichnis conf.d die alten konfigurationen gelöscht.

                          Dann über:
                          Open Automation / Code / [r1900] /wiregate/plugin/generic

                          das Multi-RTR plugin runtergeladen, mit notepad++ geöffnet und den text markiert, kopiert und über die Web-Oberfläche der Wire Gate unter Plugin neu anlegen wieder eingefügt, gespeichert, dann nochmals den Code für den "Hauptschalter" vor den RTR-Plugin-Code eingegeben.
                          Anschließend noch die config als sample von sourceforge kopiert und neu in der Multi-RTR-config eingefügt, Gruppenaddressen angepasst und die + - Zeichen vor jeder Zeile entfernt.
                          Funktioniert jetzt..
                          Bin wieder happy!


                          Danke an alle!

                          Kommentar


                            #14
                            Sehr gut.

                            Ich denke, es ist ok, dass ich den gelöst Haken für Dich gesetzt habe .

                            lg

                            Stefan

                            Kommentar

                            Lädt...
                            X