Hallo Jungs,
mein BE Eingang ist eingetroffen. Ich hab in angeschlossen und den Stromzahler auf den Bus gebracht. Hier ein kleines Howto.
Man braucht einen Zahler mit S0 Eingang, einen Binareingang (BE) ohne Abfragespannung und (!) mit Zahlerapplikation.
Ich habe einfach einen Klingeltraffo genommen und die 12V durch den BE auf den S0 gejagt [(+) -- BE -- S0 -- (-)].
Die Zahlerapplikation entsprechend eingestellt (+1 bei positiver Flanke, Entprellzeit 30ms, zyklisch senden alle 60sec, bei Wertanderung nicht senden, ..., Datentyp 32bit unsigned) und mit einer Gruppenadresse verbunden.
In /usr/share/misterhouse/mh/lib/EIB_Item.pm folgendes hinzugefuergt (ging auch schon an die MH ML)
In eib_items.mht einen Zahler eingerichtet
In strom.pl folgenden Usercode eingegeben
Ich hab dabei die Time::HiRes genutzt. Notfalls kann man auch time() statt
Time::HiRes::time verwenden. Wenn die Lib nicht vorhanden ist, kann man sie aber auch einfach nachinstallieren mit
Thats it.
PS: Bei der Berechnung des Momentanverbrauchs bin ich mir nicht ganz sicher. Vielleicht schaut ihr da nochmal drüber. Zumindest sind die Werte ganz sinnig und werden größer wenn ich die Herdplatte anmache
.
LG
mein BE Eingang ist eingetroffen. Ich hab in angeschlossen und den Stromzahler auf den Bus gebracht. Hier ein kleines Howto.
Man braucht einen Zahler mit S0 Eingang, einen Binareingang (BE) ohne Abfragespannung und (!) mit Zahlerapplikation.
Ich habe einfach einen Klingeltraffo genommen und die 12V durch den BE auf den S0 gejagt [(+) -- BE -- S0 -- (-)].
Die Zahlerapplikation entsprechend eingestellt (+1 bei positiver Flanke, Entprellzeit 30ms, zyklisch senden alle 60sec, bei Wertanderung nicht senden, ..., Datentyp 32bit unsigned) und mit einer Gruppenadresse verbunden.
In /usr/share/misterhouse/mh/lib/EIB_Item.pm folgendes hinzugefuergt (ging auch schon an die MH ML)
Code:
# EIB11_Item: 32-bit unsigned integer package EIB11_Item; @EIB11_Item::ISA = ('EIB_Item'); sub eis_type { return '11'; } sub decode { my ($self, @data) = @_; my $res; unless ($#data == 4) { &main::print_log("Not EIS type 11 data received for $self->{groupaddr}: \[@data\]") if $main::config_parms{eib_errata} >= 2; return; } my $res = ($data[1] << 24 ) | ($data[2] << 16 ) | ($data[3] << 8 ) | $data[4]; # &main::print_log("EIS11 for $self->{groupaddr}: >$res<"); return $res; } sub encode { my ($self, $state) = @_; return([0, ($state & 0xff000000) >> 24, ($state & 0xff0000) >> 16, ($state & 0xff00) >> 8, $state & 0xff]); }
Code:
# Stromzaehler EIB11, 10/4/1,Stromzaehler32bit, ,
Code:
# Zum Abgleich zwischen MH und dem realen Stromzaehler # muss einmalig der Eibzaehlerstand, der Stromzaehlerstand # und die ZaehlerJekWh eingestellt werden. use Time::HiRes; # noloop=start my $StromzaehlerOffset = 6992.5; my $EibzaehlerOffset = 1100; my $ZaehlerJekWh = 250; my $lasttimestamp = 0; my $lastcounter = 0; my $Stromzaehlerstand = 0; my $Stromzaehlermomentanverbrauch = 0; # noloop=stop if (state_changed $Stromzaehler32bit) { my $dt = Time::HiRes::time - $lasttimestamp; $lasttimestamp = Time::HiRes::time; $Stromzaehlerstand = $StromzaehlerOffset + (((state $Stromzaehler32bit) - $EibzaehlerOffset) / $ZaehlerJekWh); if ($lastcounter > 0 ) { $Stromzaehlermomentanverbrauch = (state $Stromzaehler32bit - $lastcounter) * 3600/($ZaehlerJekWh* $dt); } else { $Stromzaehlermomentanverbrauch = 0; } $lastcounter = state $Stromzaehler32bit; #print_log "########## Strom >" . sprintf("avg %.2f kW",$Stromzaehlermomentanverbrauch) ."< >" . sprintf("%.1f kWh",$Stromzaehlerstand) . "<"; }
Time::HiRes::time verwenden. Wenn die Lib nicht vorhanden ist, kann man sie aber auch einfach nachinstallieren mit
Code:
# perl -MCPAN -e shell cpan> install Time::HiRes
PS: Bei der Berechnung des Momentanverbrauchs bin ich mir nicht ganz sicher. Vielleicht schaut ihr da nochmal drüber. Zumindest sind die Werte ganz sinnig und werden größer wenn ich die Herdplatte anmache

LG
Kommentar