Modbus (RTU) mit welcher Hardware anbinden?

Hallo,

auf die Gefahr, dass mir gleich vorgeworfen wird nicht richtig gesucht zu haben, ich habe mich vor diesem Thread wenigstens bemüht :wink:

Als absoluter Einsteiger im Thema Hausautomatisation stehe ich vor folgender Frage:
Ich habe eine Proxon Wärmepumpe mit einer Bridge auf Modbus (RTU). Diese möchte ich nun (quasi als Einstieg in dieses Thema) an IP-Symcon hängen. (Was ich wenn ich mir vorstellen kann, dass das alles klappt noch beschaffen muss/werde :wink: Eine lange Liste mit den Parameterbeschreibungen und technischen Infos zu Baudrate etc. habe ich vor mir liegen.

Mit welcher Hardware mache ich die Anbindung sinnvollerweise? (Gerne mit Produkt- oder Erfahrungsvorschlägen)

Priorität liegt hier auf Zuverlässigkeit und nach Möglichkeit Einfachheit bei der Umsetzung. Die Symcon Software würde ich auf einem NUK laufen lassen.

Später erweitern möchte ich das ganze um eine Verbindung zu folgenden Elementen (Falls das die o.g. Entscheidung beeinflussen sollte):

Lichtsteuerung: enocean (sinnvollerweise mit dem TCM310?)
Wechselrichter: kostal piko (Vermutlich über dessen Webinterface direkt?)
Stromzähler: über 6 vorhandene S0-Anschlüsse (mit: 868-Gateway + 2x Energiekontrollmodul?)
Fritzbox und NAS: (über das jeweilige Web-Interface?)

Danke für Eure Hilfe…

Da hat sich unser Post ja fast überschnitten :wink:
Hab auch eben meine Busbridge eingebaut und überlege die passende Einbindung in IPS.
Hab hier noch einen RS485 to USB Stick. Denke damit sollte es gehen.

Leider fehlt mir noch die Parameter Liste. Gabs die direkt von Proxon dazu?

Gruß Maze

edit:
Ach ja, ich verwende die USB-RS485- Bridge von in-circuit.de
Bin mir nur noch nicht ganz schlüssig über die Jumper Einstellungen

Hallo,

ich habe auch die FWT von Proxon und die entsprechende Busbridge dazu. Ich habe die Bridge ganz einfach über einen RS485-USB-Adapter angeschlossen. Die Anbindung an IPS ist dann recht einfach. Läuft bei mir seit 1,5 Jahren ohne Probleme.

@Maze77: Die Modbus-Paramterliste bekommst Du direkt von Zimmermann (Proxon).

@Pacsay: Das hört sich bei Dir nach Neubau an, richtig?

Gruß
Roberto

@Roberto
Jo, das ist richtig ein relativ neues WeberHaus, von denen mir leider keine wirklich guten Informationen zum Thema mitgeteilt wurden, wie ich die ganzen Einzelkomponenten zusammen unter einen Hut bekomme. Gottseidank bin ich auf dieses Forum gestoßen.

PS: mir kommen auch viele Bezeichnungen aus Deinem Profilfuß bekannt vor - da scheint es ähnliche Voraussetzungen zu geben…

Wir ham hier auch nen Weberhaus. Bei mir läuft ne Mischung aus Enocean und Homematik seit gut 2 Jahren.

Jetzt bin ich grad dran die Heizung anzubinden.

@Roberto
Danke, hatte da heute mal angefragt und hab die Excel-Tabelle mit Codes bekommen und die relevanten Informationen zu den Einstellungen.

Wenn das Projekt mal fertig ist, dann stell ich d Skripte zur Verfügung.

@Roberto
Was stellst du bei Modbus Gerät als Schreib und Lesesdresse ein?Ich kann mit 4x0100 als Modbuscode (noch) nix anfangen.

Hallo,

ich beschreibe mal kurz die Integration der Proxon-Heizung (mit Busbridge) in IPS.

  1. Anlegen einer Serial Port-Instanz (COM-Port mit dem RS485-USB-Adpater), die Paramter sind im Screenshot.
    proxon_serial_port.png

  2. Anlegen einer Modbus-Gateway-Instanz und verknüpfen mit dem Serial Port.
    proxon_modbus_gateway.png

  3. Anlegen einer Modbus-Instanz (z. B. Raumtemperatur Ist Wohnzimmer) und verknüpfen mit der Modbus-Instanz.
    proxon_raum_istwert.png

  4. Anlegen einer Modbus-Instanz (z. B. Raumtemperatur Soll lesen Wohnzimmer) und verknüpfen mit der Modbus-Instanz.
    proxon_raum_sollwert_lesen.png

  5. Anlegen einer Modbus-Instanz (z. B. Raumtemperatur Soll schreiben Wohnzimmer) und verknüpfen mit der Modbus-Instanz. Mit dieser Instanz könnt ihr dann die Soll-Temp setzen.
    proxon_raum_sollwert_schreiben.png

So geht ihr dann Raum für Raum durch. Bis hierher ist alles erstmal relativ einfach. Spannend wird es dann mit solchen Themen wie PTC-Freischaltung, Betriebsart usw. Dafür habe ich inzwischen jede Menge Skripte, die ich demnächst (wenn ich mal etwas mehr Luft habe) hier posten werde.

Ich hoffe ich kann damit den Einstieg erleichtern, ansonsten einfach fragen.

Gruß
bertel2013

Hallo Roberto,

Danke erstmal für die Rückmeldung! :slight_smile:

Klappt das setzen von Solltemperaturen bei Dir? Falls ja, welche IPS Version hat du?

Ich verwende die letzte Versionsnummer der 3.4 und dort geht das Senden via Modbus Address Modul NICHT! IPS sendet im Funktionscode 10, die Busbridge will aber Funktionscode 06 haben.

Ich habe das ganze mit einer eigenen Funktion gelöst, welche den Sendecode mittels SPRT an das Modbusgateway schickt.

Falls es jemand braucht, dann meldet euch.

@Roberto: Bestätige doch mal bitte, das bei dir das setzten von Solltemperaturen, Lüfterstufen etc pp funktioniert und du nicht nur ausliest.

Gruß
Maze

PPS: Die Liste (Excel) von Zimmermann ist aber auch fehlerhaft. Da stehen Register drauf, welche keine Information enthalten (zB aktueller Verbrauch)
Ferner werden einige wichtige Informationen noch vom HESP Bus auf Modbus übersetzt. (zB Abtau Status)
Und sie erwähnen nirgends, das die Bridge nur Code 06 annimmt…

Hallo Maze,

bei mir funktioniert das senden bzw. schreiben über Modbus. In einer der letzen 3.4er Versionen wurde was am Verhalten von Modbus geändert, deswegen bin ich noch auf der Version 3.4 #3778. IPS sendet nach dieser Version immer Funktionscode 10 anstatt 6, warum habe ich bis heute nicht richtig verstanden.
Das mit dem Excel-Sheet bzw. den auslesbaren Parametern habe ich schon ein paar mal mit Zimmermann diskutiert, ist aber nun mal so. Ich hätte auch gerne die Parameter der Magnetventile (Abtau) und Schieberposition, mal schauen ob irgendwann in ferner Zukunft noch was kommt.
Was mich auch ärgert ist, dass die auf Modbus RTU wandelt, und nicht wie es sich heutzutage gehört auf TCP! Immerhin wurde die Bridge neu entwickelt, aber so ist es leider oft bei kleinen Herstellern.

Gruß
Roberto

Danke, sowas hab ich ne gedacht :slight_smile:

Wenn du mal wechseln musst, das erzeugen der Schreibcodes und senden mittels SPRT ist recht einfach.

War nur nen stochern im dunklen, da man zu wenig Infos hat :slight_smile:

Theoretisch kannst du dir für 4.0 auch ein PHP-Modul bauen und dich hinter den Splitter hängen.
Dann kollidiert dein Senden auch nicht mit dem u.U. laufenden Abfragen.
Oder warten… da soll ja noch mal was umgebaut werden, ich hoffe mal zur 4.1 :wink:
Michael

An 4.0 Trau ich mich noch ned ran :wink:
Die Kollisionen verhinder ich mit IPS_Semaphore.

Die Modbus Abfragen laufen auch per Skript und „blockieren“ solange das senden :slight_smile:

Jetzt ist es soweit mit den nächsten Fragen… :slight_smile:

Zuerst einmal vielen Dank für die Erklärung mit den Screenshots, ich habe mir einen USB-485 Stecker besorgt und habe es geschafft auf Grund der tollen Beschreibung meine Proxon auszulesen.

Jetzt meine Frage: Was ich nicht geschafft habe ist Werte zu verändern :frowning:

Ich habe eine Word 16bit unsigned Instanz auf 4x0200 gelegt.(Wie im Screenshot)
Und dann habe ich versucht über ein Script ModBus_WriteRegisterWord(…) einen Wert für diese Instanz zu setzen, da habe ich dann eine Zeitüberschreitungsfehler beim Warten auf Antwort.

Was mache ich falsch? Habe ich irgendwas grundlegendes falsch verstanden?

Es wäre super, wenn ihr mir helfen könntet.

Grüße
Patrick

Hallo Patrick,

hast du meine Kommentare auch gelesen?

Roberto hat ein älteres Release, bei dem sendet die Instanz noch im 06 Format. Bei mir (und wohl auch bei dir) wir im 10 Format gesendet -> das wird nix [emoji85]

Ich habe mir Skripte geschrieben, welche den Sendcode inklusive crc erzeugen und dann via SPRT an die Bridge schicken.

Die ganzen Modbus Write Befehle kannst du (derzeit) vergessen…

Hat mir leider auch das ein oder andere graue Haar eingebracht.

Hallo Zusammen,

das es mich selbst einiges an Nerven und Zeit gekostet hat zu verstehen, warum IPS bei mir keine Schreibbefehle schickt, es aber angeblich funktioniert, hier nochmal zusammen gefasst die Ursache der Problematik und die Lösung, welche bei mir läuft:

Problematik:
Die Modbus-RTU Instanz sended in der aktuellen IPS 3.4 (und auch 4.x) auf Funktionscode 10! (steht auch so in der Anleitung)
Früher wurde im Funktionscode 06 gesendet. Roberto zB verwendet noch diese ältere Version.

Die Modbus-Bridge von Zimmermann nimmt nur Befehle im 06 Format an.

Lösung die bei mir Läuft:
Grundlage für die Sende und Empfangscodes ist die Excel-Tabelle, welche man von Zimmermann erhählt.
Spalte B enthält dort die Dezimalen Modbus-Codes (zB 4x0100 --> 100 in der Instanz).

Ich habe mich entschieden, hier nur kurz die Vorgehensweise zu beschreiben, da meine gesamte Umsetzung sehr detailiert ist und den Rahmen hier sprengt. (Automatisierungsskripte, wechselnde Variablendarstellungen, etc pp).

Ich hänge ein ZIP File an, in dem befinden sich folgende Dateien:

  • Modbus_CRC16.ips.php --> Diese Datei muss immer eingebunden sein, da sie den passenden CRC16 Code erzeugt.
  • PTC_schreiben.ips.php --> Beispiel wie ich die PTCs bei mir setze (7 PTCs und für je 1 PTC ist eine Boolean Variable unter der Modbus Instanz vorhanden)
  • Wert_schreiben.ips.php --> Diese Datei verwende ich zum Schreiben von Soll-Temperaturen, Luftautomatik und Intensiv-Lüftung. Ausgelöst wird dieses Skript bei Änderung der Bezugsvariable (Solltemperatur, etc pp)
  • Schalten.ips.php --> Standard Skript um Variablen in der Webfront Schaltbar zu machen
  • AbfrageIntervallSetzen.ips.php --> Verwende ich zum AbfrageIntervalle auf „0“ zu setzen und dann mit modifikation zur zyklischen Abfrage aller Modbus Module
    Modbus.zip (2.69 KB)

Betriebsarten und Lüfterstufen schalte ich mit eigenen Skripten und Programmen, da ich dort auch berücksichtige, welche Modi zur Verfügung stehen und welche nicht.

Aber jetzt mal im Detail erklärt, wie geschrieben wird:

  1. Unter jeder Modbus-Schreibe Instanz habe ich eine passende neue Variable hinzugefügt. zB Solltemperatur als Integer für die Solltemperaturen Solltemp.PNG
    1a) WriteAddress in der Schreibe Instanz hinterlegen :wink:

  2. Die Solltemp Variable zB hat dann ein VariablenProfil wie im Bild zu sehen erhalten und die Eigene Aktion geht auf das Schalten Skript.

    Wichtig hierbei ist, dass die Variable den Wert Übergibt, der benötigt wird!

  3. Wird die Variable geändert, löst sie folgendes Skript aus:

<?
include_once("\Proxon\Modbus_CRC16.ips.php");
IPS_SemaphoreEnter("Critical_ModBus", 4000); //Dauer sollte größer als die Laufzeit des Abfrage Skriptes sein!
if ($_IPS['SENDER'] == "Variable") {

$myInstanceID = IPS_GetParent($_IPS['VARIABLE']);

$BusID = "10"; // ModBus ID 10
$WriteCode = "06"; // Funktionscode
$TargetID = IPS_GetProperty($myInstanceID , "WriteAddress"); // Zieladresse
$myValue = $_IPS['VALUE']; // Zu schreibender Wert!
$myMessage = sprintf( "%02s", dechex( $BusID )).$WriteCode.sprintf( "%04s", dechex( $TargetID )).sprintf( "%04s", dechex( $myValue ));

$mySendCode = $myMessage .modbus_crc($myMessage); // Nachricht + CRC = SendCode
SPRT_SendText(15732, pack('H*',$mySendCode)); // wird an den Modbus Serial Port geschickt
IPS_SemaphoreLeave("Critical_ModBus");
};
?>

Die Grundlage des Schreibens habe ich dann auch für die Spezielleren Schreib-Routinen wie zB PTC verwendet. Dort wird der Wert aber noch Berechnet.

  1. Damit sich das Schreiben nicht mit dem Lesen „beisst“ habe ich bei allen Modbus-Modulen das AbfrageIntervall auf „0“ gesetzt und frage statt dessen zyklisch per Skript ab (alle 15 Sekunden zur Zeit). Das ganze noch mit Semaphore umhüllt und es gibt keine Probleme:

Zum setzen aller Intervalle auf 0, einfach die auskommentierten IPS_ Befehle einkommentieren und den Modbus_RequestRead auskommentieren.

<?
$mytime = 0; // in ms

$myArray = IPS_GetInstanceListByModuleID("{CB197E50-273D-4535-8C91-BB35273E3CA5}");

IPS_SemaphoreEnter("Critical_ModBus", 1000);
foreach ($myArray as $myMod)
{
	//IPS_SetProperty($myMod , "Poller", $mytime);
	//IPS_ApplyChanges($myMod);
	ModBus_RequestRead($myMod);
}
IPS_SemaphoreLeave("Critical_ModBus");
?>

Sodele,

nachdem ich den Text jetzt 2mal geschrieben habe, kann ich nicht mehr :slight_smile:

Hoffe das hilft erstmal weiter.

Gruß
Maze

Whow vielen Dank für den ausführlichen Post. - Da wäre ich selber schon früh ausgestiegen, ein Lob auf die Community! begeistert

IPS scheint mir halt doch an manchen Ecken ein „Bastelsystem“ zu sein - die Herausforderung herstellerübergreifend zu sein ist halt auch hoch…

Ich werde mich kommende Woche mal intensiv mit Deinen Erklärungen auseinandersetzen und hoffe, dass ich das System zum Laufen bekomme. Davon hängt auch meine Kaufentscheidung ab… Ich werde berichten, falls weitere Erfahrungen dienlich sind =)

Grüße
Patrick

Hallo.
Mit großem Neid habe ich die ganzen Kommentare bzgl. Proxon-Luftwärmepumpe und deren Steuerung gelesen. Wir haben auch ein WeberHaus mit der Proxon FWT-1 der Firma Zimmermann. Ist es richtig, dass ich zur Einbindung der Heizung in mein Smarthome zwingend die BusBridge der Firma Zimmermann benötige ? Diese finde ich nämlich mit kapp 800 € absolut überzogen.

Ich hoffe, es gibt einen günstigeren Weg der Steuerung.

Vielen Dank für Eure Antworten.
Guido

Hallo Guido,
da wirst du nicht drum rum kommen.
Leider übersetzt die bridge aber auch nicht alles in dem bus. es gibt immer noch einstellungen, welche nur am Hauptbedienterminal gemacht werden können.
Gruß Maze