Hallo zusammen,
ich möchte gerne meinen DC loggen und habe mich an dieser Umsetzung hier versucht.
Leider funktioniert die Abfrage bzw. das Ausführen der TCL-Datei nicht. Cuxd selbst läuft.
Ich nutze YAHM auf einem Raspi und bin nach der Anleitung hier vorgegangen.
Die tcl-Datei habe ich allerdings direkt auf dem Raspi mit dem Nano-Editor erstellt und im Verzeichnis var/lib/lxc/root/usr/local gespeichert.
755-Rechte zum Ausführen sind vergeben (Ausführen darf JEDER).
Das Script, welches ich über die Homematic UI ausführe, ist folgendes:
Code: Alles auswählen
#!/bin/tclsh
#
# Ermitteln des duty cycle der CCU
# =================================================
# Michael Thelen aka Black in Juni 2016
#
# Aufruf mit
# tclsh dutyccu.tcl KEQXXX DC_CCU oder
# Wenn nur eine CCU da ist mit
# tclsh dutyccu.tcl CCU2 <SYSVAR>
# =================================================
load tclrpc.so
load tclrega.so
#Beide Übergabeparameter aus CMD holen
set item1 [lindex $argv 0]
set item2 [lindex $argv 1]
# item1 enthält den Suchbegriff
# item2 enthält den Namen der Systemvariablen
# Seriennummer ist item2 eingepackt in 2 "*"
set sernr ""
append sernr "*" $item1 "*"
set r [xmlrpc http://127.0.0.1:2001/ listBidcosInterfaces ]
set dutycycle -1
set lines [split [string map [list "ADDRESS" "\x00"] $r] "\x00"]
# und nun durch alle teile mal durch
foreach line $lines {
set treffer [string match $sernr $line]
# Seriennummer wurde gefunden
if {$treffer==1} {
regexp "DUTY_CYCLE (.*?) " $line dummy dutycycle
break
#dann aber auch break der schleife
}
}
# Es wurde ein Dutycycle gefunden ()
if {$dutycycle != -1} {
set rega_cmd ""
append rega_cmd "dom.GetObject('$item2').State('$dutycycle');"
rega_script $rega_cmd
puts "Success - Duty Cycle: $dutycycle"
}
Die Variable DC_CCU ist als Typ Zahl mit Wert 0-1000 angelegt. Sie wird aber beim Ausführen des Scriptes nicht aktualisiert.
Test ich das Ganze mit folgendem Script, erhalte ich als Rückgabe ebenfalls nichts, was wohl draus schließen lässt, dass die tcl-Datei nicht ausgeführt wird:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("tclsh /usr/local/dutyccu.tcl KEQ0XXXX DC_CCU");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
WriteLine("Rückgabe: " #dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State());
Über System.exec gehts ebenfalls nicht.
Hat jemand eine Idee, wo der Fehler liegen kann? Habe ich die Datei ins richtige Verzeichnis? War das Erstellen mit dem Nano-Editor ein Fehler?
Danke im Voraus für Eure Hilfe.
Grüße
Frank