OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Willi S.
Beiträge: 10
Registriert: 16. Apr 2020 10:34
Answers: 0

OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von Willi S. »

Hallo zusammen,

OH3 bietet die Möglichkeit, per GUI Scripte und Regeln zu erstellen. Dabei kann als Trigger wohl definiert werden "When a Start level is reached" ... 20, 40, 60, ....

Meine Frage:
Welchen Grund kann es haben, dass dieser Trigger bei meiner Installation auf einem Raspi beim Start von OH3 offenbar nicht ausgelöst wird? Mit diesem Trigger definierte Regeln werden beim Start von OH3 nicht ausgeführt. Die definierte Regel kann testweise manuell gestartet werden und funktioniert dann auch einwandfrei.

Beste Grüße, Willi

Willi S.
Beiträge: 10
Registriert: 16. Apr 2020 10:34
Answers: 0

Re: OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von Willi S. »

Hallo allerseits,

mal andersherum gefragt - hat jemandvon Euch Erfahrunug mit dem Trigger "When a Start level is reached" beim Start des OH3 Systems? Nutzt jemand diese Funktion erfolgreich ?

Beste Grüße, Willi

Cineast
Beiträge: 9
Registriert: 3. Jan 2021 09:04
Answers: 0

Re: OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von Cineast »

Moin,

ich kann Dir leider nicht sagen, warum diese Rule bei Dir evtl. nicht getriggert wird. Ich kann Dir aber berichten, dass ich eine solche Rule bei mir erfolgreich laufen habe, um beim Systemstart den Item.state einiger Items auf einen bestimmten Wert zu setzen. Wird sauber durchgeführt und ich verwende die reached 100% Variante des Triggers. Den Rest dieser Rule habe ich ohne Script in der "dann mach..." Sektion definiert.

VG Jens

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von Cyrelian »

Willi S. hat geschrieben: 4. Jan 2021 22:19 Hallo allerseits,

mal andersherum gefragt - hat jemandvon Euch Erfahrunug mit dem Trigger "When a Start level is reached" beim Start des OH3 Systems? Nutzt jemand diese Funktion erfolgreich ?

Beste Grüße, Willi
Hi Willi,

das scheint derzeit ein Problem/Bug zu sein. Schau mal hier: klick.
Bei mir ziehen die Trigger "System started" auch nicht mehr.
Ich habe in der KARAF Console mal das logging dafür auf INFO gestellt:

Code: Alles auswählen

log:set INFO openhab.core.service.StartLevelService
um zu sehen, wo er beim Starten welche RULES,ITEMS usw. zieht.

CU
Cyrelian

Willi S.
Beiträge: 10
Registriert: 16. Apr 2020 10:34
Answers: 0

Re: OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von Willi S. »

Hi Cyrelian,
danke für den Hinweis. Das scheint ja eine komplxere Geschichte zu sein.

Ich werde wohl vorläufig mal bei den textbasierten Regeln bleiben. Allerdings kommt es auch hier zu Fehlermeldungen, die ich in Version 2.5. nicht hatte. Laut Log-Eintrag wird die folgende Regel schon durchlaufen, bevor die "Rule engine" gestartet ist.

rule "System started"
when System started
then
logInfo('INFO', "Durchlaufe System started")
....
end

Hier der entsprechende Log:
2021-01-05 13:04:25.764 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Time zone set to 'Europe/Berlin'.
2021-01-05 13:04:25.825 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Location set to '......'.
2021-01-05 13:04:25.828 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Locale set to 'de_DE'.
2021-01-05 13:04:25.831 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Measurement system set to 'SI'.
2021-01-05 13:04:38.658 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'zuhause.items'
2021-01-05 13:04:40.530 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'mqtt.persist'
2021-01-05 13:04:40.663 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'rrd4j.persist'
2021-01-05 13:04:40.800 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'jdbc.persist'
2021-01-05 13:04:41.437 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'zuhause.sitemap'
2021-01-05 13:04:42.525 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'zuhause.things'
2021-01-05 13:04:45.937 [INFO ] [.core.model.lsp.internal.ModelServer] - Started Language Server Protocol (LSP) service on port 5007
2021-01-05 13:04:46.277 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'zuhause.rules'
2021-01-05 13:05:01.354 [INFO ] [org.openhab.core.model.script.INFO ] - Durchlaufe System started
2021-01-05 13:05:01.374 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'zuhause-1' failed: Could not cast NULL to org.openhab.core.library.types.DateTimeType; line 26, column 21, length 43 in zuhause
2021-01-05 13:05:01.378 [INFO ] [e.automation.internal.RuleEngineImpl] - Rule engine started.
2021-01-05 13:05:03.044 [INFO ] [org.openhab.ui.internal.UIService ] - Started UI on port 8080
2021-01-05 13:05:09.524 [INFO ] [ternal.dhcp.DHCPPacketListenerServer] - DHCP request packet listener online

Beste Grüße, Willi

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von Cyrelian »

Willi S. hat geschrieben: 5. Jan 2021 13:19 Allerdings kommt es auch hier zu Fehlermeldungen, die ich in Version 2.5. nicht hatte. Laut Log-Eintrag wird die folgende Regel schon durchlaufen, bevor die "Rule engine" gestartet ist.
Hi Willi,

das ist "normal" ;)
Es werden erst alle RULE-Files geladen und geparst. Hier mal die Auflistung, was wann gestartet und geladen wird.

Code: Alles auswählen

00 - OSGi framework has been started
10 - OSGi application start level has been reached, i.e. bundles are activated
20 - Model entities (items, things, links, persist config) have been loaded, both from db as well as files
30 - Item states have been restored from persistence service, where applicable
40 - Rules are loaded and parsed, both from db as well as dsl and script files
50 - Rule engine has executed all "system started" rules and is active
70 - User interface is up and running
80 - All things have been initialized
100 - Startup is fully complete.
Die Meldung:

Code: Alles auswählen

2021-01-05 13:05:01.378 [INFO ] [e.automation.internal.RuleEngineImpl] - Rule engine started.
bekommst du also bei StartLevelService - 50, also an der richtigen Stelle.Ich beschäftige mich jetzt auch schon seit ein paar Tagen damit, aber wie Du richtig sagst....komplexere Geschichte ;)

CU
Cyrelian

Benutzeravatar
peter-pan
Beiträge: 2769
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von peter-pan »

Willi S. hat geschrieben: 5. Jan 2021 13:19 2021-01-05 13:05:01.374 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'zuhause-1' failed: Could not cast NULL to org.openhab.core.library.types.DateTimeType; line 26, column 21, length 43 in zuhause
...ich lese gerade interessehalber mit.
Kann es auch sein, das es zu Problemen mit dem Start der Rule kommt, weil da evtl. noch ein anderer Fehler (Zeile 26) in dem Rule-File vorliegt ? (JodaTime vs. JavaTime). Mal abgesehen davon, dass es wohl auch noch einen Bug mit dem "System started"-Trigger in OH3 gab (gibt?).
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Willi S.
Beiträge: 10
Registriert: 16. Apr 2020 10:34
Answers: 0

Re: OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von Willi S. »

Hi,

hier mal die komplette "System Started" Rule und unten das resultierende Log.
rule "System started"
when System started or
Item SwiItemTest04 received command
then
logInfo('INFO', "Durchlaufe System started.")

val telegramAction = getActions("telegram","telegram:telegramBot:xxxxxx")
val dayStart = (DatAstroDayLightStart.state as DateTimeType).getZonedDateTime()
val dayEnd = (DatAstroDayLightEnd.state as DateTimeType).getZonedDateTime()

if (now.isAfter(dayStart) && now.isBefore(dayEnd)) {
NumIsDayLight.postUpdate(1)
logInfo('INFO', "Tageslicht: Es ist hell.")
}
else {
NumIsDayLight.postUpdate(0)
logInfo('INFO', "Tageslicht: Es ist dunkel.")
}
telegramAction.sendTelegram("openHAB gestartet.") // Nachricht an Telegram
logInfo('INFO', "Ende System started")
end
Den Schalter "SwiItemTest04" hab ich nur eingebaut, um die Regel im laufenden Betrieb auch jederzeit zum Test manuell laufen lassen zu können.
  • Über den Testschalter manuell gestartet ist alles gut - keine Fehlermeldung.
  • Automatisch beim System Startup gestartet tritt der Fehler (siehe Log) auf und die Abarbeitung der Rule bricht ab.
Daher werde ich das Gefühl nicht los, dass OH3 die Rule "when System started" schon ausführt, wenn an anderer Stelle im Startup noch nicht alles initiallisiert ist - oder so ähnlich....

Besagte Zeile 28 ist diese: val dayStart = (DatAstroDayLightStart.state as DateTimeType).getZonedDateTime()
==> sieht für mich eigenlich korrekt aus (zumal alles funktioniert, wenn ich die Regel manuell auslöse)

2021-01-06 10:38:10.628 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Time zone set to 'Europe/Berlin'.
2021-01-06 10:38:10.686 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Location set to '..........'.
2021-01-06 10:38:10.690 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Locale set to 'de_DE'.
2021-01-06 10:38:10.693 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Measurement system set to 'SI'.
2021-01-06 10:38:23.246 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'zuhause.items'
2021-01-06 10:38:25.248 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'mqtt.persist'
2021-01-06 10:38:25.386 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'rrd4j.persist'
2021-01-06 10:38:25.532 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'jdbc.persist'
2021-01-06 10:38:26.145 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'zuhause.sitemap'
2021-01-06 10:38:27.134 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'zuhause.things'
2021-01-06 10:38:30.787 [INFO ] [.core.model.lsp.internal.ModelServer] - Started Language Server Protocol (LSP) service on port 5007
2021-01-06 10:38:31.153 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'zuhause.rules'
2021-01-06 10:38:44.610 [INFO ] [org.openhab.ui.internal.UIService ] - Started UI on port 8080
2021-01-06 10:38:51.375 [INFO ] [org.openhab.core.model.script.INFO ] - Durchlaufe System started.
2021-01-06 10:38:51.513 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'zuhause-1' failed: Could not cast NULL to org.openhab.core.library.types.DateTimeType; line 28, column 21, length 43 in zuhause
2021-01-06 10:38:51.520 [INFO ] [e.automation.internal.RuleEngineImpl] - Rule engine started.

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von udo1toni »

Nein, die Rule wird ganz normal ausgeführt. Das Item DatAstroDayLightStart ist aber noch nicht mit Daten befüllt, deshalb knallt es.


Gesendet von meinem SM-G973F mit Tapatalk



openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2769
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3: Scripte/Regeln bei Systemstart automatisch ausführen

Beitrag von peter-pan »

udo1toni hat geschrieben: 6. Jan 2021 16:06 deshalb knallt es.
Udo hatte natürlich Recht. Ich hab einfach mal einen Timer eingebaut und siehe da, es funktioniert.
Meine "etwas modifizierte" Rule:

Code: Alles auswählen

rule "System started"
  when System started or
    Item Dummy_4 changed to ON
  then
   logInfo('INFO', "Durchlaufe System started.")
   createTimer(now.plusSeconds(90)) [|
   //val telegramAction = getActions("telegram","telegram:telegramBot:xxxxxx")
   val dayStart = (radiator_valve_05_next_change.state as DateTimeType).getZonedDateTime()
   val dayEnd = (radiator_valve_05_next_change.state as DateTimeType).getZonedDateTime()
  if (now.isAfter(dayStart) && now.isBefore(dayEnd)) {
   //NumIsDayLight.postUpdate(1)
   logInfo('INFO', "Tageslicht: Es ist hell.{}: {}",dayStart,dayEnd)
  }
  else {
   //NumIsDayLight.postUpdate(0)
   logInfo('INFO', "Tageslicht: Es ist dunkel.{}: {}",dayStart,dayEnd)
  }
   //telegramAction.sendTelegram("openHAB gestartet.") // Nachricht an Telegram
   logInfo('INFO', "Ende System started")
  ]
end
und der Log dazu:

Code: Alles auswählen

2021-01-06 16:32:02.184 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Time zone set to 'Europe/Berlin'.
2021-01-06 16:32:02.274 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Location set to '12.34567,1.23456'.
2021-01-06 16:32:02.282 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Locale set to 'de_DE'.
2021-01-06 16:32:24.638 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'test_avm.items'
2021-01-06 16:32:27.546 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'test_homematic.items'
2021-01-06 16:32:28.649 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'test.items'
2021-01-06 16:32:31.469 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'mosquitto_bridge.things'
2021-01-06 16:32:31.693 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'esp3201.things'
2021-01-06 16:32:31.804 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'mail.things'
2021-01-06 16:32:40.042 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'testDateTimePattern.rules'
2021-01-06 16:32:44.567 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'jodaTOzone.rules'
2021-01-06 16:32:47.246 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'test_start.rules'
2021-01-06 16:32:48.583 [INFO ] [.core.model.lsp.internal.ModelServer] - Started Language Server Protocol (LSP) service on port 5007
2021-01-06 16:32:58.802 [INFO ] [org.openhab.core.model.script.INFO  ] - Durchlaufe System started.
2021-01-06 16:32:58.945 [INFO ] [e.automation.internal.RuleEngineImpl] - Rule engine started.
2021-01-06 16:33:00.115 [INFO ] [org.openhab.ui.internal.UIService   ] - Started UI on port 8080
2021-01-06 16:33:51.691 [INFO ] [ab.ui.habpanel.internal.HABPanelTile] - Started HABPanel at /habpanel
2021-01-06 16:33:55.748 [INFO ] [.transport.mqtt.MqttBrokerConnection] - Starting MQTT broker connection to '192.168.123.45' with clientid OH2_vera
2021-01-06 16:33:55.818 [WARN ] [.MqttBrokerConnectionServiceInstance] - MqttBroker connection configuration faulty: host : You need to provide a hostname/IP!
2021-01-06 16:33:56.892 [INFO ] [ternal.communicator.client.RpcClient] - Interface 'WIRED' on gateway '3014F711A0001F98A9AABCAF' not available, disabling support
2021-01-06 16:33:56.928 [INFO ] [ternal.communicator.client.RpcClient] - Interface 'CUXD' on gateway '3014F711A0001F98A9AABCAF' not available, disabling support
2021-01-06 16:33:57.182 [INFO ] [ommunicator.AbstractHomematicGateway] - HmGatewayInfo[id=CCU,type=CCU2,firmware=3.53.34,address=PEQ2184367,rf=true,wired=false,hmip=true,cuxd=false,group=true]
2021-01-06 16:34:29.717 [INFO ] [org.openhab.core.model.script.INFO  ] - Tageslicht: Es ist dunkel.2021-01-06T18:00+01:00: 2021-01-06T18:00+01:00
2021-01-06 16:34:29.726 [INFO ] [org.openhab.core.model.script.INFO  ] - Ende System started
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten