Skript in CMD_EXEC ausführen bei einem CUxD Timer

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Antworten
Itzamna
Beiträge: 6
Registriert: 12.03.2017, 11:25

Skript in CMD_EXEC ausführen bei einem CUxD Timer

Beitrag von Itzamna » 27.10.2017, 14:22

Hallo Zusammen,

ich bin gerade dabei mich in die Materie CUxD weiter einzuarbeiten und habe noch ein paar Verständnisprobleme bei der Umsetzung eines Projektes. Ich habe eine CCU2 mit Firmware 2.29.23, einen Temperatur/Luftfeuchtemesser (HM-WDS10-TH-O) und CUxD in Version 1.11a installiert. Das Projekt ist nun, dass alle x Minuten die Werte des Sensors in eine Datei geschrieben werden - aber eben über die CUxD Zeitsteuerung.
Dazu habe ich auf der CUxD ein neues System-Gerät (28) mit der Funktion "Timer" erzeugt und nach dem Anlegen alles neu gestartet. Nun soll je nach Timer Konfiguration ein Programm gestartet werden. Das habe ich so eingestellt (basierend auf CUxD_1.11_Dokumentation.pdf)):
ccu2_programm.JPG
Generell funktioniert der periodische Aufruf auch, denn wenn ich unter "Status und Bedienung" -> "Programme" mir das Programm hersuche, sehe ich in Spalte "Letzte Ausführung", dass es entsprechend TIMER_PRESET ausgeführt wurde.

Im Timer selbst habe ich den Kanal 1 wie folgt konfiguriert: Bei TIMER_PRESET steht 900 (15min), REPEAT ist angehakt, EXEC_FUNC steht auf "system()" und nun kommt es zum Parameter CMD_EXEC. Ich dachte, diesen kann ich per Programm setzen und dort einige Übergabeparameter mitgeben. Allerdings gibt es den Parameter nicht als Datenpunkt... daher funktioniert Folgendes nicht:

Code: Alles auswählen

var thermoChannel= dom.GetObject("HM-WDS10-TH-O OEQ0087107:1");
var temp= thermoChannel.DPByHssDP("TEMPERATURE");
var humi = thermoChannel.DPByHssDP("HUMIDITY"); 
string temperatur =  temp.Value().ToString(1);
string luftfeuchte =  humi .Value().ToString(1);
var slist = temperatur + "," + luftfeuchte ;
dom.GetObject("CUxD.CUX2800001:1.CMD_EXEC").State("tclsh /usr/local/logs/logging.tcl " #slist);
Ich kann nur direkt im Parameter CMD_EXEC das TCL Programm starten.
ccu2_timer_param.JPG
An dieser Stelle komme ich nicht weiter, denn wie kann ich dort denn jetzt meinem TCL-Skript die Parameter aus dem Programm mitgeben?
Das TCL-Skript macht nicht wirklich viel, falls es jemanden interessiert:

Code: Alles auswählen

#!/bin/tclsh
set filename "../../logs/temperatur.csv"
set args [join $argv " "]
set fileId [open $filename "a+"]
puts $fileId $args
close $fileId
Eine weitere Frage, die aufgetaucht ist:
Wenn ich unter "Status und Bedienung" -> "Geräte" den Timer auswähle und das Icon "Betätigen" klicke, wird beim entsprechenden Kanal immer der Wert in "SYSTEM|TIMER_PRESET" gelöscht, alle anderen Werte (REPEAT, CMD_EXEC,..) bleiben stehen. Warum ist das so?

Vielen Dank!

Gruß,
Itzamna

Benutzeravatar
uwe111
Beiträge: 4808
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 240 Mal
Kontaktdaten:

Re: Skript in CMD_EXEC ausführen bei einem CUxD Timer

Beitrag von uwe111 » 27.10.2017, 15:30

Hallo,
Itzamna hat geschrieben:ich bin gerade dabei mich in die Materie CUxD weiter einzuarbeiten und habe noch ein paar Verständnisprobleme bei der Umsetzung eines Projektes. Ich habe eine CCU2 mit Firmware 2.29.23, einen Temperatur/Luftfeuchtemesser (HM-WDS10-TH-O) und CUxD in Version 1.11a installiert. Das Projekt ist nun, dass alle x Minuten die Werte des Sensors in eine Datei geschrieben werden - aber eben über die CUxD Zeitsteuerung.
Das macht so aber nicht wirklich Sinn. Wenn Du die Daten eines HM-WDS10-TH-O in eine Datei schreiben möchtest, dann löst Du die Programmverknüpfung am besten bei Aktualisierung eines Datenpunktes (z.B. Temperatur) des Sensors aus.
Itzamna hat geschrieben:Ich dachte, diesen kann ich per Programm setzen und dort einige Übergabeparameter mitgeben. Allerdings gibt es den Parameter nicht als Datenpunkt... daher funktioniert Folgendes nicht:
Nein, dafür ist dieser Parameter nicht gedacht. Für den Aufruf eines TCL-Scripts aus HM-Script kannst Du entweder den System.Exec Befehl im HM-Script oder das CUxD-System.Exec Gerät nutzen.
Itzamna hat geschrieben:Wenn ich unter "Status und Bedienung" -> "Geräte" den Timer auswähle und das Icon "Betätigen" klicke, wird beim entsprechenden Kanal immer der Wert in "SYSTEM|TIMER_PRESET" gelöscht, alle anderen Werte (REPEAT, CMD_EXEC,..) bleiben stehen. Warum ist das so?
Weil damit TIMER_STOP ausgelöst wird und den Timer beendet.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Skript in CMD_EXEC ausführen bei einem CUxD Timer

Beitrag von alchy » 27.10.2017, 16:08

Warum einen zusätzlichen Timer, wenn doch die Geräte einen guten Trigger bieten?
Eigentlich sollte das Programm so wie von dir gepostet ja das Script periodisch aufrufen und die entsprechenden Daten loggen.

Code: Alles auswählen

var thermoChannel= dom.GetObject("HM-WDS10-TH-O OEQ0087107:1");
var temp= thermoChannel.DPByHssDP("TEMPERATURE");
var humi = thermoChannel.DPByHssDP("HUMIDITY"); 
string temperatur =  temp.Value().ToString(1);
string luftfeuchte =  humi.Value().ToString(1);
var slist = temperatur # "," # luftfeuchte ;
WriteLine(slist);
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/logs/logging.tcl " # slist);
Gibt das Script etwas unter Script testen aus
Wenn es das nicht macht, dann gibt es mehrere eingebaute mögliche Fehlerquellen.
Falscher Kanalname, Scriptname / Pfad falsch oder Berechtigung usw.
?

Außerdem fehlt ja zum loggen noch z.B. zumindest eine Zeitangabe, oder ? Was macht das für ein Sinn, eine Datei zu haben wo so was drin steht

Code: Alles auswählen

12.2,74
14.0,68
17.6,99
...
Warum hältst du dich nicht an die >Anleitung< ? bzw. fragst dann auch da nach, wenn du etwas anders willst?

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „CUxD“