Seite 1 von 1

Anzeige Ergebnis einer Variable in Blockly

Verfasst: 14. Feb 2022 09:04
von krobami
Hallo OpenHAB-Gemeinde!
Ich habe kürzlich meine Leidenschaft für Hausautomatisation gefunden und mache die ersten Schritte in OpenHAB. Aufgrund der Fülle der Möglichkeiten bin ich noch ein wenig überfordert, aber Schritt für Schritt sollte es besser werden.

Ich benutze OpenHAB 3.2.0, installiert auf einen Raspberry. Meine Linux-Kenntnisse sind nicht gerade hervorragend, sollte aber, zumindest am Anfang, kein großes Problem sein.

Nachdem ich jetzt die ersten Geräte eingebunden habe, versuche ich Rules zu erstellen. Die einfachen (wenn - dann) sind kein Problem. Jetzt versuche ich mit Blockly eine etwas kompliziertere Regel zu erstellen (Steuerung von Ventilatoren in Abhängigkeit der absoluten Feuchte innen/außen). Dazu habe ich einen Testaufbau (ein Shelly mit Temperatur-AddOn und AM2302-Sensor). Als ersten Schritt möchte ich mir mit der vereinfachten Formel aus diesen Daten die absolute Feuchte errechnen. Ich habe dazu im Blockly einige Variablen angelegt und die Formeln eingegeben.

Wie kann ich mir das Ergebnis dieser Berechnungen (d.h. den Wert dieser Variablen) ansehen? Gibt es eine Möglichkeit, wie man diese Werte ausgeben kann? Z.B. Items mit diesen Variabeln verbinden und dann in einem Widget ausgeben und/oder zumindest in einem Logfile anzeigen lassen?

Danke für Eure Unterstützung.

LG Michael

Übrigens: Ich brauche keine Lösung für mein "Projekt Ventilatorsteuerung", das möchte ich gerne selber schaffen.

Re: Anzeige Ergebnis einer Variable in Blockly

Verfasst: 14. Feb 2022 16:22
von udo1toni
Herzlich willkommen im Forum!

Alles, was in der UI von openHAB dargestellt werden soll, muss als Item angelegt sein. Alternativ kannst Du natürlich auch Werte ins Log schreiben, aber man will es ja komfortabel...

Gibt es einen bestimmten Grund, warum Du für eine solche (für openHAB Verhältnisse komplexe) Rule ausgerechnet Blockly nutzen willst? Nichts gegen Blockly, aber es scheint mir nicht das richtige Werkzeug dafür zu sein.

Und noch ein anderer Punkt, über den die Leute grundsätzlich stolpern: openHAB ist kein Regelsystem, es ist dazu gedacht, Regelsysteme zu steuern. Der Unterschied: Das Regelsystem nimmt Messwerte, wertet sie aus und steuert einen Aktor, um die gemessenen Werte zu optimieren. Das Steuersystem sagt einem Regelsystem, welche Sollwerte gewünscht sind und zeigt ansonsten nur Soll- und Istwerte an. Dafür steuert es aber z.B. abhängig von anderen Eingangsgrößen den Sollwert, z.B. Nachtabsenkung, Abwesenheitsabsenkung usw.
Man kann selbstverständlich auch Regelungen mit openHAB realisieren, man sollte aber über das Ergebnis nicht enttäuscht sein.
Das ist ungefähr so, als wollte man in Excel einen Roman schreiben. Geht, aber Word ist dazu viel besser geeignet.
Umgekehrt will man berechnete Tabellen viel lieber in Excel erstellen, obwohl Word durchaus auch in Tabellen rechnen kann.

Re: Anzeige Ergebnis einer Variable in Blockly

Verfasst: 14. Feb 2022 17:12
von krobami
Hallo!
Danke erst Mal für deine Antwort. Der Grund, warum ich Blockly nutzen möchte, ist ganz einfach. Die Regel lässt sich nicht mit einfachen Item Actions umsetzen. Ich muss daher ein Script verwenden und da erscheint mir Blockly am einfachsten zu erlernen. Aber wenn es mit Blockly nicht gehen sollte, dann muss ich wohl DSL-Rules programmieren lernen.
Ich habe schon in anderen Forenbeiträgen gelesen, das Rules in einer Heimautomatisierung nicht optimal geeignet sind, um eine Regelung zu programmieren. Mangels Alternativen habe ich es trotzdem versucht. Und meine Anwendung ist ja nicht wirklich kritisch, es geht "nur" um die Lüftung. Und leider habe ich nicht die Zeit und die Fähigkeit, gleichzeitig verschiedene Systeme neu zu erlernen. Und aus derzeitiger Sicht hat OpenHAB für mich die höchste Priorität.
Sollte es sich herausstellen, das es mit OpenHAB nicht geht oder die Regelung zu instabil sein, dann muss ich mir etwas anderes einfallen lassen.
D.h. ich werde doch versuchen mit Excel einen Roman zu schreiben, werde aber auf viele Annehmlichkeiten von Word verzichten müssen (um bei deinem Vergleich zu bleiben).

Zurück zu meiner ursprünglichen Frage:
Kannst du mir sagen, wie ich eine in Blockly definierte Variable mit einem Item verknüpfe?

Re: Anzeige Ergebnis einer Variable in Blockly

Verfasst: 14. Feb 2022 17:45
von Harka
Moin,
ich nehme für einfache Sachen auch gern mal Blockly zumal es mit OH 3.2 noch mal ein Stück dazu gelernt hat. Da ich nicht jeden Tag mit Programmieren verbringt und nur JavaScript-Kenntnisse vorhanden sind, ist es für mich eine nette Unterstützung.
Da hier auch nicht für alles ein extra Regelsystem vorhanden ist und OH auf einem sonst unterforderten RasPi4 läuft habe ich mit dieser etwas ineffektiven Verwendung auch kein Problem.

Zu Deinen Fragen: Um das Ergebnis in OH weiter nutzen zu können kannst Du z.B. in der Modellansicht dem Shelly ein weiteres Item zuweisen (Add Point). Die Ausgabe des Items kannst Du auch gleich mittels "Add Metadata"-"stateDescription" in "Pattern" das Augabeformat "%.2f g/m³" zuweisen.
Dem Item kannst Du dann in Blockly mit "send command" die Variable übergeben. Das Item kannst Du dann auch in einem Widget oder als Label-Cell anzeigen lassen.
Wegen der Loganzeige schau mal ob bei Dir das nicht schon auf dem Port 9001 aktiv ist (bei mir http://192.168.178.41:9001/). Dort kannst Du Dir für die Fehlersuche in Blockly z.B. mit "log-warn" was anzeigen lassen.

Re: Anzeige Ergebnis einer Variable in Blockly

Verfasst: 14. Feb 2022 19:34
von udo1toni
Blockly hat in meinen Augen genau einen Vorteil: Man hat jederzeit ein Korsett und sieht alle möglichen Parameter. Bei allen Scriptsprachen, die frei über Text einzugeben sind, braucht man im Zweifel mindestens eine Liste der möglichen Befehle.

Aber gerade für die Anwendung braucht es im Grunde nur eine Hand voll davon.
openHAB ist grundsätzlich stateless und arbeitet asynchron, alles, was passiert, ist eventgesteuert.
Ein Event ist z.B. die Änderung eines Wertes.
Du brauchst als o lediglich eine Rule, welche auf die Änderung eines Wertes reagiert. Da Du mehrere werte nutzt, um Deinen Steuerbefehl zu errechnen, muss die Rule natürlich auch auf mehrere Wertänderungen reagieren.

Die geänderten Werte musst Du auslesen (1. benötigter Befehl), Deine Berechnungen anstellen und anschließend anzeigen bzw. das Gerät steuern, abhängig vom Ergebnis der Berechnungen (2. und 3. Befehl).
Deine Rule sähe in Textform also so aus:

Code: Alles auswählen

rule "Lüftung steuern"                                                   // Header der Rule
when                                                                     // Ab hier Definition aller Trigger
    Item MyItem1 changed or                                              // ein Trigger
    Item MyItem2 changed or                                              // noch ein Trigger
    Item MyItem3 changed                                                 // und noch einer
then                                                                     // Ab hier auszuführender Code
    if(MyItem1.state > irgendeinWert && MyItem2.state < MyItem3.state)
        MyITem.sendCommand(ON)
    else
        MyITem.sendCommand(OFF)
end                                                                      // Ende der Rule
Natürlich ist das nicht vollständig, vor allem, weil man bei solchen Berechnungen besser mit Variablen arbeitet und dann auch darauf achten muss, keine Typverletzungen einzubauen. Aber grundsätzlich würde der Code oben laufen. Das ist jetzt nicht so die steile Lernkurve...

Re: Anzeige Ergebnis einer Variable in Blockly

Verfasst: 14. Feb 2022 20:13
von krobami
Danke nochmals für die Beiträge.

@Harka: Genau das war es, was mir gefehlt hat. Mit diesen Hinweisen konnte ich die Variablen zuweisen und visualisieren. Danke.
@udo1toni: Das, was du vermutlich so nebenbei erstellst hast, würde bei mir lange Zeit erfordern. Aber mir ist auch klar, das bei etwas aufwändigeren Anforderungen Blockly an seine Grenzen stoßen wird und ich meine Grenzen werde erweitern müssen. Aber als Anfänger gibt es viele verschiedene Bereiche, wo man seine Grenzen erweitern muss.

LG
Michael

Re: Anzeige Ergebnis einer Variable in Blockly

Verfasst: 14. Feb 2022 22:00
von udo1toni
krobami hat geschrieben: 14. Feb 2022 20:13 Das, was du vermutlich so nebenbei erstellst hast, würde bei mir lange Zeit erfordern.
Die Leistung besteht hier lediglich daraus, die Schlüsselworte und das grundlegende Format zu kennen.

Die Schlüsselworte state sowie sendCommand kann man nachschauen, die Namen der Items sind Dir bekannt, da Du sie selbst benannt hast (beim Anlegen von Items niemals vorgegebene IDs verwenden, mit f456gjd5786 kann niemand was anfangen...)
Die Rules DSL arbeitet grundsätzlich objektorientiert. Ich habe ein Objekt (Item), dessen Zustand (Status) mich interessiert, also frage ich Item.state ab. Ich möchten ein Objekt manipulieren (einen Befehl senden), also schreibe ich Item.sendCommand, aber welches Kommando? Das wird als Parameter übergeben (also in Klammern).
Ich gebe zu, dass die Doku speziell für die Rules DSL extrem dürftig ist, aber das Grundgerüst sowie diese essenziellen Befehle sind erläutert. Und es gibt buchstäblich zehntausende Code Beispiele alleine hier im Forum :) und fragen ist hier nicht nur gestattet, sondern ausdrücklich erwünscht.

Ich möchte Dir auch nicht von Blockly abraten, nur zeigen, dass die Rules DSL so wild nicht ist.

Und noch ein Hinweis für ein weiteres Detail, was man erlernen kann/sollte/muss...
Es gibt einen hervorragenden Editor, um Textdateien zu bearbeiten, das ist VSCode. Das Besondere an diesem Editor: es gibt tausende Plugins für alle möglichen Anwendungen, die dem Editor spezielle zusätzliche Funktionen beibringen. Das openHAB Plugin verbindet den Editor mit einer laufenden openHAB-Instanz. In der Folge gibt es im Editor eine dynamische Liste aller Things und Channel und eine ebenso dynamische Liste aller Items.
Die Items werden mit Status angezeigt. Man kann jeweils die UID des Channels/Items per Rechtsklick passend zum gewünschten Kontext entnehmen und automatisch einfügen lassen. Code, der bearbeitet wird, wird live auf Fehler geprüft, und zwar von der laufenden openHAB Instanz. Das heißt, wenn es irgendwelche Änderungen an openHAB gibt, so werden diese Änderungen direkt im Editor berücksichtigt, das Editor Plugin muss nicht extra angepasst werden. Automatische Ergänzung, Codevorschläge, Makros usw. muss ich nicht extra erwähnen... es stehen nicht unbedingt alle Informationen groß sichtbar da, aber man bekommt schon einen verdammt tiefen Einblick in die möglichen Befehle und Eigenschaften der DSL. Ich kann also nur empfehlen, sich zu überwinden, wenn die ersten Schritte getan sind, es lohnt sich. ;)