Neue Versionen und Support zum Modbus-Modul

Begonnen von StefanStrobel, 20 August 2017, 12:11:08

Vorheriges Thema - Nächstes Thema

StefanStrobel

Hallo Manfred,

wie Du vermutlich zwei Zeilen weiter im Code schon gelesen hast:

# todo: check if tcp or serial to allow sharing of a tcp connection iodev for multiple devices
# e.g. to a gateway


ist das eine offene Aufgabe ;-)
Die Anfrage dass man Verbindungen für mehrere Geräte über eine gemeinsame TCP-Verbindung schieben kann, kam schon mal und bei der letzten größeren Überarbeitung des Moduls habe ich versucht, die Voraussetzungen dafür zu schaffen, ohne das wirklich zu Ende zu bringen. Dann kamen andere Projekte dazwischen ;-)
Dass es jetzt schon mit so einer kleinen Änderung funktioniert, überrascht mich selbst ein wenig. Ich werde das aber zum Anlass nehmen und den Rest vollends einbauen bzw. suchen wo es noch zu Problemen kommen könnte.
Das kann aber noch eine Weile dauern und bis dahin kannst Du ja mal weiter beobachten, ob es mit Deiner Lösung noch Probleme gibt.

Gruss
   Stefan

mBielemeier

Hallo Stefan,

danke für die Antwort. Ich habe jetzt für das Modbus-Modul die Statistik aktiviert und bei 7-8 Requests je Minute auf 3 IDs kene Timeouts oder Disconnects.

Die Wallbox bietet auch noch einen zweiten TCP-Modbus mit 3 IDs. Den habe ich auch noch aktiviert und scheinbar läuft es fehlerfrei. Ich beobachte das weiter.

Vielen Dank für das Modul, darüber habe ich jetzt meine Stromzähler und den Gaszähler angeschlossen :)

Viele Grüße,
Manfred
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

StefanStrobel

Hallo Manfred,

schau doch mal ob diese kleine Änderung schon ausreicht:


    if ($dev =~ /\:[\d]+/) {
        $ioHash->{TCPConn} = 1;
    } else {
        $ioHash->{SerialConn} = 1;   
    }


Gruss
   Stefan

mBielemeier

Hallo Stefan,

ich habe aus DefineLDFn noch die Bereinigung von SerialConn und TCPConn übernommen. Auch ein Standard-Port wird da gesetzt, wenn nicht explizit angegeben. Wenn das erhalten bleiben soll, wäre die Abfrage nicht passend. Sehe ich richtig, dass bei serieller Verbindung immer "@<Geschwindigkeit>". Dann könnte das "@" als Unterscheidung genommen werden, denn das gibt es weder in IP-Adressen noch in URI-Adressen. Getestet mit 192.168.178.100, 192.168.178.100:4000, /dev/ttyUSB1@9600 und /dev/ttyUSB2@38400,8,E,2 .

if ($dev !~ /@[\d]+/) {
    $ioHash->{TCPConn} = 1;
    $dev .= ':502' if ($dev !~ /.*:[0-9]/);   # add default port if no port specified
    delete $ioHash->{SerialConn};
} else {
    $ioHash->{SerialConn} = 1;   
    delete $ioHash->{TCPConn};
}


Es laufen weiter 2 TCP-Proxys gleichzeitig auf einer Adresse mit zwei Ports fehlerfrei. Gemischten Betrieb Seriell / TCP kann ich leider nicht testen.

Viele Grüße,
Manfred
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

StefanStrobel

Hallo Manfred,

Du hast recht, eigentlich müsste die serielle Geschwindigkeit immer angegeben werden.
Ich übernehme Deine Änderung (allerdings in umgedrehter Logik) und hoffe, dass wir nichts übersehen.
Dann fehlt noch eine Ergänzung in der Commandref und im Wiki ...

Gruss
   Stefan

hasenhirn

#845
Hallo und guten Morgen :-)

als erstes einmal danke an Stefan für das tolle Modbus-Modul und den super Support!!!

Nun zu meinem "Problem":
Nach einem Firmwareupdate kann meine Keba-Wallbox Modbus  ;D

Ich habe mich jetzt mal an die Umsetzung gemacht und dank dem Wiki, den Beiträgen und dem Forum bin ich ( wie ich finde ) schon ganz gut voran gekommen. An einer Stelle hakt es aber und da bräuchte ich einen guten Tipp.
Bei der Adresse 5014 - Enable/Disable charging station steht 0: Disable charging station und 1: Enable charging station.
Leider ist das der Punkt an dem ich nicht weiter komme. Die Wallbox läuft immer durch und ich bekomme den Ladevorgang nicht unterbrochen  >:(
Alle anderen Funktionen sind ok und bringen die Werte die ich erwarte.
Als Konfiguration habe ich schon obj-h05014-reading und obj-c05014-reading versucht wobei bei obj-c05014-reading die Fehlermeldung "Timeout in Readanswer" kommt.
Hier mal eine paar Informationen über meine Konfiguration und die Logeinträge.

defmod Keba_Stellplatz ModbusAttr 1 10 192.168.1.22:502 TCP
attr Keba_Stellplatz dev-h-defPoll 1
attr Keba_Stellplatz event-min-interval .*:60
attr Keba_Stellplatz event-on-change-reading .*
attr Keba_Stellplatz obj-h01000-len 2
attr Keba_Stellplatz obj-h01000-map 0:booting, 1:not ready for charging, 2:ready for chargin, 3:charging, 4:error, 5:charging process interrupted
attr Keba_Stellplatz obj-h01000-reading Chargingstate
attr Keba_Stellplatz obj-h01000-unpack N
attr Keba_Stellplatz obj-h01004-len 2
attr Keba_Stellplatz obj-h01004-map 0:no cable is plugged, 1:Cable is connected to charging station, 3:Cabel is connected to the charging station and locked, 5:Cable is connected to the charging station and the EV, 7:Cable is connected to the charging station and the EV an locked
attr Keba_Stellplatz obj-h01004-reading Cablestate
attr Keba_Stellplatz obj-h01004-unpack N
attr Keba_Stellplatz obj-h01006-len 2
attr Keba_Stellplatz obj-h01006-map 0:No error
attr Keba_Stellplatz obj-h01006-reading Error_code
attr Keba_Stellplatz obj-h01006-unpack N
attr Keba_Stellplatz obj-h01008-expr $val / 1000
attr Keba_Stellplatz obj-h01008-format %.3f A
attr Keba_Stellplatz obj-h01008-len 2
attr Keba_Stellplatz obj-h01008-reading Charging_current_phase_1
attr Keba_Stellplatz obj-h01008-unpack N
attr Keba_Stellplatz obj-h01010-expr $val / 1000
attr Keba_Stellplatz obj-h01010-format %.3f A
attr Keba_Stellplatz obj-h01010-len 2
attr Keba_Stellplatz obj-h01010-reading Charging_current_phase_2
attr Keba_Stellplatz obj-h01010-unpack N
attr Keba_Stellplatz obj-h01012-expr $val / 1000
attr Keba_Stellplatz obj-h01012-format %.3f A
attr Keba_Stellplatz obj-h01012-len 2
attr Keba_Stellplatz obj-h01012-reading Charging_current_phase_3
attr Keba_Stellplatz obj-h01012-unpack N
attr Keba_Stellplatz obj-h01014-len 2
attr Keba_Stellplatz obj-h01014-reading Serialnumber
attr Keba_Stellplatz obj-h01014-unpack N
attr Keba_Stellplatz obj-h01016-len 2
attr Keba_Stellplatz obj-h01016-reading Producttype
attr Keba_Stellplatz obj-h01016-unpack N
attr Keba_Stellplatz obj-h01018-len 2
attr Keba_Stellplatz obj-h01018-reading Firmwareversion
attr Keba_Stellplatz obj-h01018-unpack N
attr Keba_Stellplatz obj-h01020-expr $val / 1000
attr Keba_Stellplatz obj-h01020-format %.3f W
attr Keba_Stellplatz obj-h01020-len 2
attr Keba_Stellplatz obj-h01020-reading Active_power
attr Keba_Stellplatz obj-h01020-unpack N
attr Keba_Stellplatz obj-h01036-expr $val / 1000
attr Keba_Stellplatz obj-h01036-format %.3f kWh
attr Keba_Stellplatz obj-h01036-len 2
attr Keba_Stellplatz obj-h01036-reading Total_energy
attr Keba_Stellplatz obj-h01036-unpack N
attr Keba_Stellplatz obj-h01040-format %.1f V
attr Keba_Stellplatz obj-h01040-len 2
attr Keba_Stellplatz obj-h01040-reading Voltage_phase_1
attr Keba_Stellplatz obj-h01040-unpack N
attr Keba_Stellplatz obj-h01042-format %.1f V
attr Keba_Stellplatz obj-h01042-len 2
attr Keba_Stellplatz obj-h01042-reading Voltage_phase_2
attr Keba_Stellplatz obj-h01042-unpack N
attr Keba_Stellplatz obj-h01044-format %.1f V
attr Keba_Stellplatz obj-h01044-len 2
attr Keba_Stellplatz obj-h01044-reading Voltage_phase_3
attr Keba_Stellplatz obj-h01044-unpack N
attr Keba_Stellplatz obj-h01046-expr $val / 10
attr Keba_Stellplatz obj-h01046-format %.1f %
attr Keba_Stellplatz obj-h01046-len 2
attr Keba_Stellplatz obj-h01046-reading Powerfactor
attr Keba_Stellplatz obj-h01046-unpack N
attr Keba_Stellplatz obj-h01100-expr $val / 1000
attr Keba_Stellplatz obj-h01100-format %d A
attr Keba_Stellplatz obj-h01100-len 2
attr Keba_Stellplatz obj-h01100-reading Max_charging_current
attr Keba_Stellplatz obj-h01100-unpack N
attr Keba_Stellplatz obj-h01110-expr $val / 1000
attr Keba_Stellplatz obj-h01110-format %d A
attr Keba_Stellplatz obj-h01110-len 2
attr Keba_Stellplatz obj-h01110-reading Max_supported_current
attr Keba_Stellplatz obj-h01110-unpack N
attr Keba_Stellplatz obj-h05004-expr $val / 1000
attr Keba_Stellplatz obj-h05004-format %.3f A
attr Keba_Stellplatz obj-h05004-max 63
attr Keba_Stellplatz obj-h05004-min 6
attr Keba_Stellplatz obj-h05004-reading Set_charging_current
attr Keba_Stellplatz obj-h05004-set 1
attr Keba_Stellplatz obj-h05004-setexpr $val * 1000
attr Keba_Stellplatz obj-h05010-reading Set_energy
attr Keba_Stellplatz obj-h05010-set 1
attr Keba_Stellplatz obj-h05010-unpack N
attr Keba_Stellplatz obj-h05012-reading Unlock_plug
attr Keba_Stellplatz obj-h05012-set 1
attr Keba_Stellplatz obj-h05014-reading Enable/Disable_charging_station
attr Keba_Stellplatz obj-h05014-set 1
attr Keba_Stellplatz verbose 5

setstate Keba_Stellplatz opened
setstate Keba_Stellplatz 2021-10-23 11:58:57 Active_power 4205.857 W
setstate Keba_Stellplatz 2021-10-23 11:58:56 Cablestate Cable is connected to the charging station and the EV an locked
setstate Keba_Stellplatz 2021-10-23 11:58:56 Charging_current_phase_1 6.107 A
setstate Keba_Stellplatz 2021-10-23 11:58:56 Charging_current_phase_2 6.112 A
setstate Keba_Stellplatz 2021-10-23 11:58:56 Charging_current_phase_3 6.115 A
setstate Keba_Stellplatz 2021-10-23 11:58:56 Chargingstate charging
setstate Keba_Stellplatz 2021-10-23 11:58:44 Enable/Disable_charging_station 0
setstate Keba_Stellplatz 2021-10-23 11:58:56 Error_code No error
setstate Keba_Stellplatz 2021-10-23 11:58:57 Firmwareversion 50993920
setstate Keba_Stellplatz 2021-10-23 11:58:58 Max_charging_current 6 A
setstate Keba_Stellplatz 2021-10-23 11:58:58 Max_supported_current 16 A
setstate Keba_Stellplatz 2021-10-23 11:58:58 Powerfactor 99.5 %
setstate Keba_Stellplatz 2021-10-23 11:58:57 Producttype 314121
setstate Keba_Stellplatz 2021-10-23 11:58:57 Serialnumber 22218033
setstate Keba_Stellplatz 2021-10-23 11:54:48 Set_charging_current 6.000 A
setstate Keba_Stellplatz 2021-10-23 11:58:57 Total_energy 1127.018 kWh
setstate Keba_Stellplatz 2021-10-23 11:58:57 Voltage_phase_1 229.0 V
setstate Keba_Stellplatz 2021-10-23 11:58:57 Voltage_phase_2 230.0 V
setstate Keba_Stellplatz 2021-10-23 11:58:57 Voltage_phase_3 230.0 V
setstate Keba_Stellplatz 2021-10-23 11:56:14 state opened


Hier gibt es die Programmieranleitung zur Keba-Wallbox:
https://www.keba.com/download/x/dea7ae6b84/kecontactp30modbustcp_pgen.pdf

Ich hoffe mit den Informationen kann mir jemand weiter helfen  :)

LG

Thomas

StefanStrobel

Hallo Thomas,

laut Log wird der Wert 0 oder 1 korrekt geschrieben. Da uint16 als Typ angegeben wird, muss es auch ein Holding Register sein. Ein Coil wäre ja nur ein einzelnes Bit. Warum die Wallbox das dann nicht umsetzt kann ich nicht sagen. Da würde ich mal den Hersteller fragen.

Gruss
   Stefan

hasenhirn

Hallo Stefan,

danke für die Info und deine Mühe.
Ich habe die 2te Wallbox auch gerade von UDP auf Modbus umgestellt und probiere mal ob es an der Box liegt.
Wenn ich neue Erkenntnisse habe melde ich mich noch mal  ;)

LG

Thomas

hasenhirn

@ Stefan
Satz mit x, das war wohl nix  >:(
Es  scheint, wie Du schon richtig vermutet hast, an der Wallbox zu liegen.
Ich habe jetzt mal den Support angeschrieben was die dazu meinen. Da bin ich mal gespannt.
Mal schauen wie es weiter geht.
Da per Modbus aber viel weniger Daten abgefragt werden würde ich lieber wieder auf UDP wechseln, aber da funktioniert das Modul nur mit einer Box.
Es ist zum verzweifeln  :-[ :-[ :-[
Trotzdem noch mal danke für deine Bemühungen und die super Arbeit an dem Modul  :)

LG

Thomas

abc2006

Moin,
ich würd mich hier auch nochmal kurz ranhängen:

Ich hab ne Alfen-Wallbox und möchte das Register für die Verbrauchte Energie auslesen.
Laut Manual 4x16Bit lang in Wh. (siehe Bild)

Das Modul erhält von der Box den Wert 411869b000000000
Leider schaffe ich es nicht herauszufinden, welcher der richtige Dekodierbefehl ist.
Die Buchstaben habe ich durch, NFDLI, aber es kommt nirgends was sinnvolles raus.
Der Zählerstand müsste so um die 400kWh liegen.
Mit der Perl-Pack-doku habe ich mich heute mal wieder einen halben Tag herumgeschlagen, aber auch die lieferte mir keinen Hilfreichen Tipp.
Hat vllt einer von Euch ne Idee?

Danke,
Stephan







2021.10.26 17:28:47.513 5: alfen_Socket_aussen: StartQueueTimer called from HandleResponse sets internal timer to process queue in 0.000 seconds
2021.10.26 17:28:47.513 5: alfen_Socket_aussen: DropFrame called from ReadFn - drop 008e0000000b010308ffffffffffffffff
2021.10.26 17:28:47.514 5: alfen_Socket_aussen: ProcessRequestQueue called from Fhem internal timer as queue:alfen_Socket_aussen, qlen 7, request: request: id 1, read fc 3 h374, len 4, tid 250, master device alfen_Socket_aussen, reading RealEnergyDeliveredSum (getUpdate for RealEnergyDeliveredSum len 4), queued 2.18 secs ago
2021.10.26 17:28:47.514 5: alfen_Socket_aussen: checkDelays busDelayRead, last activity on bus was 0.002 secs ago, required delay is 0
2021.10.26 17:28:47.514 5: alfen_Socket_aussen: checkDelays sendDelay, last send to same device was 0.143 secs ago, required delay is 0.1
2021.10.26 17:28:47.514 5: alfen_Socket_aussen: checkDelays clientSwitchDelay is not relevant
2021.10.26 17:28:47.514 5: alfen_Socket_aussen: checkDelays commDelay, last communication with same device was 0.002 secs ago, required delay is 0.1
2021.10.26 17:28:47.514 4: alfen_Socket_aussen: checkDelays found commDelay not over, set timer to try again in 0.098
2021.10.26 17:28:47.613 5: alfen_Socket_aussen: ProcessRequestQueue called from Fhem internal timer as queue:alfen_Socket_aussen, qlen 7, request: request: id 1, read fc 3 h374, len 4, tid 250, master device alfen_Socket_aussen, reading RealEnergyDeliveredSum (getUpdate for RealEnergyDeliveredSum len 4), queued 2.28 secs ago
2021.10.26 17:28:47.613 5: alfen_Socket_aussen: checkDelays sendDelay, last send to same device was 0.242 secs ago, required delay is 0.1
2021.10.26 17:28:47.613 5: alfen_Socket_aussen: checkDelays busDelayRead, last activity on bus was 0.102 secs ago, required delay is 0
2021.10.26 17:28:47.613 5: alfen_Socket_aussen: checkDelays clientSwitchDelay is not relevant
2021.10.26 17:28:47.613 5: alfen_Socket_aussen: checkDelays commDelay, last communication with same device was 0.102 secs ago, required delay is 0.1
2021.10.26 17:28:47.613 4: alfen_Socket_aussen: ProcessRequestQueue (V4.4.02 - 31.3.2021) qlen 7, sending 00fa00000006010301760004 via 192.168.0.49:502, read buffer empty,
request: id 1, read fc 3 h374, len 4, tid 250, master device alfen_Socket_aussen, reading RealEnergyDeliveredSum (getUpdate for RealEnergyDeliveredSum len 4), queued 2.28 secs ago
2021.10.26 17:28:47.614 5: alfen_Socket_aussen: Send called from ProcessRequestQueue
2021.10.26 17:28:47.614 5: DevIo_SimpleWrite alfen_Socket_aussen: 00fa00000006010301760004
2021.10.26 17:28:47.615 5: alfen_Socket_aussen: StartQueueTimer called from ProcessRequestQueue sets internal timer to process queue in 1.000 seconds
2021.10.26 17:28:47.716 5: alfen_Socket_aussen: readFn buffer: 00fa0000000b010308411869b000000000
2021.10.26 17:28:47.716 5: alfen_Socket_aussen: ParseFrameStart called from ReadFn protocol TCP expecting id 1
2021.10.26 17:28:47.716 4: alfen_Socket_aussen: ParseFrameStart (TCP, master) extracted id 1, fCode 3, tid 250, dlen 11 and potential data 08411869b000000000
2021.10.26 17:28:47.716 5: alfen_Socket_aussen: HandleResponse called from ReadFn
2021.10.26 17:28:47.717 5: alfen_Socket_aussen: ParseResponse called from HandleResponse
2021.10.26 17:28:47.717 5: alfen_Socket_aussen: now parsing response data objects, master is alfen_Socket_aussen relay is undefined
2021.10.26 17:28:47.717 5: alfen_Socket_aussen: ParseDataString called from HandleResponse with data hex 411869b000000000, type h, adr 374, op read
2021.10.26 17:28:47.717 5: alfen_Socket_aussen: SplitDataString called from ParseDataString with data hex 411869b000000000, type h, adr 374, valuesLen 4, op read
2021.10.26 17:28:47.718 5: alfen_Socket_aussen: CreateDataObjects called from ParseDataString with objList h374
2021.10.26 17:28:47.718 5: alfen_Socket_aussen: CreateDataObjects sortedList h374
2021.10.26 17:28:47.718 5: alfen_Socket_aussen: CreateDataObjects unpacked 411869b000000000 with l to -1335289791
2021.10.26 17:28:47.719 5: alfen_Socket_aussen: perl expression eval evaluated package main; my @val = @{$oRef->{'%val'}};int(100000*$val)/10000 to -13352897910
2021.10.26 17:28:47.719 4: alfen_Socket_aussen: CreateDataObjects assigns value -13352897910 to RealEnergyDeliveredSum
2021.10.26 17:28:47.720 5: alfen_Socket_aussen: ParseDataString created 1 readings
2021.10.26 17:28:47.721 4: alfen_Socket_aussen: HandleResponse done, current frame / read buffer: 00fa0000000b010308411869b000000000, id 1, fCode 3, tid 250,
request: id 1, read fc 3 h374, len 4, tid 250, master device alfen_Socket_aussen, reading RealEnergyDeliveredSum (getUpdate for RealEnergyDeliveredSum len 4), queued 2.39 secs ago, sent 0.11 secs ago,
response: id 1, fc 3, h374, len 4, values 411869b000000000



Hier ein List:

Internals:
   DEF        1 10 192.168.0.49:502 TCP
   DeviceName 192.168.0.49:502
   EXPECT     idle
   FD         14
   FUUID      614b4c0b-f33f-4040-d23a-6bdbb3cd4d8ea62e
   IODev      alfen_Socket_aussen
   Interval   10
   LASTOPEN   1635259120.63929
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.4.02 - 31.3.2021
   NAME       alfen_Socket_aussen
   NOTIFYDEV  global
   NR         630
   NTFY_ORDER 50-alfen_Socket_aussen
   PARTIAL   
   PROTOCOL   TCP
   STATE      charging approved by EV, but not by EVSE Ladestrom: 0 A Ladeleistung: 0 W NoP: 1
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   Helper:
     DBLOG:
       RealEnergyDeliveredSum:
         logdb:
           TIME       1635261444.91727
           VALUE      -13352897910
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2021-10-26 17:27:48   ActualAppliedMaxCurrent 0
     2021-10-26 17:27:47   Availability    1
     2021-10-26 17:27:48   Charge_Current  0
     2021-10-26 17:27:48   Charge_with_1_or_3_phases 1
     2021-10-26 17:27:45   CurrentPhaseL1  0
     2021-10-26 17:27:46   CurrentPhaseL2  0
     2021-10-26 17:27:46   CurrentPhaseL3  0
     2021-10-26 17:27:48   Fzg_angeschlossen Fahrzeug angeschlossen
     2021-10-26 17:27:48   Laden_moeglich  Laden moeglich
     2021-10-26 17:27:48   MaxCurrentValidTimeRemaining 292
     2021-10-26 17:27:47   Mode3State      C1
     2021-10-26 17:27:48   Mode3State_     charging approved by EV, but not by EVSE
     2021-10-26 17:27:47   RealEnergyDeliveredSum -13352897910
     2021-10-26 17:27:46   RealEnergyDeliveredSumL1 -1
     2021-10-26 17:27:47   RealEnergyDeliveredSumL2 -1
     2021-10-26 17:27:47   RealEnergyDeliveredSumL3 -1
     2021-10-26 17:27:46   RealPowerSum    0
     2021-10-26 17:27:45   VoltPhase1      231.3
     2021-10-26 17:27:45   VoltPhase2      231.3
     2021-10-26 17:27:45   VoltPhase3      233
     2021-10-26 16:38:40   state           opened
   REMEMBER:
     lid        1
     lname      alfen_Socket_aussen
     lrecv      1635262068.8714
     lsend      1635262068.74836
   defptr:
     alfen_Socket_aussen 1
   gotReadings:
     Charge_with_1_or_3_phases 1
   lastRead:
     h1200      1635262067.74735
     h1201      1635262067.97281
     h1206      1635262068.19579
     h1208      1635262068.42204
     h1210      1635262068.64737
     h1215      1635262068.87206
     h306       1635262065.25136
     h308       1635262065.47541
     h310       1635262065.7069
     h320       1635262065.92303
     h322       1635262066.14579
     h324       1635262066.37139
     h344       1635262066.59597
     h362       1635262066.82293
     h366       1635262067.04675
     h370       1635262067.27264
     h374       1635262067.49656
Attributes:
   DbLogInclude RealEnergyDeliveredSum
   dev-h-defPoll 1
   dev-type-FLOAT16-len 2
   dev-type-FLOAT16-unpack f>
   dev-type-FLOAT32-len 4
   dev-type-FLOAT32-unpack f>
   dev-type-FLOAT64-len 4
   dev-type-FLOAT64-unpack l
   dev-type-SIGNED16-len 1
   dev-type-SIGNED16-unpack n!
   dev-type-STRING17-len 17
   dev-type-STRING17-unpack Z*
   dev-type-STRING5-len 5
   dev-type-STRING5-unpack Z*
   dev-type-UNSIGNED16-len 1
   dev-type-UNSIGNED16-unpack S>
   dev-type-UNSIGNED32-len 2
   dev-type-UNSIGNED32-unpack L>
   dev-type-UNSIGNED64-len 4
   dev-type-UNSIGNED64-unpack Q>
   event-on-change-reading RealEnergyDeliveredSum:0.1,.*
   event-on-update-reading MaxCurrentValidTimeRemaining
   obj-h1200-reading Availability
   obj-h1200-type UNSIGNED16
   obj-h1201-reading Mode3State
   obj-h1201-type STRING5
   obj-h1206-reading ActualAppliedMaxCurrent
   obj-h1206-type FLOAT32
   obj-h1208-reading MaxCurrentValidTimeRemaining
   obj-h1208-type UNSIGNED32
   obj-h1210-allowWrite 1
   obj-h1210-hint 0,6,7,8,9,10,11,12,13,14,15,16
   obj-h1210-reading Charge_Current
   obj-h1210-set 1
   obj-h1210-type FLOAT16
   obj-h1215-allowWrite 1
   obj-h1215-hint 1,3
   obj-h1215-reading Charge_with_1_or_3_phases
   obj-h1215-set 1
   obj-h1215-type UNSIGNED16
   obj-h256-expr int($val)/10
   obj-h306-expr int(10*$val)/10
   obj-h306-reading VoltPhase1
   obj-h306-type FLOAT32
   obj-h308-expr int(10*$val)/10
   obj-h308-reading VoltPhase2
   obj-h308-type FLOAT32
   obj-h310-expr int(10*$val)/10
   obj-h310-reading VoltPhase3
   obj-h310-type FLOAT32
   obj-h320-expr int(10*$val)/10
   obj-h320-reading CurrentPhaseL1
   obj-h320-type FLOAT32
   obj-h322-expr int(10*$val)/10
   obj-h322-reading CurrentPhaseL2
   obj-h322-type FLOAT32
   obj-h324-expr int(10*$val)/10
   obj-h324-reading CurrentPhaseL3
   obj-h324-type FLOAT32
   obj-h344-expr int($val)
   obj-h344-reading RealPowerSum
   obj-h344-type FLOAT32
   obj-h362-reading RealEnergyDeliveredSumL1
   obj-h362-type FLOAT64
   obj-h366-reading RealEnergyDeliveredSumL2
   obj-h366-type FLOAT64
   obj-h370-reading RealEnergyDeliveredSumL3
   obj-h370-type FLOAT64
   obj-h374-expr int(100000*$val)/10000
   obj-h374-reading RealEnergyDeliveredSum
   obj-h374-type FLOAT64
   room       tesla
   stateFormat Mode3State_ Ladestrom: ActualAppliedMaxCurrent A Ladeleistung: RealPowerSum W NoP: Charge_with_1_or_3_phases
   userReadings Mode3State_ {my $M3state = ReadingsVal($name,"Mode3State",-1);
if($M3state =~ /A/ ){
return "EVSE ready and standby";
} elsif($M3state =~ /B1/ ){
return "EV connected to EVSE";
} elsif($M3state =~ /B2/ ){
return "charging approved by EVSE";
} elsif($M3state =~ /C1/ ){
return "charging approved by EV, but not by EVSE";
} elsif($M3state =~ /C2/ ){
return "charging in progress";
} elsif($M3state =~ /D1/ ){
return "ventilated charging approved by EV, but not by EVSE";
} elsif($M3state =~ /D2/ ){
return "ventilated charging in progress";
} elsif($M3state =~ /E/ ){
return "Error inside Vehicle";
} elsif($M3state =~ /F/ ){
return "Error inside Wallbox";
}
},
Fzg_angeschlossen {my $M3state = ReadingsVal($name,"Mode3State",-1);
if($M3state =~ /A/ ){
return "Kein Fahrzeug angeschlossen";
} else{
return "Fahrzeug angeschlossen";
}
},
Laden_moeglich {my $M3state = ReadingsVal($name,"Mode3State",-1);
if($M3state =~ /[CD]/ ){
return "Laden moeglich";
} else{
return "Laden nicht moeglich";
}
}


   verbose    5
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

mBielemeier

Hallo Stephan / abc2006,

wenn ich das richtig sehe müsste es
dev-type-FLOAT64-unpack d>
sein. Per Excel ausgerechnet ergibt 411869b000000000 als double in IEEE-Format 399976 Wh.

Viele Grüße,
Manfred
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

abc2006

Hallo Manfred, vielen vielen Dank! (Es funktioniert:)
Für den Lerneffekt: kannst du mir kurz erklären, wie ich da selbst hätte draufkommen können - und mir ggf. das Excel zur Verfügung stellen?

Viele Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

mBielemeier

Hallo Stephan,

ich knoble gerne: erst mal nach Float64 gesucht und hier https://gertingold.github.io/eidprog/floats.html eine gute Beschreibung gefunden. Deine HEX-Zahl habe ich zu Binär gewandelt und Excel nur dazu gebraucht die vielen 2^x zu berechnen und aufzusummieren. Nachdem daraus wirklich die ca. 400kWh wurden musste es ja ein passendes unpack geben und das habe ich hier https://perldoc.perl.org/functions/pack gefunden. Das ">" muss dann noch hinter das "d" da die wichtigen Ziffern ja links sind, also big endian format.

Freut mich, dass ich helfen konnte.

Viele Grüße,
Manfred
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

RaKoHe

#853
Moin Stefan,

nach einigen Problemen mit dem Kanalgenerator(Goldcap defekt) kann ich mit deiner Änderung für Doepke die Register zuverlässig auslesen und schalten.

Ich lese jetzt 14 von den 128 Register aus. Tendenz steigend.
Nun frage ich mich ob es sinnvoller wäre(um den Traffic zu reduzieren) besser alle Register mit einem Befehl auszulesen.

Beim probieren habe ich ein scanModbusObjects(h0-7) gemacht, was auch funktioniert hat.
Leider hat dann der Befehl scanStop FHEM zum Absturz gebracht:

Undefined subroutine &Modbus::asyncOutput called at ./FHEM/98_Modbus.pm line 1191.
2021.11.16 22:03:46 3: $name: scanStop - try asyncOutput to $hash

Gleiches Verhalten nach Modulupdate.

Wobei dann natürlich die Doepke Anpassung weg war.
Kommt die Änderung in das nächste offiziele Update?



Wenn mir noch jemand einen Tipp geben könnte wie ich aus


2021.11.17 11:45:59 5: ALLDUPATTR: ParseDataString called from HandleResponse with data hex 00400050000000010000000001000042, type h, adr 0, op read
request: id 1, read fc 3 h0, len 8, master device ALLDUPATTR, reading alles (getUpdate for alles len 8)


die 128 Kanäle(A1/A8 bis P1/P8) unpacken muss.
00 40 00 50 00 00 00 01 00 00 00 00 01 00 00 42

laut der Doku:
00 ist das Register 1 High mit den Kanälen B8-B1
40  Register 1 Low A8-A1
00 ist das Register 2 High mit den Kanälen D8-D1
usw...

Bin etwas weiter gekommen unpack H* :-)

Vielen Dank

Mit sonnigen Grüßen

Ralf




Apollon

Hallo,

mein Vorhaben, einen Zweirichtungsdrehstromzähler mit einem RS485 / Ethernetkonverter vom Elektriker installieren zu lassen, hatte ich schon verworfen,  weil mir das Know-how für die Einrichtung und Einbindung in FHEM fehlt.

Dieser Beitrag hier zeigt mir, dass sich schon einige Leute mit diesem oder ähnlichen Problemen beschäftigt haben.

Nun zu meiner Frage oder besser zu meiner Bitte. Ist jemand in der Lage, mir Hilfestellung bei der Konfiguration und Einbindung in FHEM zu geben?
Vorgesehen ist folgende Hardware:

https://stromzähler.eu/stromzaehler/drehstromzaehler/fuer-hutschiene-geeicht/246/sdm72dm-v2-mid-3-phasen-zweirichtungs-drehstromzaehler-mit-rs485-und-s0?c=97
und
https://www.amazon.de/dp/B095HBL9QC/?coliid=I2TU7MXQBD6IDP&colid=1FEP8L3MKLREF&psc=1&ref_=lv_ov_lig_dp_it

Der Konverter ist bereits vorhanden und zu Testzwecken im Netz eingebunden.

Gruß
Apollon