Neues Modul für Geräte mit Modbus Schnittstelle über RS232 bzw. RS485

Begonnen von StefanStrobel, 12 Juli 2014, 14:50:22

Vorheriges Thema - Nächstes Thema

pejonp

Zitat von: sportster am 28 September 2015, 16:26:16

Die Danfoss ECL300 ist eine Universalsteuerung, die mit einem Modbus Kommunikationsmodul nachgerüstet wurde.
...
define ModbusRS485 Modbus COM3@19200,8,E,1
...

Hallo Dieter,
was hast du für ein System ? Linux ? Dann sollte der Eintrag COM3 in  /dev/com3  geändert werden. 

Jörg

PS: Ich habe gerade in einem anderen Eintrag gelesen das du Win7 hast. COM3 ist dann richtig.
Die meisten ModbusKontroller benötigen 19200,8, O ,1.   O=Odd

Probiere einmal diese SW unter Win  (http://qmodbus.sourceforge.net/ Beitrag: http://forum.fhem.de/index.php/topic,25315.msg300513.html#msg300513). Ob dort Daten empfangen werden.
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

sportster

Hallo Jörg,

danke für die schnelle Antwort  :)

Also an der parity Einstellung kann es meiner Meinung nach nicht liegen, da diese so in der Modbus Doku von der Danfoss ECL300 stehen und
ich diese auch mit Profilab Expert 4.0 benutz hatte. Da konnte ich alle Register fehlerfrei auslesen.

Ich vermute immer noch, dass es etwas mit den Registern/Adrssen zu tun hat.
Z. B. liegt ja "Temp_aussen" per Danfoss Definition in einem Holding Register 11201. Dies weicht doch schon vom Modbus Standard ab, der für die Holdings doch den 40000er Bereich vorsieht??... ???    Oder sehe ich das falsch?

*Grübel*

LG

Dieter

pejonp

Zitat von: sportster am 28 September 2015, 18:47:52
...
Ich vermute immer noch, dass es etwas mit den Registern/Adrssen zu tun hat.
...
Hallo Dieter,

hast du mal QModBus versucht. Ich denke einmal die Register können liegen oder beginne so wie der Hersteller es benötigt. Bei meinem DRT710 (Drehstromzähler) beginnen einige Hold-Reg bei 61745. Man muß die Register nur richtig ansprechen, bei  Hold 0x03 verher senden, aber das macht ja das Modul.
Setze mal die Länge auf 2. Hier ein Teil meiner Einstellungen für meinen Drehstromzähler. Bis dieser so am laufen war hat es eine Weile gedauert.

attr DRT dev-h-defLen 2
attr DRT dev-h-defPoll 1
attr DRT dev-h-defUnpack N
attr DRT dev-timing-timeout 2

Ich habe dieses ganz gut, unter anderem, mit dem QModBus herausbekommen. In der Doku von Danfos habe ich auch gelesen das der Regler einen Ethernet-Anschluß hat über den Modbus-TCP geht. Ist das so oder ist das ein andere Adapter ?

Vielleicht solltest du beim testen und Fehler suchen alle anderen Einträge aus der fhem.cfg entfernen.

Jörg

PS: Ganz dumme Frage: Die Modbus Adresse bei deinem Gerät ist auch die 3, so wie in der fhem.cfg eingetragen ?!
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

sportster

Hallo Jörg,

habe es nun einmal mit QModbus versucht. Damit kann ich alle Werte aus der ECL300 Steuerung ziehen, kein Problem.
Einstellungen wie auch von mir in FHEM eingetragen COM3 19200 Baud 8 Datenbits 1 Stopbit Even Parity
Die ECL300 hat Bus ID 3. Also alles korrekt und funktioniert auch über QModbus... ???
Gut, die Register im ECL300 sind 1basiert und in FHEM Modul wohl 0-basiert. Bedeutet, wenn ich Register "11201" in ECL300 auslesen will muss ich in
FHEM "11200" eintragen.

Mit len hab ich jetzt auch getestet. Das hat auch nicht funktioniert. Kann eigentlich auch nicht weil die Register definitive alles 16 byte sind.

Bezüglich der Danfoss Steuerung ECL 300: Das ist eine schon ältere Steuerung mit einem Modbusmodul ECA 71. Die macht aber "nur" Modbus RTU.
Das Modbusmodul habe ich Anfang des Jahres selbst nachgerüstet. Das war immer noch günstiger als eine komplett neue WP Steuerung einzubauen(plus ggf. Anpassungen vom Heizungsfachmann..usw.). Für mich tut es alles was ich benötige, alles gut.
Nur FHEM will wohl (noch) nicht so richtig. Aber ich bin zäh...... ;D

Gruß

Dieter       

pejonp

Hallo Dieter
Rechne die Register einmal in hex um und trage dieses ein. Kannst du ja als zusätzlichen Eintrag machen. Ich hatte bei mir auch lange gekämpft. Versuche auch mal einen widerstand 120 ohm zwischen a+ und b-. Das hat bei mir geholfen.
Jörg
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

StefanStrobel

Hallo Dieter,

hast Du mal versucht Fhem unter Linux in einer VM oder auf einem Raspberry laufen zu lassen?
Das Feature, mit dem in DevIO.pm die Parität für die serielle Kommunikation eingestellt wird, habe ich erst vor wenigen Monaten als Patch vorgeschlagen und ich habe keine Ahnung, ob das schon mal jemand unter Windows getestet hat. (ModbusAttr verwendet Modbus.pm und das verwendet DevIO ...)
Ich selbst mache inzwischen alles auf einem Raspberry.

Gruss
    Stefan

sportster

Sodele,

es hat etwas gedauert um Debian 8 auf einer VMware Maschine und FHEM zu installieren.
Ich bin zur Zeit auf dem gleichen Stand. Das heist:

Modbus Modul konfiguriert:
define RS485 Modbus /dev/ttyUSB0@19200,8,E,1

--> Status "opened" --> scheint o.k.

ModbusAttr Modul konfiguriert:
define ECL300 ModbusAttr 3 60

--> Status "opened" --> scheint o.k.

Erstes reading konfiguriert:
attr ECL300 obj-h11200-reading Temp_aussen

--> timeout reading.....

also dasselbe Problem wie unter WIN 7.. :P

Was mir aber aufgefallen ist:
Wenn ich QModbus nutze und das Register 11200 auslese wird folgender HEX Code gesendet (zu dem ich auch einen Wert zurück bekomme)
03 03 2b c0 00 01 

Im Logfile FHEM steht aber: RS485: timeout waiting for 3 from 3, Request was 03032bc000018c30

Was bedeuten die letzten 4 HEX Zeichen 8c30? Kann es daran liegen, dass die ECL 300 nicht antwortet?

Da ich weiß, dass die Steuerung ein wenig sensibel in Bezug auf die Abfrageintervalle ist habe ich timing send Delay, timing Comm Delay etc. auch bereits eingebaut und verschiedene Einstellungen versucht, aber da tut sich nichts.

Da die ECL auf die QModbus  Anfragen innerhalb kürzester Zeit reagiert und auch korrekte Werte liefert, tippe ich jetzt mal auf diesen gesendeten HEX Code als mögliche Ursache, was meint ihr?  ::)

LG

Dieter   


sportster

Zitat von: sportster am 04 Oktober 2015, 13:57:07

Was mir aber aufgefallen ist:
Wenn ich QModbus nutze und das Register 11200 auslese wird folgender HEX Code gesendet (zu dem ich auch einen Wert zurück bekomme)
03 03 2b c0 00 01 

Im Logfile FHEM steht aber: RS485: timeout waiting for 3 from 3, Request was 03032bc000018c30

Was bedeuten die letzten 4 HEX Zeichen 8c30? Kann es daran liegen, dass die ECL 300 nicht antwortet?

LG

Dieter   

Hab schnell mal in meinen Erinnerungen zum Modbus Protokoll geforscht. Letzte vier HEX Stellen dürften die CRC sein. Da dies im Protokoll der ECL300 aber nicht vorgesehen ist (letzte Stelle sollte die Anzahl der abgefragten Register sein) könnte das doch schon zu einem timeout führen :-\
Gibt es eine Möglichkeit in dem Modulden CRC zu unterdrücken?

LG

Dieter

pejonp

Zitat von: sportster am 04 Oktober 2015, 13:57:07
...
Modbus Modul konfiguriert:
define RS485 Modbus /dev/ttyUSB0@19200,8,E,1

--> Status "opened" --> scheint o.k.

ModbusAttr Modul konfiguriert:
define ECL300 ModbusAttr 3 60

--> Status "opened" --> scheint o.k.

Erstes reading konfiguriert:
attr ECL300 obj-h11200-reading Temp_aussen
....

Hallo Dieter,

vielleicht noch beim ModBus die
attr queueDelay 3 und  attr queueMax 200 anpassen. Hat bei mir glaube ich geholfen.

define RS485 Modbus /dev/ttyUSB0@19200,8,E,1

define ECL300 ModbusAttr 3 60
attr ECL300 IODev RS485 <-- hast du auch diesen Eintrag in deiner fhem.cfg
attr ECL300 obj-h11200-reading Temp_aussen


#meine Einstellungen
define DRT710M Modbus /dev/ttyUSB1@9600,8,E,1
attr DRT710M profileInterval 300
attr DRT710M queueDelay 3
attr DRT710M queueMax 200
attr DRT710M room Zaehler
attr DRT710M verbose 1

define DRT ModbusAttr 1 60
attr DRT IODev DRT710M  <-----
attr DRT dev-h-combine 16
attr DRT dev-h-defLen 2
attr DRT dev-h-defPoll 1
attr DRT dev-h-defUnpack N
attr DRT dev-timing-timeout 3
attr DRT obj-h144-reading PowerL1
attr DRT obj-h146-reading PowerL2
attr DRT obj-h148-reading PowerL3
attr DRT obj-h150-reading PowerGesamt
...

Jörg
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

StefanStrobel

Hallo,

Ein Unterdrücken der CRC ist bisher nicht vorgesehen. Ich gehe auch davon aus, dass auch QModbus mit CRC sendet, es nur nicht anzeigt.
Wenn Du es ohne CRC probieren möchtest, könntest Du in Modbus.pm Zeile 1627 ändern. Bisher steht da  $frame  = $header.$pdu.$crc;
Wenn du das .$crc entfernst sollte das reichen.

Gruß
    Stefan

sportster

Huhu,

ich weiss zwar nicht warum, aber plötzlich kommen die Werte... ;D
Vielleicht, weil ich den USB Adapter mal kurz deaktiviert und wieder aktiviert habe...egal, es läuft.

Vielen lieben Dank Jörg und Stefan für den super Support hier. Sobald mein Projekt steht werde ich es mal vorstellen. Sicher werden aber auf dem Weg dorthin noch hier und da Fragen auftauchen.

LG

sportster

Hallo zusammen,

nach einigen Wochen intensiven Einarbeitens in die FHEM Materie, steht die Steuerung meiner Bartl WP.
Ich kann alle Werte auslesen, habe mir SVG Plots erstellt, die Temperaturen und Stati der WP aufzeichnen und ich kann
Werte in die WP Steuerung über das Modbus Attr Modul schreiben. Alles wunderbar  :D

jetzt bin ich gerade dabei alles ein wenig aufzuräumen und aufzuhübschen. Also eine readingsGroup definiert, in der ich jetzt die
gelesenen Werte hübsch aufbereitet im FHEM Web darstellen kann. Es ist auch angedacht die gesamte WP Steuerung zukünftig in ein Dashboard Tab zu packen.

Was mich zurzeit aber beschäftigt: Ist es möglich, ausser den readings, auch die set Befehle (also Werte in die Steuerung schreiben) in einer readingsGroup (oder ein anderes Modul) darzustellen? Im Moment kann ich diese nur im ModbusAttr Modul setzen (welches ich aber nicht im FHEMweb veröffentlichen will).
Ich habe hier schon mit den Befehlen "commands", "setList", "webCMD" etc. innerhalb des readingsGroup Moduls herumexperimentiert, aber mit keinem dieser Befehle komme ich an die set Attribute im Modbus Modul heran.

Gibt es hierzu eine Lösung?? Wäre super, wenn mich hier jemand mit einem kleinen Tipp von der Leitung zieht ::) 

LG

Dieter
   

StefanStrobel

Hallo,

readingsGroup kann fast alles.
Für Fragen zu readingsGroup würde ich einen anderen Thread wählen.
Dann bekommst Du schneller Hilfe :-)

Gruß
  Stefan

danieljo

Ich benötige mal etwas Hilfe:

System:
Raspberry Pi 2 mit Debian Wheezy Kernel 3.18...
FHEM 5.7

USB:
USB to RS485 Adapter wird im System als /dev/ttyUSB0 angezeigt

Stromzähler:
B+G Eastron SDM220
Modbus ID laut Zähler ist -> 100

Der Stromzähler ist mit ca.20cm verdrillter Litze an den USB Adapter angeschlossen Klemme A auf A; B auf B

Dann habe ich in FHEM das Modbus-Basismodull eingerichtet mit:

define ModBus Modbus /dev/ttyUSB0@9600,8,E,1
attr ModBus queueDelay 3
attr ModBus queueMax 200


desweiteren mit den von euch angebotenem modul ModbusSDM220M habe ich folgendes eingerichtet:

define SDM220 ModbusSDM220M 100 60
attr SDM220 userattr IODev
attr SDM220 IODev ModBus


Leider bekomme ich nur "timeout reading answer"

Was mache ich falsch oder was habe ich übersehen ?

MFG, Daniel Joachims

Roger

Hallo danieljo,
hier ein paar Hinweise von mir:
- versuche mal ein längeres (3-5m) Kabel
- versuche mal mit oder ohne Abschlusswiderständen
- versuche mal Adresse 1 oder 2 oder 3 (100 hatte ich noch nicht)
- stelle mal "verbose" von beiden devices auf 5 und schaue im Log nach
Wozu das "attr SDM220 userattr IODev"? So was benötige ich nicht.

Hoffe das es hilft  :)
Roger
Zotac & RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly, Victron