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

Fritz Muster

Hallo Stefan,

ich habe mir für meine Wärmepumpe ein Modul geschrieben. https://forum.fhem.de/index.php/topic,69066.msg605457.html#msg605457.

Funktioniert alles soweit. Allerdings habe ich im Logfile sehr häufig die Meldung

Odd number of elements in hash assignment at ./FHEM/98_Modbus.pm line 584.

Hast Du eventuell eine Idee, was das sein kann?

Danke und Grüße

Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

crispyduck

Hallo,

hätte jetzt mal drauf getippt das bei map irgendwo einmal ein , oder : zu viel ist; habe dein Modul jetzt aber 3 mal durch geschaut und hab keinen Tippfehler gefunden.
Ist in einem verbose 5 log auch nicht ersichtlich wann und wo der Fehler kommt?

Lg,
Crispyduck

Fritz Muster

#542
@Crispyduck

Danke für den Hinweis und Deine Mühe mein Modul "durchzuackern". Mit verbose 5 das log mal zu sichten bin ich mal wieder nicht drauf gekommen. Werde ich heute abend mal angehen.

Eine Idee was das sein könnte habe ich noch. Ich habe ein Register welches 4 Statis hat (AUS/EIN/Notlauf/Testlauf). Habe aber nur 2 davon gemappt (EIN/AUS) Im Modul sieht das so aus:

"h25" => {
name => "System On/Off", # internal name of this register in the hardware doc
reading => "Anlage_Status", # name of the reading for this value
set => 1, # can be set to 1 to allow writing this value with a Fhem set-command
min => 0, # input validation for set: min value
max => 1, # input validation for set: max value
map => "0:Aus, 1:Ein, 2:Notlauf, 3:Testlauf", # map to convert visible values to internal numbers (for reading and writing)
polldelay => "x12", # only poll this Value if last read is older than 12*Iteration, otherwiese getUpdate will skip it 10s x12 --> 2 min


Oder aber stört das Leerzeichen bei 1:Manuell Ein

map => "0:Auto, 1:Manuell Ein",

Grüße Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

crispyduck

Hallo,

Problem dürfte daher kommen das sich hier ein ungerades Ergebnis für den hash ergibt.

line 584:   my %map = split (/[,: ]+/, $map);

In der Expression ist wenn ich das richtig sehe auch ein Leerzeichen für die Trennung.

Würde mal alle Leerzeichen aus den map strings raus nehmen.

Lg,
Crispyduck

StefanStrobel

Hallo,

das Leerzeichen ist das Problem.
In HTTPMOD habe ich das schon so umgebaut, dass auch Leerzeichen funktionieren. Allerdings zieht sich das an ein paar Stellen durch. Es muss dann ja auch im Web-Frontend zu einem &nbsp werden etc.
Bei Gelegenheit kann ich das ins Modbus-Modul übernehmen.

Zum Thema Konfig-Datei:
Der größte Bereich der Modbus-Module ist ja ein Hash, der den Attributen von Modbus-Attr entspricht.
Ich habe schon mal überlegt eine Translate-Funktion zu schreiben, die aus den Attributen von ModbusAttr ein neues Modul erzeugt und umgekehrt. Bisher hat mir dafür aber die Zeit gefehlt und eigentlich ist es eine Spielerei :-)

Gruss
   Stefan

crispyduck

Wow, habe ich das sogar richtig erkannt.  ;)

Ja eben, spricht was dagegen so ein Modul (welche dein Modbus.pm nutzt) zu bauen was sich den Hash für deviceinfo und parsinfo aus einer z.B. Strich-Komma separierten Datei zusammen bastelt?

So ein File könnte man dann recht "komfortabel" bearbeiten und nicht benötigte Register einfach aus kommentieren.

Werde wohl ohnehin bald etwas für meinen zukünftigen StecaGrid Wechselrichter basteln müssen und könnte mich dann mal daran versuchen.

Keine Ahnung ob das so geht wie ich mir das vorstelle und ob ich das auch hin bekomme, aber sollte doch prinzipiell gehen oder?

Lg,
Crispyduck

StefanStrobel

Hallo Crispyduck,

das könnte schon funktionieren, aber ob es am Ende praktisch ist kann ich Dir nicht sagen. Vermutlich wäre der Weg über ModbusAttr schon einfacher. Ggf. könntest Du ja aus Deiner Liste einfach attr-Befehle erzeugen.
Probier es doch einfach aus :-)
Wenn es nur um das Ausblenden von Readings / Objekten geht, dann kannst Du aber auch einfach das Pollen der nicht benötigten Objekte mit Attributen verhindern bzw. mit Attributen die Einträge aus parseInfo in einem Modul überschreiben ...
In der Regel verstehen die Module ja alle auch die Attribute von ModbusAttr. Die Attribute sind dabei "stärker" als parseInfo.
In der Doku für ModbusSET habe ich explizit auch die "poll-" Attribute erwähnt. Mit attr poll-ReadingName 0 soltest Du auch bei den anderen Modbus-Modulen ein Objekt unterdrücken können ...

Gruss
   Stefan

crispyduck

Hallo Stefan,

Ich werde mich sobald ich etwas Zeit habe mal daran versuchen. Hoffe das mit meinen eigentlich nicht vorhandenen Programier und Perl kenntnissen auch was dabei raus kommt.  ;)
Ich würde gerne viele Attribute vermeiden da das vorallem in der configdb schnell unübersichtlich wird.

Naja, mal schauen was daraus wird. Spätestens wenn ich was habe melde ich mich wieder hier.  :)

Lg,
Crispyduck

Fritz Muster

Zitat von: StefanStrobel am 26 April 2017, 17:18:53
das Leerzeichen ist das Problem

Wollte noch mal kurz eine Rückmeldung geben. Nachdem ich die Leerzeichen in den Map Strings entfernt habe bekomme ich die Meldungen

Odd number of elements in hash assignment at ./FHEM/98_Modbus.pm line 584.

nicht mehr.  :)

Vielen Dank!
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

holle75

Zitat von: StefanStrobel am 19 Januar 2017, 18:23:14
Hallo,

die Timeouts wurden in einer früheren Version des Modbus-Moduls nur auf Loglevel 4 protokolliert und deshalb haben die meisten Leute das gar nicht bemerkt, wenn verbose für das Modbus-Gerät wie üblich auf 3 steht.
In der neuen Version wird es per Default auf Ebene 3 protokolliert und dann sieht man es, es sei denn man setzt das Attribut timeoutLogLevel für das physische Device auf 4 (scheint im obigen Log "modbus" zu sein).

Wenn solche Timeouts nur selten auftreten würde ich mir keine Gedanken machen. Wenn es aber ständig kommt, sollte man nach der Ursache der Timeouts suchen - nicht nach dem Attribut zum Verhindern des Log-Eintrags ;-)

Nach "Buffer contains" im Log wird angezeigt, ob schon etwas empfangen wurde.
0b03040002 ist eine Modbus-Antwort von ID 11 auf function code 3, bei der nur noch wenige Bytes am Ende fehlen. Das Gerät hat also durchaus geantwortet. Ich würde mal testen ob eine Erhöhung des Timeouts die Lage verbessert.

Gruss
    Stefan

Hallo Stefan, habe mein Problem hier https://forum.fhem.de/index.php/topic,50196.msg629258.html#msg629258 geschildert, will jetzt aber kein Doppelposting machen.

Mir gehts gerade (abgesehen davon, daß ich mich über Ideen zu dem ursprünglichen Problem an dieser Stelle freuen würde) um das

attr timeoutLogLevel

habe ich es falsch verstanden? .... finde keine Beschreibung dazu und wenn ich es einsetze, wird mir mitgeteilt, dass es nicht existiert. Hatte es zur Definition meines Eaton-Zählers gepackt.

Danke und Grüße

H.

Edit: Denken, probieren und dann merken, dass es wohl zum define vom "physischen Device", bei mir ein USB Adapter gehört. .... wobei meine Stromzähler ja auch was physisches haben.

crispyduck

Hallo,

hatte nun endlich mal Zeit ein bisschen an meinem Modul "ModbusCFG" zu basteln welches die config aus einem csv File ließt.

Ich habe versucht so wenig wie möglich in mein Modul einzubauen und die Funktionen des Basis Modbus Moduls von Stefan zu nutzen.

Musste zwar ein eigenes define machen um den Parameter für das cfgfile zu bekommen, rufe aus diesem dann aber wieder ModbusLD_Define auf.

Das Modul verwendet FileRead, somit funktioniert es auch mit einem cfgfile in der configDB.

Die Werte im csv config File sind durch Semikolon getrennt und können eigentlich auch mit Excel bearbeitet werden.
Ich habe zum bearbeiten CSVed verwendet. Damit lässt es sich dann auch mit fixer Spaltenbreite abspeichern.
Vor dem bearbeiten mit Excel oder CSVed empfiehlt es sich die #comments aus dem File zu löschen.

Das config File im Anhang ist für einen SDM630M Stromzähler und basiert auf dem 98_ModbusSDM630M.pm Modul von Roger.

Ein define für das Modul sieht dann folgendermaßen aus:

define Sgtromzähler ModbusCFG ./FHEM/98_ModbusSDM630M.cfg 1 60


Aus dem cfgfile werden nur Zeilen ausgewertet welche mit 1 beginnen, sollte man also einen Wert nicht abfragen wollen kann man used auf 0 setzen, oder auch einfach die Zeile aus kommentieren.

Anbei das Modul 98_ModbusCFG.pm und das config File 98_ModbusSDM630M.cfg.

Habe es absichtlich als eigenes Modul gemacht. Es ließe sich aber auch ganz leicht in das Modbus Basis Modul integrieren. Man müsste lediglich die if schleife aus meinem define und die sub ReadCFGFile einfügen.

Lg,
Crispyduck


wthiess

Hallo!

Bitte um Hilfe.
Ich habe bereits mehrere Modbusrelais mit 4 Relais und 4 Eingängen in Betrieb. Funktioniert einwandfrei.
Nun habe folgerndes Problem. Neue Fheminstallation, anderer Ort. Modbus funktioniert prinzipiell. Ich kann die Eingänge auslesen, aber die Relais reagieren nicht.
Das ganze am PC angeschlossen läuft einwandfrei. Den Code habe ich 1:1 vom anderen System kopiert. Der Bus ist O.k. Der Usb Adapter auch.
Alles auf neuestem Stand

lg
Wolfgang


Hier die Fhem.cfg
attr global userattr cmdIcon devStateIcon devStateStyle icon sortby webCmd widgetOverride
attr global autoload_undefined_devices 1
attr global backupdir /nas/fhem/backup
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global motd SecurityCheck:\
\
WEB,WEBphone,WEBtablet has no associated allowed device with basicAuth.\
telnetPort has no associated allowed device with password/globalpassword.\
\
Restart FHEM for a new check if the problem is fixed,\
or set the global attribute motd to none to supress this message.\

attr global statefile ./log/fhem.save
attr global updateInBackground 1
attr global verbose 5
#http://help-quickfhem.jimdo.com/tutorial-1/readings/

#attr global userattr devStateIcon icon webCmd set setList sortby

define telnetPort telnet 7072 global


define WEB FHEMWEB 8083 global
attr WEB editConfig 1
attr WEB longpoll 1
attr WEB menuEntries Backup,/fhem?cmd=backup
attr WEB room hidden
attr WEB stylesheetPrefix touchpad
define allowed_WEB allowed
attr allowed_WEB validFor WEB
#attr allowed_WEB basicAuth d3RoaWVzczoyMzA1MTk2NjY2

define WEBphone FHEMWEB 8084 global
attr WEBphone room hidden
attr WEBphone stylesheetPrefix darktouchpad
define allowed_WEBphone allowed
attr allowed_WEBphone validFor WEBphone
#attr allowed_WEBphone basicAuth d3RoaWVzczoyMzA1MTk2NjY2


define WEBtablet FHEMWEB 8085 global
attr WEBtablet room hidden
attr WEBtablet stylesheetPrefix darktouchpad
define allowed_WEBtablet allowed
attr allowed_WEBtablet validFor WEBtablet
#attr allowed_WEBtablet basicAuth d3RoaWVzczoyMzA1MTk2NjY2

# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog

define autocreate autocreate
attr autocreate disable 1
attr autocreate filelog ./log/%NAME-%Y.log

define eventTypes eventTypes ./log/eventTypes.txt

# Disable this to avoid looking for new USB devices on startup
define initialUsbCheck notify Diode:Pinlevel:.*|Thermometer:.*|global:INITIALIZED usb create


#Relais
define RelaisUSB Modbus /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0@9600,8,N,1

define Re ModbusAttr 1 10
attr Re IODev RelaisUSB
attr Re dev-c-combine 3
attr Re dev-c-defPoll 1
attr Re obj-c3-hint 0,1
attr Re obj-c3-reading Relais1
attr Re obj-c3-set 1
attr Re room Relais
attr Re stateFormat Relais1
attr Re webCmd Relais1



Hier der Log Verbose 5.
2017.07.12 09:08:59 5: End notify loop for Re
2017.07.12 09:08:59 5: RelaisUSB: ParseFrames got 1 readings from ParseObj
2017.07.12 09:09:03 4: Closing inactive connection WEB_192.168.25.164_50275
2017.07.12 09:09:03 4: Closing inactive connection WEB_192.168.25.164_50272
2017.07.12 09:09:03 4: Closing inactive connection WEB_192.168.25.164_50273
2017.07.12 09:09:03 4: Closing inactive connection WEB_192.168.25.164_50270
2017.07.12 09:09:09 5: Re: GetUpdate called
2017.07.12 09:09:09 4: Re: update timer modified: will call GetUpdate in 10.0 seconds at 2017-07-12 09:09:19 - Interval 10
2017.07.12 09:09:09 5: Re: GetUpdate objects from attributes: c3
2017.07.12 09:09:09 5: Re: GetUpdate full object list: c3
2017.07.12 09:09:09 5: Re: GetUpdate check c3 => Relais1, poll = 1, last = 1499843339.73505
2017.07.12 09:09:09 4: Re: GetUpdate will request Relais1
2017.07.12 09:09:09 5: Re: GetUpdate tries to combine read commands
2017.07.12 09:09:09 4: Re: Send called with c3, objLen 1 / reqLen 1 to id 1, op read, qlen 0
2017.07.12 09:09:09 4: Re: Send queues fc 1 to 1, for c3 (Relais1), reqLen 1
2017.07.12 09:09:09 5: RelaisUSB: handle queue check commDelay (0.1) for Re: rest -9.88652300834656
2017.07.12 09:09:09 5: RelaisUSB: handle queue check sendDelay (0.1) for Re: rest -9.90533208847046
2017.07.12 09:09:09 5: RelaisUSB: HandleSendQueue: finished delay checking, proceed with sending
2017.07.12 09:09:09 4: RelaisUSB: HandleSendQueue sends fc 1 to id 1, tid 8 for Relais1 (c3), len 1, device Re (RTU), pdu 0100030001, V 3.5.25 - 8.5.2017
2017.07.12 09:09:09 5: SW: 0101000300010dca
2017.07.12 09:09:09 5: RelaisUSB: raw read: 010101005188
2017.07.12 09:09:09 5: RelaisUSB: ParseFrames got: 010101005188
2017.07.12 09:09:09 4: RelaisUSB: ParseFrames got fcode 1 from 1, values 00HeaderLen 1, ActualLen 1, request was for c3 (Relais1), len 1 for module Re
2017.07.12 09:09:09 5: Re: ParseObj called with 00 and start 3, quantity 1, op read
2017.07.12 09:09:09 5: Re: ParseObj shortened bit string: 0 and start adr 3, quantity 1
2017.07.12 09:09:09 5: Re: ParseObj ObjInfo for c3: reading=Relais1, unpack=a, expr=, format=, map=
2017.07.12 09:09:09 5: Re: ParseObj unpacked 30 with a to hex 30 (0)
2017.07.12 09:09:09 4: Re: ParseObj for Relais1 assigns 0
2017.07.12 09:09:09 5: Starting notify loop for Re, 1 event(s), first is Relais1: 0
2017.07.12 09:09:09 5: End notify loop for Re
2017.07.12 09:09:09 5: RelaisUSB: ParseFrames got 1 readings from ParseObj
2017.07.12 09:09:19 4: WEB_192.168.25.164_50271 POST /fhem?cmd=set%20Re%20Relais1%201&XHR=1&fwcsrf=csrf_514619013515132&fw_id=41; BUFLEN:0
2017.07.12 09:09:19 5: Cmd: >set Re Relais1 1<
2017.07.12 09:09:19 5: Re: Set called with Relais1 (c3), setVal = 1
2017.07.12 09:09:19 5: Re: set packed hex 31 with n to hex 0001
2017.07.12 09:09:19 4: Re: Send called with c3, objLen 1 / reqLen - to id 1, op write, qlen 0, value hex 0001
2017.07.12 09:09:19 4: Re: Send adds fc 5 to 1, for c3 (Relais1), reqLen 1, value hex 0001 at beginning of queue for immediate sending
2017.07.12 09:09:19 5: RelaisUSB: handle queue check commDelay (0.1) for Re: rest -9.48293399810791
2017.07.12 09:09:19 5: RelaisUSB: handle queue check sendDelay (0.1) for Re: rest -9.50062203407288
2017.07.12 09:09:19 5: RelaisUSB: HandleSendQueue: finished delay checking, proceed with sending
2017.07.12 09:09:19 4: RelaisUSB: HandleSendQueue sends fc 5 to id 1, tid 14 for Relais1 (c3), len 1, device Re (RTU), pdu 050003ff00, V 3.5.25 - 8.5.2017
2017.07.12 09:09:19 5: SW: 01050003ff007c3a
2017.07.12 09:09:19 5: Re: ReadAnswer called and remaining timeout is 1.99975299835205 requested reading is Relais1
2017.07.12 09:09:19 5: Re: ReadAnswer got: 0105000300003dca
2017.07.12 09:09:19 5: RelaisUSB: ParseFrames got: 0105000300003dca
2017.07.12 09:09:19 4: RelaisUSB: ParseFrames got fcode 5 from 1, values 30HeaderLen 4, ActualLen 4, request was for c3 (Relais1), len 1 for module Re
2017.07.12 09:09:19 5: Re: ParseObj called with 30 and start 3, quantity 1, op write
2017.07.12 09:09:19 5: Re: ParseObj shortened bit string: 0 and start adr 3, quantity 1
2017.07.12 09:09:19 5: Re: ParseObj ObjInfo for c3: reading=Relais1, unpack=a, expr=, format=, map=
2017.07.12 09:09:19 5: Re: ParseObj unpacked 30 with a to hex 30 (0)
2017.07.12 09:09:19 4: Re: ParseObj for Relais1 assigns 0
2017.07.12 09:09:19 5: Starting notify loop for Re, 1 event(s), first is Relais1: 0
2017.07.12 09:09:19 5: End notify loop for Re
2017.07.12 09:09:19 5: RelaisUSB: ParseFrames got 1 readings from ParseObj
2017.07.12 09:09:19 5: Re: ReadAnswer done, reading is Relais1, value: 0
2017.07.12 09:09:19 4: WEB: /fhem?cmd=set%20Re%20Relais1%201&XHR=1&fwcsrf=csrf_514619013515132&fw_id=41 / RL:20 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2017.07.12 09:09:19 5: Re: GetUpdate called
2017.07.12 09:09:19 4: Re: update timer modified: will call GetUpdate in 10.0 seconds at 2017-07-12 09:09:29 - Interval 10
2017.07.12 09:09:19 5: Re: GetUpdate objects from attributes: c3
2017.07.12 09:09:19 5: Re: GetUpdate full object list: c3
2017.07.12 09:09:19 5: Re: GetUpdate check c3 => Relais1, poll = 1, last = 1499843359.3478
2017.07.12 09:09:19 5: Re: GetUpdate will skip Relais1, delay not over
2017.07.12 09:09:19 5: Re: GetUpdate tries to combine read commands
2017.07.12 09:09:21 4: WEB_192.168.25.164_50271 POST /fhem?cmd=set%20Re%20Relais1%201&XHR=1&fwcsrf=csrf_514619013515132&fw_id=41; BUFLEN:0
2017.07.12 09:09:21 5: Cmd: >set Re Relais1 1<
2017.07.12 09:09:21 5: Re: Set called with Relais1 (c3), setVal = 1
2017.07.12 09:09:21 5: Re: set packed hex 31 with n to hex 0001
2017.07.12 09:09:21 4: Re: Send called with c3, objLen 1 / reqLen - to id 1, op write, qlen 0, value hex 0001
2017.07.12 09:09:21 4: Re: Send adds fc 5 to 1, for c3 (Relais1), reqLen 1, value hex 0001 at beginning of queue for immediate sending
2017.07.12 09:09:21 5: RelaisUSB: handle queue check commDelay (0.1) for Re: rest -2.43358111381531
2017.07.12 09:09:21 5: RelaisUSB: handle queue check sendDelay (0.1) for Re: rest -2.45425629615784
2017.07.12 09:09:21 5: RelaisUSB: HandleSendQueue: finished delay checking, proceed with sending
2017.07.12 09:09:21 4: RelaisUSB: HandleSendQueue sends fc 5 to id 1, tid 67 for Relais1 (c3), len 1, device Re (RTU), pdu 050003ff00, V 3.5.25 - 8.5.2017
2017.07.12 09:09:21 5: SW: 01050003ff007c3a
2017.07.12 09:09:21 5: Re: ReadAnswer called and remaining timeout is 1.99985814094543 requested reading is Relais1
2017.07.12 09:09:21 5: Re: ReadAnswer got: 0105000300003dca
2017.07.12 09:09:21 5: RelaisUSB: ParseFrames got: 0105000300003dca
2017.07.12 09:09:21 4: RelaisUSB: ParseFrames got fcode 5 from 1, values 30HeaderLen 4, ActualLen 4, request was for c3 (Relais1), len 1 for module Re
2017.07.12 09:09:21 5: Re: ParseObj called with 30 and start 3, quantity 1, op write
2017.07.12 09:09:21 5: Re: ParseObj shortened bit string: 0 and start adr 3, quantity 1
2017.07.12 09:09:21 5: Re: ParseObj ObjInfo for c3: reading=Relais1, unpack=a, expr=, format=, map=
2017.07.12 09:09:21 5: Re: ParseObj unpacked 30 with a to hex 30 (0)
2017.07.12 09:09:21 4: Re: ParseObj for Relais1 assigns 0
2017.07.12 09:09:21 5: Starting notify loop for Re, 1 event(s), first is Relais1: 0
2017.07.12 09:09:21 5: End notify loop for Re
2017.07.12 09:09:21 5: RelaisUSB: ParseFrames got 1 readings from ParseObj
2017.07.12 09:09:21 5: Re: ReadAnswer done, reading is Relais1, value: 0
2017.07.12 09:09:21 4: WEB: /fhem?cmd=set%20Re%20Relais1%201&XHR=1&fwcsrf=csrf_514619013515132&fw_id=41 / RL:20 / text/plain; charset=UTF-8 / Content-Encoding: gzip
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

pejonp

Hi,

kannst du die Modbusrelais (mit 4 Relais und 4 Eingängen) untereinander tauschen um einen Hardwaredef. auszuschließen ?
Firmeware auf den Modbusrelais die gleiche ?

pejonp
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 Wolfgang,

verstehe ich es richtig, dass Du das Relais mit set Re Relais1 1 schalten willst,
was in den Modbus-Befehl 01050003ff007c3a umgewandelt wird?
(write single coil, Addresse 3, Wert 1)
Das Relais antwortet dann mit 0105000300003dca ?

Was wird denn vom PC aus gesendet und wie lautet dort die Antwort?

laut Modbus Spec sollte die Antwort anders aussehen:
ZitatThe normal response is an echo of the request, returned after the coil state has been written

Bei Dir kommt aber 0000 statt FF00 ...

Gruss
   Stefan

wthiess

Hallo Stefan!

Dokumentation:
The 3rd relay open
01 05 00 03 01 00 3c 5a
3 Relay Off
01 05 00 03 00 00 3d ca


Ich sehe hier FF statt 01. Das FF ist ein Fehler. 03 Ist das Relais. 01 = ein. Woher kommt das?
Fhem Wien (LOG)
        TX 01 05 00 03 FF 00 7c 3A
        RX 01 05 00 03 00 00 3D CA

Windows Relais3 ein
sende   TX 01 05 00 03 01 00 3C 5A
antwort RX 01 05 00 03 01 00 3C 5A

Windows Relais3 aus
sende   TX 01 05 00 03 00 00 3D CA
antwort RX 01 05 00 03 00 00 3D CA



lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......