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
Übergabe von Variablen an ein Unterprogramm
Moderator: Co-Administratoren
-
- Beiträge: 14162
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 585 Mal
- Danksagung erhalten: 1499 Mal
Re: Übergabe von Variablen an ein Unterprogramm
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
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
- Baxxy
- Beiträge: 10816
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 607 Mal
- Danksagung erhalten: 2223 Mal
Re: Übergabe von Variablen an ein Unterprogramm
Ich denke.
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.
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() ?
Edit2: Welche Wertebereiche \ Werte können die 4 Parameter haben?
-
- Beiträge: 5444
- Registriert: 30.05.2019, 11:37
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Chemnitz
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 735 Mal
Re: Übergabe von Variablen an ein Unterprogramm
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:
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:
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|");
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.
- tgw
- Beiträge: 580
- Registriert: 10.10.2013, 22:35
- System: CCU
- Wohnort: Recklinghausen
- Hat sich bedankt: 38 Mal
- Danksagung erhalten: 5 Mal
Re: Übergabe von Variablen an ein Unterprogramm
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.
Der TGW
CCU3 / Solaredge PV integriert / Daikin Klima WLAN integriert - gerne für Rückfragen offen.
- tgw
- Beiträge: 580
- Registriert: 10.10.2013, 22:35
- System: CCU
- Wohnort: Recklinghausen
- Hat sich bedankt: 38 Mal
- Danksagung erhalten: 5 Mal
Re: Übergabe von Variablen an ein Unterprogramm
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.
Der TGW
CCU3 / Solaredge PV integriert / Daikin Klima WLAN integriert - gerne für Rückfragen offen.
-
- Beiträge: 5444
- Registriert: 30.05.2019, 11:37
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Chemnitz
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 735 Mal
Re: Übergabe von Variablen an ein Unterprogramm
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!
Wie du siehst, liegt hier das Script für das UP im SONST-Pfad!