Grundlage sind Items, die einen def. Zeitwert/Uhrzeit bzw. ein Zeitintervall/Minuten wieder spiegeln (hier: alle 30min)
Items:
Code: Alles auswählen
Group:Switch:OR(ON,OFF) grpZeit
// Periodisch
Switch trgMin_30 (grpZeit) // alle 30min
Switch trgMin_00 (grpZeit) // alle 60min (volle Stunde)
// Uhrzeit
Switch trgZeit_0000 (grpZeit)
Switch trgZeit_0030 (grpZeit)
Switch trgZeit_0100 (grpZeit)
Switch trgZeit_0130 (grpZeit)
Switch trgZeit_0200 (grpZeit)
…
Rule:
Code: Alles auswählen
var Number varStd = null
var Number varMin = null
var zeitItem = null
var minItem = null
rule "Cron-Trigger"
when
// alle 30 Minuten
Time cron "0 0/30 * * * ?"
then
val String valRuleName = "Cron-Trigger"
// Variablen für akt. Std/Min
varStd = (now.getHourOfDay)
varMin = (now.getMinuteOfHour)
// Item mit Std. u. Min Wert (Format: HHMM)
DY_ZeitTrigger.postUpdate(String::format("%02d",varStd) + String::format("%02d",varMin))
// Auswahl des entsprechenden Items
// Uhrzeit
var zeitItem = grpZeit.members.filter[i|i.name == ("trgZeit_" + String::format("%02d",varStd) + String::format("%02d",varMin))].head
// Periodisch
var minItem = grpZeit.members.filter[i|i.name == ("trgMin_" + String::format("%02d",varMin))].head
// kurzes Einschalten des entsprechenden Items (nach 2 Sek wieder auf OFF)
zeitItem.postUpdate(ON)
minItem.postUpdate(ON)
Thread::sleep(2000)
zeitItem.postUpdate(OFF)
minItem.postUpdate(OFF)
end
Bsp. Täglich um 6:00:00
Alt: Time cron "0 0 6 * * ?"
--> Neu: Item trgZeit_0600 changed to ON
Oder
Jede volle Stunde
Alt: Time cron "0 0 0/1 * * ?"
--> Neu: Item trgMin_00 changed to ON
Die dynamische Cron-Rule wird anhand des folgenden Beispiels (Abschaltung „Fernseher-Kinderzimmer“) erklärt.
Neben dem Item für den Fernseher (TM_KZ1_Fernseher) wird ein Dummy Item (Selection) benötigt
Item:
Code: Alles auswählen
// Selektionswert aus Auswahlfeld
String DY_KZ1_Fernseher_Profil </code>
Sitemap:
Code: Alles auswählen
Selection item=DY_KZ1_Fernseher_Profil
label="Zeitsteuerung Marvin-TV"
mappings=[ 2100="21:00 Uhr", 2130="21:30 Uhr ", 2200="22:00 Uhr ", 2230="22:30 Uhr ", 2300="23:00 Uhr ", 2330="23:30 Uhr ", 0000="0:00 Uhr ", 0030="0:30 Uhr ", 9999="Aus"]
icon="time"
Rule:
Code: Alles auswählen
rule "Zeitsteuerung MarvinTV" // Zeiteinstellung MarvinTV - Anzeige auf Sitemap
when
Item grpZeit changed to ON
then
// Verzögerung da zeitgleich das Item "DY_ZeitTrigger" geschrieben wird
Thread::sleep(5000)
// Überprüfung ob der Trigger-Wert und der Selektions-Wert übereinstimmen
if (DY_ZeitTrigger.state == DY_KZ1_Fernseher_Profil.state) {
// Ausschaltbefehl
TM_KZ1_Fernseher.sendCommand(OFF)
}
end
Anregungen bzw. Verbesserrungen werden dankend angenommen!
An dieser Stelle möchte ich mich auch bei Udo1Toni bedanken.
Ohne seine zahllosen Hilfen u. Erklärungen in diesem Forum wäre die Umsetzung dieses Projekts für mich nicht möglich gewesen.
DANKE !!!