[OBIS V2] - Jetzt auch mit SML-Unterstützung

Begonnen von Icinger, 08 April 2016, 19:54:44

Vorheriges Thema - Nächstes Thema

Heiner

Danke gvzdus fuer deine Einschaetzung.

Das Datenblatt sagt zu dem Zaehler:
ZitatKommunikation
eHZ-Datentelegramme können mittels eines optischen Auslesekopfs nach DIN EN 62056-21 über die serielle Schnittstelle eines PC ausgelesen werden. Erforderlich ist ein Programm zur Darstellung serieller Daten, z.B. Windows »Hyperterminal« (hypertrm.exe). Einstellung: 9600 bd, Datenbit = 7, Parität = gerade, Stoppbits = 1, Flusssteuerung = kein. Im Fall des SML-Datentelegramms ist zur Interpretation der Daten ein Parser erforderlich und die Einstellung ist: 9600 bd, Datenbit = 8, Parität = kein, Stoppbits = 1, Flusssteuerung = kein.

habe auch beides erfolglose probiert also mit Standard (7,E,1) als auch mit SML (8,N,1)
8,N,0 wir leider nicht am ESP Easy angeboten.

Ich hab nun auch mal das Kabel am Lesekopf getauscht und ein abgeschirmetes genommen, allerdings auch ohne Erfolg.  :'(
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Heiner

Hi,

ich habe herausgefunden das es konstant !! nur einige Zeichen sind!!,  die falsch gelesen werden.

Die Zeichen H, A, G, e, Z, 9, 5, 0 werden immer richtig gelesen aber die Zeichen 1,2 immer falsch.

die 1 sollte Hex 31 sein, es kommt aber Hex immer b1 an.

Binaer waere richtig 0011 0001, es kommt aber 1011 0001.

Bei der 5 klappts aber immer richtig 0011 0101.


Soweit so klar, aber warum? und was kann ich dagegen tun?
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

immi

Zitat von: Heiner am 30 Juli 2021, 11:44:16
Soweit so klar, aber warum? und was kann ich dagegen tun?
You went very far with "0011 0001 vs 1011 0001"
With an oscilloscope, you could debug it quite easily and implement one of the following options
- use a esp32 with harware serial
- different pin on esp8266 for softserial
- small pull-down to gnd (additional high resistance to gnd) at the pin of the esp8266
- schmitt trigger to clean up the signal before the pin of the esp8266
- add some capacitors to make more stable the voltage supply of the esp and of the IR-converter

Heiner

Hi Immi,

initialy I thought of the noise as per your adivse but even the shielded cable did not help. I tried as well various Pins on the 8266, even went back to try HW Serial....

But as I almost constantly See that the same charactars get read accuratly, this can not be noise. In the entire log always the same figures get read but the character "1" and "2" never !!!

I will try next a ESP32, just in case the 8266 is broken and generate somehow always this same problem. I keep you posted.
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

gvzdus

Bist Du jetzt auf 7E1 oder 8N1? Bei 7E1 sollte ja gar kein "Bit 7" gesetzt sein können!

Heiner

Hi,
i have only trouble with ESP Easy :-[
Whilst I was able to flash it on 8266 and code ser2net - it prodcued errors.
My brand new ESP32 I am unable to flash.

I tried then Tasmota and got via HWSerial and MQTT the exact clean Code transmitted which is wanted:

19:03:48.540 MQT: tasmota/RESULT = {"SSerialReceived":"/HAG5eHZ01xx_RWE1ZAxx"}
19:03:48.575 MQT: tasmota/RESULT = {"SSerialReceived":"1-0:0.0.0*255(797802-5011453)"}
19:03:48.605 MQT: tasmota/RESULT = {"SSerialReceived":"1-0:1.8.1*255(027028.4943)"}
19:03:48.633 MQT: tasmota/RESULT = {"SSerialReceived":"1-0:2.8.1*255(035059.7362)"}
19:03:48.654 MQT: tasmota/RESULT = {"SSerialReceived":"1-0:96.5.5*255(82)"}
19:03:48.686 MQT: tasmota/RESULT = {"SSerialReceived":"0-0:96.1.255*255(0000208xxx)"}
19:03:48.691 MQT: tasmota/RESULT = {"SSerialReceived":"!"}


unfortuniatly access only via MQTT and messages transmitted any second, this is too much trafic in the Network and too much information in the filelog.
However it shows the 8266 via HW Serial does recieve the right info and can forward it.

I strugle now to extract the MQTT into meaningfull readings as well as with the high traffic.

May be best to code something directly with Arduino, something more compact and hopefully working.
Does anyone has any further idea?

Many Thanks for helping
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

gvzdus

Okay, also das Fehlerproblem ist gelöst (bzw.: Ein Workaround da).
Filelog kann man abstellen.
Die Meßrate ist so hoch wie sie ist: Der Zähler wirft es eben in der Frequenz raus. Wenn Du weniger Daten haben möchtest, kannst Du das z.B. mit dem eventaggregator-Attribut erreichen.

Was ich Dir anbieten kann, ist, am Modul so zu schrauben, dass Du die MQTT-Events mit einem notify etc. in das OBIS-Modul reinwirfst und sie dort dekodiert werden. So etwas hatte ich schon mal vorbereitet.

Heiner

Hi, das waere sicher eine super Sache.

Ich ba noch ein wenig weiter getestet.
In Tasmota bekomme ich auch nur den HW Serial so ans laufen nicht aber andere Pins ueber SoftwareSerial.
In ESPEasy bekomme ich nur ueber SoftwareSerial einen Fehlerhaften output aber nix ueber HW Serial.

Ich sollte so vermutlich bei Tasmota bleiben und die MQTT Daten versuchen zu verwerten.

Du sagst mit einem Notify (auf eingehende Message) also jede Sekunde, wird der MQTT Datensatz der im Reading SSerialRecieved ankommt interpretiert, richtig?
Oder kann man MQTT noch irgendwie so strukturieren das er 7 verschiedene Readings auswirft? Das hab ich leider nicht hinbekommen, würde aber helfen Events zu aggregieren.
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Heiner

Hi,

@GVZDUS  bitte keinen Aufwand mehr in den MQTT import nach OBIS fuer mich stecken.

Ich habs final geschafft ( mit Web-Flasher meinen ESP32 mit ESP Easy zu flashen und mit HW Serial2 bekomme ich fehlerfreie Daten. Das Obis Device kanns lesen, alles funktioniert einwandfrei.

Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

gvzdus


Heiner

Hi,
Hi ich habe einen Stromzaehler erfolgreich per OBIS connected.
Leider zeigt dieser nicht die Momentanleistung sondern nur Zaehlerstaende

Das Statisitice modul kann mir leider nur das Stundenmittel liefern.

Ich versuche nun ueber min intervall 300 auf das 5 Minuten mittel zukommen das Multipliziert mit 12 die Durchschnittsleistung zeigen sollte.

Eigentlich sollte das hier klappen, liefert aber gar nichts, nicht mal einen Fehler.

power difference {ReadingsVal("Stromzaehler","total_consumption_Ch1",0)*12;;}

total_consumption_Ch1 liefert aber brav alle 5 minuten ein geaendertes Reading im Device Stromzaehler.

Was mach ich falsch, steht doch auch so im Hilfstext unter user Readings..... :-\

Danke fuer Eure Hilfe

Heiner

Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

gvzdus

Moin, hast Du denn den Zähler entsperrt / die PIN "reingeblinkt"? Wie genau ist die "total_consumption"-Anzeige? Normalerweise geht sie bei den Geräten, die ich gesehen habe, auf 0,1 Wh (nicht: kWh) genau.

Heiner

Mein Zaehler ist etwas aelter und hat noch keine PIN, auch der Betreiber hat mir das leider bestaetigt. Es gibt aber die IR Schnittstelle mit den Zaehlerstaenden, ist ein Zweirichtungszaehler. Der readingname ist der Verbrauch, das gleiche gibts noch als Einspeisung. Aber eben nur als Zaehlerstand, der wird sekuendlich mit vielen nachkommastellen uebermittelt
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

gvzdus

Entschuldige, dass etwas Zeit vergangen ist. Ich fühle mich auch nicht so zuständig als OBIS-Maintainer, weil es ja nicht um das Auslesen geht.
Ich selber bin Programmierer, deswegen nutze ich ungerne Module, die etwas Bestimmtes können, wenn ich das Gleiche auch mit ein paar Zeilen Code erschlagen kann.

Grundansatz:
3 "Devices":
a) Ein dummy-Device, dass die Werte "letzter Stand" und "Watt" aufnimmt
b) ein Filelog-Device, damit die Daten auf Platte landen
c) ein "at"-Job, der regelmäßig den Zähler ausliest.

Sieht dann so aus:
defmod power5min dummy
defmod FileLog_Verbrauch_5min FileLog ./log/stromverbrauch5min-%Y.log power5min


Und der Job:
defmod power5minjob at +*00:05:00 {\
my $power5min = $defs{"power5min"};;\
my $whneu=ReadingsVal("MT175","total_consumption","--");;\
my $whalt=ReadingsVal("power5min","kwh","--");;\
my $watt=$whalt>0 ? sprintf("%.1f", ($whneu-$whalt)*12) : 0;;\
my $fwhneu=ReadingsVal("MT175","total_feed","--");;\
my $fwhalt=ReadingsVal("power5min","kwhfeed","--");;\
my $fwatt=$fwhalt>0 ? sprintf("%.1f", ($fwhneu-$fwhalt)*12) : 0;;\
readingsBeginUpdate($power5min);;\
readingsBulkUpdate($power5min, "kwh", $whneu);;\
readingsBulkUpdate($power5min, "watt", $watt);;\
readingsBulkUpdate($power5min, "kwhfeed", $fwhneu);;\
readingsBulkUpdate($power5min, "wattfeed", $fwatt);;\
readingsEndUpdate($power5min, 1);;\
}


Wie unschwer zu erraten ist: "MT175" ist der Device-Name meines OBIS-Zählers. Auslesen werden "total_feed" und "total_consumption". Der Rest wird dann ausgerechnet.

gvzdus

OpenWB

Ich habe heute meine OpenWB-Wallbox angebunden, und es war ein Klacks. "Wir FHEMler" sparen uns ja mit dem OBIS-Lesekopf dann Technik, die anderswo 3-stellig kostet.

Die OpenWB möchte von Haus aus bis zu 3 Anbindungen haben:

  • Der Netzübergang (vulgo: Zähler)
  • Die PV-Erzeugung
  • Die Daten eines Speichers

Wer das OBIS-Modul nutzt, hat das eigentlich flott konfiguriert. Der Netzübergang nennt sich "EVU-Modul" in der OpenWB-Welt. Man kann auch eine Lösung über MQTT wählen, ich habe mich aber für das generische HTTP-Modul entschieden.

Zunächst einmal muss man dafür einen Zugang zu FHEM ohne CSRF-Token konfigurieren, damit die OpenWB per HTTP abfragen kann. Das habe ich so gelöst:

defmod WEBopenwb FHEMWEB 8085 global
attr WEBopenwb allowfrom 192.168.0.106
attr WEBopenwb csrfToken none


Ich habe also auf Port 8085 einen weiteren Listener gestartet, der ohne csrfToken arbeitet, aber nur von der IP der OpenWB (hier: 192.168.0.106) erreichbar ist. Ich würde empfehlen, das "allowfrom" erst nach dem Testen zu setzen.

Die OpenWB möchte folgende Werte optimalerweise wissen:


  • Watt-Bezug ("Momentanverbrauch", "power" normalerweise im OBIS-Modul)
  • Wh-Bezug ("Zählerstand", "total_consumption" im OBIS-Modul)
  • Wh-Einspeisung ("Zählerstand", "total_feed" im OBIS-Modul)
  • Sowie die Ampere-Zahlen auf den Phasen (liefert mein Zähler nicht, aber er liefert Watt, also das 230-fache)

Falls Ihr also die Werte "power", "total_consumption", "total_feed" und vielleicht sogar "power_L1/L2/L3" habt, sieht eine vollständige URL-Tabelle so aus (meine FHEM-IP 192.168.0.3 natürlich geeignet ersetzen, und mein Zähler heißt als Device MT175):

Watt-Bezug:
http://192.168.0.3:8085/fhem?XHR=1&cmd=%7Bint(ReadingsVal(%22MT175%22,%22power%22,0))%7D

Wh-Bezug:
http://192.168.0.3:8085/fhem?XHR=1&cmd=%7Bint(ReadingsVal(%22MT175%22,%22total_consumption%22,0))%7D

Wh-Einspeisung:
http://192.168.0.3:8085/fhem?XHR=1&cmd=%7Bint(ReadingsVal(%22MT175%22,%22total_feed%22,0))%7D

Und bei den Phasen befindet sich noch die Division durch 230 (Volt) in der URL, um von Watt auf Ampere z kommen:
http://192.168.0.3:8085/fhem?XHR=1&cmd=%7Bint(ReadingsVal(%22MT175%22,%22power_L1%22,0)%2f230)%7D

Das kann man, solange "allowfrom" noch nicht gesetzt ist, per curl von einer Shell aus testen:

curl "http://192.168.0.3:8085/fhem?XHR=1&cmd=%7Bint(ReadingsVal(%22MT175%22,%22power%22,0))%7D"


Es darf dann nur genau eine Zahl zurück kommen!
Ähnlich lässt sich auch ein an FHEM angebundener Wechselrichter auslesen - aber das führe ich hier jetzt nicht aus.