Technische Alternative: C.M.I. - Control and Monitoring Interface

Wir haben zur 4.3 das Modul erweitert, sodass auch die Netzwerk Ein-/Ausgänge enthalten sind.

paresy

Hi,

meine alte Heizungssteuerung funktioniert nicht so, wie ich mir das vorstelle. Daher bin ich auf Suche nach Ersatz.

Bei meiner Recherche bin ich auf 2 Lösungen gestoßen: Loxone und TA UVR16x2 mit CMI

Ich denke, dass für eine Heizungsteuerung TA die bessere Wahl ist.

Die neue Steuerung möchte ich in Symcon integrieren. Mittlerweile gibt es ja für die CMI eine JSON API. Aus der Doku werde ich aber nicht richtig schlau. Kann man mittels der API nur Werte lesen oder auch setzen? Kann jemand bestätigen, dass das Setzen von Werten möglich ist?

Danke und viele Grüße
Predi

Habe am gleiche Problem gesessen. Fixwert ändern. Bei mir hat es weder im Browser noch per Script funktioniert.

Url lt. Wireshark

http://192.168.1.117/INCLUDE/change.cgi?changeadrx2=0100004414D101&changetox2=20&_=1502752852455

Url mit der es tut

http://admin:password@192.168.1.117/INCLUDE/change.cgi?changeadrx2=0100004414D101&changetox2=20.0

Der Teil „&_=1502752852455“ ist unwichtig. Der ist nur für das Webinterface der CMI interessant. Wichtig ist Username und Passwort vor dem Host bzw. IP.

Viele Grüße
predi ger many

Hallo
Habe seit heute meine UVR1611 mit einem CMI verbunden weil mein altes BL-Net defekt war. Die Verbindung von CMI zu UVR1611 funktioniert.
Jetzt wollte ich das ganze in IPS 4.3 einbinden. Ich habe eine Instanz UVR1611 (CMI) hinzugefügt, die entsprechende IP-Adresse eingegeben, die Knotennummer des CMI und eine Intervallzeit. In der übergeordneten Instanz habe ich noch Benutzername und Passwort eingegeben. Wenn ich in der UVR1611 (CMI) - Instanz bei Testumgebung auf „Update“ klicke, bekomme ich folgende Fehlermeldung:

PHP-Error- Node not available
Error in Script - on line 3
Node not available

Was mach ich da falsch?
Mit BL-Net lief das alles ohne Probleme.

MfG
computerpap

Du must die Knotennummer vom UVR1611 eingeben.

Das wars, danke Christian.

Hallo!

Ich versuche gerade den Sollwert von meinen Heizkreisen auszulesen.
UVR1611 hängt an einem C.M.I. den Wert würde ich gerne mit einem Text Parser auslesen.

HEIZKR.1       F: 3<a href="menupage.cgi?page=0103580E">➤</a><br>
BETRIEB: STANDBY    <a href="019003301D" id="a019003301D" class="changer">⇔</a><span id="019003301D" class="changer"></span><br>
Traum.ABSENK:  8 °C <a href="01B003300D" id="a01B003300D" class="changer">⇔</a><span id="01B003300D" class="changer"></span><br>
Traum.NORMAL: 20 °C <a href="01B003300C" id="a01B003300C" class="changer">⇔</a><span id="01B003300C" class="changer"></span><br>
         ZEITPROG.: <a href="menupage.cgi?page=0103580F">➤</a><br>
VORLAUFTEMPERATUR:<br>
Tvorl.IST:  44,1 °C<br>
Tvorl.SOLL:  5,0 °C<br>
         HEIZKURVE: <a href="menupage.cgi?page=01035900">➤</a><br>
---------------------<br>
HEIZKR.2       F:16<a href="menupage.cgi?page=0110580E">➤</a><br>
BETRIEB: STANDBY    <a href="019010301D" id="a019010301D" class="changer">⇔</a><span id="019010301D" class="changer"></span><br>
Traum.ABSENK:  8 °C <a href="01B010300D" id="a01B010300D" class="changer">⇔</a><span id="01B010300D" class="changer"></span><br>
Traum.NORMAL: 20 °C <a href="01B010300C" id="a01B010300C" class="changer">⇔</a><span id="01B010300C" class="changer"></span><br>
         ZEITPROG.: <a href="menupage.cgi?page=0110580F">➤</a><br>
VORLAUFTEMPERATUR:<br>
Tvorl.IST:  28,2 °C<br>
Tvorl.SOLL:  5,0 °C<br>
*********************<br>

Im Text Parser hab ich „Text ausschneiden zwischen“ ausgewählt.

Jetzt müsste ich für Heizk.1 folgendes eingeben:
Tag eins: Tvorl.SOLL:
Tag zwei: °C<br>

Und für Heizk.2:
Tag eins: Tvorl.SOLL:
Tag zwei: °C<br>
*********************<br>

Beim Tag zwei hab ich das Problem das es 2 Zeilen sind! Wie gebe ich das im Text Parser ein?

MfG
Erwoolf

Hallo!

Ich habe gerade versucht Fixwerte in der UVR zu ändern über den HTTP GET Aufruf mit change.cgi.

Es funktioniert soweit auch, man muss jedoch darauf achten dass man das Cookie angibt welches zuvor beim Anmelden angelegt wurde. Das bedeutet, um eine dauerhaft funktionierende Lösung über diesen Weg zu erreichen muss ich noch irgendwie die Anmeldung beim CMI im IPS „automatisieren“. Hat da eventuell jemand eine Idee?

LG, Rainer.

Hi!

damit funktioniert jetzt das Schreiben der Werte!
Man muss sich zuvor jedoch als „Experte“ anmelden damit man die Fixwerte in der UVR ändern kann, deshalb 2x der Webrequest. Die URLs müsst ihr natürlich anpassen an eure Steuerung, da steckt ja auch das Passwort für den „Experten“ drin (bei mir noch default „128“).

<?

//Dokumentation: https://www.symcon.de/service/dokumentation/konzepte/skripte/aktionsskripte/
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "http://192.168.1.52/INCLUDE/devpagexUser.cgi?changeuserx2=010257ff128",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "authorization: Basic YOUR_CREDENTIALS_HERE",
    "cache-control: no-cache"    
  ),
));

$canremote = curl_exec($curl);

curl_setopt_array($curl, array(
  CURLOPT_URL => "http://cmi/INCLUDE/change.cgi?changeadrx2=0100004414D101&changetox2=".$_IPS['VALUE'],
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "authorization: Basic YOUR_CREDENTIALS_HERE",
	"Cookie: canremote1=".$canremote,
    "cache-control: no-cache"    
  ),
));

$response = curl_exec($curl);

print($response);

curl_close($curl);
?>

Schöner Ansatz:)

Beim mir funktioniert es leider nicht. Folgenden Fehler:

CMI Server ErrorError 401 - Unauthorized AccessYou are not authorized to access this server.www.ta.co.at
| ©2008-2017 Technische Alternative RT GmbH, Amaliendorf

Habe heute auch zwei Instanzen für meine TA-Umgebung (CMI, 1x UVR16x2, 1x UVR1611) angelegt.
Die Ein- und Augänge werden soweit ordentlich anglegt (bei der 1611 bis Input 16 und nur bis Output 13). Nun gibt es aber noch etliche Werte, die an der UVR16x2 über DL-Bus anliegen und leider nicht eingelesen werden. Auch die weiteren internen Werte (Analog 17 bis Analog 57) die von großem Interessen sein würden bekomme ich nicht.

Was kan mn tun? kann man die Variablen manuell anlegen und dann auslesen?

Dank und Gruß
tango

Nein, bisher nicht. Du müsstest bei der Technischen Alternative nachfragen, ob die die API erweitern.

paresy

Ich habe 3 UVRs. Ich schreibe alle Werte, welche ich nach extern haben will auf den CAN-BUS. In der CMI lese ich die Werte dann ein und gebe sie Richtung ModbusTCP. Auf der anderen Seite holt Symcon die Werte dann ab. Schau dir mal meine Anleitung für ModbusTCP an. Läuft seit Monaten absolut zuverlässig und stabil

Ah danke, hört sich gut an!
Brauche ich da ein extra ModbusTCP-gateway für den CMI? Oder wie landen die Daten auf dem Modbus? In die Symcon kommen sie ja über TCP und eine entsprechende I/O-Instanz.

Hallo,

Ich hab mich grad ein wenig mit dem TA-Designer beschäftigt.

Damit kann man viele Werte der UVR 1611 im Schema darstellen z.B. Heizkreisvorlaufsolltemperatur!

2018-02-16 17_52_48-TA-Designer - 1234 - [C.M.I. 1].png

Jetzt ware es aber super wenn man diese Werte auch ins IPS bekommen könnte…
Habt ihr euch damit schon mal beschäftigt?

Gruß
Erwoolf

Hallo Erwoolf,
jein, das geht. Voraussetzung ist ein Bootloader oder (viel besser) eine C.M.I. Ich gehe davon aus du besitzt eine C.M.I.

Möglichkeit 1:
Eine neue Instanz: Hersteller"Technische Alternative", Geräte „UVR1611 (C.M.I)“, „UVR1611 (BL-NET)“ oder „UVR16x2 (C.M.I)“
Je nach Gerätegeneration (du hast eine UVR1611 lt. Screenshot) das entsprechende Interface auswählen.
Konfiguration eintragen, Optionen Wählen (bei der UVR1611 ist das überschaubar) und du bekommst alle Aus- und EIngänge als auch Netzwerkein- und ausgänge. Es gehen nicht alle zusätzlichen Ausgänge (über Platinenerweiterung), weiß nicht genau welche, wurde hier aber schon mal diskutiert.

Vorteil:
-Du bekommst ratzfatz alles was in der UVR auf den Ein- und Ausgängen definiert ist. Du müsstest also gewünschte Ergebnisse der Funktionen auf den CAN legen, damit die Info’s ankommen.

  • Support, da offizielle API mit JSON
    Nachteil:
  • Ein- und Ausgänge beschränkt (16 Eingänge, 13 Ausgänge, 16 CAN digital, 16 CAN analog). Hier ist auch nicht mehr zu Erwarten, da die UVR1611 abgekündigt ist. Die UVR16x2 kann hier deutlich mehr. Es werden einige Geräte mehr der aktuellen Gerätegeneration unterstützt (sieht man in der Geräteauswahl wenn man die TA Instanz anlegt).
  • Abfrage 1x/Minute (bei einer UVR, bei 2 UVR 1x/2Minuten, etc. )
  • Nur Werte von Erweiterungen (CAN I/O, Monitor) möglich, die auf den UVR CAN Eingängen empfangen werden
  • Kein Schalten möglich

Möglichkeit 2:
Parsen der C.M.I/Bootloader Weboberfläche.
Pro Seite einen WWW-Reader anlegen (z.B. http://Y.our.I.P/schematic_files/1.cgi) und dann mit einem Textparser auslesen (dazu die Seite aufrufen und sich im Quelltext die Tags suchen zwischen denen der Wert steht.
Hier ist es ratsam eine Seite zu erstellen, die Strukturiert nur die plain Werte enthält, dann kann man auch sicher sein die Werte halbwegs ordentlich zu bekommen (bessere Beispiele als meins finden sich hier im Forum).

,

Über diesen Weg geht auch schalten. Dazu muss du den Schaltbefehl den du über die Oberfläche absetzt sniffen. Ich selber habe das mal beim Bootloader gemacht, der ist aber schon lange gegen die C.M.I ausgetauscht. Das geht, diskutiert wurde das detaillierter auch schon hier.

Vorteile:

  • Anzahl der Werte nicht limitiert
  • Prinzipiell jeder Analoger und Digitaler Wert, auch „Zwischenwerte“ aus Funktionen möglich, genauso wie schalten,
    aber …
  • Beliebige Abfrageintervalle

Nachteil:

  • ein enormer Rüstaufwand. Erstellen der zu Parsenden Seite(n) auf C.M.I, danach im Textparser das ganze Ding wieder auseinander schrauben. Dabei für analoge Werte immer erst mal in eine Textvariable und dann mit einem separaten Programm in Float / Int wandeln. Negtive Werte (z.B. Außentemperatur) haben immer einen Blank zwischen Vorzeichen (-) und Zahl (- 0,8), das geht nicht direkte in eine Float Variable, dazu muss erst der Blank entfernt werden.
  • Nicht supportete „Schnittstelle“. Wie bei mir erst letzte Woche wieder passiert, habe ich in der C.M.I die Firmware aktualisiert (wegen Modbus ), die Tags haben sich geändert und ich musste alle Textparser erst mal wieder anpassen.

Möglichkeit 3:
Modbus TCP:
Dazu wird ein Modbus Slave Server benötigt. Der läuft z.B. auf FHEM. Ich habe das nach dieser, sehr gut dokumentierten Variante von Predi Ger Many umgesetzt: https://www.symcon.de/forum/threads/35623-Howto-Technische-Alternative-per-ModbusTCP-%C3%BCber-FHEM-an-Symcon-anbinden?p=335356#post335356. Der FHEM Server läuft bei mir dabei auf meinem PI, auf dem ich die Symcon Dev Enwicklung auch laufen habe. Für FHEM gibt es aber auch Docker Container für NAS Systeme etc. FHEM ist kostenfrei, die Hardware war bei mir sowieso schon da. Modbus Master ist eine offizielle API von TA. In der C.M.I müssen die Netzwerk Aus- und Eingänge, sowohl für CAN als auch für Modbus definiert werden. Auf Symcon Seite gibt es das offizielle Gegenstück.

,

Vorteile:

  • Einzige mir bekannte Möglichkeit über eine offizielle Schnittstelle Daten zu schreiben.

Nachteile:

  • Zusätzlicher Server (+Wartung) für Modbus Slave
  • C.M.I ist auf jeweils 64 analog, digitale Ein- und Ausgänge beschränkt (also 256 Schnittstellen, die alle im Modbus Slave definiert werden müssen,…). !DANKE an dieser Stelle noch mal an „predi ger many“!
  • Hoher initialer Aufwand
  • kleinstes Sendeintervall (schalten): 10 Sek. Es kann also etwas dauern bis eine Aktion ankommt (egal auf welcher Seite, die C.M.I gibt hier den Takt vor)

b Fazit:[/b]

  • Werte lesen so weit es geht über UVR1611 Can Instanz.
  • Zwischenergebnisse von Funktionen (und vor allem zusätzlicher Knoten) gut überlegt auf den CAN-Bus schieben, und Schaltvorgänge in den Geräten überlegen und programmieren.
  • Die gesamte Konfiguration von den CAN Knoten Ein- und Ausgänge (bei mir sind es 8) in die C.M.I, von dort in den Modbus Slave Server und dann auf Symcon Seite ist ein hoher Aufwand, und bedarf im Vorfeld einer gründlichen Planung. Ich habe letzte Woche erst bei mir einen Piloten mit einem Schaltwert gebaut und bin sehr zufrieden.
  • Alles was nicht mehr über JSON/Modbus geht, muss dann doch über die Webseiten gelesen werden.
  • Ich werde warscheinlich die Programmierung aller Knoten hinsichtlich des Schaltens überdenken und überarbeiten.
  • Immer bedenken, dass die UVR1611 nur 16 CAN Ein- und Ausgänge hat (UVR16x2 glaube ich 32 oder sogar 64), die Anzahl der Ausgänge ist hinsichlich interessanter Funktionswerte(Wasserzählerimpulse, VL-Soll, Wärmemengenzähler Solar,…) schnell erschöpft.

Das Wichtigste dabei wird sein: DOKUMENTATION welcher Kanal welches Knotens über CAN auf welchen Kanal des Modbus Slaves schreibt/liest. Da kann man sich schnell verheddern wenn das vorher nicht schriftlich überlegt wird.

In diesem Sinne, schönes Wochenende.

Frank

Edith sagt: Tippfehler korrigiert

Das nenne ich mal eine Antwort!!!
Danke Frank!

Na gerne doch. Die TA und damals der Bootloader haben bei mir den Wunsch nach direkterem Zugriff ausgelöst und zu Symcon geführt. Da ich hier sehr viel von der regen Community profitiere wollte ich gerne mal was zurück geben und hoffe dass es jedem einen Überblick über die Möglichkeiten mit der TA gibt. Sind ja nicht so viele Beiträge und vieles ist über etliche Freds zerpflückt oder auch sehr alt (basiert auf BL-Net).

Noch ein kleiner Hinweis:
Die aktuelle Firmware 1.28.1 (evtl. auch schon die vorherige, habe von 1.26 upgegraded) bastelt in den Quellcode lustige Whitespaces rein (Umlaute sind bei mir jetzt auch zerschossen, da hat sich scheinbar was an der Codepage geändert):
°C</div>

Als Ende Tag hat bei mir geholfen, einfach nur
°C</div>
zu nehmen und in die Stringvariable zu schreiben. Das  erscheint dort nicht mehr.
Die Umwandlung der in den Float-Wert mache ich dann mit:


$_ein = GetValue(58931);
$_aus = str_replace(' ','',trim($_ein)); //Leerzeichen davor, danach und zwischen Vorzeichen und Zahl entfernen.
if (str_replace(',','.', $_aus) == GetValue(33625 ))
	{
	}
else 
SetValue(33625 ,$_aus);

Ich aktualisiere den Float Wert nur, wenn sich der Wert auch tatsächlich geändert hat. Dazu werden Komma und Punkt augetauscht, beim schreiben in die Variable wird ein impliziter cast oder convert durchgeführt (so heißt das zumindest bei Datenbanken). Das gibt’s bestimmt auch als Befehl in PHP, so dass das schöner geht. Evlt. langt auch nur der str_replace in Zeile 2 zum entfernen aller Blanks, also bitte keine Kritik an meinen PHP gestückel :rolleyes:.

Schönen Abend noch
Frank
:loveips:

Hallo,

ich bin gerade dabei meine Heizungsanlage auf Technische Alternative (CMI, 2xRSM 610 und 4x DL Erweiterungsmodule) umzubauen.
Die Technik steht soweit und jetzt geht es an die Einbindung in Symcon.
Ich habe die komplette Anlage im CMI programmiert und in Symcon nur die Startseite direkt eingebunden. Das hat so weit den Vorteil, das die Heizungssteuerung separat läuft und bedient werden kann und man trotzdem alles über das Webfront sieht.Über die Startseite gelangt man dann in die einzelnen Menüs zur Bedienung.


Startseite CMI in Webfront direkt eingebunden

Alle Istwert habe ich über eine leere Seite im CMI ausgegeben und per Registervariable und WW-Reader eingelesen. Die vorgefertigten Module nutze ich hierfür nicht, da nur die I/O gelesen werden können und alle Informationen der DL und CAN I/O fehlen.

Was mir jetzt noch fehlt ist das schreiben von Informationen auf die Fixwerte. Ich möchte die Temperaturen einzelner Räume (erfasst über Homematic) auf die entsprechenden Fixwerte schreiben.
Die entsprechende Adresszeile habe ich mir mit den Enwicklermodus von Firefox gesucht. Nach bearbeiten und erneuten senden der Informationen direkt aus der Entwicklerkonsole von Firefox klappt alles.


Browser Firefox mit Entwicklerkonsole

Gibt man jetzt die Zeile direkt in den Browser ein
http://192.168.0.116/INCLUDE/change.cgi?changeadrx2=21000A4414D101&changetox2=23.7
funktioniert es nicht. Das gleiche beim Aufruf aus Symcon herraus. Leider kommen dabei keinerlei Meldungen. Im Browser wird nur OK zurückgemeldet.

Wer hat eine Idee dazu? Wo kann ich noch ansetzen.

Hallo jaetzel,

bitte Anfragen direkt ins Forum stellen.

Die Einbindung ins Webfront ist relativ einfach. Im Webfrontkonfirgrator durch Auswahl externe Seite und dann die Adresse als wenn Du das Schema über CMI direkt aufrufst.
Du must natürlich erst ein Schema mit den TA-Designer von auf den CMI programmiert haben.

Thomas