|
From: <ma...@us...> - 2012-08-02 17:58:39
|
Revision: 924
http://openautomation.svn.sourceforge.net/openautomation/?rev=924&view=rev
Author: makki1
Date: 2012-08-02 17:58:33 +0000 (Thu, 02 Aug 2012)
Log Message:
-----------
kWh_Zaehler von Netfritz
Modified Paths:
--------------
wiregate/plugin/generic/Uhrzeit-vom-Bus
Added Paths:
-----------
wiregate/plugin/generic/conf.d/kWh_Zaehler.conf
wiregate/plugin/generic/kWh_Zaehler.pl
Modified: wiregate/plugin/generic/Uhrzeit-vom-Bus
===================================================================
--- wiregate/plugin/generic/Uhrzeit-vom-Bus 2012-08-01 20:27:57 UTC (rev 923)
+++ wiregate/plugin/generic/Uhrzeit-vom-Bus 2012-08-02 17:58:33 UTC (rev 924)
@@ -19,17 +19,14 @@
### ENDE DEFINITION ###
#######################
-
-# Plugin an Gruppenadresse "anmelden"
-#$plugin_subscribe{$wert_ga}{$plugname} = 1;
-
my $knxdate = knx_read($datum_ga,1,11);
my ($dummy,$knxtime) = split(" ",knx_read($uhrzeit_ga,1,10));
if ($knxdate and $knxtime) {
my $oldtime = `date \"+%Y-%m-%d %H:%M:%S\"`;
my $newtime = `date --set=\"$knxdate $knxtime\"`;
- $dummy = `hwclock --systohc`;
+ # In RTC schreiben, nur wenn die Uhrzeit nicht zyklisch kommt! Ab PL33 in crontab
+ # $dummy = `hwclock --systohc`;
return "Uhrzeit vom Bus gesetzt: $oldtime -> $newtime";
} else {
return "Fehler beim lesen von Datum/Uhrzeit von $datum_ga / $uhrzeit_ga!";
Added: wiregate/plugin/generic/conf.d/kWh_Zaehler.conf
===================================================================
--- wiregate/plugin/generic/conf.d/kWh_Zaehler.conf (rev 0)
+++ wiregate/plugin/generic/conf.d/kWh_Zaehler.conf 2012-08-02 17:58:33 UTC (rev 924)
@@ -0,0 +1,13 @@
+# kWh_Zaehler.pl - Konfiguration
+#
+# zaehler_F = frei waehlbar F hier Aktor Kanal
+# name => 'trockn' = Trockner wir im Plugin fuers abspeichern gebraucht
+# I_GA=>'1/4/20', = GA vom Aktor die den Stromwert liefert
+# kWh_GA=>'15/0/20' = GA die der kWh Wert auf den Bus schreibt
+# kWh_DPT=>'9'} = DPT der kWh GA
+%zaehler=(
+zaehler_F =>{name => 'trockn', I_GA=>'1/4/20', kWh_GA=>'15/0/20', kWh_DPT=>'9'},
+zaehler_G =>{name => 'waschm', I_GA=>'1/4/15', kWh_GA=>'15/0/18', kWh_DPT=>'9'},
+zaehler_H =>{name => 'spueler', I_GA=>'1/4/16', kWh_GA=>'15/0/19', kWh_DPT=>'9'},
+);
+
Added: wiregate/plugin/generic/kWh_Zaehler.pl
===================================================================
--- wiregate/plugin/generic/kWh_Zaehler.pl (rev 0)
+++ wiregate/plugin/generic/kWh_Zaehler.pl 2012-08-02 17:58:33 UTC (rev 924)
@@ -0,0 +1,55 @@
+# Errechnet die kWhs aus dem Aktor-Strom.
+# Jedesmal wenn ein neuer Stromwert auf der GA gesendet wird
+# wird eine neue Rechnung durchgeführt,
+# gerechnet wird nach dieser Formel
+# kWh = I(mA)/1000*230V* cos_phi * Delta_Zeit s/3600 * 1/1000
+# by NetFritz 07/2012
+# http://knx-user-forum.de/wiregate/21343-kwh-zaehler-aus-dem-aktor-strom.html
+#
+my $cos_phi = 0.95;
+my $Volt = 230;
+my @Zaehler_config;
+$plugin_info{$plugname.'_cycle'} = 0;
+# Konfigurationsfile einlesen
+my $conf=$plugname; $conf=~s/\.pl$/.conf/;
+$conf="/etc/wiregate/plugin/generic/conf.d/$conf";
+my %zaehler=();
+my $err=read_from_config();
+return $err if $err;
+#------------------------------------------------------
+# Alle I_GAs aus der config abonnieren
+for my $r (grep ref($zaehler{$_}), keys %zaehler)
+ {
+ $plugin_subscribe{$zaehler{$r}{I_GA}}{$plugname}=1;
+ }
+# BUS ueberwachen
+if ($msg{'apci'} eq "A_GroupValue_Write") { # A_GroupValue_Write Telegramm eingetroffen
+ for my $r (grep ref($zaehler{$_}), keys %zaehler){ # Ueberwachte GAs durchlaufen
+ if ($msg{'dst'} eq $zaehler{$r}{I_GA}){ # GAs vergleichen
+ my $time_delta = time() - $plugin_info{$plugname.$zaehler{$r}{name} . '_time'};
+ my $I = $plugin_info{$plugname.$zaehler{$r}{name} . '_I'};
+ my $kWh = $plugin_info{$plugname.$zaehler{$r}{name} . '_kWh'} + (($I/1000) * $Volt * $cos_phi * ($time_delta/3600));
+ $plugin_info{$plugname. $zaehler{$r}{name} . '_I'} = $msg{'value'}/1000; # I mA ablegen
+ $plugin_info{$plugname. $zaehler{$r}{name} . '_time'} = time(); # Timestamp ablegen
+ $plugin_info{$plugname. $zaehler{$r}{name} . '_kWh'} = $kWh; # kWh ablegen
+ knx_write($zaehler{$r}{kWh_GA},$kWh*1000,$zaehler{$r}{kWh_DPT});
+ return($zaehler{$r}{kWh_GA} . "=" . $kWh);
+ }
+ }
+}else{
+ for my $r (grep ref($zaehler{$_}), keys %zaehler){ # Ueberwachte GAs durchlaufen
+ # knx_write($zaehler{$r}{kWh_GA},$plugin_info{$plugname.$zaehler{$r}{name} . '_kWh'},$zaehler{$r}{kWh_DPT});
+ }
+}
+#
+return;
+# ------------- config einlesen ----------------------
+sub read_from_config
+ {
+ open CONFIG, "<$conf" || return "no config found";
+ my @lines = <CONFIG>;
+ close CONFIG;
+ eval("@lines");
+ return "config error" if $@;
+}
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|