From 9e4324c708da6ed9bbab7b66f8e61f53769a33bf Mon Sep 17 00:00:00 2001 From: tobiasfaust Date: Fri, 7 Dec 2012 19:14:58 +0000 Subject: [PATCH] =?UTF-8?q?93=5FDbLog=20-=20Verarbeitung=20f=C3=BCr=20den?= =?UTF-8?q?=20Type=20WEATHER=20hinzugef=C3=BCgt=20(danke=20an=20Erwin)=20-?= =?UTF-8?q?=20Fehlermeldungen=20auf=20Konsole=20gefixt=20-=20Fehlerhafte?= =?UTF-8?q?=20Abfrage=20bei=20MySQl=20DBMS=20gefixt=20-=20Doku=20auf=20UTF?= =?UTF-8?q?8=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://fhem.svn.sourceforge.net/svnroot/fhem/trunk/fhem@2275 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- contrib/dblog/93_DbLog.pm | 104 ++++++++++++++++++++++++-------------- 1 file changed, 65 insertions(+), 39 deletions(-) diff --git a/contrib/dblog/93_DbLog.pm b/contrib/dblog/93_DbLog.pm index 81c5a5369..b91a9e746 100755 --- a/contrib/dblog/93_DbLog.pm +++ b/contrib/dblog/93_DbLog.pm @@ -231,6 +231,25 @@ DbLog_ParseEvent($$) } } + # Weather + elsif($type eq "WEATHER") { + if($event =~ m(^wind_condition)) { + @parts= split(/ /,$event); # extract wind direction from event + if(defined $parts[0]) { + $reading = "wind_direction"; + $value= $parts[2]; +# $unit= ""; + } + } + if($reading =~ m(^wind)) { $unit= "km/h"; } # wind, wind_speed + if($reading eq "wind_chill") { $unit= "°C"; } + if($reading eq "wind_direction") { $unit= ""; } + if($reading =~ m(^temperature)) { $unit= "°C"; } # wenn reading mit temperature beginnt + if($reading =~ m(^humidity)) { $unit= "%"; } + if($reading =~ m(^pressure)) { $unit= "hPa"; } + if($reading =~ m(^pressure_trend)) { $unit= ""; } + } + @result= ($reading,$value,$unit); return @result; } @@ -459,8 +478,8 @@ DbLog_Get($@) #moegliche Formate: YYYY | YYYY-MM | YYYY-MM-DD | YYYY-MM-DD_HH24 $from =~ s/_/\ /g; $to =~ s/_/\ /g; - %from_datetime = DbLog_explode_datetime($from, DbLog_explode_datetime("2000-01-01 00:00:00", undef)); - %to_datetime = DbLog_explode_datetime($to, DbLog_explode_datetime("2099-01-01 00:00:00", undef)); + %from_datetime = DbLog_explode_datetime($from, DbLog_explode_datetime("2000-01-01 00:00:00", ())); + %to_datetime = DbLog_explode_datetime($to, DbLog_explode_datetime("2099-01-01 00:00:00", ())); $from = $from_datetime{datetime}; $to = $to_datetime{datetime}; @@ -487,26 +506,33 @@ DbLog_Get($@) $sqlspec{get_timestamp} = "TO_CHAR(TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')"; $sqlspec{from_timestamp} = "TO_TIMESTAMP('$from', 'YYYY-MM-DD HH24:MI:SS')"; $sqlspec{to_timestamp} = "TO_TIMESTAMP('$to', 'YYYY-MM-DD HH24:MI:SS')"; + $sqlspec{reading_clause} = "(DEVICE || '|' || READING)"; } elsif ($hash->{DBMODEL} eq "ORACLE") { $sqlspec{get_timestamp} = "TO_CHAR(TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')"; $sqlspec{from_timestamp} = "TO_TIMESTAMP('$from', 'YYYY-MM-DD HH24:MI:SS')"; $sqlspec{to_timestamp} = "TO_TIMESTAMP('$to', 'YYYY-MM-DD HH24:MI:SS')"; + $sqlspec{reading_clause} = "(DEVICE || '|' || READING)"; } elsif ($hash->{DBMODEL} eq "MYSQL") { $sqlspec{get_timestamp} = "DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:%s')"; $sqlspec{from_timestamp} = "STR_TO_DATE('$from', '%Y-%m-%d %H:%i:%s')"; $sqlspec{to_timestamp} = "STR_TO_DATE('$to', '%Y-%m-%d %H:%i:%s')"; + $sqlspec{reading_clause} = "CONCAT(DEVICE,'|',READING)" } elsif ($hash->{DBMODEL} eq "SQLITE") { $sqlspec{get_timestamp} = "TIMESTAMP"; $sqlspec{from_timestamp} = "'$from'"; $sqlspec{to_timestamp} = "'$to'"; + $sqlspec{reading_clause} = "(DEVICE || '|' || READING)"; } else { $sqlspec{get_timestamp} = "TIMESTAMP"; $sqlspec{from_timestamp} = "'$from'"; $sqlspec{to_timestamp} = "'$to'"; + $sqlspec{reading_clause} = "(DEVICE || '|' || READING)"; } if(uc($outf) eq "ALL") { $sqlspec{all} = ",TYPE,EVENT,UNIT"; + } else { + $sqlspec{all} = ""; } for(my $i=0; $i[0]."|".$readings[$i]->[1]."') + $sqlspec{all} + FROM history + WHERE 1=1 + AND $sqlspec{reading_clause} = ('".$readings[$i]->[0]."|".$readings[$i]->[1]."') AND TIMESTAMP > $sqlspec{from_timestamp} AND TIMESTAMP < $sqlspec{to_timestamp} - ORDER BY TIMESTAMP"; + ORDER BY TIMESTAMP"; Log GetLogLevel($hash->{NAME},5), "Executing $stm"; @@ -556,7 +582,7 @@ DbLog_Get($@) my $val = $sql_value; eval("$readings[$i]->[4]"); $sql_value = $val; - if($@) {Log 3, "DbLog: Fehler in der übergebenen Funktion: <".$readings[$i]->[4].">, Fehler: $@";} + if($@) {Log 3, "DbLog: Fehler in der übergebenen Funktion: <".$readings[$i]->[4].">, Fehler: $@";} $out_tstamp = $sql_timestamp; $writeout=1; } @@ -576,11 +602,11 @@ DbLog_Get($@) } elsif ($readings[$i]->[3] eq "delta-h") { #Berechnung eines Stundenwertes - %tstamp = DbLog_explode_datetime($sql_timestamp, undef); + %tstamp = DbLog_explode_datetime($sql_timestamp, ()); if($lastd[$i] eq "undef") { - %lasttstamp = DbLog_explode_datetime($sql_timestamp, undef); + %lasttstamp = DbLog_explode_datetime($sql_timestamp, ()); } else { - %lasttstamp = DbLog_explode_datetime($lastd[$i], undef); + %lasttstamp = DbLog_explode_datetime($lastd[$i], ()); } if("$tstamp{hour}" ne "$lasttstamp{hour}") { # Aenderung der stunde, Berechne Delta @@ -592,11 +618,11 @@ DbLog_Get($@) } } elsif ($readings[$i]->[3] eq "delta-d") { #Berechnung eines Tageswertes - %tstamp = DbLog_explode_datetime($sql_timestamp, undef); + %tstamp = DbLog_explode_datetime($sql_timestamp, ()); if($lastd[$i] eq "undef") { - %lasttstamp = DbLog_explode_datetime($sql_timestamp, undef); + %lasttstamp = DbLog_explode_datetime($sql_timestamp, ()); } else { - %lasttstamp = DbLog_explode_datetime($lastd[$i], undef); + %lasttstamp = DbLog_explode_datetime($lastd[$i], ()); } if("$tstamp{day}" ne "$lasttstamp{day}") { # Aenderung des Tages, Berechne Delta @@ -851,13 +877,13 @@ DbLog_Get($@) definiert in <configfilename>. (Vergleiche Beipspielkonfigurationsdatei in contrib/dblog/db.conf).
Die Konfiguration ist in einer sparaten Datei abgelegt um das Datenbankpasswort - nicht in Klartext in der FHEM-Haupt-Konfigurationsdatei speichern zu müssen. - Ansonsten wäre es mittels des list + nicht in Klartext in der FHEM-Haupt-Konfigurationsdatei speichern zu müssen. + Ansonsten wäre es mittels des list Befehls einfach auslesbar.

Die Perl-Module DBI and DBD::<dbtype> - müssen installiert werden (use cpan -i <module> + müssen installiert werden (use cpan -i <module> falls die eigene Distribution diese nicht schon mitbringt).

@@ -866,7 +892,7 @@ DbLog_Get($@) Ein Beispielcode zum Erstellen einer MySQL/PostGreSQL Datenbak ist in contrib/dblog/<DBType>_create.sql zu finden. Die Datenbank beinhaltet 2 Tabellen: current und - history. Die Tabelle current enthält den letzten Stand + history. Die Tabelle current enthält den letzten Stand pro Device und Reading. In der Tabelle history sind alle Events historisch gespeichert. @@ -884,10 +910,10 @@ DbLog_Get($@) z.B. 71
  • UNIT: Einheit, ermittelt aus dem Event, z.B. %
  • - Der Wert des Rreadings ist optimiert für eine automatisierte Nachverarbeitung + Der Wert des Rreadings ist optimiert für eine automatisierte Nachverarbeitung z.B. yes ist transformiert nach 1

    - Die gespeicherten Werte können mittels GET Funktion angezeigt werden: + Die gespeicherten Werte können mittels GET Funktion angezeigt werden: @@ -910,20 +936,20 @@ DbLog_Get($@) get <name> <infile> <outfile> <from> <to> <column_spec>

    - Ließt Daten aus der Datenbank. Wird durch die Frontends benutzt um Plots - zu generieren ohne selbst auf die Datenank zugreifen zu müssen. + Ließt Daten aus der Datenbank. Wird durch die Frontends benutzt um Plots + zu generieren ohne selbst auf die Datenank zugreifen zu müssen.