Seite 2 von 6
Re: Mal wieder eine "rule" Frage
Verfasst: 10. Aug 2019 17:05
von atk69
Vielen Dank für die Antwort.
Hier meine momentane Rule:
Code: Alles auswählen
// Globale Variablen immer zu Beginn der Datei definieren!
var Timer tLum = null
var Number nLum = 0
rule "Luminanz"
when
Item dataLum changed
then
logInfo("Luminanz", "Rule Luminaz läuft")
if(!(dataLum.state instanceof Number)) {
logWarn("luminanz","dataLum enthält keinen gültigen Wert!")
return;
}
if ((dataLum.state as Number) < 4 && now.getHourOfDay > 17 && now.getHourOfDay < 23 && tLum === null) {
nLum = 0
tLum = createTimer(now.plusSeconds(1), [|
var Number nTime = 1
nLum += 1
switch nLum {
case 1: {
Markise.sendCommand(DOWN)
nTime = 60
}
case 2: {
Roll_WZ_W_li.sendCommand(DOWN)
}
case 3: {
Roll_WZ_W_re.sendCommand(DOWN)
}
case 4: {
Markise.sendCommand(DOWN)
}
case 5: {
Roll_WZ_W_li.sendCommand(DOWN)
}
case 6: {
Roll_WZ_W_re.sendCommand(DOWN)
nTime = 600
}
default: {
nTime = 0
}
}
if(nTime > 0)
tLum.reschedule(now.plusSeconds(nTime))
else {
tLum = null
}
])
}
end
loginfo-Eintrag korrekt ?
Gruss
atk69
EDIT:
Eintrag scheint korrekt
das sehe ich in meinem openhab.log
Code: Alles auswählen
2019-08-10 17:36:36.075 [INFO ] [ipse.smarthome.model.script.Luminanz] - Rule Luminanz läuft
2019-08-10 17:38:33.603 [INFO ] [ipse.smarthome.model.script.Luminanz] - Rule Luminanz läuft
2019-08-10 17:40:33.807 [INFO ] [ipse.smarthome.model.script.Luminanz] - Rule Luminanz läuft
2019-08-10 17:42:33.604 [INFO ] [ipse.smarthome.model.script.Luminanz] - Rule Luminanz läuft
2019-08-10 17:44:33.578 [INFO ] [ipse.smarthome.model.script.Luminanz] - Rule Luminanz läuft
2019-08-10 17:46:33.598 [INFO ] [ipse.smarthome.model.script.Luminanz] - Rule Luminanz läuft
Re: Mal wieder eine "rule" Frage
Verfasst: 11. Aug 2019 03:06
von peter-pan
Freut mich, dass deine Rule jetzt läuft bzw. triggert.
Gruss
peter
Re: Mal wieder eine "rule" Frage
Verfasst: 11. Aug 2019 08:56
von atk69
Eben nicht
Sieht alles ok aus, aber die Rolos bewegen sich kein Stück.
Mit der "alten" Rule (die erste) lief es zumindest.
Werde wohl noch ein bisschen suchen müssen.
Gruss
atk69
Re: Mal wieder eine "rule" Frage
Verfasst: 11. Aug 2019 11:16
von peter-pan
Dann solltest du vielleicht noch ein paar "Debug-Punkte" (logInfos) einbauen, damit du siehst, wie weit die Rule läuft bzw. welche Bedingungen abgearbeitet werden.
Wie hast du denn deine Items definiert ?
Evtl. muss da noch Rücksicht auf UoM bei den Bedingungen genommen werden (z.B. dataLum).
Re: Mal wieder eine "rule" Frage
Verfasst: 11. Aug 2019 11:24
von atk69
Daran habe ich schon gedacht. Die logInfo kann ich ja an belieber stelle einsetzten.
Was ist UoM ?
Re: Mal wieder eine "rule" Frage
Verfasst: 11. Aug 2019 13:47
von atk69
bin etwas weiter...
rule läuft bis "Switch nLum", danach tot.
Habe noch ein weitern Info Eintag gemacht. bis dahin kommt er aber nicht.
Wie in der rule ersichtlich , habe ich zum testen das Zeitfenster und den Lichtwert angepasst. Ich dunkle einfach künstlich ab.
Code: Alles auswählen
// Globale Variablen immer zu Beginn der Datei definieren!
var Timer tLum = null
var Number nLum = 0
rule "Luminanz"
when
Item dataLum changed
then
//logInfo("Luminanz", "Rule Luminanz läuft")
if(!(dataLum.state instanceof Number)) {
logWarn("luminanz","dataLum enthält keinen gültigen Wert!")
return;
}
if ((dataLum.state as Number) < 2000 && now.getHourOfDay > 12 && now.getHourOfDay < 23 && tLum === null) {
nLum = 0
logInfo("Luminanz", "Rule Luminanz n")
tLum = createTimer(now.plusSeconds(1), [|
var Number nTime = 1
nLum += 1
switch nLum {
case 1: { logInfo("Luminanz", "Rule Luminanz ausgelöst"+ triggeringItem.name)
Markise.sendCommand(DOWN)
nTime = 60
}
case 2: {
Roll_WZ_W_li.sendCommand(DOWN)
}
case 3: {
Roll_WZ_W_re.sendCommand(DOWN)
}
case 4: {
Markise.sendCommand(DOWN)
}
case 5: {
Roll_WZ_W_li.sendCommand(DOWN)
}
case 6: {
Roll_WZ_W_re.sendCommand(DOWN)
nTime = 600
}
default: {
nTime = 0
}
}
if(nTime > 0)
tLum.reschedule(now.plusSeconds(nTime))
else {
tLum = null
}
])
}
end
Code: Alles auswählen
2019-08-11 15:36:19.003 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'WZ_WI_ROLL_LUM.rules'
2019-08-11 15:49:37.743 [INFO ] [ipse.smarthome.model.script.Luminanz] - Rule Luminanz n
2019-08-11 15:51:44.624 [INFO ] [ipse.smarthome.model.script.Luminanz] - Rule Luminanz n
Seit neuestem habe ich noch folgenden Eintrag im Log:
Code: Alles auswählen
2019-08-11 16:40:58.604 [WARN ] [me.core.internal.events.EventHandler] - Dispatching event to subscriber 'org.eclipse.smarthome.core.internal.items.ItemUpdater@44a77d' takes more than 5000ms.
Re: Mal wieder eine "rule" Frage
Verfasst: 11. Aug 2019 17:54
von peter-pan
Ich bin leider nicht so ganz in deinem Element, ich habe zwar ein paar Rollladengurtwickler (Zeitsteuerung GW60) und auch einenRollladenmotor auch mit Zeitsteuerung. Beide Versionen können auch manuell bedient werden. Eine Anbindung an OH ist aber bisher nicht vorhanden (Hab noch nichts passendes gefunden).
Aber ich habe deine Regel mal etwas aufgehübscht, damit du Informationen über die einzelnen Abschnitte deiner Rule und die Items/Variablen im Logger bekommst:
Code: Alles auswählen
// Globale Variablen immer zu Beginn der Datei definieren!
var Timer tLum = null
var Number nLum = 0
rule "Luminanz"
when
Item dataLum changed
then
//logInfo("Luminanz", "Rule Luminanz läuft")
if(!(dataLum.state instanceof Number)) {
logWarn("luminanz","dataLum enthält keinen gültigen Wert!")
return;
}
if ((dataLum.state as Number) < 2000 && now.getHourOfDay > 12 && now.getHourOfDay < 23 && tLum === null) {
nLum = 0
logInfo("Luminanz", "Rule Luminanz n: " + dataLum)
tLum = createTimer(now.plusSeconds(1), [|
var Number nTime = 1
nLum += 1
logInfo("Luminanz", "Rule Luminanz Timer started" + " Varibale nTime = " + nTime + " Varibale nLum = " + nLum)) // for testing only
switch nLum {
case 1: {
logInfo("Luminanz", "Rule Luminanz ausgelöst Case 1" + " Varibale nTime = " + nTime + " Varibale nLum = " + nLum) // for testing only
Markise.sendCommand(DOWN)
nTime = 60
}
case 2: {
logInfo("Luminanz", "Rule Luminanz ausgelöst Case 2" + " Varibale nTime = " + nTime + " Varibale nLum = " + nLum) // for testing only
Roll_WZ_W_li.sendCommand(DOWN)
}
case 3: {
logInfo("Luminanz", "Rule Luminanz ausgelöst Case 3" + " Varibale nTime = " + nTime + " Varibale nLum = " + nLum) // for testing only
Roll_WZ_W_re.sendCommand(DOWN)
}
case 4: {
logInfo("Luminanz", "Rule Luminanz ausgelöst Case 4" + " Varibale nTime = " + nTime + " Varibale nLum = " + nLum) // for testing only
Markise.sendCommand(DOWN)
}
case 5: {
logInfo("Luminanz", "Rule Luminanz ausgelöst Case 5" + " Varibale nTime = " + nTime + " Varibale nLum = " + nLum) // for testing only
Roll_WZ_W_li.sendCommand(DOWN)
}
case 6: {
logInfo("Luminanz", "Rule Luminanz ausgelöst Case 6" + " Varibale nTime = " + nTime + " Varibale nLum = " + nLum) // for testing only
Roll_WZ_W_re.sendCommand(DOWN)
nTime = 600
}
default: {
logInfo("Luminanz", "Rule Luminanz ausgelöst Case default" + " Varibale nTime = " + nTime + " Varibale nLum = " + nLum) // for testing only
nTime = 0
}
}
if(nTime > 0)
logInfo("Luminanz", "Rule Luminanz ausgelöst If nTime Zeile 57" + " Varibale nTime = " + nTime + " Varibale nLum = " + nLum) // for testing only
tLum.reschedule(now.plusSeconds(nTime))
else {
logInfo("Luminanz", "Rule Luminanz ausgelöst durch Else") // for testing only
tLum = null
}
logInfo("Luminanz", "Rule Luminanz - Timer wird beendet") // for testing only
])
logInfo("Luminanz", "Rule Luminanz - Timer ist beendet") // for testing only
}
logInfo("Luminanz", "Rule Luminanz - Ende der Rule") // for testing only
end
Testen kann ich das nicht, da mir deine Arbeitsumgebung fehlt.
Über UoM kannst du
hier in der Doku nachlesen. Damit werden eigentlich Werte der Items in bestimmte Einheiten (z.B. Grad/Celsius bzw. Grad/Fahrenheit, etc) automatisch umgerechnet. Eine Zuweisung kann sowohl über das .items-File als auch über die .sitemap erfolgen (und/oder).
Hier noch ein Beispiel für zwei Items mit UoM und das dritte ohne UoM. Du erkennst sicher gleich den Unterschied.
Code: Alles auswählen
Number:Length Kilometer_apogee "Mond erdfernster Punkt" {channel="astro:moon:local:apogee#distance"} //OH 2.4
Number:Angle Moon_Azimuth "Mond-Azimuth [%.1f %unit%]" <azimuth> (gAstro) {channel="astro:moon:local:position#azimuth"}
Number Moon_illumination "Mondhelligkeit" <moon> (gAstro) {channel="astro:moon:local:phase#illumination"}
Ich hoffe du kommst nun mit diesen Querverweisen weiter. Es wäre auch sicher nicht verkehrt, wenn du die bertroffenen Items auch mitposten könntest.
Gruss
Peter
Re: Mal wieder eine "rule" Frage
Verfasst: 11. Aug 2019 18:02
von atk69
Danke Peter-pan
mein item:
Code: Alles auswählen
Rollershutter Roll_WZ_W_li "Rolladen WZ Wi links" <rollershutter> (gShutter, Wohnzimmer) [ "Switchable" ] {mqtt=">[mosquitto:cmd/jarolift/shutter/1:command:*:default], <[mosquitto:stat/jarolift/shutter/1:state:default]" }
Rollershutter Roll_WZ_W_re "Rolladen WZ Wi rechts" <rollershutter> (gShutter, Wohnzimmer) [ "Switchable" ] {mqtt=">[mosquitto:cmd/jarolift/shutter/0:command:*:default], <[mosquitto:stat/jarolift/shutter/0:state:default]" }
Das item "Markise" ist gleich.
Ich habe die Steuerung hier gefunden: hxxp://
www.bastelbudenbuben.de/forum/topic/pla ... -gehaeuse/
Funktionert echt gut.
Deine "optimierte" rule teste ich...
Gruss und Dank
atk69
Re: Mal wieder eine "rule" Frage
Verfasst: 11. Aug 2019 18:16
von peter-pan
Danke für deine Info. ich schau mir den Link an. Noch eine Frage: Wie sieht das Item dataLum aus ?
Re: Mal wieder eine "rule" Frage
Verfasst: 11. Aug 2019 18:26
von atk69
dataLum kommt von einem Sonoff und ist (leider) via Paper UI angelegt.
datalum.JPG
P.S. in deiner rule waren ein paar Klammerfehler. Denke, habe es korrigiert bekommen
