Übergabe von Variablen an ein Unterprogramm

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Übergabe von Variablen an ein Unterprogramm

Beitrag von Tyfys » 21.09.2021, 14:29

Also ich habe die Programme, die ich nur mit ProgramExecute()
und über das XML-API mit runprogram.cgi starte ,da ist es ja auch ProgramExecute() ,
einfach auf inaktiv gesetzt.

Dann werden diese beim Neustart auch nicht ausgeführt.

Gruß
Harry
Gruß
Harry

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Übergabe von Variablen an ein Unterprogramm

Beitrag von Xel66 » 21.09.2021, 14:36

Tyfys hat geschrieben:
21.09.2021, 14:29
... über das XML-API mit runprogram.cgi starte ,da ist es ja auch ProgramExecute() ,
einfach auf inaktiv gesetzt.
Und meine persönliche Meinung dazu ist eben, dass dieses ein schlechter Stil ist. So unterschiedlich sind eben die Ansätze. Zum Starten benötigt man dann ein Script. Da die CCU nur eine einzige Scriptengine besitzt, versuche ich, diese eben auch nur dann zu benutzen, wenn es für die Erfüllung des Zweckes zwingend notwendig ist, um gegenseitige Beeinflussungen und Blockierungen zu vermeiden. Darum kommuniziere ich außer für den Mail- und Push-Versand sowie für TTS auch nicht extern mit meiner CCU (rufe z.B. keine Wetterdienste, Spritpreise o.ä. ab). Diese Sachen kann man mit "fire and forget" absetzen. Gerade kürzlich gab es zwei Threads dazu, bei der Programme verzögert ausgeführt wurden. In der Vergangenheit wurde auch häufiger ähnliches beschrieben. Nun blockiert ein ProgramExecute() eben nicht lange die ReGa. Aber es ist ein überflüssiges Script, für das es mit virtuellen Tasten einen adäquaten und vom Hersteller vorgesehenen Ersatz gibt.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
Baxxy
Beiträge: 10648
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 597 Mal
Danksagung erhalten: 2180 Mal

Re: Übergabe von Variablen an ein Unterprogramm

Beitrag von Baxxy » 21.09.2021, 16:29

tgw hat geschrieben:
21.09.2021, 12:00
Hilft das?
Ich denke. :wink:

Ich fasse mal für mich zusammen:
  • Die Klimasteuerung erfolgt über den Aufruf der URL mit 4 Parametern welche du nach eigenem Ermessen und Bedarf setzt.
  • Sind die 4 Parameter im Sende-String eingetragen führst du das Programm manuell aus damit das CUxD-Gerät den Befehl an die Klima sendet.
  • Um nicht jedes mal den Sendestring manuell anzupassen wird eine komfortablere Lösung gesucht.
Angenommen wir nutzen 4 SysVars für die Parameter...
Hast du eine Möglichkeit SysVars komfortabel zu editieren/ändern?

Bei RM geht das direkt über die WebUI. Praktischer wäre aber eine App oder Visu die sowas erlaubt.

Dann könnte man alle 4 Parameter SysVars einstellen und anschließend mit einem "Tastendruck" den Befehl an die Klima senden.

Ist das etwa so wie gewünscht?

Grüße, Baxxy


Edit: Warum geht's eigentlich inzwischen um .ProgramExecute() ? :roll:

Edit2: Welche Wertebereiche \ Werte können die 4 Parameter haben?

Matsch
Beiträge: 5359
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: Übergabe von Variablen an ein Unterprogramm

Beitrag von Matsch » 21.09.2021, 17:39

Also ich arbeite viel mit Unterprogrammen.
Das Prinzip: Alle notwendigen Übergabeparameter werden in eine String-SV gepackt. Sobald diese SV sich ändert, wird damit das UP getriggert.
Damit keine Aufrufe verloren gehen, wird der zu übergebende String an den Inhalt der String-SV angehängt und die SV nicht überschrieben.

Hier ein Beispiel aus meinen Programmen:

1. Im aufrufenden Programm

Zusammenstellen der Übergabeparameter und Aufruf des Unterprogramms, benutzt wird als Übergabe-SV die SV (Typ Zeichenkette) Param_UP_2:

Code: Alles auswählen

dom.GetObject("Param_UP_2").State(dom.GetObject("Param_UP_2").Value() # Hoehe.ToString(1) # ",SV_AZ_Hoehe_Ostfenster_Soll,20|");
Es werden 3 Parameter übergeben, Trennzeichen ",". Das Parametersatzende wird mit "|" markiert.

2. Das Unterprogramm

Das UP trennt den String nun wieder auf in seine Bestandteile, arbeitet in einer Loop alle vorgefundenen Datensätze nacheinander ab und löscht danach wieder den Übergabestring:

Code: Alles auswählen

! Uebergabeparameter:
! 1. Vorgabehoehe in 0.0 ... 100.0% (real)
! 2. Bezeichner Ziel-SV für Aktor-Sollhöhe in 0.0 ...100.0% (real)
! 3. Minimale Rollladenhoehe in %

string s;

if ((dom.GetObject("Param_UP_2").Value()).Length() > 0)
{
  foreach (s, (dom.GetObject("Param_UP_2").Value()).Split("|"))
  {
    ! Rückgewinnen der 3 Parameter
    real Sollhoehe       = (s.StrValueByIndex(",",0)).ToFloat();
    var objKorrSollhoehe = (dom.GetObject(s.StrValueByIndex(",",1)));
    integer MinHoehe     = (s.StrValueByIndex(",",2)).ToInteger();
    
    ! Das eigentliche Unterprogramm
    
  }
  dom.GetObject("Param_UP_2").State("");
}
Zuletzt geändert von Matsch am 21.09.2021, 18:52, insgesamt 1-mal geändert.

Benutzeravatar
tgw
Beiträge: 565
Registriert: 10.10.2013, 22:35
System: CCU
Wohnort: Recklinghausen
Hat sich bedankt: 36 Mal
Danksagung erhalten: 4 Mal

Re: Übergabe von Variablen an ein Unterprogramm

Beitrag von tgw » 21.09.2021, 17:51

DAs Setzen von Triggern gefällt mir derzeit recht gut. Ein Ansatz, den ich noch nicht hatte. Ich schaue mir das mal an.
Viele Grüße aus Recklinghausen im Ruhrpott

Der TGW

CCU3 / Solaredge PV integriert / Daikin Klima WLAN integriert - gerne für Rückfragen offen.

Benutzeravatar
tgw
Beiträge: 565
Registriert: 10.10.2013, 22:35
System: CCU
Wohnort: Recklinghausen
Hat sich bedankt: 36 Mal
Danksagung erhalten: 4 Mal

Re: Übergabe von Variablen an ein Unterprogramm

Beitrag von tgw » 21.09.2021, 17:53

Danke an Matsch, das habe ich jetzt mal angefangen, umzusetzen, prinzipiell, was ich gesucht habe.
Viele Grüße aus Recklinghausen im Ruhrpott

Der TGW

CCU3 / Solaredge PV integriert / Daikin Klima WLAN integriert - gerne für Rückfragen offen.

Matsch
Beiträge: 5359
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: Übergabe von Variablen an ein Unterprogramm

Beitrag von Matsch » 21.09.2021, 18:49

Achtung, die Triggerung auf einen leeren String ist ein wenig tricky!
Wie du siehst, liegt hier das Script für das UP im SONST-Pfad!

Stringtriggerung.jpg

Antworten

Zurück zu „HomeMatic allgemein“