Läuft der Gefrierschrank noch? OH3 UI only

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Sharki
Beiträge: 21
Registriert: 20. Feb 2022 13:56
Answers: 0

Re: Läuft der Gefrierschrank noch? OH3 UI only

Beitrag von Sharki »

gemacht getan :)

Nu jetzt habe ich diesen Fehler.

Code: Alles auswählen

2023-11-20 21:16:16.672 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'FreezerAlarm-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_notEquals(int,int) on instance: null in FreezerAlarm
Wenn ich den Fehler richtig interpretiere, gibt es nur eine Stelle mit != und da auf der einen Seite eine "0" steht würde (newState as Number) "null" liefern. Das sollte aber das erste if abfangen....
openHAbian auf einem Raspi 4
openHAB 4.1.1

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

Re: Läuft der Gefrierschrank noch? OH3 UI only

Beitrag von udo1toni »

Wie so oft steckt der Teufel im Detail...
Hier mal die korrigierte Fassung:

Code: Alles auswählen

// Globale Variablen vor der ersten Rule
var Timer tFreezer = null

rule "Freezer Alarm"
when
    Item FreezeCurrent changed
then
    var nCurrent = 0.0
    if(newState instanceof Number)
        nCurrent = (newState as Number).floatValue
    if(nCurrent != 0) {
        tFreezer?.cancel
        tFreezer = null
    }
    else if(tFreezer === null)
        tFreezer = createTimer(now.plusMinutes(5), [|
            // Alarm generieren
        ])
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Sharki
Beiträge: 21
Registriert: 20. Feb 2022 13:56
Answers: 0

Re: Läuft der Gefrierschrank noch? OH3 UI only

Beitrag von Sharki »

Danke schön.

Ich hatte schon den floatValue rausgenommen und den wert mit 10 multipliziert.
Hatte aber nicht geholfen.

Ich finde das mit dem Pfad und dem Editor auf dem Pi nur sehr unzeitgemäß ;)
Ich fand meinen Ansatz mit der UI Rule einfacher.
Kann ich ein Item zu globalen Variablen machen ?
openHAbian auf einem Raspi 4
openHAB 4.1.1

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

Re: Läuft der Gefrierschrank noch? OH3 UI only

Beitrag von udo1toni »

Sharki hat geschrieben: 21. Nov 2023 00:11 Ich hatte schon den floatValue rausgenommen und den wert mit 10 multipliziert.
Der floatValue muss aber sein, nur war halt zum einen ein Tippfehler drin und zum anderen war die Variable als Integer definiert (var nCurrent = 0 -> Integer, var nCurrent = 0.0 -> Float)
Sharki hat geschrieben: 21. Nov 2023 00:11 Ich finde das mit dem Pfad und dem Editor auf dem Pi nur sehr unzeitgemäß ;)
Ich fand meinen Ansatz mit der UI Rule einfacher.
Unzeitgemäß... Es geht also darum, dass es unbedingt anders sein muss, als früher... Die Textlösung ist einfach und schnell. Eine einzelne Rule über die UI zu erstellen, dauert genauso lang, wie die gleiche Rule über Text zu erstellen. Die "Einfachheit" ergibt sich nur daraus, dass Du in der UI nicht wissen musst, was Du tust, denn (bei Blockly) sind alle möglichen Bausteine vordefiniert (und das gleiche gilt sinngemäß auch für die Trigger).
Dumm nur, dass man in der UI auch exakt wissen muss, was in openHAB möglich ist, sonst nützt die Auflistung herzlich wenig.
Sharki hat geschrieben: 21. Nov 2023 00:11 Kann ich ein Item zu globalen Variablen machen ?
Du kannst Items dazu verwenden, Werte zu halten. Timer kannst Du nicht in einem Item speichern.
Du kannst allerdings einen privateCache dazu verwenden, den Timer abzubilden, aber wie ich oben schon geschrieben habe, das ist ungleich aufwändiger.
Es hat schon seine Gründe, warum langjährige Nutzer dazu tendieren, ihr System über Text zu konfigurieren - ich habe die UI lange ausprobiert, aber sie bremst mich letztlich nur aus. Ich nutze die UI hauptsächlich, um Dinge auszuprobieren, sei es für mich oder für jemanden im Forum.

Nochmal zu Pfad und Editor: Ich nutze keine Freigabe, sondern editiere die Textkonfiguration mittels VS Code Remote Plugin. Dazu läuft VS Code lokal auf meinem PC, verbindet sich aber im Hintergrund über ssh mit dem Remote System, auf dem in diesem Fall halt openHAB läuft. VS Code verwendet dabei zum Login automatisch einen von mir festgelegten User (in diesem Fall openhab), so dass VS Code auch automatisch Schreibrechte im Dateisystem hat.
Die Einrichtung ist ungleich komplexer als über eine bereits laufende Samba Freigabe, dafür ist sie auch komfortabler :)

VS Code hat auch ein openHAB Plugin, welches unter anderem Code Completion und Code Check bietet. Fehler werden unmittelbar markiert, und dies geschieht, indem openHAB jegliche Eingaben an den openHAB Server schickt und von diesem validieren lässt. Die Prüfung geschieht also immer gegen das aktuelle System, nicht offline. Sie ist damit genauso gut wie die Prüfung innerhalb der UI.
Weiterhin gibt es dynamische Listen von Things und Items, im Fall der Items über die Groups angeordnet, ein Item kann also durchaus mehrfach in der Liste auftauchen. Die Ansicht enthält auch den aktuellen Wert des Items (allerdings muss man die Ansicht manuell aktualisieren, um die Systemlast nicht zu weit nach oben zu treiben). Wenn man Rules schreibt und dort den Namen eines Items eingibt, wird auch dort direkt der aktuelle Wert angezeigt, was sehr hilfreich ist, wenn man auf mögliche Werte prüfen will. Group Items zeigen alle Member als Liste an und es gibt noch viele weitere Komfortfunktionen, die in der UI gar nicht, oder nur an anderer Stelle vorhanden sind.

Ich möchte Dich beileibe nicht zur Textkonfiguration bekehren :) aber hier von "unzeitgemäß" zu sprechen, bedeutet nur, dass Du nicht die nötige Erfahrung hast, um Dir hier ein Urteil erlauben zu können :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Sharki
Beiträge: 21
Registriert: 20. Feb 2022 13:56
Answers: 0

Re: Läuft der Gefrierschrank noch? OH3 UI only

Beitrag von Sharki »

Moin Udo ?

das mit nicht zeitgemäß bezog sich mehr auf die Texteingabemöglichkeit.
Einerseits kann ich die DSL Rule in der UI sehen aber nicht ändern.
Das halte ich für antiquiert, ja es hat sich sicher jemand was dabei gedacht...

Und zum Thema Urteil erlauben :
Ich bin noch noch vom alten Kaliber was Programmiersprachen / Skripte und auch den Jahrgang angeht.
Ich habe assembler Code für 68000 geschrieben, mit den ersten PCs war ich mit sämtliche Konfigurationsdateien auf "du".
Ich habe Pascal, ADA, C und später C++ programmiert, ich dürfte die wichtigsten Linux Dateien mit Ort und Inhalt kennen.
Wobei ich sagen muss, es verblasst doch vieles. Ich mache das aber schon lange nicht mehr beruflich.
Aktuell freue ich mich über openHAB, versuche mein Haus smarter zu machen und reise gerne mit Hund und Frau im Wohnmobil durch die Gegend.
Und ich liebe Foren wie diese, wo immer jemand zur Hand ist.
Herzlichen Dank dafür.

So ich geh jetzt mit Wuffel gassi.
Grüße Hajo
openHAbian auf einem Raspi 4
openHAB 4.1.1

Harka
Beiträge: 310
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Läuft der Gefrierschrank noch? OH3 UI only

Beitrag von Harka »

Moin,
theoretisch sollten das, lt. J-N-K, auch mit UI-DSL gehen, fragt mich aber bitte nicht wie.
In Javascript (mit Blockly erstellt) sieht mein Lösungsvorschlag so aus. Da ich telegram nutze muss halt mit url angepasst werden. Trigger bleibt gleich.

Code: Alles auswählen

var Strom, url;
Strom = parseFloat(event.itemState.toString());
if (cache.private.exists('Tiefkuehler')) { cache.private.remove('Tiefkuehler').cancel(); };
url = 'https://api.telegram.org/botxxxxxxxxx:xxxxxxxxx/sendMessage?chat_id=xxxxxxx&text=' + 'Alarm ! Gefrierschrank ist ohne Strom';
if (Strom == 0) {
  if (cache.private.exists('Tiefkuehler') === false || cache.private.get('Tiefkuehler').hasTerminated()) {
    cache.private.put('Tiefkuehler', actions.ScriptExecution.createTimer('Tiefkuehler', time.ZonedDateTime.now().plusMinutes(5), function () {
      // hier der Alarm
      var response = actions.HTTP.sendHttpGetRequest(encodeURI(url));
      })); 
  };
}
Ansonsten sehe ich das ähnlich. Konfiguration per Textdatei ist mir bei unserem bescheidenem Heim auch ein Fall für Kanone->Spatz. Zum Glück haben die Entwickler openHAB mit mehren Bedienoptionen ausgestattet, so das für (fast) jeden was dabei ist.

Sharki
Beiträge: 21
Registriert: 20. Feb 2022 13:56
Answers: 0

Re: Läuft der Gefrierschrank noch? OH3 UI only

Beitrag von Sharki »

Moin

so hier die Variante die jetzt läuft als DSL Script im /etc/openhab/rules Verzeichnis als xxxx.rules File angelegt.

Code: Alles auswählen

var Timer tFreezer = null

rule "FreezerAlarm"
when
    Item Gefrierschrank_shellyplus1pm4855199d1840192168156_Stromstarke changed
then
    var nCurrent = 0
    if(newstate instanceof Number)
        nCurrent = (newstate as Number).floatValue
    if(nCurrent != 0) {
        tFreezer?.cancel
        tFreezer = null
    }
    else if(tFreezer === null)
        tFreezer = createTimer(now.plusMinutes(5), [|
            var urlmessage = "Alarm%20!%20Gefrierschrank%20ist%20ohne%20Strom"
            sendHttpGetRequest("GET", "https://api.callmebot.com/whatsapp.php?source=openHAB&phone=+49xxxxxxxxxx&apikey=xxxxxxxxx&text=" + urlmessage)
        ])
Gibt es für DSL so etwas wie encodeURI ?

Grüße Hajo
openHAbian auf einem Raspi 4
openHAB 4.1.1

Antworten