ich "Bastele" schon ein paar Jahre mit openHAB herum, habe jetzt aber (durch ein verunglücktes Upgrade auf OH4) ein komplettes neues System aufgesetzt und arbeite jetzt von Anfang an systematisch, was vorher nicht konsequent der Fall war. (Beispiel: Einheitliche Nomenklatur, nur die Things hinzufügen, die auch direkt ins Modell gepackt werden...)
Ich habe ein Hue Subsystem, das ich funktionell gerne auf OH portieren möchte, eben um nur EINE Automatisierungslösung zu haben und um verschiedene Sub-Systeme in einem System interdisziplinär zu verknüpfen.
Ich habe mit Homematic alles was Heizung, Temperatur, geöffnete Fenster und sowas angeht abgedeckt, die Steuerung der Heizung erfolgt aber in openHAB, genau so möchte ich das mit Hue haben.
Jetzt stoße ich auf den ersten Schönheitsfehler (Funktion ist so gegeben, wie ich das möchte, trotzdem läuft (nach Log) was schief.
Ausgangsbasis:
im Flur 1.OG sind zwei Bewegungsmelder und eine Lampengruppe, bestehend aus 4 einzelnen Leuchtmitteln. Die Lampengruppe ist aus dem Hue System als Room übernommen worden.
Aufgabe: bei Bewegung soll abhängig von der Uhrzeit (Tags/Nachts) entweder die ganze Gruppe auf 50% angeschaltet (Tags) oder 2 Lampen auf 5% angeschaltet (Nachts) werden und 10 Sekunden nachdem die Motions von ON auf OFF gewechselt sind (beide) sollen die Lampen wieder ausgehen.
ich habe das in Blockly gelöst (Bin nicht so der große Programmierer) und zwar wie folgt:
Die Trigger für die Regel sind die beiden Motions, Wechsel von OFF auf ON
Code: Alles auswählen
triggers:
- id: "1"
configuration:
itemName: OG_FL_Hue_Bewegungsmelder_Flur_oben_BZ_Bewegung
state: ON
previousState: OFF
type: core.ItemStateChangeTrigger
- id: "2"
configuration:
itemName: OG_FL_Hue_Bewegungsmelder_Flur_Oben_SZ_Bewegung
state: ON
previousState: OFF
type: core.ItemStateChangeTrigger
Code: Alles auswählen
script: >
var thread = Java.type('java.lang.Thread')
if (((time.ZonedDateTime.now()).hour()) >= 22 || ((time.ZonedDateTime.now()).hour()) <= 5) {
items.getItem('OG_FL_Hue_Light_Group_Flur_oben_Helligkeit').sendCommand('5');
console.info('Rule_Hue_OG_FL = 5%');
} else if (((time.ZonedDateTime.now()).hour()) <= 21 && ((time.ZonedDateTime.now()).hour()) >= 6) {
items.getItem('OG_FL_Hue_Light_Group_Flur_oben_Helligkeit').sendCommand('50');
console.info('Rule_Hue_OG_FL = 50%');
}
while (!(items.getItem('OG_FL_Hue_Bewegungsmelder_Flur_oben_BZ_Bewegung').state == 'OFF' && items.getItem('OG_FL_Hue_Bewegungsmelder_Flur_Oben_SZ_Bewegung').state == 'OFF')) {
thread.sleep(1000);
}
if (cache.private.exists('OG_FL_Timer') === false || cache.private.get('OG_FL_Timer').hasTerminated()) {
cache.private.put('OG_FL_Timer', actions.ScriptExecution.createTimer('OG_FL_Timer', time.ZonedDateTime.now().plusSeconds(10), function () {
items.getItem('OG_FL_Hue_Light_Group_Flur_oben_Helligkeit').sendCommand('0');
console.info('Rule_Hue_OG_FL = 0%');
cache.private.remove('OG_FL_Timer');
}));
} else {
cache.private.get('OG_FL_Timer').reschedule(time.ZonedDateTime.now().plusSeconds(10));
};
type: script.ScriptAction
Code: Alles auswählen
2023-10-05 12:09:36.619 [WARN ] [ore.internal.scheduler.SchedulerImpl] - Scheduled job 'OG_FL_Timer' failed and stopped
java.lang.IllegalStateException: Multi threaded access requested by thread Thread[OH-scheduler-11704,5,main] but is not allowed for language(s) js.
at com.oracle.truffle.polyglot.PolyglotEngineException.illegalState(PolyglotEngineException.java:129) ~[bundleFile:?]
at com.oracle.truffle.polyglot.PolyglotContextImpl.throwDeniedThreadAccess(PolyglotContextImpl.java:1034) ~[bundleFile:?]
at com.oracle.truffle.polyglot.PolyglotContextImpl.checkAllThreadAccesses(PolyglotContextImpl.java:893) ~[bundleFile:?]
at com.oracle.truffle.polyglot.PolyglotContextImpl.enterThreadChanged(PolyglotContextImpl.java:723) ~[bundleFile:?]
at com.oracle.truffle.polyglot.PolyglotEngineImpl.enterCached(PolyglotEngineImpl.java:1991) ~[bundleFile:?]
at com.oracle.truffle.polyglot.HostToGuestRootNode.execute(HostToGuestRootNode.java:110) ~[bundleFile:?]
at com.oracle.truffle.api.impl.DefaultCallTarget.callDirectOrIndirect(DefaultCallTarget.java:85) ~[bundleFile:?]
at com.oracle.truffle.api.impl.DefaultCallTarget.call(DefaultCallTarget.java:102) ~[bundleFile:?]
at com.oracle.truffle.polyglot.PolyglotFunctionProxyHandler.invoke(PolyglotFunctionProxyHandler.java:154) ~[bundleFile:?]
at jdk.proxy1.$Proxy1302.run(Unknown Source) ~[?:?]
at org.openhab.automation.jsscripting.internal.threading.ThreadsafeTimers.lambda$0(ThreadsafeTimers.java:85) ~[bundleFile:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$12(SchedulerImpl.java:189) ~[?:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$1(SchedulerImpl.java:88) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: com.oracle.truffle.api.TruffleStackTrace$LazyStackTrace
evtl hilft es, die Blockly darstellung dazu zu packen?