Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
centos:energieverbrauch [13.07.2012 06:40. ] – [Perl Script zum Datenbankauslesen] djangocentos:energieverbrauch [20.04.2018 10:37. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Darstellung des Energieverbrauchs (Strom und Gas) ======
 +{{ :fun:fhem-cacti.png?125}}\\ Zwar werden monatlich die diversen Zählerstände abgelesen und notiert - schließlich will man ja ungefähr Bescheid wissen, ob die geplanten Zahlen einigermaßen zutreffen und/oder ob es signifikante Änderungen im Verbrauch gibt - aber das Ganze noch schön als aktuelle und historische Verbrauchsdaten graphisch dargestellt, das macht schon die Sache etwas leichter.\\
 +===== Verbrauchsdaten über ein eigenes Script auslesen =====
 +Für diese Aufgabe nutzen wir kleines Perl-Script, das die Daten aus der MySQL-Datenbank ausliest, aufbereitet und für Cacti lesbar ausgibt. Damit Cacti diese Ausgabe(n) auch verarbeiten kann, müssen diese einem bestimmten Format entsprechen - gibt ein Script nur einen Wert zurück, sieht die Ausgabe so aus: 
 +   <Feldname>:<Wert>
 +Wollen wir mehrere Werte zugleich verarbeiten, so sind die einzelnen Ausgabepaare mittels Leerzeichen zu trennen und hat demnach folgendes Aussehen:
 +   <Feldname_1>:<Wert_1> <Feldname_2>:<Wert_2> <Feldname_3>:<Wert_3> <Feldname_n>:<Wert_n>
 +Als Dezimaltrennzeichen erwartet Cacti einen Punktund __kein__ Komma!
 +==== Perl Script zum Datenbankauslesen ====
 +Zum Auslesen der aktuellen Verbrauchswerte aus der MySQL-Datenbanktabelle **fhem.history** verwenden wir nicht das von //fhem// mitgelieferte Perl-Script, sondern unser eigenes. Hauptgrund ist, dass wir durch anpassung(en) des nachfolgenden Scriptes werte meherer Devices auf einmal abfragen und bei Bedarf auch noch umrechnen/bearbeiten können.
 +
 +<file perl usr/local/bin/strom_edv.pl>#!/usr/bin/perl -w
 +#
 +# strom_edv.pl: liest den aktuellen Verbrauchswert aus de Datenbank und gibt diesen cacti-tauglich in der
 +# Einheit Watt aus.
 +#
 +# (c) Django 2009 - email: michael@nausch.org
 +#
 +# Ausgabe:     direkt auf der Konsole
 +#              
 +# Eingabe:     Tabelle current aus MySQL-Datenbank fhem
 +#
 +# Returncodes: 0 = Alles OK
 +#              1 = Fehler bei der MySQL-Verbindung
 +#              2 = Fehler beim Lesen aus der MySQL-DB 
 +#
 +# Version:
 +# 0.01    12.01.09:    Erste Version
 +# Todo            :    nix ;)
 +#################################################################################################################
 +
 +use strict;
 +use DBI;
 +use DBD::mysql;
 +use IO::File;
 +my ($query,$dbquery,$sthm,$sthd,$sqlstate,$sql,@row,$sqltodo,%row1,$line,$insql,$val,$dosql,$sqlstated);
 +
 +### MySQL Setup ###
 +my $DBuser="fhemuser";                                                  # Username des MySQL-Clients 
 +my $DBpass="Gas_und_Stromzaehler";                                      # Passwort des MySQL-Clients
 +my $dbhm=DBI->connect("dbi:mysql:database=fhem;host=localhost;port=3306","$DBuser","$DBpass",                                                 
 +{                                                                                                                       
 +PrintError => 1,                                                                                                             
 +}                                                                                                                            
 +);                                                                                                                           
 +unless ( $dbhm ){                                                                                                            
 +print "Fehler bei der Verbindung zu MySQL\n";                                                                                
 +exit("1");                                                                                                                   
 +}  
 +
 +$sql="SELECT value *1000 FROM current WHERE reading = 'power_kW'";
 +
 +#sql statement ausführen 
 +$sthd=$dbhm->prepare($sql);                                             # SQL-Statement zusammensetzen/vorbereiten
 +$sthd->execute();                                                       # SQL-Statement ausführen
 +#rückgabestatus der sqlabfrage überprüfen. wenn fehler dann beenden des programms
 +if ($sqlstated) {
 +  print "Fehler beim Lesen aus der MySQL Tabelle fhem:current\nQUERY:  $sql\nSTATE: $sqlstated";
 +  exit("2");
 +};
 +
 +### Rückgabewerte der SQL-Abfrage bearbeiten und ausgeben ###
 +  $insql=undef;
 +while (@row=$sthd->fetchrow_array()) {
 +  $insql=undef;
 +  foreach $line (@row) {
 +    $val='';
 +    $val=$line if ($line);
 +    $insql.="$val"
 +  }
 +}
 +  print "power:$insql\n";
 +</file>
 +
 +Diese Codezeilen speichern wir unter ** /usr/local/bin/ ** ab, und versehen das Script mit Ausführungsrechten.
 +   # chmod +x /usr/local/bin/strom_edv.pl
 +
 +Beim Ausruf unseres Scriptes wird uns nun, der in der MySQL-Tabelle **fhem.current** enthaltene Verbrauchswert in der Einheit kW, auf der Konsole in der Einheit Watt ausgegeben.
 +   # /usr/local/bin/strom_edv.pl 
 +   power:350
 +===== Cacti-Konfigurationen =====
 +==== Definition Dateneingabe ====
 +Unter dem Menüpunkt **//Collection Methods//** definieren wir nun eine neue Datenquelle beim Punkt **//__Data Input Methods__//**. Mit Anwahl der Schaltfläche **add** erzeugen wir nun diese Quelle.\\
 +\\
 +{{ :centos:strom_1.png?775 }}
 +\\
 +Im Feld //Name// geben wir der Eingabemethode einen sprechenden Namen; als //Input Type// wählen wir **Script/Command** aus. Der Input String enthält den kompletten Pfad des Perl-Scriptes, also ** /usr/local/bin/strom_edv.pl **. Mit einem Klick auf die schaltfläche **create** speichern wir nun diese Werte ab. Als nächstes legen wir das Ausgabefeld **Output Fields** an, über diese Cacti die Ausgaben unseres Scriptes auswerten wird. Wir wählen also die Schaltfläche **Add** an.\\
 +\\
 +{{ :centos:strom_2.png?775 }}
 +\\
 +Der String im Feld **Field [Output]** muss der Ausgabe unseres Scriptes entsprechen, also in unserem fall **power**. Im Feld **Friendly Name** geben wir dem Ganzen einen aussagekräftigen Namen. Das Häckchen bei **Update RRD File** muss aktiviert sein, damit Cacti die Werte in das RRD-File (Datenbank) aufnehmen kann.\\
 +\\
 +{{ :centos:strom_3.png?775 }}
 +\\
 +Zum Schluß speichern wir unsere Angaben mit einem Klick auf die Schaltfläche **save**. Wir haben nun das "Aussehen" unserer Daten definiert - Cacti sammelt zum jetzigen Zeitpunkt aber noch keine Daten! Nicht nervös werden, dies erfolgt erst später!
 +==== Definition Datenquelle ====
 +Wir lagen also eine Datenquelle unter dem Menüpunkt **Managemen** **//Datasource//** an, damit Cacti die Daten auch einsammeln und ablegen kann. Dort klicken wir auf **Add** und lassen die Felder **Selected Data Template** und **Host** auf "None" stehen und klicken auf **create**.\\
 +\\
 +{{ :centos:strom_4.png?775 }} 
 +\\
 +Der Datenquelle geben wir einen Namen, damit wir bei den weiteren Schritten diese einfach wiederfinden. Das Feld **Data Source Path** brauchen wir nicht zu befüllen, dies erledigt Cacti selbst, sobald wir den Datensatz abspeichern. Bei **Data Input Method** wählen wir unser zuvor definierte Dateneingabe **//strom-itrack//** aus.\\
 +\\
 +{{ :centos:strom_5.png?775 }}
 +\\
 +Bei **Data Source Item** vergeben wir noch einen sprechenden  Namen unter **Internal Data Source Name** und definieren mögliche Minimal- und Maximalwerte, die unsere Meßfühler generieren wird. Als **Data Source Type** wählen wir **Gauge**; dies definiert Datenquellen die wechselnde Werte liefern, wie z.B. Strom oder Gasverbräuche. Wollten Zählerstande als Absolutwerte, also aufsteigende Zahlenreihen nutzen, so müssten wir hier den Typ //Counter// auswählen. Zum Schluß speichern wir nun unsere Eingaben durch Anwahl der Schaltfläche **save**.\\
 +\\
 +Nun wird Cacti beginnen, in dem vorgegebenen 5 Minutenraster unser Perl-Script zum Auslesen der MySQL-Datenbanktabelle aufzurufen und die Rückgabewerte in das betreffende RRD-File zu schreiben.
 +==== Definition Ausgabegraphen ====
 +Nachdem nun Cacti auf Grund unserer zuvor definierten Datenquelle, Meßwerte zusammenträgt, gilt es nun für die Darstellung einen Ausgabegraphen zu bestimmen. Unter **Managemnt** //**Graph Management**// legen wir nun fest, wie die Darstellung erfolgen soll.
 +
 +{{ :centos:strom_6.png?775 }}
 +
 +Hier klicken wir auf **Add** und lassen die Felder **Selected Data Template** und **Host** auf "None" stehen und klicken auf **create**.
 +
 +Im Feld **Title (--title)** tragen wir nun die Überschrift ein, die über unserer Graphik erscheinen soll. Bei **Vertical Label (--vertical-label)** geben wir an, was neben der Y-Achse als Beschriftung erscheinen soll, in unsere Fall z.B. //Watt// als Einheitenangabe der Meßwerte. Abgespeichert werden unsere Angaben, wie gewohnt nach Anwahl der Schaltfäche **save**.
 +
 +{{ :centos:strom_7.png?775 }}
 +
 +Über **Graph Items** müssen wir nun noch festlegen, wie die Daten dargestellt werden, also letztendlich der Graph gezeichnet werden soll. Wir wählen also bei **Graph Items** die schaltfläche **Add** an und gelangen zum nächsten Eingabefenster.
 +
 +{{ :centos:strom_8.png?775 }}
 +
 +Bei den Eingabefeldern orientieren wir uns nun an Hand der vom System vorgegebenen Graphen und/oder wir experimentieren einfach ein wenig. Sehr hilfreich ist dabei, den Punkt **__*Turn Off Graph Debug Mode.__** (rechts oben am Bildschirm) zu aktivieren. Cacti zeigt dann sofort an, wenn etwas nicht passen sollte!
 +
 +{{ :centos:strom_9.png?775 }}
 +
 +
  
  • centos/energieverbrauch.txt
  • Zuletzt geändert: 20.04.2018 10:37.
  • von 127.0.0.1