Notification Rule von DSL nach javascript migrieren

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Notification Rule von DSL nach javascript migrieren

Beitrag von lenschith »

Hallo zusammen,

ich möchte meine Rules von DSL auf javascript migrieren, aber ich scheitere. Leider finde ich keine Antworten auf meine Fragen/Fehler. Ich komme mir momentan so vor das nur ich mich einfach zu blöd anstelle. Ich muss gestehen meine javascript Kenntnisse sind sehr bescheiden bin aber durchaus lernfähig. ich hoffe mir möchte/kann jemand helfen und Licht ins dunkle bringen.

DSL Rule:

Code: Alles auswählen

var  Timer tNote = null  // Timer für Notification

 logInfo("garage","Notification Garage getriggert, Status: {}", ShellyGaragentorstatusAddOn.state)
    tNote?.cancel
    if(ShellyGaragentorstatusAddOn.state == 0)
        if(now.getHourOfDay > 20 || now.getHourOfDay < 5) // zwischen 21 Uhr und 5 Uhr
            tNote = createTimer(now.plusMinutes(15), [|
                if (notificationName_Garage.state == ON) {
                sendNotification('name@domain.de', "Garage ist geöffnet!")
                }
            ])
Mein Versuch in javascript:

Code: Alles auswählen

var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var ScriptExecution = Java.type("org.openhab.core.model.script.actions.ScriptExecution");
var ZonedDateTime = Java.type("java.time.ZonedDateTime");

logger.info("Start******************** " ZonedDateTime.now().toString()); //Script Test 

 if (itemRegistry.getItem('GaragentorStatusAddOn_AddOn').getState() == 0){
   logger.info("getState OK");
   if(ZonedDateTime.now().getHour() > 16 || ZonedDateTime.now().getHour() < 5) // zwischen 21 Uhr und 5 Uhr
   ScriptExecution.createTimer(ZonedDateTime.now().plusMinutes(15), function(){       
         logger.info("Ende*********************");
   });
 }
Bekomme immer diese Meldung im Log:
Screenshot 2021-02-16 194856.png

Danke
Gruß Lenschi
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von lenschith am 18. Feb 2021 08:40, insgesamt 1-mal geändert.
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

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

Re: Rule von DSL nach javascript migrieren

Beitrag von udo1toni »

Fehlt da nicht ein Komma? Das wäre auch der Inhalt der Meldung...
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Rule von DSL nach javascript migrieren

Beitrag von lenschith »

Das Komma hatte ich übersehen. Ich habe heute noch etwas gebastelt aber ich kann immer noch keine Notification versenden. Ist die Function flasch? Oder was muss ich noch ändern?

Code: Alles auswählen

var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var ScriptExecution = Java.type('org.openhab.core.model.script.actions.ScriptExecution');
var ZonedDateTime = Java.type('java.time.ZonedDateTime');
var timerDesTodes;

 if (itemRegistry.getItem('GaragentorStatusAddOn_AddOn').getState() == 0)
 {
	logger.info("getState");
	if(ZonedDateTime.now().getHour() > 6 || ZonedDateTime.now().getHour() < 5) // zwischen 21 Uhr und 5 Uhr
	{
     logger.info("Time");
     this.timerDesTodes = ScriptExecution.createTimer(ZonedDateTime.now().plusMinutes(1), function(){
		logger.info("event")
		if (itemRegistry.getItem('notificationName_Garage').getState() == 'ON'){
			events.sendNotification('name@domain.de', 'Garage ist geöffnet!')
			logger.info("Nachricht*****")
	 }
   });
   }
 }

Code: Alles auswählen

2021-02-17 19:34:45.521 [WARN ] [ore.internal.scheduler.SchedulerImpl] - Scheduled job failed and stopped

jdk.nashorn.internal.runtime.ECMAException: TypeError: events.sendNotification is not a function
Gruß Lenschi
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

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

Re: Rule von DSL nach javascript migrieren

Beitrag von udo1toni »

Wie gesagt habe ich mich mit javaScript noch nicht wirklich beschäftigt. Wo ist events definiert?
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Anbeku
Beiträge: 216
Registriert: 12. Nov 2020 10:26
Answers: 4

Re: Rule von DSL nach javascript migrieren

Beitrag von Anbeku »

udo1toni hat geschrieben: 17. Feb 2021 23:32 Wie gesagt habe ich mich mit javaScript noch nicht wirklich beschäftigt. Wo ist events definiert?
Ich habe mittlerweile herausgefunden, dass events wohl ein "eingebautes" Objekt ist, über das der eventbus angebunden ist. Das benötigt man, wenn man Dinge an Items und Bindings senden möchte. Nicht zu verwechseln mit "event" was ein Objekt ist, was einen über den Trigger informiert, der die Rule ausgelöst hat. Letztendlich scheint javaScript mehr lowlevel zu sein als die DSL. Mit der DSL werde ich mich aber nicht mehr im Detail beschäftigen, da das ein Auslaufmodell zu sein scheint.

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Notification Rule von DSL nach javascript migrieren

Beitrag von lenschith »

hast du dann eine Idee was ich machen muss um die Notifications zu versenden. Dann ist das events Objekt das falsche?
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

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

Re: Notification Rule von DSL nach javascript migrieren

Beitrag von udo1toni »

sendNotification ist ja eine Cloud Funktion. Hast Du den openHAB Cloud Connector installiert? Hast Du myopenHAB eingerichtet? LAss mal das events. weg, ich sehe nicht, was das in dem Zusammenhang da zu suchen hätte.

EDIT:

Eventuell muss auch erst ein Handler angelegt werden, damit die Action dann als Methode zur Verfügung steht, sowas wie

Code: Alles auswählen

import org.openhab.io.openhabcloud.NotificationAction as NotificationAction

NotificationAction.sendNotification(<mail-adress>,<message>)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Notification Rule von DSL nach javascript migrieren

Beitrag von lenschith »

Ja, openhab Cloud ist konfiguriert und das System ist auch Online.
Ich habe jetzt mal eine einfach Rule angelegt um das zu testen aber es klappt nicht. Bin mir nicht sicher ob die erste Zeile überhaupt nötig ist. Aber auch ohne diese Zeile bekomme ich den selben Fehler.

Trigger ist ein einfacher Switch wenn dieser auf ON geht

Code: Alles auswählen

var ScriptExecution = Java.type('org.openhab.core.model.script.actions.ScriptExecution');

			sendNotification('openhab@lentscher.de', 'Test PUSH!');
			logger.info("Notification");

Code: Alles auswählen

==> /var/log/openhab3/openhab.log <==

2021-02-18 12:29:00.448 [ERROR] [ernal.handler.ScriptConditionHandler] - Script execution failed: ReferenceError: "sendNotification" is not defined in <eval> at line number 3
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Notification Rule von DSL nach javascript migrieren

Beitrag von lenschith »

Hab das mit dem Import erst jetzt gesehen. Aber klappt leider auch nicht.

Code: Alles auswählen


import org.openhab.io.openhabcloud.NotificationAction as NotificationAction;

			NotificationAction.sendNotification('name@domain.de', 'Test PUSH!');
			logger.info("Notification");

Code: Alles auswählen

==> /var/log/openhab3/openhab.log <==

2021-02-18 12:35:24.117 [ERROR] [ernal.handler.ScriptConditionHandler] - Script execution failed: <eval>:1:0 Expected an operand but found import

import org.openhab.io.openhabcloud.NotificationAction as NotificationAction;

^ in <eval> at line number 1 at column number 0
Zuletzt geändert von lenschith am 18. Feb 2021 19:18, insgesamt 1-mal geändert.
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Anbeku
Beiträge: 216
Registriert: 12. Nov 2020 10:26
Answers: 4

Re: Notification Rule von DSL nach javascript migrieren

Beitrag von Anbeku »

Ich habe noch das gefunden: https://openhab-scripters.github.io/ope ... ud-actions Weiß jemand, ob die openhab-helper-libraries unter OH3 zur Verfügung stehen?

Antworten