[gelöst] modbuszähler auslesen, bekomme aber keinen negativ wert

Begonnen von kores, 05 April 2015, 14:30:32

Vorheriges Thema - Nächstes Thema

kores

Hallo zusammen,

ich habe ein kleines problem und weis nicht weiter. Ich lese einen Zähler via Modus aus das klappt soweit auch ganz gut, aber wenn ich jetzt mit meiner PV-Anlage Strom Einspeise habe ich ja einen Negativwert z.b. -1500 Wh in FHEM wird dieser wert aber positiv angezeigt.

ich habe echt keinen Schimmer was ich machen soll/muss damit mir der wert negativ angezeigt wird

vielen dank im voraus für eure Hilfe

gruß Alex

Puschel74

Eventmonitor kennst du?
Was steht dort? Was im Logfile?
Warum frag ich eigentlich immer noch Sachen ab die im angepinnten Beitrag erklärt sind?
Vielleicht weil den Beitrag keiner liest oder versteht.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

kores

Hallo Puschel,

eventmonitor zeigt folgendes:
2015-04-05 15:47:32 ModbusRegister Bezug_Wh 4358.144
2015-04-05 15:47:32 ModbusRegister Bezug_Wh RAW: 80000042
2015-04-05 15:47:33 ModbusRegister Verbrauch_Wh 543.016
2015-04-05 15:47:33 ModbusRegister Verbrauch_Wh RAW: 000000084928

bei Bezug/Einspeisung sollte jetzt eigentlich ein Minus vor dem Wert stehen da ich den Strom ja ins Netz Einspeise.

Bezug und Einspeisung sind dasselbe Modbusregister und wenn ich direkt auf den Zähler schaue habe ich einen Negativwert nur leider nicht in FHEM.

hier mal zwei Bilder um das zu veranschaulichen.
(http://www.fotos-hochladen.net/uploads/bildschirmfotoqne0fi1gmw.png)

wie du siehst steht bei Bezug ein positiver wert.

(http://www.fotos-hochladen.net/uploads/bildschirmfotou2g5twdcho.png)

und hier siehst du bei Wirkleistung System einen Negativen Wert

hoffe ich konnte etwas licht ins dunkle bringen

Gruß Alex

Puschel74

Wenn das Minus nicht mitübertragen wird kann FHEM das auch nicht berücksichtigen.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisD

Hallo,

Welches Register hast du für Bezug verwendet ?

Der Bezug (Register 265 ?) ist die Energie (in Wh) die du aus dem Netz aufgenommen hast. Diese kann nicht negativ werden. Im unteren Screenshot ist die Wirkleistung (in W) zu sehen, diese wird negativ wenn du einspeist. Wenn du Register 37 ausliest sollte in FHEM der gleiche Wert wie unter 'Wirkleistung System' angezeigt werden.

Im Register 277 ist die Energie zu finden welche ins Netz eingespeist wird. Während du also einspeist sollte der Wert in Register 277 ansteigen. Die Differenz zwischen eingespeister und entnommener Energie ist eventuell in Register 1054 zu finden. Wenn du mehr einspeist als du entnimmst sollte dieser Wert negativ sein.

Grüße,

ChrisD

kores

Hallo ChrisD,

genau das ist ja mein Problem, ich lese Register 37 aus und der Wert wird immer positiv dargestellt, egal ob ich einspeise oder entnehme. Die anderen Register nutzen mir leider nichts, da ich die Echtzeitwerte brauche.

Ich habe noch ein paar andere Moduszähler hier, werde es mal mit diesen probieren, vielleicht ist es ja so wie Puschel sagt und das minus wird nicht mitübertragen.

vielen dank für deine Hilfe

gruß Alex

ChrisD

Hallo,

Laut Dokumentation wird ein Vorzeichen mit übertragen, allerdings in einem etwas ungewöhnlichen Format.

Ist Bezug_Wh Register 37 ?

Wenn ja, sieht es danach aus als ob ein Wort zu wenig übertragen wird, der RAW-Wert müsste 12 Stellen haben, er hat deren aber nur 8. Welchen Datentyp hast du für Register 37 eingestellt ?

Nach der Dokumentation könnte dies funktionieren:
attr Bezug_Wh plcDataType 3WORD_BE
attr Bezug_Wh userReadings Wirkleistung:RAW {my $v;; my $r=ReadingsVal("Bezug_Wh","RAW",0);; if(hex($r)>=hex(800000000000)) {$v=hex(800000000000)-hex($r)} else {$v=hex($r)};; $v/10000;; }


Grüße,

ChrisD

kores

Hallo ChrisD,

Ist Bezug_Wh Register 37  ja ist es
so sieht meine cfg aus

define Bezug_Wh ModbusRegister 0 37
attr Bezug_Wh IODev Zaehler_2
attr Bezug_Wh conversion 0.001:0
attr Bezug_Wh disableRegisterMapping 1
attr Bezug_Wh group Stromzaehler1
attr Bezug_Wh plcDataType DWORD

Ich habe jetzt deine Code eingefügt und es Funktioniert fast so wie es soll  ;D

so sieht meine cfg jetzt aus

define Bezug_Wh ModbusRegister 0 37
attr Bezug_Wh IODev Zaehler_2
attr Bezug_Wh conversion 0.001:0
attr Bezug_Wh disableRegisterMapping 1
attr Bezug_Wh group Stromzaehler1
attr Bezug_Wh plcDataType 3WORD_BE
attr Bezug_Wh userReadings Wirkleistung:RAW {my $v;; my $r=ReadingsVal("Bezug_Wh","RAW",0);; if(hex($r)>=hex(800000000000)) {$v=hex(800000000000)-hex($r)} else {$v=hex($r)};; $v/1000;; }

Reading mit Wirkleistung steht jetzt ein negativer wert und auch die richtige Leistung, aber bei Bezug_Wh steht jetzt z.b. 140737489719.606 sobald der Wert negativ wird. Ist der Wert positiv steht er richtig da.

vielen dank für deine Hilfe

gruß Alex

ChrisD

Hallo,

Kannst du die neue Version von ModbusRegister installieren und die Definition von Bezug_Wh so ändern:

define Bezug_Wh ModbusRegister 0 37
attr Bezug_Wh IODev Zaehler_2
attr Bezug_Wh conversion 0.001:0
attr Bezug_Wh disableRegisterMapping 1
attr Bezug_Wh group Stromzaehler1
attr Bezug_Wh plcDataType 3WORD_S_BE
attr Bezug_Wh negativeRepresentation flagged


Das userReading ist nicht mehr nötig und kann mit
deleteattr Bezug_Wh userReadings
deletereading Bezug_Wh Wirkleistung
gelöscht werden.

Grüße,

ChrisD

kores

Hallo chris,

erstmal vielen dank für deine Hilfe.

Ich habe die Datei aufgespielt und meine cfg. geändert, aber leider bekomme ich jetzt nur Fehlermeldungen im Eventmonitor.

2015-04-07 16:33:47 ModbusTCPServer Zaehler_2 UNKNOWNCODE ModbusRegister:0:37:3:3:32768:46:62425
2015-04-07 16:33:48 ModbusTCPServer Zaehler_1 UNKNOWNCODE ModbusRegister:0:37:3:2:0:3
2015-04-07 16:33:48 ModbusTCPServer Zaehler_2 UNKNOWNCODE ModbusRegister:0:37:3:3:32768:46:62425
2015-04-07 16:33:49 ModbusTCPServer Zaehler_1 UNKNOWNCODE ModbusRegister:0:37:3:2:0:3
2015-04-07 16:33:49 ModbusTCPServer Zaehler_2 UNKNOWNCODE ModbusRegister:0:37:3:3:32768:46:62425
2015-04-07 16:33:51 ModbusTCPServer Zaehler_1 UNKNOWNCODE ModbusRegister:0:37:3:2:0:3
2015-04-07 16:33:51 ModbusTCPServer Zaehler_2 UNKNOWNCODE ModbusRegister:0:37:3:3:32768:46:15178


gruss Alex

ChrisD

Hallo,

Ich konnte den Fehler bei mir leider nicht reproduzieren, kannst du überprüfen welche Version von ModbusTCPServer du verwendest und die Ausgabe vonlist Bezug_Whposten ?

Grüße,

ChrisD

kores

Hallo Chris,

ich habe folgende Version : $Id: 36_ModbusTCPServer.pm 0005 $ hoffe das ist die Versionsnummer  ???

mit List Bezug:Wh bekomme ich folgendes:

Internals:
   DEF        0 37
   IODev      Zaehler_2
   LASTInputDev Zaehler_2
   MSGCNT     1
   ModbusRegister_lastRcv 2015-04-07 16:51:52
   NAME       Bezug_Wh
   NR         29
   NTFY_ORDER 50-Bezug_Wh
   STATE      -3120.665
   TYPE       ModbusRegister
   Zaehler_2_MSGCNT 1
   Zaehler_2_TIME 2015-04-07 16:51:52
   Readings:
     2015-04-07 16:51:52   RAW             8000002f9e19
     2015-04-07 16:51:52   state           -3120.665
   Helper:
     addr       3 0 37
     address    37
     disableRegisterMapping 1
     lastUpdate 0
     nextUpdate 1428511157.8687
     nread      3
     readCmd    %
     register   37
     registerType 3
     unitId     0
     updateIntervall 0.1
     Cnv:
       a          0.001
       b          0
       max        140737488355.327
       min        -140737488355.328
       step       1000000000
Attributes:
   IODev      Zaehler_2
   conversion 0.001:0
   disableRegisterMapping 1
   group      Stromzaehler1
   negativeRepresentation flagged
   plcDataType 3WORD_S_BE


gruss Alex

ChrisD

Hallo,

Danke, das ist die Versionsnummer. Die von dir verwendete Version ist bereits etwas älter und funktioniert nicht mehr korrekt mit der aktuellen Version von ModbusRegister.

Kannst du ModbusTCPServer aktualisieren ?

update 36_ModbusTCPServer https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/mb/controls_modbus.txt
oder alternativ hier herunterladen.

Grüße,

ChrisD

kores

Hallo ChrisD,

vielen vielen Dank für deine Hilfe, jetzt läuft es so wie es soll.

Gruß Alex