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.
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?
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 (https://www.aliexpress.com/item/32312762412.html))
Ich möchte den Windladeregler auch irgendwie über FHEM lesen können mit dem ModbusAttr - Modul
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 (https://wiki.fhem.de/wiki/Modbus)
my %XYparseInfo = (
"0x1000" => { reading => "Battery voltage", # name of the reading for this value
},
"0x1001" => { reading => "Battery current",
},
);
aber wie konfiguriere ich das in dem ModbusAttr-Modul?Es kommt immer irgendwie nichts raus :-\
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 ?????
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 :-(
Hi Rainer,
würdest du mir deine komplette Definition überlassen? alt. PN
Grüße Josef
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