[Modul] CoE-Knoten (JoTTACoE) - Technische Alternative via CAN over Ethernet (CoE)

Hallo @jotata
ich habe das ganze noch einmal nachgestellt und noch einen Screenshot vom Debug-Log + vom COE-Ausgang gemacht.

Genau, in IPS, schreibe ich den Wert auf A2.
Der Wert ist beides male aber 2, unabhängig von kWh oder kW, da der Wert dahinter gleich ist in Bezug auf die Anzahl der Stellen. (Hoffe ich verstehe dich richtig)

Im CMI selbst hatte ich den Wert nicht erst kürzlich auf KW geändert.



Hallo @Daste,

danke für deine zusätzlichen PrintScreens. Gemäss diesen gibt es bei dir eine Datenübertragung von CAN-Gerät zu IPS und eine von IPS zu CMI/CAN-Gerät. Die Erste ist bei dir wie folgt konfiguriert:
CAN-Gerät (K1/A2) → (CAN A1) CMI (CoE K22/A1) → (A1) IPS

  • Auf der CMI holst du den Wert „Heizstab Leistung“ vom CAN-Bus (Knoten 1 Ausgang 2) und legst diesen auf der CMI unter dem Eingang CAN-Bus Analog 1 ab.
  • Anschliessend sendest du den Wert von der CMI Eingang CAN-Bus Analog 1 an die CMI (192.168…) via Ausgang CoE Analog 1. Dabei definiert du, dass die CMI für diese Verbindung die KnotenNr 22 und den Ausgang A1 nutzen soll.
  • Auf deiner IPS empfängst du vermutlich von Knoten 22 (im PrintScreen nicht ersichtlich) und hast dafür die Variable A1 korrekt als Eingang konfiguriert.
  • Der Wert von 0.2kW wird somit korrekt vom CAN-Gerät zu IPS übertragen und dort in A1 angezeigt.
  • Zusätzlich erwartest du auf IPS noch einen eingehenden Wert von CMI (K22/A4). Ob du dort etwas seitens der CMI konfiguriert hast, kann ich so nicht sehen. In deinem PrintScreen vom Debug-Log sind keine eingehenden Meldungen von der CMI ersichtlich.

Beim zweiten Teil ist folgendes konfiguriert:
IPS (K22/A2) → CMI/CAN-Gerät
IPS (K22/A3) → CMI/CAN-Gerät
IPS (K22/D1) → CMI/CAN-Gerät

  • Im Debug-Log ist ersichtlich, dass die Werte A2, A3, D1 an die CMI/CAN-Gerät gesendet werden. Diese werden allerdings ohne Einheit gesendet, da du auf der IPS-Variable kein Profil aktiviert hast. Wenn du da auch ein Profil vom Modul (JoTTACoE..) definierst, wird dies per CoE mitgesendet.
  • Diese Werte siehst du auf der CMI nirgends direkt. Die CMI leitet die Daten einfach an den CAN-Bus weiter mit dem Knoten 22 und dem entsprechenden Ausgang als Absender.
  • Hier müsstest du nun auf einem (oder auch mehreren) deiner CAN-Geräte wieder einen Eingang definieren, welcher die Daten vom Knoten 22 einliest und bei sich in einem Eingang ablegt. Im Moment müsstest du dabei auch die Einheit definieren. Wenn du in IPS ein Variablen-Profil definierst hast, kanns du auf dem CAN-Gerät die Einheit auf Automatisch stellen.

Ich weiss, dass die IPS-Konfiguration für die Variablen (Eingang/Ausgang, usw.) etwas kompliziert ist (siehe Doku). Du musst das immer aus Sicht von IPS anschauen. Wenn es bei der CMI ein Ausgang ist, so ist es bei IPS ein Eingang und umgekehrt. Das ist die Logik, wie ich sie von Technische Alternative für das CoE-Protokoll verstanden habe :slightly_smiling_face:

Ich hoffe, dass ist nun etwas besser verständlich. Ansonsten müsstest du nochmals einen Debug-Log (aber diesmal mit RECEIVE Data) posten.

Gruss
jotata

@jotata, vielen Dank für die Ausführliche Erklärung! :slight_smile:

Ich werde das ganze noch einmal genau durchgehen und überprüfen und dann Rückmeldung geben.

@jotata:
Jetzt funktioniert es :slight_smile:
Es war in meinem Script zu Ansterung des Heizstabs bei der Berechnung der zur Verfügung stehenden Leistung noch ein Fehler. Diesen habe ich berichtigt, jetzt wird der Wert korrekt übertragen.

Danke dir!

Danke für eure Tests/Feedbacks.
Version 1.2 ist nun offiziell im Modul-Store verfügbar.

Details siehe Changelog.

Gruss
jotata

Guten Morgen,
ich glaube ich habe noch einen Bug gefunden bzw. kann mir das verhalten nicht erklären, weil es im Hintergrund der gleiche Vorgang ist, das eine variable aktualisiert wird, aber das Verhalten ist unterschiedlich.

Und zwar bei der Option, wann bzw. wie oft die Änderungen an Ausgängen ans CMI gesendet werden:


Folgendes Verhalten:
In die Variable in IP-Symcon wird über ein Skript geschrieben, wie viel Überschuss für den Heizstab zur Verfügung steht. Dieser Wert soll dann im Intervall von 5 Minunten, oder bei aktueller Änderung ans CMI geschickt werden. In diesem Fall haben wir eine aktive Änderung durch ein Skript und ich erwarte das der Wert direkt gesendet wird.

Problem: Der Wert wird nicht direkt ans CMI gesendet, erst nach ein paar Minuten.
Ich hatte mal gestoppt es waren ca. 3:45 Minuten. Hier hätte ich 5 Minuten erwartet.

Das komische ist, wenn ich einen Rechtsklick auf die Variable mache und sage „Variable verändern“ wie auf dem Bild, dann wird der Wert innerhalb von ca. 5 Sekunden ans CMI übertragen.
manuelle_änderung

Hast du hier eine Idee?
Sag bescheid wenn du noch weitere Details benötigst.
(Ich erstelle dir auch gern ein kurzes Video wenn es dann besser zu verstehen ist)

Hallo @Daste,

schaltest du im Script die Variabel mit

  • SetValue(ID, Wert) => keine sofortige Übermittlung, sondern erst nach max 5 Minuten (Timer)
  • RequestAction(ID, Wert) => sofortige Übermittlung, dabei können 3 Sek Verzögerung durch IPS schon sein, je nach dem was da bei dir alles läuft.

So wäre das Verhalten korrekt und entspricht dem Standard vonIPS zur Datenübertragung.

Falls es bei dir anders ist, müsstest du mir den entsprechenden Teil des Scripts posten, damit ich mir das anschauen kann.

Gruss
Jotata

@jotata
Das ware es, ich habe die Variable im Script mit SetValue anstatt mit RequestAction geschalten.
Jetzt funktioniert es einwandfrei, schaltet jetzt innerhalb von 5 - 10 Sekunden.

Wie auch von dir in der Doku beschrieben:

Danke nochmals.

Hallo Jotata,

Heute hatte ich Zeit für dein Update.

Wenn ich den Haken aus „Empfange alle Daten“ nehme dann kommen keine Daten.



image

Hast Du einen Tipp was ich falsch mache?

Gruß Christian

Hallo @Bussard013,

kannst du den Haken „Empfange alle Daten“ aktivieren und anschliessend einen PrintScreen vom DebugLog posten?

Welche Version von IPS verwendest du auf welchem OS? Welche Firmware-Version hat deine CMI?

Gruss, jotata

Hallo Jotata,

Vielen Dank für Deine Hilfe.

CMI V1.40.1
IP-Symcon 6.3, Raspberry Pi (arm64), 09.02.2023, ce4bc83d8964
VERSION=„11 (bullseye)“

Gruß Christian

Hallo @Bussard013,

Da haben wir wieder das Problem wie im November 21. Nur habe ich das damals mit einer Anpassung im Code so gelöst, dass der Filter entsprechend auf Gross-Schreibung geändert wird (.*„Buffer“\:"\\u001E.*„ClientIP“\:„192\.168\.2\.34“.*). Nun wird der Wert bei dir gemäss DebugLog aber plötzlich wieder mit Kleinschreibung ( \u001e) übermittelt und der Filter funktioniert daher nicht mehr :frowning:

Dieses Problem tritt nur bei bestimmten KnotenNr (wie bei dir 30) auf. Wenn du als KnotenNr 10 verwendest, ergibt das einen Filter von .*„Buffer“\:"\\n.*„ClientIP“\:„192\.168\.2\.34“.* und damit würde es funktionieren.

Das Problem wird in der Doku für SetReceiveDataFilter beschrieben. Allerdings weiss ich nun nicht ob hier in IPS etwas geändert wurde oder ob das OS-Abhängig ist. Ich könnte natürlich einfach die Änderung auf Grossschreibung rückgängig machen, aber dann geht es ev. in einer anderen Konstellation nicht mehr :flushed:

Ich habe nun einmal versucht den Filter Case-Insensitive zu setzen (/.*„Buffer“\:"\\u001E.*„ClientIP“\:„192\.168\.2\.34“.*/i), dann kommen aber überhaupt keine Daten mehr an. Gemäss https://regex101.com/ funktioniert der Filter aber :thinking:

Für die Erstellung des Filters verwende ich folgenden Code:

$remoteNodeNr = trim(json_encode(chr($this->ReadPropertyInteger('RemoteNodeNr')), JSON_UNESCAPED_SLASHES), '"'); 
if (substr($remoteNodeNr, 0, 2) === '\u') { //Anpassung November 21
    $remoteNodeNr = '\u' . strtoupper(substr($remoteNodeNr, 2)); 
}
if ($remoteNodeNr === '\u0000') { //0 => Empfang deaktiviert
    $filter = 'DEAKTIVIERT';
} else { //Empfang aktiviert
    $remoteIP = $this->ReadPropertyString('RemoteIP');
    $filter = '.*' . preg_quote('"Buffer":"' . $remoteNodeNr); 
    $filter .= '.*' . preg_quote('"ClientIP":"' . $remoteIP . '"'); 
    $filter = "/$filter.*/i"; //Versuchter Fix, bringt aber nix
}
//$this->SetReceiveDataFilter("$filter.*");//Ohne versuchtem Fix
$this->SetReceiveDataFilter($filter);//Mit versuchtem Fix

Werden ev. seitens IPS die RegEx-Operatoren (/i) beim setzen von ReceiveDataFilter verändert oder eigene hinzugefügt? Vielleicht stehe ich auch sonst einfach auf dem Schlauch :roll_eyes:

Vielleicht hat uns da @paresy oder sonst jemand vom IPS-Team einen Tipp?

Gruss
jotata

Hallo jotata,

diese Woche habe ich mein System auf 7.0 hochgezogen.
Leider funktioniert CoE-Knoten nicht mehr. Wenn ich die Instanze öffne bekomme ich eine Fehlermeldung:
image

CMI
V: 1.41.3

Guten Morgen,
abwechselnd mit der obigen Meldung bekomme ich noch diese:
image

Im UDP kommen die Werte vom CMI noch an.

Gruß Christian

Hallo,

Habe das Problem gefunden: IPSLibrary gelöscht und alles geht wieder.

Gruß Christian

Hallo zusammen,

Vielen Dank @jotata für das tolle Modul.

Ich musste mein CMI auf Version 1.43.3 updaten. Seitdem kommen keine Werte mehr von TA zu IPSymcon. Von IPSymcon zu TA senden funktioniert. Ist das Problem vielleicht schon bekannt?

Viele Grüße
Schwamme

Hallo,
ich wollte meine Heizung einbinden. Leider scheitere ich schon ganz am Anfang und bekomme direkt nach der Installation ein Ausrufezeichen an der Instanz. „Diese Instanz ist fehlerhaft“. Irgendwas scheine ich grundssätzlich falsch zu machen. Die Einstellungen habe ich aber mehrfach kontrolliert und es sind ja auch nur sehr wenige. Hat jemand eine Idee, wo ich anfangen kann nach dem Fehler zu suchen?