CanOverEthernet: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Überschriften und Tippfehler)
K (Formatierung)
 
(21 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
|ModType=d
|ModType=d
|ModFTopic=96170
|ModFTopic=96170
|ModForumArea=Sonstige Systeme
|ModTechName=70_CanOverEthernet.pm, 71_COE_Node.pm
|ModTechName=70_CanOverEthernet.pm, 71_COE_Node.pm
|ModOwner=DelMar
|ModOwner={{Link2FU|26265|DelMar}}
}}
}}


{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist  diesem {{Link2Forum|Topic=96170|LinkText="Thread im Forum"}} zu entnehmen.}}
Dieses FHEM-Modul horcht auf Port 5441 nach UDP-Nachrichten, die dem Can-Over-Ethernet Protokoll folgen. Maßgebend für die Entwicklung des Moduls war die Einbindung in Steuerungen des Herstellers [https://www.ta.co.at/ Technische Alternative].
Für den Betrieb sind zwei Module nötig:
* https://github.com/delMar43/FHEM/blob/master/70_CanOverEthernet.pm
* https://github.com/delMar43/FHEM/blob/master/71_COE_Node.pm


Dieses FHEM-Modul horcht auf Port 5441 nach UDP-Nachrichten, die dem Can-Over-Ethernet Protokoll folgen. Maßgebend für die Entwicklung des Moduls war die Einbindung in Steuerungen der Firma Technische Alternative.
== Konfigurieren der Steuerung (am Beispiel UVR16x2) ==
 
Steuerungen, wie die UVR16x2 oder die UVR1611 haben selber keine Ethernet Anbindung, sondern können nur über den CAN-Bus Daten austauschen.
== Konfigurieren der Steuerung (zB UVR16x2) ==
Steuerungen, wie die UVR16x2 oder die UVR1611 haben selber keine Ethernet Anbindung, sondern können nur über CAN-Bus Daten austauschen.
Das CMI stellt das fehlende Bindeglied zwischen einer Steuerung und FHEM dar, da es CAN-Bus und Ethernet unter einen Hut bringt.
Das CMI stellt das fehlende Bindeglied zwischen einer Steuerung und FHEM dar, da es CAN-Bus und Ethernet unter einen Hut bringt.


Zeile 23: Zeile 19:
Speziell die Unterscheidung zwischen CAN-Bus und CAN-Over-Ethernet ist sehr wichtig, um alles zu verstehen.
Speziell die Unterscheidung zwischen CAN-Bus und CAN-Over-Ethernet ist sehr wichtig, um alles zu verstehen.


Um diesen Weg abzubilden, sind folgende Schritte nötig:<br>
Um diesen Weg abzubilden, sind folgende Schritte nötig:
# Echter Sensor: '''an der Steuerung''' wird der Wert eines echten Sensors einem CAN-Analogausgang zugewiesen.
# Echter Sensor: '''an der Steuerung''' wird der Wert eines echten Sensors einem CAN-Analogausgang zugewiesen.
# CAN-Analogwert: '''Am CMI''' wird der CAN-Analogeingang konfiguriert, damit das CMI weiß, um welchen Wert es sich hier handelt.
# CAN-Analogwert: '''Am CMI''' wird der CAN-Analogeingang konfiguriert, damit das CMI weiß, um welchen Wert es sich hier handelt.
# CanOverEthernet: '''Am CMI''' wird der CanOverEthernet-Ausgang so konfiguriert, dass er den Wert aus dem CAN-Eingang ins Ethernet pusht.
# CanOverEthernet: '''Am CMI''' wird der CanOverEthernet-Ausgang so konfiguriert, dass er den Wert aus dem CAN-Eingang ins Ethernet pusht.


Die folgenden Screenshots zeigen diese drei Schritte im Detail:<br>
Die folgenden Screenshots zeigen diese drei Schritte im Detail:
Als erstes muss man sich unter "Benutzer" entweder als Fachmann oder Experte anmelden. Das Passwort für den Experten sollte man von grundsätzlich bei der Einrichtung der Heizung erhalten haben. Sonst dort nachfragen, wo man die Steuerung gekauft hat.
Als erstes muss man sich unter "Benutzer" entweder als Fachmann oder Experte anmelden. Das Passwort für den Experten sollte man von grundsätzlich bei der Einrichtung der Heizung erhalten haben. Sonst dort nachfragen, wo man die Steuerung gekauft hat.


Zeile 40: Zeile 36:
In '''CAN-Einstellungen''' notieren wir uns den Wert, der unter "Knoten" dargestellt wird. Bei mir ist das zB <code>1</code>.
In '''CAN-Einstellungen''' notieren wir uns den Wert, der unter "Knoten" dargestellt wird. Bei mir ist das zB <code>1</code>.


Danach gehen wir ins Menü '''CAN-Analogausgänge''' (es gibt auch CAN-Digitalausgänge, die werden zumindest von diesem FHEM-Modul aber noch nicht ausgelesen)
Danach gehen wir ins Menü '''CAN-Analogausgänge''', oder '''CAN-Digitalausgänge'''. Je nachdem.
[[Datei:CMI Menü 2.1.jpg|zentriert|mini]]
[[Datei:CMI Menü 2.1.jpg|zentriert|mini]]
Auf diesem Bildschirm wählt man einen unbenutzten Ausgang. Wenn man als Experte angemeldet ist, kommt man zum folgenden Bildschirm.
Auf diesem Bildschirm wählt man einen unbenutzten Ausgang. Wenn man als Experte angemeldet ist, kommt man zum folgenden Bildschirm.
Zeile 56: Zeile 52:


== Konfigurieren des CMI ==
== Konfigurieren des CMI ==
[[Datei:CMI Menü Eingänge.jpg|zentriert|mini]]
[[Datei:CMI Menü Eingänge.jpg|zentriert|mini]]
Das CMI ist mit der Steuerung per CAN-Bus verbunden. Seine Aufgabe ist, den Wert vom CAN-Bus zu lesen. Da das CAN-Bus Protokoll ausschließlich Werte und Datentypen überträgt, müssen wir im CMI erst konfigurieren, welcher Wert das denn überhaupt ist, der über den CAN-Bus hereinkommt.
Das CMI ist mit der Steuerung per CAN-Bus verbunden. Seine Aufgabe ist, den Wert vom CAN-Bus zu lesen. Da das CAN-Bus Protokoll ausschließlich Werte und Datentypen überträgt, müssen wir im CMI erst konfigurieren, welcher Wert das denn überhaupt ist, der über den CAN-Bus hereinkommt.
Zeile 79: Zeile 74:
# Knoten: FHEM legt für jeden Knoten ein COE_Node Device an. Egal, welcher Wert hier verwendet wird, es macht Sinn, zusammengehörige Werte an die selbe Knotennummer zu schicken.
# Knoten: FHEM legt für jeden Knoten ein COE_Node Device an. Egal, welcher Wert hier verwendet wird, es macht Sinn, zusammengehörige Werte an die selbe Knotennummer zu schicken.
# Netzwerkausgang: sozusagen der Index des Wertes. Er wird im FHEM-Modul verwendet, um den Wert einem Reading zuzuweisen.
# Netzwerkausgang: sozusagen der Index des Wertes. Er wird im FHEM-Modul verwendet, um den Wert einem Reading zuzuweisen.
Die '''Sendebedingung''' ist vergleichbar mit dem vorigen Schirm. Genauere Infos dazu finden sich wiederum in der Dokumentation des CMI.<br>
Die '''Sendebedingung''' ist vergleichbar mit der vorigen Eingabemaske. Genauere Infos dazu finden sich wiederum in der Dokumentation des CMI.<br>
'''Aktueller Wert''' zeigt an, was es verspricht. Das ist der finale Beweis, ob man bis hierher alles richtig gemacht hat.
'''Aktueller Wert''' zeigt an, was es verspricht. Das ist der finale Beweis, ob man bis hierher alles richtig gemacht hat.


Zeile 85: Zeile 80:


== Konfigurieren von FHEM ==
== Konfigurieren von FHEM ==
=== Empfangen von Daten ===
Das hier beschriebene FHEM-Modul macht es FHEM möglich, die CanOverEthernet UDP-Datenpakete auszulesen und in Readings zu schreiben.<br>
Das hier beschriebene FHEM-Modul macht es FHEM möglich, die CanOverEthernet UDP-Datenpakete auszulesen und in Readings zu schreiben.<br>
Die Definition ist so einfach, wie nur irgendwie möglich:<br>
Die Definition ist so einfach, wie nur irgendwie möglich:<br>
Zeile 91: Zeile 87:


Sobald dieses Device existiert, müssen nun dort ein letztes Mal die Werte konfiguriert werden, damit sie richtig zu Readings zugeordnet werden können.<br>
Sobald dieses Device existiert, müssen nun dort ein letztes Mal die Werte konfiguriert werden, damit sie richtig zu Readings zugeordnet werden können.<br>
Das macht man über das Attribut <code>readingsConfig</code>.
Das macht man über das Attribut <code>readingsConfigAnalog</code> und <code>readingsConfigDigital</code>.
Beispiel:<br>
Beispiel:<br>
<code>attr cmi_node_2 readingsConfig 1=T.Kollektor 2=T.Solar_VL 3=T.Aussen</code><br/>
<code>attr COE_Node_cmi_2 readingsConfigAnalog 1=T.Kollektor 2=T.Solar_VL 3=T.Aussen</code><br />
Das Format ist immer <code>Index=Readingname</code>. Mehrere Readings werden durch Leerzeichen getrennt. Wenn etwas schiefgeht, prüfen, ob nicht eventuell ein Leerzeichen im Namen des Readings vorkommt.
Das Format ist immer <code>Index=Readingname</code>. Mehrere Readings werden durch Leerzeichen getrennt. Wenn etwas schiefgeht, prüfen, ob nicht eventuell ein Leerzeichen im Namen des Readings vorkommt. Das Format für <code>readingsConfigDigital</code> ist genau gleich.


Wenn alles gut gegangen ist, sollte man automatisch Readings in der folgenden Form vorfinden:
Wenn alles gut gegangen ist, sollte man automatisch Readings in der folgenden Form vorfinden:
[[Datei:Readings.jpg|mini|zentriert]]
[[Datei:Readings.jpg|mini|zentriert]]
=== Senden von Daten ===
Im CanOverEthernet Device können Werte and COE-Empfänger gesendet werden. Das kann zB eine UVR sein, aber auch eine andere FHEM Instanz, die für den Empfang per CanOverEthernet konfiguriert ist.<br>
Das Senden von analogen Daten funktioniert so:<br>
<code>set cmi sendDataAnalog 10.0.0.1 3 1=22.7;1 2=5.00;13 3=38;0</code>
<code>10.0.0.1</code> bezeichnet die IP des Empfängers. Der Port 5441 muss erreichbar sein.<br>
<code>3</code> bezeichnet die CAN-Knoten-ID.
<code>1=22.7;1</code> bedeutet, dass auf Kanal 1 der Wert 22.7 gesendet wird. Semicolon 1 gibt an, dass es sich um eine Temperatur handelt. Die Typen sind in der Doku gelistet: https://www.ta.co.at/download/datei/17511763-cmi-json-api/
Digitale Daten werden ähnlich verschickt. Der einzige Unterschied ist, dass der Typ nicht nötig ist und (natürlich) als Werte nur <code>0</code> und <code>1</code> erlaubt sind.
Wichtig: CanOverEthernet sendet immer mehrere Werte gleichzeitig übers Netzwerk.<br>
Wenn also zB auf Basis eines Notify erst ein Wert auf Kanal 1 und dann ein anderer Wert auf Kanal 2 verschickt wird, dann wird der jeweils andere Wert wieder mit 0 überschrieben. Deshalb ist es wichtig, immer alle Kanäle mit Werten zu befüllen, selbst wenn es keine Änderung gegeben hat.
Analoge Werte werden in Paketen von 4 verschickt. Dh die Kanäle 1-4, 5-8, 9-12, 13-16, 17-20, 21-24, 25-28, 29-32 werden jeweils gemeinsam versendet.
Digitale Werte werden alle innerhalb eines Paketes verschickt.
Am CMI selber ist keine Konfiguration nötig, es leitet eingehende Übertragungen einfach an alle CAN-Knoten weiter. Sobald ein Knoten (also zB die UVR) einen Wert richtig konfiguriert hat, ist dieser Verfügbar:
[[Datei:CAN-Analogeingang.png|mini|zentriert]]
Im Screenshot wurde also an die IP des CMI ein Wert geschickt. Als Empfänger wurde Knoten 3 angegeben. In Position 1 wird der Wert von Kanal 1 gespeichert.
[[Datei:CAN Analogeingänge.png|mini|zentriert]]
== Beispiele ==
Senden von Werten aus FHEM an ein CMI. Wie vorher beschrieben, ist es wichtig, immer alle Werte zu senden. Würde ein Kanal leergelassen, würde der vorher gesendete Wert beim Empfänger mit 0 überschrieben werden.
define nfySendTemperatures notify UVR_Temperaturen:.*
  set cmi sendDataAnalog 10.0.0.1 20
    1={(ReadingsVal("UVR_Temperaturen","Bad_Ist","99"))};;1
    2={(ReadingsVal("UVR_Temperaturen","Bad_Soll","99"))};;1
    3={(ReadingsVal("UVR_Temperaturen","Dach_Ist","99"))};;1
    4={(ReadingsVal("UVR_Temperaturen","Dach_Soll","99"))};;1
    5={(ReadingsVal("UVR_Temperaturen","Haus_Ist","99"))};;1
    6={(ReadingsVal("UVR_Temperaturen","Haus_Soll","99"))};;1
Danke an cobra112 aus dem Forum für {{Link2Forum|Topic=96170|Message=982328|LinkText=dieses Beispiel}}.
Hier ein Beispiel für DOIF. [https://forum.fhem.de/index.php/topic,96170.msg1127945.html#msg1127945 Danke an chunter1 aus dem Forum dafür].
Die Zeilenumbrüche sind nur zwecks besserer Lesbarkeit eingefügt und müssen entfernt werden, damit das Beispiel funktioniert.
([T_WZ:temperature] or [T_BAD:temperature]) ({
  fhem("
    set CMI sendDataAnalog 192.168.1.100 3
    1=".(sprintf("%.1f",ReadingsVal('T_WZ','temperature','0'))).";;;;1
    2=".(sprintf("%.1f",ReadingsVal('T_BAD','temperature','0'))).";;;;1
  ");; 0
})
Das <code>;; 0</code> am Ende des Beispiels ist wichtig, da das DOIF die Ausführung ansonsten mit einer Fehlermeldung quittiert, obwohl die Werte korrekt gesendet wurden.


== Alternative zu diesem Modul ==
== Alternative zu diesem Modul ==
Das CMI bietet auch eine API, mit der viele Werte abgerufen werden können. Im Vergleich zu diesem Modul ist die Konfiguration zwar einfacher, die Auswahl an Werten aber beschränkter. Informationen dazu gibt es hier [[TA_CMI_UVR16x2_UVR1611]]
Das CMI bietet auch eine JSON-API, mit der viele Werte abgerufen werden können. Die Abfrage per API ist zwar einfacher als mit diesem Modul, die Auswahl an Werten aber beschränkter und auf eine Abfrage pro Minute beschränkt. Informationen dazu gibt es hier [[TA_CMI_UVR16x2_UVR1611]]
 
== Datum / Uhrzeit automatisch beziehen ==
Das CMI kann Datum und Uhrzeit automatisch aus dem Internet beziehen, und diese können auch automatisch an sämtliche Geräte am Bus weitergegeben werden.
 
Damit das funktioniert, muss das CMI Knoten #1 sein. Den Rest erledigen die Geräte selbständig untereinander.

Aktuelle Version vom 1. Februar 2021, 11:08 Uhr

CanOverEthernet
Zweck / Funktion
Empfangen von Daten über Push-Nachricht über das CMI der Firma Technische Alternative
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Thema
Support (Forum) Sonstige Systeme
Modulname 70_CanOverEthernet.pm, 71_COE_Node.pm
Ersteller DelMar
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Dieses FHEM-Modul horcht auf Port 5441 nach UDP-Nachrichten, die dem Can-Over-Ethernet Protokoll folgen. Maßgebend für die Entwicklung des Moduls war die Einbindung in Steuerungen des Herstellers Technische Alternative.

Konfigurieren der Steuerung (am Beispiel UVR16x2)

Steuerungen, wie die UVR16x2 oder die UVR1611 haben selber keine Ethernet Anbindung, sondern können nur über den CAN-Bus Daten austauschen. Das CMI stellt das fehlende Bindeglied zwischen einer Steuerung und FHEM dar, da es CAN-Bus und Ethernet unter einen Hut bringt.

Die erstmalige Konfiguration, um Werte per CAN-Bus zu exportieren, kann sehr verwirrend sein. Grundsätzlich geht ein Wert aus dem Sensor folgenden Weg:
Sensor -> CAN-Bus -> CanOverEthernet -> Empfänger (zB FHEM)
Speziell die Unterscheidung zwischen CAN-Bus und CAN-Over-Ethernet ist sehr wichtig, um alles zu verstehen.

Um diesen Weg abzubilden, sind folgende Schritte nötig:

  1. Echter Sensor: an der Steuerung wird der Wert eines echten Sensors einem CAN-Analogausgang zugewiesen.
  2. CAN-Analogwert: Am CMI wird der CAN-Analogeingang konfiguriert, damit das CMI weiß, um welchen Wert es sich hier handelt.
  3. CanOverEthernet: Am CMI wird der CanOverEthernet-Ausgang so konfiguriert, dass er den Wert aus dem CAN-Eingang ins Ethernet pusht.

Die folgenden Screenshots zeigen diese drei Schritte im Detail: Als erstes muss man sich unter "Benutzer" entweder als Fachmann oder Experte anmelden. Das Passwort für den Experten sollte man von grundsätzlich bei der Einrichtung der Heizung erhalten haben. Sonst dort nachfragen, wo man die Steuerung gekauft hat.

CMI Menü 1.jpg

Dann muss CAN-Bus ausgewählt werden. In diesem Menü sind zwei Punkte wichtig:

  • CAN-Einstellungen
  • CAN-Analogausgänge

In CAN-Einstellungen notieren wir uns den Wert, der unter "Knoten" dargestellt wird. Bei mir ist das zB 1.

Danach gehen wir ins Menü CAN-Analogausgänge, oder CAN-Digitalausgänge. Je nachdem.

CMI Menü 2.1.jpg

Auf diesem Bildschirm wählt man einen unbenutzten Ausgang. Wenn man als Experte angemeldet ist, kommt man zum folgenden Bildschirm.

CMI Menü 2.2.jpg.jpg

Die erste Auswahl bezeichnet, woher der "echte" Sensorwert kommt. In diesem Beispiel ist es ein herkömmlicher "Eingang" der Steuerung.
In der zweiten Auswahl wählt man den Eingang, dessen Wert man verwenden möchte.
In der dritten Auswahl legt man fest, um welche Art von Wert es sich hierbei handelt. Die Bezeichnungen sollten eigentlich Sprechend sein.
In der vierten Auswahl legt man fest, welcher Messwert das ist. Wofür diese Information verwendet wird, weiß ich auch nicht.
Die fünfte Auswahl bietet vordefinierte Bezeichnungen an, unter welcher dieser Wert dann in der Liste "CAN-Analogausgang" geführt wird.

Die darunter liegenden Sendebedingungen erlauben noch, festzulegen, wie oft eine Aktualisierung gesendet werden soll. Ja, jeder möchte hier natürlich Echtzeit-Werte haben, es lohnt aber trotzdem, sich sinnvolle Werte zu überlegen.

Was haben wir bis hier erreicht? Der Wert aus einem analogen Sensor wird in den konfigurierten Intervallen in den CAN-Bus geschrieben. Der CAN-Bus ist noch nicht Ethernet, und für dieses FHEM-Modul noch nicht verwendbar. Nun kommt das CMI ins Spiel.

Konfigurieren des CMI

CMI Menü Eingänge.jpg

Das CMI ist mit der Steuerung per CAN-Bus verbunden. Seine Aufgabe ist, den Wert vom CAN-Bus zu lesen. Da das CAN-Bus Protokoll ausschließlich Werte und Datentypen überträgt, müssen wir im CMI erst konfigurieren, welcher Wert das denn überhaupt ist, der über den CAN-Bus hereinkommt.

Dazu wechseln wir ins Web-Interface des CMI und klicken in der Navigation oben auf "Einstellungen" und dann links auf "Eingänge", wie im Screenshot zu sehen. Hier wählen wir "CAN-Bus" und "Analog" aus, da wir ja im Interface der Steuerung einen CAN-Analogausgang konfiguriert haben.

Folgende Parameter sind nötig:

  1. Knotennummer: diese haben wir zu Beginn im Menü CAN-Einstellungen rausgefunden.
  2. Netzwerkausgang: das ist die Nummer in der Liste, unter welcher wir den CAN-Analogausgang konfiguriert haben.

Die restlichen Werte sind für die Einrichtung an dieser Stelle nicht relevant und können in der Doku nachgelesen werden.

Was haben wir bis hier erreicht? Das CMI liest die hier konfigurierten Werte vom CAN-Bus und sie stehen damit für weitere Zwecke zur Verfügung. Wie zum Beispiel in unserem Fall, den Wert per CanOverEthernet ins LAN zu senden. Wir sind beinahe am Ziel, nur ein Schritt ist noch nötig.

CMI Menü Ausgänge.jpg

Ebenfalls im Menü "Einstellungen" klicken wir nun links auf "Ausgänge" und daraufhin findet sich endlich der Begriff "CoE" in der Liste. Wir wählen hier wiederum "Analog" aus und klicken den ersten leeren Eintrag. Es folgt eine kurze Beschreibung der Parameter:

  1. Beschreibung: hier können wir eine Freitext Beschreibung angeben, wie auch zuvor dem Wert am analogen CAN-Eingang.
  2. Eingang: CAN-Bus
  3. darunter: hier muss sich nun der Wert finden, den wir im vorigen Schritt als analogen CAN-Bus Eingang konfiguriert haben.
  4. darunter: in diesem Beispiel steht hier "Messwert" und es gibt auch keine Alternativen. Der Wert wird wohl von der Konfiguration in der Steuerung übernommen.
  5. IP: an diese IP-Adresse werden die CanOverEthernet UDP-Datenpakete gesendet. Kurz: die IP von FHEM
  6. Knoten: FHEM legt für jeden Knoten ein COE_Node Device an. Egal, welcher Wert hier verwendet wird, es macht Sinn, zusammengehörige Werte an die selbe Knotennummer zu schicken.
  7. Netzwerkausgang: sozusagen der Index des Wertes. Er wird im FHEM-Modul verwendet, um den Wert einem Reading zuzuweisen.

Die Sendebedingung ist vergleichbar mit der vorigen Eingabemaske. Genauere Infos dazu finden sich wiederum in der Dokumentation des CMI.
Aktueller Wert zeigt an, was es verspricht. Das ist der finale Beweis, ob man bis hierher alles richtig gemacht hat.

Soweit, so gut. Die Konfiguration der Steuerung und des CMI ist soweit abgeschlossen. Nun fehlt nur noch, die Werte in FHEM als Readings zu hinterlegen.

Konfigurieren von FHEM

Empfangen von Daten

Das hier beschriebene FHEM-Modul macht es FHEM möglich, die CanOverEthernet UDP-Datenpakete auszulesen und in Readings zu schreiben.
Die Definition ist so einfach, wie nur irgendwie möglich:
defmod cmi CanOverEthernet Daraufhin horcht FHEM auf dem UDP-Port 5441. Sobald Werte ankommen, wird pro vorher definiertem Knoten ein eigenes Device von Typ COE_Node angelegt und im Raum "COE_Node" abgelegt.

Sobald dieses Device existiert, müssen nun dort ein letztes Mal die Werte konfiguriert werden, damit sie richtig zu Readings zugeordnet werden können.
Das macht man über das Attribut readingsConfigAnalog und readingsConfigDigital. Beispiel:
attr COE_Node_cmi_2 readingsConfigAnalog 1=T.Kollektor 2=T.Solar_VL 3=T.Aussen
Das Format ist immer Index=Readingname. Mehrere Readings werden durch Leerzeichen getrennt. Wenn etwas schiefgeht, prüfen, ob nicht eventuell ein Leerzeichen im Namen des Readings vorkommt. Das Format für readingsConfigDigital ist genau gleich.

Wenn alles gut gegangen ist, sollte man automatisch Readings in der folgenden Form vorfinden:

Readings.jpg

Senden von Daten

Im CanOverEthernet Device können Werte and COE-Empfänger gesendet werden. Das kann zB eine UVR sein, aber auch eine andere FHEM Instanz, die für den Empfang per CanOverEthernet konfiguriert ist.
Das Senden von analogen Daten funktioniert so:
set cmi sendDataAnalog 10.0.0.1 3 1=22.7;1 2=5.00;13 3=38;0 10.0.0.1 bezeichnet die IP des Empfängers. Der Port 5441 muss erreichbar sein.
3 bezeichnet die CAN-Knoten-ID. 1=22.7;1 bedeutet, dass auf Kanal 1 der Wert 22.7 gesendet wird. Semicolon 1 gibt an, dass es sich um eine Temperatur handelt. Die Typen sind in der Doku gelistet: https://www.ta.co.at/download/datei/17511763-cmi-json-api/

Digitale Daten werden ähnlich verschickt. Der einzige Unterschied ist, dass der Typ nicht nötig ist und (natürlich) als Werte nur 0 und 1 erlaubt sind.

Wichtig: CanOverEthernet sendet immer mehrere Werte gleichzeitig übers Netzwerk.
Wenn also zB auf Basis eines Notify erst ein Wert auf Kanal 1 und dann ein anderer Wert auf Kanal 2 verschickt wird, dann wird der jeweils andere Wert wieder mit 0 überschrieben. Deshalb ist es wichtig, immer alle Kanäle mit Werten zu befüllen, selbst wenn es keine Änderung gegeben hat.

Analoge Werte werden in Paketen von 4 verschickt. Dh die Kanäle 1-4, 5-8, 9-12, 13-16, 17-20, 21-24, 25-28, 29-32 werden jeweils gemeinsam versendet. Digitale Werte werden alle innerhalb eines Paketes verschickt.

Am CMI selber ist keine Konfiguration nötig, es leitet eingehende Übertragungen einfach an alle CAN-Knoten weiter. Sobald ein Knoten (also zB die UVR) einen Wert richtig konfiguriert hat, ist dieser Verfügbar:

CAN-Analogeingang.png

Im Screenshot wurde also an die IP des CMI ein Wert geschickt. Als Empfänger wurde Knoten 3 angegeben. In Position 1 wird der Wert von Kanal 1 gespeichert.

CAN Analogeingänge.png

Beispiele

Senden von Werten aus FHEM an ein CMI. Wie vorher beschrieben, ist es wichtig, immer alle Werte zu senden. Würde ein Kanal leergelassen, würde der vorher gesendete Wert beim Empfänger mit 0 überschrieben werden.

define nfySendTemperatures notify UVR_Temperaturen:.*
  set cmi sendDataAnalog 10.0.0.1 20
    1={(ReadingsVal("UVR_Temperaturen","Bad_Ist","99"))};;1
    2={(ReadingsVal("UVR_Temperaturen","Bad_Soll","99"))};;1
    3={(ReadingsVal("UVR_Temperaturen","Dach_Ist","99"))};;1
    4={(ReadingsVal("UVR_Temperaturen","Dach_Soll","99"))};;1
    5={(ReadingsVal("UVR_Temperaturen","Haus_Ist","99"))};;1
    6={(ReadingsVal("UVR_Temperaturen","Haus_Soll","99"))};;1

Danke an cobra112 aus dem Forum für dieses Beispiel.

Hier ein Beispiel für DOIF. Danke an chunter1 aus dem Forum dafür.

Die Zeilenumbrüche sind nur zwecks besserer Lesbarkeit eingefügt und müssen entfernt werden, damit das Beispiel funktioniert.

([T_WZ:temperature] or [T_BAD:temperature]) ({
  fhem("
    set CMI sendDataAnalog 192.168.1.100 3
    1=".(sprintf("%.1f",ReadingsVal('T_WZ','temperature','0'))).";;;;1
    2=".(sprintf("%.1f",ReadingsVal('T_BAD','temperature','0'))).";;;;1
  ");; 0
})

Das ;; 0 am Ende des Beispiels ist wichtig, da das DOIF die Ausführung ansonsten mit einer Fehlermeldung quittiert, obwohl die Werte korrekt gesendet wurden.

Alternative zu diesem Modul

Das CMI bietet auch eine JSON-API, mit der viele Werte abgerufen werden können. Die Abfrage per API ist zwar einfacher als mit diesem Modul, die Auswahl an Werten aber beschränkter und auf eine Abfrage pro Minute beschränkt. Informationen dazu gibt es hier TA_CMI_UVR16x2_UVR1611

Datum / Uhrzeit automatisch beziehen

Das CMI kann Datum und Uhrzeit automatisch aus dem Internet beziehen, und diese können auch automatisch an sämtliche Geräte am Bus weitergegeben werden.

Damit das funktioniert, muss das CMI Knoten #1 sein. Den Rest erledigen die Geräte selbständig untereinander.