FHEM Forum

FHEM => Sonstiges => Thema gestartet von: sn0000py am 22 November 2019, 12:15:19

Titel: Perl spezielle mysql Auswertung
Beitrag von: sn0000py am 22 November 2019, 12:15:19
Hallo ich suche eine Möglichkeit, bzw Beispiele für den Zugriff von perl auf die mysql Datenbank.

Grund: ich brauche eine spezielle Auswertung - und zwar habe ich zwei Werte
Mischer und Energie
Mischer ist ein Wert zwischen 0 und 100, Energie ist der stetig steigende Wert von 0 bis.

Ich muss nun jeden Bereich finden, wo Mischer auf 0 geht, dann muss ich 15 minuten warten (also im log 15 minuten), dann den Energie wert merken.
Danach den Zeitpunkt suchen wo der Mischer wieder auf > 0 geht, und mir dann die Differenz des Energiewertes rausschreiben.

Ich vermute mit dem DBRep schaffe ich sowas nicht, daher würde ich das ganz einfach in nem simplen programm auslagern, wo ich das rehcne, dazu bräuchte ich aber ein zwei einfache Beispiele für den Zugriff auf die DB.
Titel: Antw:Perl spezielle mysql Auswertung
Beitrag von: DS_Starter am 24 November 2019, 15:47:44
Hallo sn0000py,

ich habe jetzt noch nicht allzu viel Zeit in Überlegungen zu deiner Aufgabenstellung investiert, aber
ich glaube die Vorgehensweise in diesem Wiki-Artikel https://wiki.fhem.de/wiki/Summe_aller_Einschaltzeiten_eines_Ger%C3%A4tes könnte dir helfen.

Ich würde versuchen es mit Hilfe von DbRep zu erledigen, damit du dir durch die Datenbankoperationen keine Hänger bzw. Freezes ins System holst.

Ansonsten kannst du dir die Connect-Routine aus DbRep (sofern mind. ein Device definiert) in dein Programm einbauen, was z.B. so aussehen könnte:


  ($err,$dbh) = DbRep_dbConnect($name,0);    # $name -> DbRep-Device welches mit dem relevanten DbLog verbunden ist
  if ($err) {
  # mache Fehlerbehandlung
  return ;
  }

  eval {$sth = $dbh->prepare($sql);
          $r = $sth->execute();
         };
 
  if ($@) {
  # mache Fehlerbehandlung
  return ;     
  }

# ansonsten Auswertung über verschiedene $sth-Mothoden, z.B.:

    while (my @line = $sth->fetchrow_array()) {
      Log3 ($name, 4, "DbRep $name - SQL result: @line");
      my $row = join("|", @line);
      push(@rows, $row);

      # Anzahl der Datensätze
      $nrows++;
    }


Hoffe es hilft dir etwas.

Grüße,
Heiko
Titel: Antw:Perl spezielle mysql Auswertung
Beitrag von: sn0000py am 24 November 2019, 18:51:03
hallo wollte da gerade mal testen, aber bei mir kennt er die DbRep_dbConnect funktion nicht?


Undefined subroutine &main::DbRep_dbConnect called at ./FHEM/99_myUtils.pm line 912.

Habe diese funktion auch in keiner anderen .pm Datei gefunden
Titel: Antw:Perl spezielle mysql Auswertung
Beitrag von: DS_Starter am 24 November 2019, 18:54:50
Du brauchst das aktuellste DbRep, habe ich erst kürzlich als separate Routine implementiert.
Titel: Antw:Perl spezielle mysql Auswertung
Beitrag von: sn0000py am 25 November 2019, 17:45:35
Danke hat funktioniert :D