tcl-Script

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

dirch
Beiträge: 579
Registriert: 24.10.2008, 03:26
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: tcl-Script

Beitrag von dirch » 19.07.2009, 19:05

tcl ist nicht ganz so einfach und uebersichtlich, da stecken ein paar kleine Fehlerchen im Deinem Programm. Richtiger waere es so:

Code: Alles auswählen

#!/bin/tclsh
load tclrega.so

array set values [rega_script {
var weck=dom.GetObject("Weckzeit").Variable();
var set_weck=dom.GetObject("Weckzeit").State(900);
}]

set weck $values(weck)
set set_weck $values(set_weck)
set y 12345678

puts "Das Ergebnis"
puts "Weck = $weck"
puts "SetWeck= $set_weck"
puts "y = $y"
Ach ja, mit

Code: Alles auswählen

parray values
kannst Du dir prima den Inhalt des values Arrays ausgeben lassen :)

Bei nur einem Befehl rega statt rega_script nehmen und keine Variablenzuweisung im CCU Skript machen:

Code: Alles auswählen

#!/bin/tclsh
load tclrega.so

set set_weck rega {dom.GetObject("Weckzeit").State(800);}

puts "Das Ergebnis"
puts "SetWeck= $set_weck"
Wobei in dem Falle als Wert true zurueck kommen wird, weil Du fragst ja nicht den aktuellen Wert ab sondern setzt ihn, und true zeigt an dass der neue Wert erfolgreich gesetzt wurde.


Zum Thema Parameteruebergabe: das kannst du machen indem Du Dir das CCU Skript aus TCL raus zusammenbaust, lies mal etwas weiter vorne in dem Thread her, da wurde das schon erklaert.

Ich hoffe ich konnte ein paar Unklarheiten beseitigen :wink:

Gruss,
Dirch
Neun von zehn Stimmen in meinen Kopf sagen ich bin nicht verrückt. Die andere summt die Melodie von Tetris . ...

Christoph
Beiträge: 283
Registriert: 28.07.2007, 13:12

Re: tcl-Script

Beitrag von Christoph » 20.07.2009, 16:46

Hi,

ja Danke, einiges ist mir jetzt klarer. Den Fehler mit der Klammer und der Variablenbezeichnung kam wohl erst durch die vielen Tests zustande, aber ich probiers gleich noch mal.

Zur Parameterübergabe kann ich leider nichts finden. Ich meine aber auch nicht Parameterübergabe von tcl an rega, sondern von exec an tcl. Ich starte das Script ja über system.Exec(). Bei diesem Aufruf möchte ich dann Parameter übergeben. Ich hoffe das klappt. Ansonsten muss ich halt über tclrega.exe gehen. Wie ich gestern festgestellt habe kann man darüber mehrere Geräte schalten und abfragen und bekommt für jeden Befehl das Ergebnis im XML-Format zurückgeliefert.
Ciao, Christoph.

matheversum
Beiträge: 287
Registriert: 27.04.2009, 13:46

Re: tcl-Script

Beitrag von matheversum » 20.07.2009, 18:36

Die Übergabeparameter stehen unter $argv
also z.B.

#! /bin/tclsh
puts $argv

schreibt sie raus

Gruß
Andreas

Christoph
Beiträge: 283
Registriert: 28.07.2007, 13:12

Re: tcl-Script

Beitrag von Christoph » 20.07.2009, 20:13

Hi,

super danke. Werde ich gleich mal probieren. Vielleicht klappt ja auch $argc unter tcl.
Ciao, Christoph.

dirch
Beiträge: 579
Registriert: 24.10.2008, 03:26
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: tcl-Script

Beitrag von dirch » 21.07.2009, 11:02

Ja, $argc sollte auch funktionieren:
argc argv argv0

All Tcl scripts have access to three predefined variables.
$argc - number items of arguments passed to a script.
$argv - list of the arguments.
$argv0 - name of the script.
Siehe hier
Neun von zehn Stimmen in meinen Kopf sagen ich bin nicht verrückt. Die andere summt die Melodie von Tetris . ...

kristema
Beiträge: 12
Registriert: 18.12.2010, 06:39
Danksagung erhalten: 1 Mal

Re: tcl-Script

Beitrag von kristema » 22.06.2017, 11:22

Hallo zusammen!

Code: Alles auswählen

#!/bin/tclsh
load tclrega.so
 
    set f [open "/media/sd-mmcblk0/SB_Ueberschuss.txt"]

    set input [read $f]

    close $f


    # Werte aus Datei auslesen
    # =============================
 
    regexp "Einspeiseleistung=(.*) W" $input dummy einspeiseleistung  ; #Hauptschalter



    # Werte in Variabel schreiben
    # =============================
    set rega_cmd ""
    append rega_cmd "var w0 = dom.GetObject('SB_Ueberschuss');"
    append rega_cmd "w0.State('$einspeiseleistung');"



    rega_script $rega_cmd
leisewr klappt es nicht es kommt folgender Fehler "Error 1 at row 1 col 8 near ^bin/tclsh
load tclrega.so
"

Ohne "#!/bin/tclsh" geht es auch nicht. Ich bin newbee und hat einer eine Idee???

Danke und Gruß
Markus

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

Re: tcl-Script

Beitrag von alchy » 22.06.2017, 13:00

Du hast aber schon gelesen, wie das Script ausgeführt bzw. aufgerufen werden muss?
Und das bedeutet nicht direkt unter Script testen oder innerhalb eines Programmes usw.


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.

kristema
Beiträge: 12
Registriert: 18.12.2010, 06:39
Danksagung erhalten: 1 Mal

Re: tcl-Script

Beitrag von kristema » 22.06.2017, 15:04

Hallo alchy,

könntest du mir nähere Infos geben?! Ich wollte die Datei auslesen und den Wert in eine Variable schreiben.
Das soll dann cA. alle 5 gemacht werden.

Gruß
Markus

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

Re: tcl-Script

Beitrag von alchy » 23.06.2017, 01:08

Wenn du mir auch mal erzählen würdest, wie du das TCL Script ausführst. Wird es hier denn immer normaler, das immer nur gefragt aber nie geantwortet wird?

Ein weitere Herangehensweise, wäre hier mal z.B. die SB_Ueberschuss.txt Datei anzuhängen, vielleicht ist der Umweg über ein TCL Script gar nicht nötig.
ODER
Du stellst mal zur Verfügung, wie du die Werte in die Datei SB_Ueberschuss.txt auf der CCU kriegst, vielleicht ist nicht mal der Umweg über eine Textdatei nötig.

Alchy
Ich frage mich immer wieder, warum ich um helfen zu können, den Fragenden um Informationen anbetteln muss.

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 „Softwareentwicklung für die HomeMatic CCU“