Werte und Zustände von CCU oder Cuxd an HPCL

Programmierung der HomeMatic CCU mittels contronics homeputer CL

Moderator: Co-Administratoren

Antworten
mikewolf99
Beiträge: 1322
Registriert: 13.08.2008, 20:57
Wohnort: Österreich nähe Wien
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Werte und Zustände von CCU oder Cuxd an HPCL

Beitrag von mikewolf99 » 17.09.2014, 17:01

Hallo,

wollte Euch Informieren das man Werte von der CCU oder CUXD auch ohne GetSysvar oder Virtuellen Tasten oder Kanäle an HPCL übermitteln kann,
Was man braucht ist mal das TCL Script von rkhomematic :

Code: Alles auswählen

#!/bin/tclsh

# Kommandozeile:
# 1. Script Pfad und Name unter dem dieses Script gespeichert ist
# 2. Parameter IP Adresse der CCU
# 3. Parameter Kommando
# 4. Paramater Objekt
# Beispiel 1
# /user/local/test.tcl 192.168.178.10 GET TESTOBJEKT
# Beispiel 2
# /user/local/test.tcl 192.168.178.10 SET TESTOBJEKT=1

# Erstellen der XML Struktur

puts "Hier die Kommandoparameter"
puts $argv

set   rumpf "<?xml version=\"1.0\"?>\n"
append rumpf "<methodCall>\n"

   if {[lindex $argv 1] == "GET" } {
   append rumpf "<methodName>getvarbyname</methodName>\n"
   append rumpf "<params>\n"
   append rumpf "<param><value><i4>1</i4></value></param>\n"
   append rumpf "<param><value>[lindex $argv 2]</value></param>\n"
}
if {[lindex $argv 1] == "SET" } {
   append rumpf "<methodName>setvarbyname</methodName>\n"
   append rumpf "<params>\n"
   append rumpf "<param><value>[lindex $argv 2]</value></param>\n"
}

append rumpf "</params>\n"
append rumpf "</methodCall>\n"   
set rumpflaenge [string length $rumpf]

set   kopf "POST /RPC2 HTTP/1.0\n"
append   kopf "Content-Type: text/xml\n"
append   kopf "Content-length: $rumpflaenge\n"

set anfrage "$kopf\n$rumpf"

set kanal [socket [lindex $argv 0] 2110]
fconfigure $kanal -translation {lf lf} -buffersize 4096
fconfigure $kanal -blocking off
   
puts -nonewline $kanal $anfrage
flush $kanal

puts "Hier ist die Anfrage:"
puts $anfrage
   
# Einlesen der Daten
fileevent $kanal readable ""
set buffer ""
while {1} {
   if {[eof $kanal]} {
      catch {close $kanal}
      break
   }
   set temp [read $kanal 4096]
   if {$temp == ""} {
      break
   }
   append buffer $temp
}
puts "Hier ist die Antwort:"
puts $buffer
close $kanal
dieses speichert man zb auf der CCU unter /usr/local/test.tcl
um jetzt zb einen Temperaturwert von Cuxd an HPCL zu übermitteln erstellt man ein Programm mit script ausführen auf der cccu.
Das script für einen TMP sensor welcher bei mir zb vom HOMEDUINO kommt sieht dann so aus:

Code: Alles auswählen

var v1 = dom.GetObject("CUxD.CUX1300011:1.TEMPERATURE");
var va = v1.Value();
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/test.tcl 192.168.123.130 SET LEDSCHRIFT='"#va#"'");
CUxD.CUX2801001:1.CMD_EXEC ist der Ersatz für die schwache systemexec der CCU
/usr/local/test.tcl ist der Pfad wo ihr die TCL Datei vorher gespeichert habt
192.168.123.130 ist die IP eurer CCU auf der HPCL läuft
LEDSCHRIFT= ist euer HPCL OBJEKT unbedingt GROSS SCHREIBEN
("CUxD.CUX1300011:1.TEMPERATURE"); ist der Sensor von dem der Wert nach HPCL übertragen werden soll
das wars mal zu Zahlenobjekten,das Selbe ist auch mit Texten möglich ...... einfach ein bischen probieren ! :lol:

Das Schalten von Objekte gestaltet sich einfacher, wieder benötigen wir das TCL Script von rkhomematic
nur sieht der Aufruf per Script dann so aus :

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/test.tcl 192.168.123.130 SET SYLVIAHANDY=1");
eigentlich schon alles beschrieben ,
SYLVIAHANDY ist das Objekt Achtung Objektnamen verwenden nicht die Bezeichnung in HPCL, 1 ist der Zustand
Dieses funktioniert auch bei den FS20 RSU 0=zu 1=offen 2=viertel 3=halb 4=dreiviertel

hoffe die Beschreibung ist verständlich und kann wer brauchen !!!

mfg
mikewolf
CCU2 mit Cuxd und HP CLX ,3 x FHZ2000,2 Funkgateway (eckig),und 2 Funkgateway (rund),RS LanGate
ca 590 Komponenten gemischt HM und FS20 90/10)`CCU auf Cubie LXCCU,CCU auf RPi3 Pivccu,Iobroker auf HPgen8,
Tinker,orangepi,Odroid .....,Sonoffs,Xiaomi und ne Menge esp8266

DJDieter
Beiträge: 312
Registriert: 11.01.2008, 14:41
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 33 Mal
Danksagung erhalten: 19 Mal

Re: Werte und Zustände von CCU oder Cuxd an HPCL

Beitrag von DJDieter » 13.01.2018, 11:53

Hallo mikewolf99,

bin gerade dabei, meine gesamten GetCCUSysVar-Aufrufe mit diesem Script zu ersetzen. Bisher funktioniert das super > großes Kompliment.

Da ich anfangs leichte Definitionsprobleme hatte, hier ein kleiner Verbesserungsvorschlag für die Beschreibung:

Den Teil

Code: Alles auswählen

...
# 4. Paramater Objekt
# Beispiel 1
# /user/local/test.tcl 192.168.178.10 GET TESTOBJEKT
# Beispiel 2
# /user/local/test.tcl 192.168.178.10 SET TESTOBJEKT=1
...
ersetzen durch

Code: Alles auswählen

...
# 4. Parameter Projekt
# Beispiel 1
# /usr/local/test.tcl 192.168.178.10 GET TESTPROJEKT
# Beispiel 2
# /usr/local/test.tcl 192.168.178.10 SET TESTPROJEKT=1
...
Denn ein Projekt als Testobjekt zu bezeichnen, könnte für manchen Anfänger - wie auch bei mir - zu Verwirrungen führen, da "Objekte" für mich die einzelnen Makros, Geräte, etc. sind.
Raspberry PI 4 mit RaspberryMatic, 4 LAN-Gateways, zwei HmIP-HAP und 248 Geräte
CUxD mit 357 Kanälen auf 64 Geräten
Zusatzsoftware: XML-API, CUxD-Highcharts, NEO-Server, Programmedrucken, CUxD, E-Mail, Philips Hue, Messenger, CCU-Historian, JB-HP-Devices, HomeKit HomeMatic
Anbindungen: Wolf eBus; NodeMCU-Ultraschall-Füllstandsmessung mit Temperatureinfluß; Fußbodenheizung mit Rücklauftemperaturbegrenzer (RTL)

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: Werte und Zustände von CCU oder Cuxd an HPCL

Beitrag von Familienvater » 13.01.2018, 12:03

Hi,

der "Name" TESTOBJEKT ist aber der Objekt-Name, und nicht der Projekt-Name!!!
Nur zur Klarstellung:
Ein Projekt (die SPG-Datei, die auf dem PC zur CEX-Datei kompiliert und dann die CEX auf die CCU übertragen wird) beinhaltet viele Objekte, das können importierte Geräte aus der CCU sein, oder auch "virtuelle" Objekte (ohne Hardware-Bezug), oder Makros.

Und GetCCUSysVar-Aufrufe zu ersetzen ist gut, aber wenn das nur passiert, indem weiter mit Systemvariablen der WebUI gearbeitet wird, dann ist das immer noch der "falsche Weg", der richtige Weg ist gar keine Elemente der Rega zu nutzen, sondern möglichst zu 100% im HPCL-Kosmos zu bleiben.

Der Familienvater

DJDieter
Beiträge: 312
Registriert: 11.01.2008, 14:41
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 33 Mal
Danksagung erhalten: 19 Mal

Re: Werte und Zustände von CCU oder Cuxd an HPCL

Beitrag von DJDieter » 13.01.2018, 12:07

Familienvater hat geschrieben:Hi,

der "Name" TESTOBJEKT ist aber der Objekt-Name, und nicht der Projekt-Name!!!
Nur zur Klarstellung:
Ein Projekt (die SPG-Datei, die auf dem PC zur CEX-Datei kompiliert und dann die CEX auf die CCU übertragen wird) beinhaltet viele Objekte, das können importierte Geräte aus der CCU sein, oder auch "virtuelle" Objekte (ohne Hardware-Bezug), oder Makros.

Und GetCCUSysVar-Aufrufe zu ersetzen ist gut, aber wenn das nur passiert, indem weiter mit Systemvariablen der WebUI gearbeitet wird, dann ist das immer noch der "falsche Weg", der richtige Weg ist gar keine Elemente der Rega zu nutzen, sondern möglichst zu 100% im HPCL-Kosmos zu bleiben.

Der Familienvater
Hi,

demnach müßte ich dann je Objekt, das ich an HPCL übergeben will, ein eigenes TCL-Script auf der CCU erstellen, oder begreife ich das noch nicht ganz? Ich hab als 4. Parameter meinen Projektnamen genommen und das funktioniert.
Raspberry PI 4 mit RaspberryMatic, 4 LAN-Gateways, zwei HmIP-HAP und 248 Geräte
CUxD mit 357 Kanälen auf 64 Geräten
Zusatzsoftware: XML-API, CUxD-Highcharts, NEO-Server, Programmedrucken, CUxD, E-Mail, Philips Hue, Messenger, CCU-Historian, JB-HP-Devices, HomeKit HomeMatic
Anbindungen: Wolf eBus; NodeMCU-Ultraschall-Füllstandsmessung mit Temperatureinfluß; Fußbodenheizung mit Rücklauftemperaturbegrenzer (RTL)

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: Werte und Zustände von CCU oder Cuxd an HPCL

Beitrag von Familienvater » 13.01.2018, 14:52

Hi,

Du hast ein TCL-Script, und dieses TCL-Script wird mit 4 Parametern aufgerufen.

Bevor hier lange aneinander vorbeischreiben, zeig einfach mal, was Du in HM-Script machst, und falls Du das TCL-Script modifiziert hast, dann häng das auch einfach einmal mit dran.
Und schreib sicherheitshalber noch mal welches Objekt Du in Deinem Projekt setzen willst, und das HPCL-Objekt für einen "Typ" hat (Zahl, Zeichen, Schalter...)

Der Familienvater

DJDieter
Beiträge: 312
Registriert: 11.01.2008, 14:41
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 33 Mal
Danksagung erhalten: 19 Mal

Re: Werte und Zustände von CCU oder Cuxd an HPCL

Beitrag von DJDieter » 13.01.2018, 14:59

O.K.
Hier das TCL-Script auf meiner CCU ("Set_HPCL" ist der Name dieses Scripts und "HAUSSTEUERUNG" ist der PROJEKT-Name):

Code: Alles auswählen

    # Erstellen der XML Struktur

    puts "/usr/local/Set_HPCL 192.168.178.15 SET HAUSSTEUERUNG=1"
    puts $argv

    set   rumpf "<?xml version=\"1.0\"?>\n"
    append rumpf "<methodCall>\n"

       if {[lindex $argv 1] == "GET" } {
       append rumpf "<methodName>getvarbyname</methodName>\n"
       append rumpf "<params>\n"
       append rumpf "<param><value><i4>1</i4></value></param>\n"
       append rumpf "<param><value>[lindex $argv 2]</value></param>\n"
    }
    if {[lindex $argv 1] == "SET" } {
       append rumpf "<methodName>setvarbyname</methodName>\n"
       append rumpf "<params>\n"
       append rumpf "<param><value>[lindex $argv 2]</value></param>\n"
    }

    append rumpf "</params>\n"
    append rumpf "</methodCall>\n"   
    set rumpflaenge [string length $rumpf]

    set   kopf "POST /RPC2 HTTP/1.0\n"
    append   kopf "Content-Type: text/xml\n"
    append   kopf "Content-length: $rumpflaenge\n"

    set anfrage "$kopf\n$rumpf"

    set kanal [socket [lindex $argv 0] 2110]
    fconfigure $kanal -translation {lf lf} -buffersize 4096
    fconfigure $kanal -blocking off
       
    puts -nonewline $kanal $anfrage
    flush $kanal

    puts "Hier ist die Anfrage:"
    puts $anfrage
       
    # Einlesen der Daten
    fileevent $kanal readable ""
    set buffer ""
    while {1} {
       if {[eof $kanal]} {
          catch {close $kanal}
          break
       }
       set temp [read $kanal 4096]
       if {$temp == ""} {
          break
       }
       append buffer $temp
    }
    puts "Hier ist die Antwort:"
    puts $buffer
    close $kanal
Ein Script, das aus einem Programm aufgerufen wird und den DutyCycle-Wert an HPCL sendet ("DUTYCYCLE_CCU" ist der OBJEKT-Name in HPCL und vom Typ "Zeichen"):

Code: Alles auswählen

var v1 = dom.GetObject("DutyCycle CCU");
var va = v1.Value();
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/Set_HPCL.tcl 192.168.178.15 SET DUTYCYCLE_CCU='"#va#"'");
Raspberry PI 4 mit RaspberryMatic, 4 LAN-Gateways, zwei HmIP-HAP und 248 Geräte
CUxD mit 357 Kanälen auf 64 Geräten
Zusatzsoftware: XML-API, CUxD-Highcharts, NEO-Server, Programmedrucken, CUxD, E-Mail, Philips Hue, Messenger, CCU-Historian, JB-HP-Devices, HomeKit HomeMatic
Anbindungen: Wolf eBus; NodeMCU-Ultraschall-Füllstandsmessung mit Temperatureinfluß; Fußbodenheizung mit Rücklauftemperaturbegrenzer (RTL)

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: Werte und Zustände von CCU oder Cuxd an HPCL

Beitrag von Familienvater » 13.01.2018, 15:14

Hi,

ich habe nicht wirklich Ahnung von TCL, aber das was Du ersetzt hast, ist ggf. ein Beschreibungstext oder Echo-Text, der beim Ausführen des Scriptes in der Shell angezeigt werden würde, das einzige was zählt, sind die Parameter in Deinem CUXD-Exec-Aufruf, und da steht ja das Objekt drin, und nicht das Projekt...

Ich habe direkt das Orignal-Script mal auf der Console laufen lassen:
2018-01-13_15h12_19.png
Das, was Du geändert hast, ist eben nur die Ausgabe für den "Benutzer", da könntest Du auch "Hänschen-Klein und Grettel" reinschreiben...

Der Familienvater

DJDieter
Beiträge: 312
Registriert: 11.01.2008, 14:41
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 33 Mal
Danksagung erhalten: 19 Mal

Re: Werte und Zustände von CCU oder Cuxd an HPCL

Beitrag von DJDieter » 13.01.2018, 15:36

Ich hab leider auch so gut wie keine Ahnung von TCL. Daher hab ich angenommen, alle Parameter sind notwendig. Jetzt bin ich wieder etwas schlauer. :D
Raspberry PI 4 mit RaspberryMatic, 4 LAN-Gateways, zwei HmIP-HAP und 248 Geräte
CUxD mit 357 Kanälen auf 64 Geräten
Zusatzsoftware: XML-API, CUxD-Highcharts, NEO-Server, Programmedrucken, CUxD, E-Mail, Philips Hue, Messenger, CCU-Historian, JB-HP-Devices, HomeKit HomeMatic
Anbindungen: Wolf eBus; NodeMCU-Ultraschall-Füllstandsmessung mit Temperatureinfluß; Fußbodenheizung mit Rücklauftemperaturbegrenzer (RTL)

Antworten

Zurück zu „homeputer CL“