Seite 1 von 2

Notification Rule von DSL nach javascript migrieren

Verfasst: 16. Feb 2021 19:51
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

Re: Rule von DSL nach javascript migrieren

Verfasst: 16. Feb 2021 23:47
von udo1toni
Fehlt da nicht ein Komma? Das wäre auch der Inhalt der Meldung...

Re: Rule von DSL nach javascript migrieren

Verfasst: 17. Feb 2021 19:35
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

Re: Rule von DSL nach javascript migrieren

Verfasst: 17. Feb 2021 23:32
von udo1toni
Wie gesagt habe ich mich mit javaScript noch nicht wirklich beschäftigt. Wo ist events definiert?

Re: Rule von DSL nach javascript migrieren

Verfasst: 18. Feb 2021 10:25
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.

Re: Notification Rule von DSL nach javascript migrieren

Verfasst: 18. Feb 2021 10:53
von lenschith
hast du dann eine Idee was ich machen muss um die Notifications zu versenden. Dann ist das events Objekt das falsche?

Re: Notification Rule von DSL nach javascript migrieren

Verfasst: 18. Feb 2021 12:06
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>)

Re: Notification Rule von DSL nach javascript migrieren

Verfasst: 18. Feb 2021 12:30
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

Re: Notification Rule von DSL nach javascript migrieren

Verfasst: 18. Feb 2021 12:38
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

Re: Notification Rule von DSL nach javascript migrieren

Verfasst: 18. Feb 2021 13:47
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?