Hallo Göran,
danke sehr (und mein herzliches Beileid).
gbglace hat geschrieben: ↑So Jun 07, 2020 12:37 pmModbus ist ja nun das nächste große Thema am TWS.
Ja, in dichter Folge mit MQTT und Rest-/Web-API. Wir implementieren zwar Modbus zuerst, allerdings werden sehr viele Designmerkmale für alles drei verwendet, auch von der Architektur, Editoren usw. so dass wir hoffen, dass wir in schneller Folge dann auch MQTT und Web-Schnittstellen hinbekommen. Das wird also ein heftiges Feuerwerk an Möglichkeiten im Spätsommer - Winter geben und DMX und anderes gewünschtes vergessen wir nicht dabei.
gbglace hat geschrieben: ↑So Jun 07, 2020 12:37 pmFür die aktuellen Helios KWL-Geräte die das Easoycontrol System als Steuerung haben gibt es wohl eine native Modbus TCP/IP Schnittstelle.
Ist diese freigeschaltet?
==> Kannst Du uns im Alpha-Bereich die IP-Adresse nennen, weil dann würden wir da gerne remote ein paar Abfrageversuche durchführen, weil das Geräte ist besonders....
gbglace hat geschrieben: ↑So Jun 07, 2020 12:37 pmUnd wenn ich das richtig grob überfliege scheint mir dieses pdf im Anhang auch eine sehr gut dokumentierte Schnittstelle zu sein.
Ich habe es mir durchgelesen, gestutzt, nochmal gelesen, am Kopf gekrazt, nochmal gelesen, das Drama erfassend zehn Eimer vollgekotzt, zwischendurch alles aufgewischt, bin raus, habe ein paar Bäume angeschrieben, das Universum um eine Erklärung gebeten und mich nun niedergeschlagen und leicht entrücktem Blick wieder hier an den Computer gesetzt.
Kurz, kommen wir zur Beileidsbekundung
Noch kein Drama - 1. Akt - Ein gutes Dokument verspricht einen guten Start und ein wohlwollendes Ende ohne Überraschungen
Die Formatierung des Dokumentes von Göran ist wirklich super und macht auf den unbedarften Leser einen tollen ersten Eindruck. Beim ersten darüberfliegen dachte ich mir auch, das ist eine selten gute Beschreibung der Modbus Implementierung.
Es wird Spannend - 2. Akt - Sieht nach einer Menge Funktionen aus. Wunderbar. Aber wo sind die Registeradressen?
Den Anfang des Dokuments habe ich erstmal überhüpft, schließlich kenne ich die Modbus Grundlagen. Dachte ich. Also erstmal in die Tabellen in der Mitte des Protokolls vertieft, man will ja wissen, was man so alles steuern kann.
Ja, da gibt es wohl jede Menge, sieht erstmal ordentlich aus. Sehen wir uns mal die Details an.
Hmm, kopfkratz, wo sind denn nun die Adressen der Modbus Register (dazu muss man sagen, dass ist überall ein kleines Drama, weil diese essentielle Information ist bei jedem Hersteller immer ein wenig kryptisch und versteckt, da wird mit verschiedenen Offsets gearbeitet und mal in Dezimal und mal in Hex und manchmal muss man noch den Function-Code Offset dazurechnen, also leider meist ein bisserl doof gemacht, deswegen habe ich das eigentliche große Drama nicht sofort erkannt).
Ich rolle mit den Augenbrauen, also irgendwie hat der Hersteller das in einer neuen Variante angegeben, die mir in den Dutzenden anderer Modbus Beschreibungen bislang nicht untergekommen ist. Ok, dazu lernen können wir ja, das Wetter ist eh Mist. Und ich liebe ja Herausforderungen.
Drama - 3. Akt - Mich trifft der Schlag. Es kommt zu ersten Wortfindungsstörungen
Ich lese weiter in der Tabelle und sehe unter "Type" immer char[n] und einen ominösen "Count" und eine sehr ominöse "Variable". Das kenne ich nicht.
Bei Modbus hat zwar einen einen Typ und sowas ähnliches wie Count (Anzahl der 16 Bit Register), aber Variable gibt es nur als Name, nicht als was funktionales, weil dafür hat man in Modbus die Adresse des Registers (wenn auch durchaus verklausuliert angegeben).
Aber alles in char? Auch nummerische Werte? Und warum hat eine Temperatur 7 chars?
Muss ich irgendwas an Modbus in den letzten sechs Monaten überlesen haben. Klar, kann schon passieren, zuerst immer den Fehler bei sich suchen. Fangen wir einfach mal etwas weiter vorne an, das mit den Char wollte ich doch jetzt kapieren. Lesen, staunen, lesen, kopfschütteln, lesen, schaum vor dem Mund. Ich bin erstmal sprachlos. Habe für Minuten Wortfindungssörungen. Laufe aufgeregt durch das Haus, meine Frau wundert sich über meinen Blick und das Kopfgeschüttel und das undeutliche Gemurmel. Sie sieht mich aufmunternd an und frägt "Forum ?" ich nicke kurz - sie nennt es den Forenblick - und ich ziehe erstmal weiter. Kaffee machen, an die frische Luft.
What in the hell machen die da eigentlich?
Um die Temperatur "25,5" (Grad Celsius) auszugeben, schreiben die doch tatsächlich den String "V00104=25.500000" in Register. Nicht in ein Register, sie verbrauchen dafür acht (8) ganze 16 Bit Register, weil die anstatt einem einfachen Integer einfach einen Kurzroman in acht Register schreiben.
Wenn wir uns jetzt im vergangenen Jahrtausend befinden würden, dann wäre das unter Absingen hässlicher Lieder ja womöglich noch verzeihlich, aber im Jahre 2020 den String "V00104=25.500000" auszugeben nur um "25,5" (Grad Celsius) zu übergeben ist das (aller-aller-aller)-schlechteste Codierungsbeispiel dass mir in mehreren Monaten Modbus Recherche untergekommen ist.
Für den Mitleser, so einen einfachen Zahlenwert kann man einfach in Festkomma-Integer als "255" speichern und braucht dann auch nur EINES der 16 Bit breiten Register. Oder für die Meister der fortschrittlichen Programmiertechnik als vorzeichenbehaftetes Fließkomma.
OMG und die schicken hier tatsächlich komplex formatierte ASCII Zeichenketten. Sowas habe ich zuletzt an Großrechnern gesehen aus den 60er Jahren über die man noch mit Fernschreibern kommuniziert hat und nur 5 Bit pro Zeichen zur Verfügung hatten.
Nein, wir sind noch nicht bei den Eimern. Ich dachte eigentlich nicht, dass es schlimmer kommt.
Großes Drama - 4. Akt - Brutal, hart und völlig unvorbereitet trifft mich die Wahrheit. Schock
Während ich noch diesen Codierungsmist überlege, inklusive Übergabe Null-terminierter Strings (Grüße an alle C Programmierer) suche ich immer noch meine Registeradressen.
Kurz zur Erklärung. Das ist bei Modbus so ein wenig wie auf dem Postamt bei den Postfächern oder an der Packstation. Für jeden Wert (= Empfänger) gibt es ein Fach (bei großen Werten sind auch mal mehrere unter einer Klappe zusammen) und darin ist dann der Wert. Also in Fach 1 für Temperatur, in Fach 2 für Luftfeuchte und in Fach 3 für VOC. Kennen wir auch von KNX so, da hat ein Sensor mehrere Objekte und die verbindet man mit GAs und wenn man nun eine GA abfrägt dann bekommt man den Wert von dem Objekt zurück. Nix besonderes.
Damit man also den richtigen Wert (Fach) adressieren kann, braucht man in der Liste auch die Nummern des Faches - äh - des Modbus Registers. Und manchmal auch die Breite, wenn der Wert so kodiert ist, dass er nicht in ein Fach - äh - in 16 Bit passt (lassen wir die Spezialität mit den 1 Bit Coils in Modbus mal zur Seite).
Warum haben die das hier nicht einfach hingeschrieben, zefix, muss man es einem so schwer machen?
Ok, also zurück an Anfang, gehe nicht über Los, ziehe keine Freizeit am Sonntag ein, die Kunden wollen schließlich die KWL steuern können.
Ich lese und lese. Und stocke. Ne, echt jetzt, das hab ich jetzt bestimmt falsch verstanden. Nochmal ganz kurz. Blutdruckmesser angeschlossen, 200 zu 180, das ist ungesund. Raus ins Freie, es nieselt, das kühlt ab.
Nochmal überlegt, was ich da gerade gelesen habe, das ist, nee, das glaube ich nicht, bin bestimmt überarbeitet.
Erfrischt, mit ordentlich sauberen Sauerstoff in Lunge und Adern wieder zurück an das pdf und nochmal lesen. Ganz langsam, damit wir nix übersehen.
Die mit großem Unglauben vernommene bittere Vermutung weicht der Erkenntnis, dass irgendeiner von uns beiden - das pdf oder ich - dem anderen einen Streich spielen will.
Ich hole die Eimer, sicher ist sicher. Mir wird grün im Gesicht
Die Beispiele jetzt genau ansehen. Hex für Hex vergleichen, die Aufrufparameter von dem Tool lernen, die Beispiele verinnerlichen. Ich glaube ich will weg hier

und zwar schnell
Einmal alles vollkotzen, raus gehen, Baum anschreien.
Es trifft mich wie ein Schlag. Das ist ja gar kein Modbus. Also nicht im üblichen Sinn. Das ist ein selbst gebasteltes Protokoll das in einem Modbus Frame versendet wird. Ich weiß gar nicht wie ich das beschreiben soll.
Versuch einer Beschreibung:
Gehen wir nochmal zum Postamt wegen der Postfächer. Aber nicht zum normalen Postamt, sodern zu dem von Helios. Wir kommen rein und sehen dort ein Postfach. Eines. Nicht mehrere. Nicht mit verschiedenen Nummern zum einfach greifen und mitnehmen, sondern ein einziges Postfach. Für alles.
Wie komme ich nun an meine Post - äh - Werte?
1. Man nimmt einen Zettel, schreibt dort in ASCII auf, welche Werte man lesen möchte, zum Beispiel "v00004\0" um das Datum auszulesen.
Hinweis: Das "\0" steht für Null-terminierter Sting, also sowas wie "NIL" in ASCII ["00" in Hex].
2. Dann schließt man die Klappe (das Datentelegram)
3. Als nächstes liegt dann die Post - äh - der Wert für das aktuelle Datum der KWL im gleichen Fach. Im Beispiel der Dokumentation wird das dann zurück übergeben mit "v00004=11.12.0013\0"
Was soll das? Das ganze schöne Konzept der 65.000 möglichen Registernummern - eines für jeden Wert - total verhunzt für ein total verrücktes "Scratchpad" Austauschformat? Das konnten die in Frankreich damals ja noch mit den Semaphoren besser.
Oder in KNX Sprech: Es gibt nur ein Objekt und eine GA. Wenn man einen Wert von einem (solchen total verkrüpelten KNX Sensor) lesen wollen würde, müsste man auf der GA eine "v0000x\0" schreiben (nicht leseanfrage, sondern ganz normal schreiben), auf dass man dann anschließend eine Leseanfrage auf der gleichen GA schicken kann, um nun den Inhalt dieses einen verfügbaren KNX Objektes auszulesen, wobei man eine lange ASCII-Zeichenfolge erhält, die einen schönen Zahlenwert - inklusive dem Dezimalpunkt als Punkt [Hex "2E"] - sendet.
Echt jetzt Helios? Meint ihr das tatsächlich ernst im Jahre 2020? Das hat mit Modbus nicht wirklich was zu tun. Weder sind die Werte in "Hex-ASCII" kodiert (was die bei Modbus etwas unpassend als ASCII bezeichnet, weil sie jede Hex-Stelle auf 8 Bit als 7 Bit ASCII Buchstaben senden) noch in normalem 8 Bit Datenforma, dafür als Helios-proprietäres-ASCII-Buchstaben-Zahlen-Dezimalpunkt-String-Gemisch und anstelle diese wunderschöne Registervielfalt zu nutzen, morst man das ganze umständlich über ein und dieselbe Adresse, nur mit unterschiedlicher Länge?
Das Urteil - 5. Akt - Ignoranz
Im Namen der Anwender ergeht folgendes Urteil. So ein Mist wird abgelehnt.
Bitte setzt Euch hin, lest die Modbus Spezifikation und dann setzt das dann auch biite konform um.
Bitte schreibt in großen klaren Worten in Eure jetzige Dokumentation, dass Eure Implementierung von "Modbus" so stark vom üblichen abweicht, dass die Bezeichnung "Modbus" eigentlich nur schwerlich vertretbar ist und die üblichen Adressierungs- und Kodierungskonzepte von Modbus nicht wirklich beachtet werden. Mithin dass man mit der meisten Modbus-Software bzw. Modbus Gateways nicht wirklich arbeiten kann.
Alternativ sind wir unter Einwurf klingender Münzen gerne bereit, eine eigene Implementierung des Helios-Spezial-Protokolls vorzunehmen.
gbglace hat geschrieben: ↑So Jun 07, 2020 12:37 pmDie Anzahl an Parametern die da in der Steuerung angesprochen werden können, lesend als auch schreibend ist schon enorm. Und wenn ich die Tabelle richtig deute kann man auch ganz gut die interne Regelung laufen lassen, aber für Temperatur / Luftfeuchte und VOC gern extern also via TWS und 1-wire Werte reinschreiben. Das wäre ja mal eine tolle Sache. Dann braucht es im TWS eigentlich keine komplexe Lüftersteuerung wenn das da drinnen gut geht.
Ob ich das noch glauben kann?
gbglace hat geschrieben: ↑So Jun 07, 2020 12:37 pmDas schaut alles nach ein paar Wochen Urlaub aus um das alles mal auszuprobieren.
Oder interpretiere ich da was falsch in die Angaben?
Mach ein Sabatical draus.
gbglace hat geschrieben: ↑So Jun 07, 2020 12:37 pmIrgendwer hier in der Runde der auch ne Helios mit Eayscontrol verbaut hat?
Ich hoffe nicht.
gbglace hat geschrieben: ↑So Jun 07, 2020 12:37 pmNeben der Solarelemente, die wohl viel mit Modbus machen, womöglich auch ein interessantes Objekt für die Kundschaft.
Ja, das ist echt eine Herausforderung
gbglace hat geschrieben: ↑So Jun 07, 2020 12:37 pmIm KNX-UF wird ja auch immer oft gefragt welche KWL kann man empfehlen, weil sie gut in den KNX integrierbar ist. Wenn das mit dem Modbus im TWS gut zu bedienen ist, ist das für mich zukünftig auf jeden Fall immer eine Empfehlung TWS+Helios.
Was soll ich sagen?
Das umzusetzen bedeutet, das ganze Modbus Konzept und die Datenstruktur, den Config-Editor - alles was darauf beruht das "ein Register - ein Wert" beruht können wir in die Tonne treten. Das kostet uns einen unteren fünfstelligen Betrag für diese völlig abweichende Implementierung.
Der Vorteil ist natürlich, das kann vermutlich kein anderes KNX-to-Modbus Gateway, das wäre ein echtes Alleinstellungsmerkmal. Aber wie soll ich meinen Entwicklern das verkaufen. Wir wollen doch auch Spaß an der Arbeit haben.
Ich bin echt ein wenig ratlos damit. Was meint ihr?
Das mindeste ist, dass Du bei denen mal anfrägst, ob die das Dokument vom letzten ersten April versehentlich haben liegengelassen. Oder ob sie das mit einer neuen Firmware ändern, weil Ihnen das schon mehrere hundert Leute um die Ohren gehaut haben. Aber vielleicht täusche ich mich ja und alles ist ganz normal so, schließlich soll man ja Kreativität unter Entwicklern fördern und nichts ist so spannend, wenn man das eine drauf schreibt und dann im Detail was anderes macht.
Falls ich jemandem auf den Schlips getreten bin, bitte ich um Entschuldigung.
lg
Stefan