Seite 1 von 1

Werte und Zustände von CCU oder Cuxd an HPCL

Verfasst: 17.09.2014, 17:01
von mikewolf99
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

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

Verfasst: 13.01.2018, 11:53
von DJDieter
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.

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

Verfasst: 13.01.2018, 12:03
von Familienvater
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

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

Verfasst: 13.01.2018, 12:07
von DJDieter
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.

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

Verfasst: 13.01.2018, 14:52
von Familienvater
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

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

Verfasst: 13.01.2018, 14:59
von DJDieter
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#"'");

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

Verfasst: 13.01.2018, 15:14
von Familienvater
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

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

Verfasst: 13.01.2018, 15:36
von DJDieter
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