sml OpenHAB Binding für eHZ Stromzähler

  • Hallo zusammen,


    ich habe für OpenHAB ein rudimentäres sml-Binding geschrieben, siehe dazu auch https://groups.google.com/forum/#!topic/openhab/zMUJ102ZH6s


    Beim Auslesen meines Zweirichtungs eHZ Stromzählers habe ich nun das Problem, dass sowohl die Einspeisung als auch der Bezug im Wirkleistungszähler positiv ausgegeben werden. Bei hohen Beträgen kann ich durch einen Vergleich mit dem vorigen Wert der Stromzähler herleiten, ob der Wert nun Einspeisung oder Bezug sein soll - aber das kann's ja nicht sein. Kann mir da jemand weiterhelfen?


    Außerdem bitte ich um freiwillige Tester (und Entwickler) für das Binding...


    Gruß
    DocZoid

  • Ja das meinte ich - schlecht formuliert - mit "über den vorigen Wert des Stromzählers herleiten". Je nachdem, welcher Zählerstande (1.8.0 oder 2.8.0) hoch zählt, ist es Verbrauch oder Einspeisung. Außerdem habe ich die PV-Leistung separat zur Verfügung, d.h. wenn die Stromzähler-Leistung > PV-Leistung ist, dann ist es immer Verbrauch. Aber das alles funktioniert nicht bei kleinen Werten zwischen -250 und +250 W. Der Zählerstand ändert sich dann nicht bei jeder Ablesung, und diese Werte sind tagsüber häufig unter der Generatorleistung. Außerdem ist das alles "getüddelt", kann man nicht den eHZ irgendwie konfigurieren, dass er einen "signed" Wertebereich ausspuckt, oder Bezugs- und Einspeisungs-Werte getrennt liefert, oder sowas? Das ist doch Käse so!

  • Hallo und guten Morgen,


    kannst Du mir bitte mal die Rohdaten schicken (Also: 1B 1B 1B 1B 01 01 .......) Am besten zum Zeitpunkt der Einspeisung. Dann kann ich Dir vielleicht helfen.


    Welchen Zähler hast Du denn?


    Danke und Gruß


    Armin

  • Hi Armin,


    ich habe einen itron HZ2-C50D-E1-A, weiß nicht ob der zur Gattung ACE3000 gehört.


    Hier ein Auszug aus dem Logging, an dem ziemlich sicher eingespeist wurde (Logausgabe meines Bindings mit den extrahierten Werten, zu dem Zeitpunkt lieferte die PV-Anlage 5096W, und wegen Kellertrocknung habe ich derzeit eine Grundlast von knapp 3KW) :
    14:40:35.729 TRACE o.o.b.sml.internal.SmlDevice[:187]- Received sml frame '1B1B1B1B01010101760900000000027CD0236201620072630101760101090000000000D4455B0B0901495452000003A9D9010163CAE900760900000000027CD024620262007263070177010B0901495452000003A9D90172620165014065D67A77078181C78203FF01010101044954520177070100000009FF010101010B0901495452000003A9D90177070100010800FF65000000A201621E52FF6900000000025E647C0177070100010801FF0101621E52FF6900000000025DAC500177070100010802FF0101621E52FF6900000000000027100177070100020800FF65000000A201621E52FF690000000001A7145A0177070100020801FF0101621E52FF690000000001A6ED4A0177070100020802FF0101621E52FF69000000000000271001770701000F0700FF0101621B520065000008860177078181C78205FF010101018302DE66E46911FD0C7D5D5816A7AFB3216E3ED9D51E9AB1E94CFD709E0B058EAF39C8C5F0DCDD434F15F81F19E6184A344401010163CC7000760900000000027CD0256203620072630201710163E2DE0000001B1B1B1B1A022271' on serial port /dev/ttyUSB0
    14:40:35.739 TRACE o.o.b.sml.internal.SmlDevice[:188]- Values: extractCurrentPower '2182', extractToPlantPower '2771.6938', extractFromPlantPower '3969.3392'


    Ich mache mich mal schlau, was man an diesem Zähler über die optische Schnittstelle konfigurieren kann...

  • Hallo DocZoid,


    ich habe Deine Daten mit dem von mir hier im Photovoltaikforum geposteten Excel Tool geparsed. Deine Daten und das Excel inklusive dem VBA Code findest Du hier:


    http://www.montigny.info/smldoczoid.zip


    In den SML codierten Daten, die Du gespostet hast findet sich nur einmal ein Wert mit einer Leistung: 2182W. Der Wert wird vom Zähler erschütternderweise als "unsigned integer" ausgegeben. Damit kannst Du die Stromflussrichtung nicht detektieren. Sonst habe ich auch nur Zählerdaten gesehen. Keinen weiteren Hinweis auf die Stromflussrichtung.


    Schau mal in das Excel. Da sind die Daten im Debug Output drin.


    Sollte zu diesem Zeitpunkt wirklich eingespeist worden sein, dann sehe ich schwarz. Vielleicht ändert sich das Vorzeichen ja, wenn was verbraucht wird. Glaube ich aber nicht.


    Sorry, aber hier kann ich Dir nicht weiterhelfen.


    Gruß


    Armin


  • Verständlich?


    Ich bin mir nicht ganz sicher was "Value Signature" ist, prüfe mal ob sich das vielleicht ändert...



    mfg JAU

    No Shift - No Service

  • Hallo JAU,


    ich bin mir nicht sicher, warum Du Deinen letzten Post gemacht hast. Garantiert mit guter Absicht. Aber ich befürchte, das Ergebnis ist eher verwirrend. Daher noch mal:


    Wie bereits geschrieben, habe ich die Daten analysiert. In meiner Excel Datei, die angehängt war, findet sich ein in VBA programmierter Recursive Descent Parser. Die ankommenden Bytes werden vom Lexer zuerst in Tokens zerlegt. Dann findet ein Matching gegen die in dem Doument "SML, Smart Message Language, Version 1.03 vom 12. November 2008" definierte Grammatik statt.


    Der Output des Tokenizers, sowie die dekodierten Messages sind in dem Worksheet "DebOut_F_doczoid.txt" Byte für Byte dargestellt. Ich habe das auch noch in die unten angehängte Code Box gepasted. Damit es klar wird.


    Man kann erkennen, das in der 2. SML Message des SML Files ein ListResponse Message Body erscheint. Dieser enthält 10 valLists / SML_List Entries. Der neunte Eintrag hierin enthält den objName (OBIS Kennziffer) "01 00 0F 07 00 FF", der die Leistung kennzeichnet. Dort findet man als Unit den Wert 27. Also W für Watt. Noch mal zur Errinerung: Die Werte für Unit sind in der "COSEM interface classes and OBIS identification system" der COSEM spezifiziert.


    Die "valueSignature" vom Typ "SML_Signature OPTIONAL" hat natürlich nichts mit einem Vorzeichen zu tun. Sie kann bei Bedarf zum Schutz von Werten verwendet werden. Sie ist aber optional. Und das zugeörige TL Byte (Type-Length-Field) hat auch den Wert "01", was "optional", also in diesem Fall "Nicht verwendet" bedeutet.


    Also muss bestimmt niemand die valueSignature beobachten.


    Und wie bereits geschrieben. Das TL Byte für den "value" ist 65. Das bedeutet ein 4 Byte unsigned integer. Somit können leider keine negativen Werte für die Leistung dargestellt werden.


    Die einzige Hoffnung wäre, dass der Zähler sich merkwürdig benimmt und tatsächlich im einspeisenden Fall (oder umgekehrt) sein Protokoll ändert und auf einmal eine 55 ausgeben würde. Hmm, eher unwahrscheinlich.


    Es tut mir leid. dass ich keine besseren Nachrichten verbreiten kann.


    Gruß


    Armin




  • Ich hatte mit der Arbeit angefangen bevor dein Beitrag online war und das Ergebnis war mir zu schade zum Wegwerfen. Hat etwas gedauert weil ich abgelenkt wurde und weil ich es von Hand mache um es auch selbst besser zu verstehen.



    mfg JAU

    No Shift - No Service

  • Danke euch beiden - ich hatte sowas befürchtet. Ist hier tatsächlich einfach der Zähler so schlecht? Ich habe im Internet ein Beispiel gefunden, wo an der Stelle dann eben eine negative Zahl ausgegeben wurde. Macht ja auch Sinn.


    Ich habe nach wie vor die Hoffnung, dass man das im Zähler konfigurieren kann - entweder über einen Upload von Parametern über die optische Schnittstelle (wobei die End-User-Schnittstelle früher wohl nur Unidirektional war), oder über die Lichtimpuls-Konfiguration. Zu beidem habe ich bisher keine Beschreibung gefunden.


    Danke auf jeden Fall für eure Einschätzung. Wenn ihr in Java fit seid und Lust dazu habt könnt ihr ja gerne mal meinen SmlParser im Binding verbessern, ich habe den CRC nicht fertig gestellt und überhaupt suche ich mit RegEx statt zu parsen ;-) - aber es klappt...