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

danieljo

Zitat von: Roger am 14 Dezember 2015, 20:14:26
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

Muss ich beim SDM220Modbus Modul kein IODev angeben ?

Mit oder ohne abschlusswiderstand erbrachte kein Erfolg.
Adresse merhfach geändert ebenfalls kein Erfolg.

EDIT: Hast recht das "attr SDM220 userattr IODev" war falsch weiß auch nicht wie das da rein gekommen ist. Ich habe das attr jetzt gelöscht. Nun kommt als Meldung "No FD" was heißt das ?

Kann es sein das der SDM220Standart nicht unterstützt wird sondern nur der SDM220Modbus ?

StefanStrobel

Hallo,

die userattr Einträge werden von den Modulen selbst erzeugt, damit man Attribute mit Wildcards über fhemweb durch anklicken ändern kann. Die schaden nichts, sind aber auch nicht nötig damit es funktioniert. Das ist auch bei HTTPMOD so.

IODev muss man selbst nicht angeben. Auch das macht das Modul selbst, sofern es nur ein Modbus-Interface gibt.

Wenn der SDM220 Standard eine Modbus-Schnittstelle hat, dann sollte er auch funktionieren. Allerdings gab es im Forum schon oft Probleme mit Kabeln, Abschlusswiderständen und nicht funktionierenden USB-RS485 Adaptern ...

Gruss
    Stefan

danieljo

Ok also anscheinend wird der SDM220Standart nicht vom SDM220M Modul unterstützt. Weil heute habe ich den SDM220Modbus bekommen angeschlossen und funktionierte sofort. Ist das Protokoll so unterschiedlich zwischen SDM220Standart und SDM220Modbus.

My-FHEM

Hat es einen bestimmten Grund, warum die Readings des Modules SDM630 mit Einheiten versehen werden?

Dies führt bei Rechnungen mit den Readings immer zu Meldungen wie diesen:

PERL WARNING: Argument "243.7 W" isn't numeric in addition (+) at fhem.pl line

Ist es nicht fhem Codingstyle, das  Reading Werte Dimensionslos sind?

Gruss

coyote8219

Hallo,

bei meiner Suche im Forum habe ich das Modbus Modul entdeckt und hätte nun ein, zwei kleine Fragen. Vielleicht kann mir ja jemand bei meinenVorhaben helfen...

Ich habe folgendes Problem. Ich habe einen Sony Projektor, welcher sich über IP Commands via LAN steuern lässt. Die Commands habe ich. Das ganze müsste über TCP gesendet werden.

Die Befhle welche zum Beispiel gesendet werden müsste schauen dann letztendlich so aus:
/x02/x0aSONY/x00/x00/x61/x02/x00/x01/

Vielleicht kann mir ja jemand einen Tip geben? Der Projektor ist via IP erreichbar via Port 53484...

Habe auch schon ModbusAttr definiert, nur danach hänge ich ein wenig? Was muss ich als nächstes tun, um meine Befehle via TCP zu schicken?

Schon einmal Danke

pejonp

Zitat von: coyote8219 am 08 Januar 2016, 17:30:43
...
Ich habe folgendes Problem. Ich habe einen Sony Projektor, welcher sich über IP Commands via LAN steuern lässt. Die Commands habe ich. Das ganze müsste über TCP gesendet werden.

Die Befhle welche zum Beispiel gesendet werden müsste schauen dann letztendlich so aus:
/x02/x0aSONY/x00/x00/x61/x02/x00/x01/

Vielleicht kann mir ja jemand einen Tip geben? Der Projektor ist via IP erreichbar via Port 53484...
..
Hallo,

versuch doch mal das HTTPMOD Modul siehe hier (http://forum.fhem.de/index.php/topic,27029.msg346600.html#msg346600).

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

volschin

Macht wohl ziemlich wenig Sinn, einen TCP (Telnet) Port über HTTP anzusprechen.  ::)
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

coyote8219

muss auf alle Fälle via TCP senden, sonst funktioniert das am Projektor leider nicht. Hat jemand einen Tipp?

pejonp

Zitat von: coyote8219 am 09 Januar 2016, 22:06:05
muss auf alle Fälle via TCP senden, sonst funktioniert das am Projektor leider nicht. Hat jemand einen Tipp?
Hallo coyote8219,

du kannst es auch mit dem ECMD Modul versuchen. Hier ein Beispiel zum lesen.(http://forum.fhem.de/index.php/topic,42793.msg351541.html#msg351541) Mit diesem Modul kann auch gesendet werden. Was für ein Protokoll wird den auf dem Port gesendet Telnet oder Http ?

Suche einmal im Forum nach "beamer ecmd" .  Dieses ist zwar für RS232, die Schnittstelle kann ja ausgetauscht werden.

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

coyote8219

Hallo pejonp,

Danke für Deine Antwort. Es wird über Telnet gesendet. Aber wie schie ich Die Befehle, bzw. wie programmiere ich sie in FHEM?

pejonp

Zitat von: coyote8219 am 11 Januar 2016, 22:54:12
...
Danke für Deine Antwort. Es wird über Telnet gesendet. Aber wie schie ich Die Befehle, bzw. wie programmiere ich sie in FHEM?
Hallo coyote8219,

schau mal hier http://forum.fhem.de/index.php/topic,45382.msg372148.html#msg372148. Du mußt dich natürlich noch etwas in ECMD einlesen. Es gibt leider keine fertige Lösung, aber einige Beispiele oder die Doku (http://www.fhemwiki.de/wiki/AVR-NET-IO).

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

Lars

Guten Morgen,

meine Nilan KWL muss unbedingt in FHEM integriert werden.
Dazu bräuchte ich mal ein bisschen Starthilfe in der Anpassung der bereitgestellten Module. RS485 Interface ist vorhanden und mit Modul Modbus eingerichtet. State=open.
Die Module 98_ModbusAttr.pm und 98_ModbusSET.pm habe ich mir angesehen. Im Attr Modul finde ich keinen Ansatzpunkt, es ist ja fast leer. Ok, im SET Modul finde ich Adressen und Mappings zu Readings.  Die Idee ist, dieses nun für die Nilan KWL anzupassen.

Dazu die folgenden Fragen:
- Laut Nilan Doku besteht ein Request aus Slave addr, Function code, Address, Quantity, CRC. Im SET Modul sehe ich aber nur sowas wie "h256" - das sieht wie die Adresse aus. Wo werden denn die anderen Parameter gesetzt? Oder ist der o.g. Aufbau kein Modbus Standard?
- Die Nilan KWL kennt die Function codes 03 (read holding registers), 04 (read input registers) und 16 (preset multiple registers). Ich müsste also unterschiedliche function codes senden, abhängig von GET und SET. Wo kann ich das einstellen?
- Dann noch was zu der Dokumentation:
Zitat
Register layout:
Register addresses are specified as decimal numerals.
Input registers are placed in the address area 30001..39999.
Holding registers are placed in the address area 40001..49999.
NOTE:
In the following tables, the register addresses applied in the MODBUS messages are without the global offset. This means that if you read input register 100 with function code 04, you will get the global address 30101.
Die NOTE verstehe ich überhaupt nicht.

Und noch eine letze Frage:
# Siehe ModbusExample.pm für eine ausführlichere Infos zur Verwendung des Moduls
# 98_Modbus.pm


Wo finde ich denn ModbusExample.pm?

Gruß
Lars
FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem

StefanStrobel

Hallo Lars,

ModbusAttr enthält keine Adressen etc. weil Du die per Attribut selbst definieren kannst. Es ist ein generisches Modul. Damit sollte es leicht sein, Deine KWL einzubinden, ohne das Du ein eigenes Modul programmieren musst.
Siehe http://www.fhemwiki.de/wiki/ModbusAttr

Slave addr gibst Du beim Define an, Function codes werden entweder automatisch gewählt (3 für holding Register etc.) oder Du kannst sie per Attribut überschreiben, Address (Adressen der einzelnen Werte der Register oder Coils) werden Objekt für Objekt per Attribut definiert, Quantity wählt das Modul automatisch. Dabei versucht es sinnvoll mehrere per Attribut definierte Werte gleichzeitig abzufragen, CRC etc. macht das Modul automatisch.
Wenn Du die Posts in diesem Thread der Reihe nach durchliest, sollte alles klar werden.

Wenn Du ein eigenes Modul schreiben möchtest, dann kannst Du ModbusSET als Vorlage nehmen. Die Bedeutung der parseInfo Struktur findest Du in diesem Thread oder zusammengefasst im Wiki: http://www.fhemwiki.de/wiki/Modbus.
Im Prinzip funktioniert das ganz genauso wie mit ModbusAttr, nur dass die Definitionen nicht mit Attributen an ModbusAttr übergeben sondern in Datenstrukturen im neuen Modul hinterlegt werden. Den Rest macht das Basismodul 98_Modbus.pm

Gruss
    Stefan


Lars

Hallo Stefan,
danke für die guten Tipps, der Wiki-Artikel hat alle Unklarheiten beseitigt. Ich schreibe ein eigenes Modul für die Nilan KWL. Die erste Version ist in Arbeit.
Gruß
Lars
FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem

Reinerlein

Hallo,

ich bin gerade dabei, ein Modbus-Modul für meine Heizungssteuerung (Trovis 5567) zu bauen.
Das läuft auch super. Danke für dieses Modul :)

Ich hätte jetzt nur einen kleinen Feature-Request:
Bei der Steuerung ist es so, dass ich z.B. die Betriebsart setzen kann. Wenn ich das tue, ändert sich automatisch in der Steuerung ein anderer Zustandswert (der Wert, der mir signalisiert, dass ich nun von Autark-Betrieb auf Manuell-Betrieb geschaltet habe).

Ich hätte gerne, dass das Modul nach dem Set nicht nur den gerade gesetzten Wert abfragt, sondern auch noch zusätzlich konfigurierte Readings (die ich als Abhängig identifiziert habe).

Z.B. folgende Readings:

...
'h105' => { reading => 'RK1_Betriebsart',
name => 'BetriebsArtRk1',
map => '1:Aus, 2:Standby, 4:Sonne, 5:Mond',
poll => 1,
set => 1
},
'c88' => { reading => 'RK1_Betriebsart_EBN',
name => 'Ebene Betriebsart Rk1 (HR40106)',
map => '0:GLT, 1:Autark',
poll => 1,
set => 1
},
...
Wenn ich nun "RK1_Betriebsart" setze, wird in der Anlage "RK1_Betriebsart_EBN" auf GLT gesetzt (bzw. dort ja 0).
Ich würde nun gerne sofort beim Setzen der "Betriebsart" auch das Flag "Betriebsart Ebene" mit abfragen lassen.
Das ganze konfigurierbar, vielleicht so:

'h105' => { reading => 'RK1_Betriebsart',
name => 'BetriebsArtRk1',
map => '1:Aus, 2:Standby, 4:Sonne, 5:Mond',
poll => 1,
set => 1,
setgetReadings => 'RK1_Betriebsart_EBN'
},
Das sollte vielleicht eine Kommaseparierte Liste sein, damit man auch mehrere Readings angeben könnte...

Oder gibt es einen anderen Weg, wie ich das direkt im Modul definieren kann, ohne dass ein etwaiger Anwender des Moduls zusätzliche Aufgaben hat?
Danke schon mal im Vorraus...

Grüße
Reiner