Seite 1 von 2
Timer Probleme
Verfasst: 13. Jan 2023 21:30
von fmmephisto
Hallo liebes Forum!
Ich versuche folgendes Szenario zu verwirklichen, was ich auch schon immer mal step by step aufgebaut habe. Einzeln geht alles. In Summe geht es nicht mehr.
Da ich ich mit meinem Mac den Texteditor VSC nicht zum laufen bekommen, ich keine Ahnung von DSL habe und Blockly mich leider auch nur bedingt weitergebracht hat, bin ich bei diesem Script angekommen:
Code: Alles auswählen
var scriptExecution = Java.type('org.openhab.core.model.script.actions.ScriptExecution');
var zdt = Java.type('java.time.ZonedDateTime');
if (typeof this.timers === 'undefined') {
this.timers = [];
}
if (typeof this.timers['MyTimer'] === 'undefined' || this.timers['MyTimer'].hasTerminated()) {
this.timers['MyTimer'] = scriptExecution.createTimer(zdt.now().plusSeconds(7), function () {
if (itemRegistry.getItem('Zustand_Alarmanlage_Status').getState() == 'ON') {
events.sendCommand('Sicherheitsalarm_Ausloeser', itemRegistry.getItem(event.itemName).getLabel());
events.sendCommand('Sicherheitsalarm_aktiviert', 'ON');
}
})
}
Trigger (über MainUI): Wenn einer der Bewegungsmelder in der Gruppe Bewegungsmelder sich ändert (also eine Bewegung wahrnimmt)
Wenn also nun eine Bewegung erfasst wird, soll 7 Sekunden gewartet werden. Danach wird geprüft, ob Zustand_Alarmanlage_Status = ON ist.
Wenn ja, soll der Bewegungsmeldername in das Item „Sicherheitsalarm_Ausloeser“ geschrieben werden und der Switch „Sicherheitsalarm_aktiviert“ soll auf ON gesetzt werden.
Interessant ist: Wenn ich den Timer rauslasse geht es.
Wenn ich den Timer alleine laufen lasse und nur einen events.sendCommand Befehl dahinter habe. Geht es auch.
Schreibe ich alles ab if hinter die letzte Klammer, werden alle Aktionen direkt ausgeführt ohne die 7 Sekunden zu warten.
Es soll nämlich gewährleistet werden, dass man nach der Bewegungserfassung im Flur noch 7 Sekunden Zeit hat, den Switch „Alarmanlage“ zu betätigen. Das soll nicht über die App oder sonstwie erfolgen. Sondern nur über einen versteckten Taster im Haus.
Wo ist der Fehler im Script?
Wie kann man das Problem in java oder DSL lösen?
Bitte nicht über den Texteditor….. DAs geht bei mir - wie oben beschrieben - leider nicht oder ich bin zu blöd für so hochkomplexe Programmierungen über Texte ausserhalb von OH3.
Lieben Dank im Voraus und noch einen schönen Abend.
Viele Grüße
Frank
Re: Timer Probleme
Verfasst: 14. Jan 2023 06:07
von Harka
Moin,
speichere event.itemName vor dem Timer in einer Variable und nutze anschließend diese.
event steht innerhalb der anonymen Funktion nicht zur Verfügung.
Gruß
Re: Timer Probleme
Verfasst: 14. Jan 2023 09:48
von fmmephisto
Guten Morgen Haka!
Danke! Jetzt geht es weiter es soll!


Das war ja einfach!
Gruß und ein schönes Wochenende!
Re: Timer Probleme
Verfasst: 15. Jan 2023 10:47
von BOP
fmmephisto hat geschrieben: ↑13. Jan 2023 21:30
Da ich ich mit meinem Mac den Texteditor VSC nicht zum laufen bekommen, ...
Das schreibst du immer wieder. Aber das stimmt doch überhaupt nicht! In einem anderen Thread hast du doch eine Mapping-Datei mit VSC angelegt. Also funktioniert bei dir VSC doch!
Was du anscheinend nicht eingerichtet bekommst, ist die openHAB Erweiterung. Aber, die bietet im Prinzip nur Komfortfunktionen. Sie ist aber nicht notwendig, um in DSL Rules zu schreiben.
Und zur openHAB-Erweiterung. Wenn du mal beschreiben würdest, wo bei dir die Probleme liegen, könnte man ggf. auch helfen.
Meine Einstellungen in der 'Settings.json" in VSC sehen z.B. so aus:
Code: Alles auswählen
{
"openhab.connection.authToken": "oh.SHuispfhjigZUOGzuogzjoGhjuodfghjskgfjhkGUilghjkgHJKGHKGgvGHFHJFVGJHFTZIZKo",
"openhab.connection.host": "192.168.0.248",
"openhab.connection.basicAuth.username": "bop",
"openhab.connection.basicAuth.password": "password"
}
Den API-Token kannst du über die openHAB UI erstellen, indem du unten links auf Deinen Benutzernamen klickst und dann "Erstelle neuen API-Token".
Re: Timer Probleme
Verfasst: 15. Jan 2023 16:31
von fmmephisto
Hallo BOP!
VSC funktioniert, aber wenn ich damit Rules schreibe, werden diese nicht nach OH3 übertragen. Heißt, ich kann die dort nicht sehen.
Den API-Token habe ich mir auch generiert und eingebaut.
Ich benutze VSC nur, um mapping Dateien zu erzeugen. Das ist richtig.
Warum ich das immer schreibe: Die meisten Antworten hier beziehen sich auf Textbasierte Programmierung von OH3. Da ich alles über die MainUI mache und auch die hiesige Ansicht ist, dass man textbasierte Programmierung und UI-Programmierung nicht mischen sollte - was ich voll und ganz unterstütze, da ich gerade als Anfänger sicher die Übersicht verlieren würde, was ich wo programmiert habe - weise ich halt darauf hin.
Meine Fragen hier richten sich somit nur an die Forenteilnehmer, die auch die anderen Programmierungsvarianten kennen und hierzu was sagen können. Udo1Toni sagte, dass die textorienteren Forenteilnehmer zwar versuchen, auch die Nur-MainUI-Nutzer zu unterstützen.
Da die meisten DSL-Rules, die hier gepostet werden, für die textbasierte Programmierung ist, schreibe ich es lieber im Vorfeld, dass ich mit den Antworten auch was anfangen kann.
Wie gesagt: ich beschäftige mich erst seit Weihnachten mit OH3 und bin immer verwirrt, wenn ich mal die Threads verfolge und damit nichts anfangen kann. immer wenn ich diese bei mir in ein Script einbaue, funktionieren sie nicht. Liegt aber daran, dass sie für die textbasierte Programmierung sind. Also nicht für mich. Daher stelle ich mich meine Fragen so präzise wie möglich, dass ich Eure Antworten auch verstehen und diese bei mir auch umgesetzt werden können.
Bei mir sieht die settings.json so ähnlich aus - vielleicht eine andere Reihenfolge.
Aber was bei mir nicht funktioniert: ich kann meine Items, die in VSC zu sehen sind, nicht in den Editor mit einbauen. Ich kann sie sehen und auch aufklappen, aber ich bekomme sie nicht in den Texteditor nach rechts rübergezogen.
Rules, die ich in VSC erstellt habe, sehe ich nicht in OH3 in der MainUI. DAher kann ich diese auch nicht wirklich testen.
Habe auch mal meine mit MainUI-erstellte Sitemap kopiert und eine neue textbasierte in VSC erstellt und dort eingefügt.
Leider wird diese Sitemap nicht nach OH3 übertragen und ich kann sie mir nicht ansehen. Heißt also: Ich kann nur den Quellcode in VSC ablegen aber ansehen und Sitemaps und Rules verwenden geht nicht.
Lieben Dank auf jeden Fall, dass du nochmals nachgefragt hast.
Gruß
Frank
Re: Timer Probleme
Verfasst: 15. Jan 2023 16:39
von fmmephisto
@BOP: Nochmals ganz kurz und knapp gesagt: VSC bietet nicht nur Komfortfunktionen. Die Lösungen hier sind meist von mir als MainUI-Nutzer nicht zu verwenden, weil der Aufbau einer DSL-Rule in der MainUI anders aussieht als das, was hier immer gepostet wird.
Re: Timer Probleme
Verfasst: 15. Jan 2023 18:30
von BOP
fmmephisto hat geschrieben: ↑15. Jan 2023 16:39
@BOP: Nochmals ganz kurz und knapp gesagt: VSC bietet nicht nur Komfortfunktionen.
Ich wüsste jetzt allerdings nicht, was nicht funktionieren sollte, ohne die Erweiterung!?
Und das die Erweiterung bei dir funktioniert, sieht man doch schon daran, dass du die Items und Things? in VSC angezeigt bekommst.
Aber um es klar zu schreiben: Mit der Erweiterung werden keine Rules an OH übertragen!
Du öffnest in VSC ganz schlicht den Ordner "/etc/openhab". Bzw. natürlich die Freigabe auf dem Mac. Das sieht dann im Finder so aus:
oh_freigabe.png
In VSC dann diesen Ordner öffnen:
vsc_ordner_oeffnen.png
Und das sieht dann so aus:
vsc_ordner_geoeffnet.png
Und wenn du jetzt in VSC dort z.B. eine neue Rule anlegst, wird sie automatisch von openHAB geladen. Und dann auch über die GUI angezeigt.
Du kannst die über Textdateien angelegten Rules dann allerdings nicht in der GUI bearbeiten. Deswegen werden sie dort auch mit einem Schlosssymbol angezeigt.
Ich will dich hier nicht dazu überreden Rules in DSL in Textform zu schreiben. Es soll nur als Info dienen.
Re: Timer Probleme
Verfasst: 15. Jan 2023 18:33
von BOP
oh_gui_rules.jpg
In VSC kannst die Items nicht direkt rüder ziehen. Es gibt aber ein Kontextmenü:
vsc_kontextmenu.png
Re: Timer Probleme
Verfasst: 15. Jan 2023 18:34
von udo1toni
Grummel...
Um das noch mal zu erklären... Du kannst eine DSL Rule genauso auch über die Main UI erstellen. Was nicht funktioniert, ist der Zugriff auf globale Variablen, weil Du die in der UI nicht erstellen kannst.
Jede über die Textdatei erstellte Rule taucht anschließend auch in der UI auf.
Wenn die Rule nicht auftaucht, bedeutet dies, dass Du einen Fehler gemacht hast.
Das kannst Du im Log nachvollziehen, dort muss eine Meldung erscheinen, dass die rules-Datei geladen wurde.
Gerne genommene Fehler: Der Dateiname enthält ungültige Zeichen oder der Dateiname endet nicht auf .rules; eine der enthaltenen Rules enthält einen schwerwiegenden Fehler, so dass openHAB die Verarbeitung der Datei abbricht.
Letzteres wird als Fehlermeldung geloggt, sinngemäß: File blabal has errors, therefor ignoring it
Da die Rule über die Textdatei vollständig definiert ist - das heißt, incl. Trigger, hat die Rule in der Textdatei einen Header, bzw. einen Rahmen, der NICHT zum Rule Code gehört.
Der Rule-Code ist ausschließlich der Teil zwischen then und end, und zwar ohne diese beiden Schlüsselwörter. Auch das ist ein gerne genommener Fehler, einfach den kompletten Text einzufügen, ohne weiter über den Sinn dessen nachzudenken, was da steht.
Ohne Dir zu nahe treten zu wollen, aber ich kann Dir versichern, dass das hier ein reines Layer-8-Problem ist.
Zum Zugriff über VSC auf openHAB ab v3: Man muss keinen Usernamen oder Passwort eintragen, der Token alleine ist ausreichend - das ist der Sinn des Tokens.
"Rüberziehen" von Items: Äh, nein. Mach mal einen Rechtsklick auf ein Item in der Liste der Items, dort bekommst Du ein Kontextmenü, in dem Du verschiedene Möglichkeiten geboten bekommst. Das Gleiche gilt sinngemäß auch für die Channel und Things - es gibt ein Kontextmenü für die Funktionen.
Zu beachten ist dabei: Wenn Du ein Item in eine Sitemap einbauen willst, muss diese Sitemap im Editor geöffnet sein. Der Cursor muss ich an der Stelle befinden, an der Du das Widget für das ausgewählte Item erzeugen willst.
Wieder gilt das Gleiche auch für die anderen Arten des Einfügens. Willst Du z.B. für alle Channel eines Things Items erzeugen, so öffnest Du die .items Datei, in der Du die Items anlegen willst, klickst mit rechts auf das Thing und wählst create Items from Channels, schwupp hast Du eine Liste aller Channel mit dazu passenden Itemdefinitionen.
Im Unterschied zur UI kannst Du hier aber die IDs (die Namen der Items) ändern, was allerdings streng genommen keine Änderung ist, sondern ein Löschen des Items und Anlegen unter neuem Namen.
Die Items werden natürlich erst mit dem Speichern der Datei in openHAB verfügbar.
Re: Timer Probleme
Verfasst: 15. Jan 2023 18:39
von BOP
udo1toni hat geschrieben: ↑15. Jan 2023 18:34
Das kannst Du im Log nachvollziehen, dort muss eine Meldung erscheinen, dass die rules-Datei geladen wurde.
Ich habe dafür parallel immer ein Terminal auf, mit folgendem Befehl, damit ich direkt Fehler erkenne:
Zum Zugriff über VSC auf openHAB ab v3: Man muss keinen Usernamen oder Passwort eintragen, der Token alleine ist ausreichend - das ist der Sinn des Tokens.
Stimmt, danke für den Schupser, das sollte ich mal entfernen. Ist bei mir so "gewachsen" von oh 2 zu 3.
