Problem Modbus und einlesen von Daten

Begonnen von rainer1962, 22 April 2020, 19:03:11

Vorheriges Thema - Nächstes Thema

rainer1962

Hallo,vielleicht hat einer eine Iddee wier ich von einem WindController, welcher Modbus RTU spricht die daten in FHEM einlesen kann.habe schon einige Versuche gemacht, aber riegndwie komme ich nicht dazu die Daten irgendwie einzulesen.
Folgende Daten habe ich vom hersteller gekommen:

Communication Protocol for RS485
Mode:            Modbus RTU
Baud rate:        19200
Start bit:         1
Date bits:         8
Stop bit:         1
Parity bit:     None
   
    Read Command
    Packet Format:
       Request:
           Device address (BYTE):        01H~FFH
           Function code (BYTE):        03H
           Starting address (WORD):        0000H~FFFFH
           No. of registers (WORD):     0001H~007DH
           Check code (WORD):            CRC16 check of all above bytes
Response:
           Device address (BYTE):         01H~FFH
           Function code (BYTE):         03H
           Byte Count (BYTE):             01H~FAH
           Data content (BYTE):         specific data of read
           Data content (BYTE):         specific data of read
           ......
           Data content (BYTE):         specific data of read
           Check code (WORD):            CRC16 check of all above bytes
        Error:
           Device address (BYTE):         01H~FFH
           Error code (BYTE):             83H
           Exception code (BYTE):         error code
           Check code (WORD):             CRC16 check of all above bytes

    Example:
1)    Request:    01 03 10 00 00 08 44 0C
        Device address (BYTE):             01H
        Function code (BYTE):             03H
        Starting address (WORD):         0000H
        No. of registers (WORD):         0008H
        Check code (WORD):                 0C44H


2)    Response:     01 03 10 (DATA) (CRC)
        Device address (BYTE):             01H
        Function code (BYTE):             03H
        Byte Count (BYTE):                 10H
        Data content (BYTE):             (DATA)
        Check code (WORD):                (CRC)
3)     DATA specification
                01H 0CH 01H 0CH 01H 0CH 01H 0CH 01H 0CH 01H 0CH 01H 0CH 01H 0CH
                 a         b       c       d       e       f       g       h
        a:2byte    01H 0CH à 268        battery voltage             =  26.8V
        b:2byte    01H 0CH à 268        battery current              =  26.8V
        c:2byte    01H 0CH à 268        solar voltage                 =  26.8A
        d:2byte    01H 0CH à 268        solar current                 =  26.8V
        e:2byte    01H 0CH à 268        wind voltage                    =  26.8A
        f:2byte    01H 0CH à 268        wind current (before)         =  26.8A
        g:2byte    01H 0CH à 268        wind dumpload current          =  26.8A
        h:2byte    01H 0CH à 268        output current(just use for streetlight controller)      =   26.8A

    Write Command
    Packet format
Request:
           Device address (BYTE):        01H~FFH
           Function code (BYTE):        06H
           Starting address (WORD):        0000H~FFFFH
           Writing data (WORD):         0001H~FFFFH
           Check code (WORD):            All of the above –byte CRC16 checksum
           Response:
           Device address (BYTE):         01H~FFH
           Function code (BYTE):         06H
           Starting address (WORD):        0000H~FFFFH
           Writing data (WORD):         0001H~FFFFH
           Check code (WORD):            All of the above –byte CRC16 checksum
           Error:
            Device address (BYTE):         01H~FFH
            Error code (BYTE):             86H
            Exception code (BYTE):         error code
            Check code (WORD):             All of the above –byte CRC16 checksum

    Example
1)    Request:     
01 06 19 99 00 02 DF 78   Modify RS485 address
2)    Response:
3)    01 06 19 99 00 02 DF 78
Explanation
Device address (BYTE):     01H    Device's original address.
Function code (BYTE):    06H    Code of writing command.
Starting address(WORD):    F000H Register address which storage device address.
Writing data (WORD):    0002H     New address of device.
Check code (WORD):        0B3BH CRC16 Check
.
    Register address is 1999H.   


#define MODA_SBATVOL                0x1000 //Battery voltage
#define MODA_SBATCURR                0x1001// Battery current
#define MODA_SSOLARVOL                0x1002//solar voltage
#define MODA_SSOLARCURR                0x1003 //solar current
#define MODA_SWINDVOL                0x1004 //wind voltage
#define MODA_SWINDCURR                0x1005 // wind current
#define MODA_SOUTCURR                0x1007  //output current
#define MODA_TEMP1                    0x1008  //Temperature
#define MODA_TEMP2                    0x1009
#define MODA_QPERCENT                0x100A //battery capacity%

#define MODA_WINDSUMWL                0x100B wind power energy Low word
#define MODA_WINDSUMWH                0x100C wind power energy high word
#define MODA_SOLARSUMWL                0x100D solar power energy Low word
#define MODA_SOLARSUMWH                0x100E solar power energy high word
#define MODA_WINDRPM                 0x100F //wind rpm

#define MODA_WINDENERGCLEAR            0x1997 // wind power energy clear
#define MODA_SOLARENERGCLEAR        0x1998 // solar power energy clear
#define MODA_MODBUSADDR                0x1999 //modbus ID

#define MODA_BATNVOL                0x2000  //battery rated voltage
#define MODA_FLOATVOL                0x2001 // battery float voltage
#define MODA_FINALVOL                0x2002 // battery low voltage
#define MODA_FINALRVOL                0x2003   // battery low recovery voltage
#define MODA_FULLVOL                0x2004    //battery over voltage
#define MODA_FULLRVOL                0x2005   // battery over recovery voltage
#define MODA_NORCAP                    0x2006   //battery capacity
#define MODA_HANDBRAKE                0x2102 //maual break
#define MODA_WINDVMAX                0x2103 //wind max voltage
#define MODA_WINDAMAX                0x2104 //wind max current
#define MODA_WINDRMAX                0x2105 //wind max rpm
#define MODA_WINDPOLE                0x2106 //Magnet Pole Pair
#define MODA_WINDCUTINV                0x2107//cut in voltage
#define MODA_WINDABRKDLY            0x2108//break keep time
#define MODA_WINDRATEDP                0x2109//wind rated power
#define MODA_WINDRATEDV                0x210A//wind rated voltage
#define MODA_MPPTMODE                 0x210B //mppt mode



über ModbusAttr habe ich ein gerät definiert:
Internals:
   .getList   
   .setList   interval reread:noArg reconnect:noArg stop:noArg start:noArg close:noArg saveAsModule scanModbusId scanStop:noArg scanModbusObjects
   .updateSetGet 0
   DEF        2 5 192.168.26.28:26 RTU
   DeviceName 192.168.26.28:26
   EXPECT     response
   FD         4
   FUUID      5e9c675e-f33f-7d1e-1f45-dae08f1e8001f227
   INTERVAL   5
   IODev      Windgenerator
   LASTOPEN   1587506511.67672
   LeadingZeros 1
   MODBUSID   2
   MODE       master
   MODULEVERSION Modbus 4.1.4 - 1.6.2019
   NAME       Windgenerator
   NOTIFYDEV  global
   NR         71
   NTFY_ORDER 50-Windgenerator
   PARTIAL   
   PROTOCOL   RTU
   STATE      opened
   TCPConn    1
   TIMEOUTS   13506
   TRIGGERTIME 1587574321.91291
   TRIGGERTIME_FMT 2020-04-22 18:52:01
   TYPE       ModbusAttr
   devioLoglevel 3
   lastUpdate 1587574316.91291
   nextOpenDelay 60
   nextTimeout 1587574318.9168
   FRAME:
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2020-04-20 13:57:10   Daten           1.3776725722163e-39
     2020-04-20 13:55:47   scanId-1-Response-h100 0
     2020-04-22 00:01:51   state           opened
   REMEMBER:
     lid        2
     lname      Windgenerator
     lsend      1587574316.91997
   REQUEST:
     ADR        00008
     DBGINFO    getUpdate
     FCODE      3
     FRAME      E�
     LEN        2
     MODBUSID   2
     OPERATION  read
     READING    Daten
     SENT       1587574316.9168
     TIMESTAMP  1587574316.91673
     TYPE       h
     VALUES     0
     DEVHASH:
   defptr:
     Windgenerator 2
   lastRead:
Attributes:
   obj-h00008-len 2
   obj-h00008-poll 1
   obj-h00008-reading Daten
   obj-h00008-revRegs 1
   obj-h00008-unpack f>
   userattr   obj-h00008-len obj-h00008-poll obj-h00008-reading obj-h00008-revRegs obj-h00008-unpack



Es wäre schon wenn mir jemand auf die sprünge helfen könnte.
Vielen lieben Dank schon im voraus.
2xFHEM auf Raspi3,MAXLAN,HMLAN,KeyMatic,MAX Heizung,2x HM-WDS10_TH-O,3xHM-SEC-SD,3xHM Wandtaster 2-Kanal, 2xWandtaster 6-Kanal,1xHM Bewegungsmelder,4xHM EinbauActor,4x Jalousien Actor,2xEGPM2LAN,2xHM DimAktor,2xFritzbox 6840/6490,4-20ma Levelsensor-Ina219,PIP5048,Raspi2 als Floorplan,4xJeeLink

jbraeu

da gibts doch einen modbus scan, man muss die start und Endadresse wissen... hab das mal mit dem Wechselrichter probiert aber groß rausgekommen ist da nix..
Mich würde interessieren welche Windkraftanlage du betreibst, wie viel Leistung, was sowas kostet und ob die plug and Play in Schuko stecken kannst?

rainer1962

#2
habe ich auch schon gemacht mit dem Modbusscan, aber irgendwie verstejh ich die daten nicht.
Meine anlage:

       
  • insel im garten (Ohne Netzanbindung)- 4x12V (48V) 280AH Bleiakku
  • 8xsolarmodule - gesamt 2200Watt
  • solarladeregler mit wechselrichter (PIP5048) von MPPT 48V/5000Watt
  • Windrad von IstaBreeze 48volt 1000watt- Windladeregler von EZPower (china) 1500Watt (https://www.aliexpress.com/item/32312762412.html)
Ich möchte den Windladeregler auch irgendwie über FHEM lesen können mit dem ModbusAttr - Modul
2xFHEM auf Raspi3,MAXLAN,HMLAN,KeyMatic,MAX Heizung,2x HM-WDS10_TH-O,3xHM-SEC-SD,3xHM Wandtaster 2-Kanal, 2xWandtaster 6-Kanal,1xHM Bewegungsmelder,4xHM EinbauActor,4x Jalousien Actor,2xEGPM2LAN,2xHM DimAktor,2xFritzbox 6840/6490,4-20ma Levelsensor-Ina219,PIP5048,Raspi2 als Floorplan,4xJeeLink

jbraeu

#3
so ziemlich die gleiche Herausforderung werde ich auch bald haben wenn mein RTU konverter für meine alte ETA Heizung eingetroffen ist, daher interessiert mich das thema recht stark aber vielleicht kommen wir ja zusammen weiter. Nochmal eine andere Frage, kennst du eine Möglichkeit so eine kleine Windkraftanlage direkt pnp an den Hausstrom anzuschließen? so eine 1-2 kw Anlage fände ich preislich recht interessant..

Aber hier sollte es doch eigentlich eh schon drinnen stehen oder nicht?
#define MODA_SBATVOL                0x1000 //Battery voltage
#define MODA_SBATCURR                0x1001// Battery current
#define MODA_SSOLARVOL                0x1002//solar voltage
#define MODA_SSOLARCURR                0x1003 //solar current
#define MODA_SWINDVOL                0x1004 //wind voltage
#define MODA_SWINDCURR                0x1005 // wind current
#define MODA_SOUTCURR                0x1007  //output current
#define MODA_TEMP1                    0x1008  //Temperature
#define MODA_TEMP2                    0x1009
#define MODA_QPERCENT                0x100A //battery capacity%


wenn du noch in die commandref schaust und das 1:1 in den parser überträgst damit der weis welcher code welche bezeichnung haben soll.. https://wiki.fhem.de/wiki/Modbus
my %XYparseInfo = (
    "0x1000"  =>  {   reading => "Battery voltage",   # name of the reading for this value
                },
    "0x1001"  =>  {   reading => "Battery current",
                },
);

rainer1962

aber wie konfiguriere ich das in dem ModbusAttr-Modul?Es kommt immer irgendwie nichts raus  :-\
2xFHEM auf Raspi3,MAXLAN,HMLAN,KeyMatic,MAX Heizung,2x HM-WDS10_TH-O,3xHM-SEC-SD,3xHM Wandtaster 2-Kanal, 2xWandtaster 6-Kanal,1xHM Bewegungsmelder,4xHM EinbauActor,4x Jalousien Actor,2xEGPM2LAN,2xHM DimAktor,2xFritzbox 6840/6490,4-20ma Levelsensor-Ina219,PIP5048,Raspi2 als Floorplan,4xJeeLink

rainer1962

dieses bekomme ich zurück:hex=312e3433343932393632373436383631652d3432, string=1.43492962746861e-42, s=11825, s>=12590, S=11825, S>=12590, i=11825, i>=12590, I=11825, I>=12590, f=4.19515266969483e-08, f>=2.53500043179145e-09
wenn ich das konfiguriere:
obj-h0-len 8
  obj-h0-poll 1
  obj-h0-reading Daten1
  obj-h0-unpack f


ich kann damit nichts anfangen :-(Wie geht das genau ?????
2xFHEM auf Raspi3,MAXLAN,HMLAN,KeyMatic,MAX Heizung,2x HM-WDS10_TH-O,3xHM-SEC-SD,3xHM Wandtaster 2-Kanal, 2xWandtaster 6-Kanal,1xHM Bewegungsmelder,4xHM EinbauActor,4x Jalousien Actor,2xEGPM2LAN,2xHM DimAktor,2xFritzbox 6840/6490,4-20ma Levelsensor-Ina219,PIP5048,Raspi2 als Floorplan,4xJeeLink

rainer1962

#6
ich glaub ich habe es jetzt verstanden ...ich kann Daten auslesen.

attr Windgenerator obj-h4096-reading Battery_Voltage
attr Windgenerator obj-h4096-unpack s>
attr Windgenerator obj-h4096-expr ("s>",$val/10)
attr Windgenerator obj-h4096-format %.1f
attr Windgenerator obj-h4096-poll 1;


zudem muss ich die Modbus Id des Gerätes welches ich abfrage noch in der DEF angeben damit auch bei einem restart von FHEM die Daten gelesen werden können.
Das habe ich so in der Beschreibung von ModbusAttr nicht entnehmen können, mein englisch ist aber auch so was von schlecht :-(
2xFHEM auf Raspi3,MAXLAN,HMLAN,KeyMatic,MAX Heizung,2x HM-WDS10_TH-O,3xHM-SEC-SD,3xHM Wandtaster 2-Kanal, 2xWandtaster 6-Kanal,1xHM Bewegungsmelder,4xHM EinbauActor,4x Jalousien Actor,2xEGPM2LAN,2xHM DimAktor,2xFritzbox 6840/6490,4-20ma Levelsensor-Ina219,PIP5048,Raspi2 als Floorplan,4xJeeLink

jbraeu

Hi Rainer,

würdest du mir deine komplette Definition überlassen? alt. PN

Grüße Josef

rainer1962

Zitatwürdest du mir deine komplette Definition überlassen? alt. PN

Internals:   .getList   
   .setList   interval reread:noArg reconnect:noArg stop:noArg start:noArg close:noArg saveAsModule scanModbusId scanStop:noArg scanModbusObjects
   .updateSetGet 0
   DEF        165 5 192.168.26.28:23
   DeviceName 192.168.26.28:23
   EXPECT     idle
   FD         19
   FUUID      5ea2ecda-f33f-7d1e-aaaa-8a65137897395cc8
   INTERVAL   5
   IODev      Windgenerator
   LASTOPEN   1587991014.53022
   LeadingZeros 1
   MODBUSID   165
   MODE       master
   MODULEVERSION Modbus 4.1.4 - 1.6.2019
   NAME       Windgenerator
   NOTIFYDEV  global
   NR         72
   NTFY_ORDER 50-Windgenerator
   PARTIAL   
   PROTOCOL   RTU
   STATE      opened
   TCPConn    1
   TRIGGERTIME 1587991019.26784
   TRIGGERTIME_FMT 2020-04-27 14:36:59
   TRIGGERTIME_SAVED
   TYPE       ModbusAttr
   devioLoglevel 3
   lastUpdate 1587991014.26784
   nextOpenDelay 60
   .attraggr:
   .attrminint:
   QUEUE:
     HASH(0x47d8bd0)
     HASH(0x4875880)
     HASH(0x48d5f58)
     HASH(0x489b2b0)
     HASH(0x45ed588)
     HASH(0x4882498)
     HASH(0x48d5fd0)
     HASH(0x4823ec0)
     HASH(0x48d7a88)
     HASH(0x481efe8)
     HASH(0x48861b0)
     HASH(0x47da318)
     HASH(0x4875c70)
     HASH(0x48d4790)
     HASH(0x4785a40)
     HASH(0x4898268)
     HASH(0x4882348)
     HASH(0x48bbbe0)
     HASH(0x47d4d40)
     HASH(0x48630e8)
     HASH(0x4888978)
     HASH(0x4885610)
     HASH(0x48d60d8)
   READ:
     BUFFER     
   READINGS:
     2020-04-27 14:36:19   Batterie_Kapazitaet 100.0
     2020-04-27 14:36:49   Battery_Spannung 58.1
     2020-04-27 14:35:33   Battery_Strom   0.0
     2020-04-27 14:36:14   Wind_RPM        0
     2020-04-27 14:36:29   Wind_Spannung   0.0
     2020-04-27 14:36:54   Wind_Strom      0.0
     2020-04-27 14:36:54   state           opened
   REMEMBER:
     lid        165
     lname      Windgenerator
     lrecv      1587991014.47646
     lsend      1587991014.27977
   defptr:
     Windgenerator 165
   gotReadings:
     Wind_Strom 0.0
   lastRead:
     h04096     1587991009.23207
     h4097      1587990933.61809
     h4100      1587990989.09119
     h4101      1587991014.48118
     h4106      1587990979.09035
     h4111      1587990974.08995
Attributes:
   dev-h-defExpr ModbusLD_ScanFormat($hash, $val)
   dev-h-defLen 1
   dev-h-defUnpack a2
   obj-h04096-reading Battery_Spannung
   obj-h4096-expr ("s>",$val/10)
   obj-h4096-format %.1f
   obj-h4096-poll 1
   obj-h4096-unpack s>
   obj-h4097-expr ("s>",$val/10)
   obj-h4097-format %.1f
   obj-h4097-poll 1
   obj-h4097-reading Battery_Strom
   obj-h4097-unpack s>
   obj-h4100-expr ("s>",$val/10)
   obj-h4100-format %.1f
   obj-h4100-poll 1
   obj-h4100-reading Wind_Spannung
   obj-h4100-unpack s>
   obj-h4101-expr ("s>",$val/10)
   obj-h4101-format %.1f
   obj-h4101-poll 1
   obj-h4101-reading Wind_Strom
   obj-h4101-unpack s>
   obj-h4106-expr ("s>",$val)
   obj-h4106-format %.1f
   obj-h4106-poll 1
   obj-h4106-reading Batterie_Kapazitaet
   obj-h4106-unpack s>
   obj-h4111-expr ("s>",$val)
   obj-h4111-format %.0f
   obj-h4111-poll 1
   obj-h4111-reading Wind_RPM
   obj-h4111-unpack s>
   room       Solar
   stateFormat state (Bat:Battery_Spannung V, Wind:Wind_Spannung V, Wind_Strom A, Wind_RPM RPM)
   userattr   dev-h-defExpr dev-h-defLen dev-h-defUnpack obj-h04096-reading obj-h4096-expr obj-h4096-format obj-h4096-poll obj-h4096-unpack obj-h4097-expr obj-h4097-format obj-h4097-poll obj-h4097-reading obj-h4097-unpack obj-h4100-expr obj-h4100-format obj-h4100-poll obj-h4100-reading obj-h4100-unpack obj-h4101-expr obj-h4101-format obj-h4101-poll obj-h4101-reading obj-h4101-unpack obj-h4106-expr obj-h4106-format obj-h4106-poll obj-h4106-reading obj-h4106-unpack obj-h4111-expr obj-h4111-format obj-h4111-poll obj-h4111-reading obj-h4111-unpack obj-h6553-expr obj-h6553-format obj-h6553-poll obj-h6553-reading obj-h6553-unpack obj-h8453-expr obj-h8453-format obj-h8453-poll obj-h8453-reading obj-h8453-unpack
2xFHEM auf Raspi3,MAXLAN,HMLAN,KeyMatic,MAX Heizung,2x HM-WDS10_TH-O,3xHM-SEC-SD,3xHM Wandtaster 2-Kanal, 2xWandtaster 6-Kanal,1xHM Bewegungsmelder,4xHM EinbauActor,4x Jalousien Actor,2xEGPM2LAN,2xHM DimAktor,2xFritzbox 6840/6490,4-20ma Levelsensor-Ina219,PIP5048,Raspi2 als Floorplan,4xJeeLink