Ich versuche meinen ED300L Stromzähler mit IR/USB Device zu lesen - leider bekomme ich hierbei immer einen CRC Fehler.
2022.10.13 14:16:29 5: OBIS (EDL300) - SML-Parse 1B1B1B1B0101010176070012107A5D5B6200620072630101760101070012097D1F490B06454D48010E153C4C180101630C290076070012107A5D5C620062007263070177010B06454D48010E153C4C18070100620A7F7F72620165097D57107A770701014702037F0101010104454D4801770701000000097F010101010B06454D48010E153C4C1801770701000108007F6401012201621E527F5600186F073B01770701000208007F6401012201621E527F56001058243E01770701000108017F0101621E527F5600016F611801770701000208017F0101621E527F56001058243E01770701000108027F0101621E527F56001600262301770701000208027F0101621E527F56000000000001770701001007007F0101621B527F557F7F7E6201770701014702057F0172620165097D57110101030209313D4E70112E3760551A403D0E1460517B020D58035B3072391B58062B1A48491F646C6C433F0C5F4D3F5A202C107A0101016376760076070012107A5D5F6200620072630201710163622A00001B1B1B1B1A014636
So wie es aussieht ( wenn ich das Protokoll reichtig verstehe ) sind wohl alle Daten richtig angekommen, aber irgend etwas passt den
Parse Modul offensichtlich nicht. Schade dass man hier nicht mehr Details bekommt.
Hat irgend jemand eine Idee was hier falsch ist.
Meine FHEM config ist :
define EDL300 OBIS /dev/ttyUSB0@9600,7,E,1 SML
attr EDL300 event-min-interval 1800
attr EDL300 interval 1800
attr EDL300 verbose 5
setdefaultattr group Logdatei
define FileLog_Strom FileLog /var//log/Stromz-%Y_%m.log EDL300
Hi @roli oder allen anderen,
ich frage mal doof da ich gerade versuche meinen ED300L mit einem infrarot lesekopf auszulesen. Ich stecke den Lesekopf (https://www.ebay.de/itm/313884760667) doch blos per USB in den pi. und dann halt den kopf per usb-magnet an den magnetischen lesekopf , oder?
Dann halt im fhem folgenden befehl absetzen
define HK_Zaehler OBIS /dev/ttyUSB0@9600,7,E,1 SML
dann sollte er doch daten geliefert bekommen. bei mir macht er gar nichts :(
EDIT:
okay vergiss es es war die eine verlängerung des usb und anscheinend war der kopf nicht korrekt auf dem leser gesetzt........
Auf die schnelle.
1: LEsekopf richtig plazieren
2: putty öffnen und prüfen ob DAten kommen mit
stty -F /dev/ttyUSB0 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
cat /dev/ttyUSB0 |od -tx1 -- sollte Daten liefern
Ohne stty wie oben, ging bei mir nichts ! FAlls DAten kommen, dann ist alles ok.
HAbe stty zeile in mein /etc/init.d/fhem startbereich eingefügt.
MEine FHEM Anweisungen sehen wie folgt aus:
#Definitionen für EnBW Stromzähler ED300L
#
# Erlaubt das Anzeigen der aktuellen Stromzähler Werte über einen IR USB Schreib-Lesekopf.
#
# IR LEsekopf ist mit FT230x Chipattr editConfig
# USB schnittstelle arbeitet mit
# stty -F /dev/ttyUSB0 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
#
# Ich polle die Stromdaten nur alle 600 sekunden -- sprich alle 10 min
setdefaultattr
setdefaultattr room Stromzaehler
setdefaultattr group 1 - Stromzaehler aktuell
# define EDL300 OBIS /dev/ttyUSB0 SML verwende addressierung mittels ID, da sich Portnummern änden können
define EDL300 OBIS /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_D308PZ22-if00-port0 SML
#attr EDL300 room hidden
attr EDL300 alignTime 00:00
attr EDL300 interval 60
attr EDL300 pollingMode on
attr EDL300 suppressReading total_feed_Ch*
# Mittelwerte pro Interval
attr EDL300 event-aggregator power:120:linear:mean,total_consumption:300:none:v,total_consumption_Ch1:300:none:v,total_consumption_Ch2:300:none:v,total_feed:300:none:v
attr EDL300 event-on-change-reading .*
attr EDL300 unitReadings off
attr EDL300 stateFormat {sprintf("%.0f kWh", (ReadingsVal($name,"total_consumption",0) / 1000) ) . " / ". sprintf("%.0f W", ReadingsVal($name,"power",0)). " / ".ReadingsVal($name,"state",0)}
setdefaultattr group 2 - Aktuelle Einzelwerte Stromzaehler
setdefaultattr devStateStyle style="text-align:right;;;;"
setdefaultattr stateFormat { sprintf("%8.0f kWh", (ReadingsVal( $name,"state",0) / 1000) ) }
define E_HT_Verbrauch readingsProxy EDL300:total_consumption_Ch1
attr E_HT_Verbrauch alias HT Verbrauch
attr E_HT_Verbrauch sortby 1
define E_NT_Verbrauch readingsProxy EDL300:total_consumption_Ch2
attr E_NT_Verbrauch alias NT Verbrauch
attr E_NT_Verbrauch sortby 2
define E_Einspeisung readingsProxy EDL300:total_feed
attr E_Einspeisung alias Einspeisung
attr E_Einspeisung devStateStyle style="text-align:right;;color:green;;"
attr E_Einspeisung sortby 3
setdefaultattr
#
# Statistics
define haus.strom statistics EDL300
attr haus.strom ignoreDefaultAssignments 1
attr haus.strom deltaReadings total_consumption,total_consumption_Ch1,total_consumption_Ch2,total_feed
attr haus.strom singularReadings EDL300:total_consumption:Delta:(Year|Month|Day|Hour)|EDL300:total_consumption_Ch1:Delta:(Year|Month|Day|Hour)|EDL300:total_consumption_Ch2:Delta:(Year|Month|Day|Hour)|EDL300:total_feed:Delta:(Year|Month|Day|Hour)
attr haus.strom room hidden
setdefaultattr room Stromzaehler
setdefaultattr group 3 - Statistik Stromverbrauch
defmod haus.strom.rg readingsGroup < >,<HT-Tarif>,<NT-Tarif>,<Einspeisung> \
EDL300:statTotal_consumption_Ch1Day,statTotal_consumption_Ch2Day,statTotal_feedDay \
EDL300:statTotal_consumption_Ch1DayLast,statTotal_consumption_Ch2DayLast,statTotal_feedDayLast \
EDL300:statTotal_consumption_Ch1Month,statTotal_consumption_Ch2Month,statTotal_feedMonth \
EDL300:statTotal_consumption_Ch1Year,statTotal_consumption_Ch2Year,statTotal_feedYear
attr haus.strom.rg alias Verbrauch
# nameStyle bezieht sich auf Spaltenüberschrift und Row titel , syle auf die Werte
attr haus.strom.rg nameStyle style='text-align:right;;color:blue'
attr haus.strom.rg style style='text-align:right;;color:red '
attr haus.strom.rg mapping {\
if ($ROW == 2) {return "Heute"}\
elsif ($ROW == 3) {return "Gestern"}\
elsif ($ROW == 4) {return "Monat"}\
elsif ($ROW == 5) {return "Jahr"}\
}
attr haus.strom.rg noheading 1
attr haus.strom.rg notime 1
attr haus.strom.rg valueFormat { sprintf("%.0f kWh", ($VALUE/1000) )}
attr haus.strom.rg valueStyle style='width:200px;;color:black'
#attr haus.strom.rg cellStyle { if (($ROW > 1)&&( $COLUMN > 0 )) { return 'style="width:200px;;color:black"'} }
# weitere formattierungs Beispiele
# attr haus.strom.rg nameStyle { if ( $COLUMN > 1) { return 'style="text-align:right;;font-weight:bold"'} }
# attr haus.strom.rg cellStyle { if ($ROW == 16) { return ($READING ne 'state') ? 'style="font-weight:bold"' : 'style="font-weight:normal"' }}
# Logging von Stromwerten
#
# Strom_day-%Y_%m.log Aktueller Verbrauch von HT NT und Einsteisung in Watt alle 15 Minunten -- Standard FTHEM Logformat
#
# Strom_sum-%Y_%m.log Summe von Verbrauch am Ende des TAges -- Format : Y-MM-DD HT-Verbrauch NT-Verbrauch Einspeisung
#
define Strom_Line_day dummy
attr Strom_Line_day room hidden
setdefaultattr group 5 - Logdateien Stromverbrauch
define FileLog_Strom_day FileLog /var/log/fhem/Strom/Stromz_day-%Y_%m.log Strom_Line_day
attr FileLog_Strom_day logtype text
# Format der Daten in Filelog YY-MM-DD HT-Verbrauch NT-Verbrauch Einspeisung
define Strom_Line dummy
attr Strom_Line room hidden
define FileLog_Strom FileLog /var/log/fhem/Strom/Stromz_sum-%Y_%m.log Strom_Line
attr FileLog_Strom logtype text
# Plot Definitionen -- verweis auf entsprechendes Gplot rw_power bzw rw_power_day
setdefaultattr group 4 - Stromverbrauch Diagram
define Diag_Strom_day SVG FileLog_Strom_day:rw_power_day:CURRENT
attr Diag_Strom_day label "Stromverbrauch je 15min"
#attr Diag_Strom_day fixedrange 2days
#define Diag_Strom SVG FileLog_Strom:rw_power:CURRENT
# attr Diag_Strom label "Stromverbrauch"
#attr Diag_Strom plotmode gnuplot-scroll-svg
setdefaultattr room hidden
# Log alle 15 min die akt Werte und am Ende des Tages jeden Tag den Wert
define n_Strom_Line_d at +*00:15:00 { rw_writeStromDayLog() }
attr n_Strom_Line_d alignTime 00:00:00
define n_Strom_Line at +*23:58:01 { rw_writeStromLog() }
attr n_Strom_Line alignTime 00:00:00
setdefaultattr
Der Perl Code:
###############################################################################
#
# Schreibe Stromzählerdaten
#
sub rw_writeStromDayLog()
{
# logfile /var/log/fhem/Strom/Stromz_day-%Y_%m.log
# im Standard Format über >Dummy geschrieben
my $pw= ReadingsVal("EDL300","power", 0 );
my $w1= ReadingsVal("EDL300","statTotal_consumption_Ch1Hour", 0 );
my $w2= ReadingsVal("EDL300","statTotal_consumption_Ch2Hour", 0 );
my $w3= ReadingsVal("EDL300","statTotal_feedHour", 0 );
my $einsp = 0;
my $verbr = 0;
if ($pw < 0)
{ $einsp = abs( $pw ) ; }
else
{ $verbr = $pw ; }
my $dat= sprintf("%.0f %.0f %.0f %.0f %.0f",$verbr,$einsp,$w1,$w2,$w3);
fhem ("set Strom_Line_day $dat");
}
sub rw_writeStromLog()
{
# logfile /var/log/fhem/Strom/Stromz_sum-%Y_%m.log
my $w1= ReadingsVal("EDL300","statTotal_consumption_Ch1Day", 0 )/1000;
my $w2= ReadingsVal("EDL300","statTotal_consumption_Ch2Day", 0 )/1000;
my $w3= ReadingsVal("EDL300","statTotal_feedDay", 0 )/1000;
my $z1= ReadingsVal("EDL300","total_consumption_Ch1", 0 )/1000;
my $z2= ReadingsVal("EDL300","total_consumption_Ch2", 0 )/1000;
my $z3= ReadingsVal("EDL300","total_feed", 0 )/1000;
my $dat= sprintf("%.0f %.0f %.0f %.0f %.0f %.0f\n",$w1,$w2,$w3,$z1,$z2,$z3);
fhem ("set Strom_Line $dat");
}
Und das Erbenis dann siehe Anhang