Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Gesucht: Wert per Plugin in MySQL-Datenbank speichern

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

    [wiregate] - √ - Gesucht: Wert per Plugin in MySQL-Datenbank speichern

    Hallo zusammen,

    ich suche ein Plugin um verschiedene Temperatur- / Luftfeuchtigkeitswerte aus dem Wiregate zyklisch in eine schon existierende MySQL-Datenbank auf einem anderen Rechner zu schreiben. Das sollte ja relativ einfach möglich sein, nur fehlt mir der richtige Ansatz dazu.

    Falls jemand ein Plugin dafür hat wäre ich dafür dankbar.

    Vielen Dank.
    Viele Grüße
    Dieter

    #2
    Da keiner sonst antwortet, hier ein Lösungsansatz. Du musst dafür aber etwas Perl können...
    VG, Fry

    Kommentar


      #3
      Dankeschön

      Hallo Fry,
      vielen Dank für die Info. Da brauche ich. Mal etwas Zeit um mich einzuarbeiten. Aber schon mal ein Ansatz.
      Viele Grüße
      Dieter

      Kommentar


        #4
        Hi Astrafahrer,

        stehe jetzt vor dem gleichen Problem. Hast Du eine sinnvolle Lösung gefunden? Und hast Du die DB direkt auf dem WG am Laufen?

        Danke!
        Grüße,
        Alex

        Kommentar


          #5
          Hallo Alex,

          nein, ich habe hier nichts weiter gemacht; Aber das Thema ist weiter für mich interessant, hat nur aktuell keine Prio.
          Viele Grüße
          Dieter

          Kommentar


            #6
            Wie sieht denn die Datenbank aus, also was soll da rein? Timestamp und Wert, Timestamp und mehrere Werte?
            KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

            Kommentar


              #7
              Zitat von JNK Beitrag anzeigen
              Wie sieht denn die Datenbank aus, also was soll da rein? Timestamp und Wert, Timestamp und mehrere Werte?
              Hallo,
              in die Datenbank werden alle 5 Minuten verschiedene Temperatur- und Umweltwerte geschrieben. Also Timestamp und dann mehrere Werte in den entsprechenden Spalten.
              Viele Grüße
              Dieter

              Kommentar


                #8
                JNK, Astrafahrer,

                mir geht's eher darum, die Schaltungen sowie Öffnungsstati - also das, was man eher weniger mit RRDs abfängt zu protokollieren. Ich möchte z.B. mal eine Analyse machen, wie oft pro Stunde meine Heizungssteuerung schaltet

                @Astrafahrer: ggf. helfen Dir RRDs (Round Robin Databases) weiter... Die gibt es direkt auf dem Wiregate. Dort werden i.A. Sensorwerte abgelegt. Ob / wie man die Aggregationsfunktion festlegen kann, müsste man mal schauen. Aber zumindest sowas wie Mittelwert, Min, Max sollten unterstützt werden.
                Hängt vom Use Case ab...

                Grüße,
                Alex

                Kommentar


                  #9
                  Zitat von AlexBehring Beitrag anzeigen
                  @Astrafahrer: ggf. helfen Dir RRDs (Round Robin Databases) weiter...
                  Hallo Alex,
                  RRD´s nutze ich schon über das Wiregate. Allerdings hätte ich die Werte eben zusammen mit anderen Werten die unabhängig vom WG gespeichert werden in einer gemeinsamen Datenbank. Darauf greifen dann schon vorhandene Auswertungsmöglichkeiten.
                  Viele Grüße
                  Dieter

                  Kommentar


                    #10
                    Vielleicht so in der Art? Was das speichern von Events angeht (Pumpe an/aus etc), guck ich nochmal. Das geht betstimmt anders besser.

                    Code:
                    # MySQLStoreData v1.0
                    # 
                    # Copyright 2014: JNK (https://knx-user-forum.de/members/jnk.html)
                    # latest version available on https://github.com/J-N-K/wgplugin
                    #
                    
                    # please install libdbd-mysql-perl package
                    
                    # database-structure: (must be present prior to use of this plugin)
                    #
                    # field     type        standard_value        extra
                    # id        int(11)                    auto_increment
                    # timestamp    timestamp    current_timestamp
                    # wert1        double
                    # wert2        double
                    # ...
                    
                    #
                    # config starts here
                    #
                    
                    $plugin_info{$plugname.'_cycle'} = 150; # set interval in seconds
                    
                    my $db_host = '192.168.0.52'; # access data for MySQL-database 
                    my $db_name = 'wgdata';
                    my $db_user = 'wguser';
                    my $db_password = 'wgtest';
                    my $db_table = 'tabelle1';
                    
                    # enter fieldname and group address for each value
                    my %config = ( 'vorlauf' => '5/2/10', 'ruecklauf' => '5/2/11', 
                      'kessel' => '5/2/12' );
                    
                    my $debug = 1; # 0 if no debug, 1 if debug
                    
                    #
                    # config ends here
                    #
                    # do not change anything below
                    #
                    
                    use DBI; 
                    
                    my $fieldlist = "";
                    my $valuelist = "";
                    
                    foreach my $key (keys %config) {
                     $fieldlist .= ",$key";
                     $valuelist .= ",".knx_read($config{$key});
                    } 
                    
                    $fieldlist =~ s/^.//s;
                    $valuelist =~ s/^.//s;
                    
                    my $sql_query = "INSERT INTO $db_table ($fieldlist) VALUES ($valuelist)";
                    
                    plugin_log($plugname, $sql_query) if $debug;
                    
                    my $db_handle = DBI->connect("DBI:mysql:$db_name;host=$db_host", $db_user, 
                      $db_password, { RaiseError => 1 } );
                    $db_handle->do($sql_query);
                    $db_handle->disconnect();
                    
                    return;
                    Und nein, ich möchte nicht, dass das ins Openautomation-Plugin-SVN kommt. Meine Code-Qualität ist dafür ja bekanntlich zu schlecht.

                    Gruss,

                    der Jan
                    KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                    Kommentar


                      #11
                      Hi Jan,

                      sehr cool - Danke

                      Ich muss mir jetzt wohl erst mal klar werden, in welcher Form ich das in der DB brauche... Aber jetzt weiß ich wie's geht!

                      Grüße,
                      Alex

                      Kommentar


                        #12
                        Hier die zweite Variante (bei Telegramm dessen Wert zusammen mit dem einem Namen in Datenbank schreiben):

                        Code:
                        # MySQLStoreEvent v1.0
                        # 
                        # Copyright 2014: JNK (https://knx-user-forum.de/members/jnk.html)
                        # latest version available on https://github.com/J-N-K/wgplugin
                        #
                        
                        # please install libdbd-mysql-perl package
                        
                        # database-structure: (must be present prior to use of this plugin)
                        #
                        # field     type        standard_value        extra
                        # id        int(11)                    auto_increment
                        # timestamp    timestamp    current_timestamp
                        # name        varchar(255)
                        # value        decimal(18,9)
                        #
                        # type of column value can be adjusted according to stored data (double, int, ..)
                        #
                        # config starts here
                        #
                        
                        my $db_host = '192.168.0.52'; # access data for MySQL-database 
                        my $db_name = 'wgdata';
                        my $db_user = 'wguser';
                        my $db_password = 'wgtest';
                        my $db_table = 'tabelle2';
                        
                        # enter groupadress and item name
                        my %config = ( '5/0/130' => 'bad_fenster', '5/0/140' => 'kueche_fenster');
                        
                        my $debug = 1; # 0 if no debug, 1 if debug
                        
                        #
                        # config ends here
                        #
                        # do not change anything below
                        #
                        
                        use DBI; 
                        
                        if ($msg{'apci'} eq "A_GroupValue_Write") { # received telegram
                          plugin_log($plugname, "received $msg{'value'} for $msg{'dst'}") if $debug;
                          
                          my $item = $config{$msg{'dst'}};
                          my $value = $msg{'value'};
                          
                          my $sql_query = "INSERT INTO $db_table (name, value) VALUES ('$item', $value)"; 
                          plugin_log($plugname, "SQL: $sql_query") if $debug;  
                          
                          my $db_handle = DBI->connect("DBI:mysql:$db_name;host=$db_host", $db_user, 
                            $db_password, { RaiseError => 1 } );
                          $db_handle->do($sql_query);
                          $db_handle->disconnect();
                        } else { # init call
                          
                          $plugin_info{$plugname.'_cycle'} = 0; # we only go on telegrams
                          foreach my $key (keys %config) {
                            $plugin_subscribe_write{$key}{$plugname} = 1;
                            plugin_log($plugname, "subcribing to $key") if $debug;
                          } 
                        }
                        
                        return;
                        KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                        Kommentar


                          #13


                          Danke!

                          Grüße,
                          Alex

                          Kommentar


                            #14
                            Hallo Alle,

                            läuft jetzt... eine Hürde hatte ich noch: obiger Code (also das Auslesen des Wertes aus der Variablen msg) funktioniert nur, wenn das Wiregate in der eibga.conf alle zu verarbeitenden GAs kennt. Ansonsten schlägt das automagische Decodieren fehl und es wird "" zurückgeliefert...

                            Grüße,
                            Alex

                            Kommentar

                            Lädt...
                            X