Item als Variable anlgen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
yustbeyourself
Beiträge: 9
Registriert: 28. Dez 2019 01:24
Answers: 0

Item als Variable anlgen

Beitrag von yustbeyourself »

Hi,

eventuell habe ich auch ein verständnissprobel aber bei openhab gint es nicht sowas wie globale Variablen, oder?
Ich habe daher folgendes überlegt / zusammengesucht:

Grundlegen möchte ich das Thema Variablen in openhab verstehen

Dazu möchte ich folgende anwendungsfall umsetzen (ECMA Script 262 version 11:

Wenn meine Haustür geöffnet wird soll ein Timer starten der nach ablauf die "Variable" Haustür_Timer_Auf auf 2 Setzt
Haustür_Timer_Auf ist ein ITEM vom Typ NUMBER
Warum NUMBER ich möchte hier einen 3State schlater darstellen mit einem Mapping (0="AUS"; 1="LÄUFT"; 2="ABGELAUFEN"
Nachdem die Aktion die nach ABLAUF des Timer ausgeführt werden soll gestartet wurde wird hier wider der Wert auf 0 gesetzt.
Mir ist bekannt das ich beim starten den auszuführenden CODE dem Timer mitgeben kann aber ich möchte das die Rule "Haustür Auf"
auf Türkontakt chanced und auf Timer abgelaufen reagiert.

Wie lege ich also im "Semantic Model" ein Solches ITEM richtig an ich habe hier schonmal probiert aber die werden mir dann im "Semantic Model" nicht angezeigt sondern nur mit suchen unter items. Und in der liste der Items für Rule trigger wurden Sie mir auch nicht angezeigt. Wie gehe ich hier richtig vor und worauf muss ich achten:
1- Location auswählen
2- Add Equpment oder Add Point
Ein Equipment kann mehrere Points bzw Chanel enthalten
Ein Point kann nur einen Wert/Chanel enthalten
Richtig?
3- Worauf muss ich jetzt achten und wo kommt das Mapping ins spiel

Welche ursachen kann es haben das es im "Semantic Model" nicht angezeigt wird?

Ich habe aus anderen Beiträgen mitgenommen das man die Text basierte Konfiguration weitgehendst meiden soll weil die durch die grafische Oberfläche angelegen Datenbankeinträge vom System schneller verarbeite werden können als die Textdefinitionen.

Gruß Heiko

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

Re: Item als Variable anlgen

Beitrag von udo1toni »

Ich versuche mal, etwas Licht ins Dunkel zu bringen...
yustbeyourself hat geschrieben: 17. Feb 2024 09:16 Ich habe aus anderen Beiträgen mitgenommen das man die Text basierte Konfiguration weitgehendst meiden soll
Nein, das ist vor allem Geschmacksache. Grundsätzlich ist gerade bei Items die "alte" Textdefinition die einzige gültige Notation, mit der man hier im Forum in Textform zeigen kann, wie ein Item aussehen muss. Ob Du es dann in eine *.items Datei speicherst oder es über die UI anlegst, ist völlig gleichgültig.
yustbeyourself hat geschrieben: 17. Feb 2024 09:16 weil die durch die grafische Oberfläche angelegen Datenbankeinträge vom System schneller verarbeite werden können als die Textdefinitionen.
Ja, aber nein. Das betrifft einzig den Start von openHAB. Ich nutze weit über 1000 Items und mein System startet innerhalb weniger Sekunden, trotz weitgehender Textkonfiguration. Es ist im Betrieb auch nicht merklich langsamer, als wenn ich die Dinge ausschließlich über die UI anlege.
yustbeyourself hat geschrieben: 17. Feb 2024 09:16Welche ursachen kann es haben das es [ein Item] im "Semantic Model" nicht angezeigt wird?
Die drei möglichen Gründe: 1.Das Item wurde nicht passend getaggt. 2. Es wurden zu viele Tags gesetzt. 3. Das Item taucht mehrfach innerhalb des Semantic Model auf.

Der Punkt mit Deinem "Problem" ist aber: Warum sollte das Item überhaupt im Semantic Model auftauchen? Das Semantic Model ist vor allem wichtig, um automatisierte Ansichten zu generieren. Man kann darüber natürlich auch Items "auffinden" wenn man händisch eine Ansicht erstellt, notwendig ist das aber nicht. Da Dein Wunsch-Item nicht den openHAB Konventionen folgt (es gibt nun mal keine Tristate Items, also auch keine entsprechende Unterstützung in der UI), hast Du keinerlei Vorteile, das Item ins Semantic Model zu bringen.
yustbeyourself hat geschrieben: 17. Feb 2024 09:16 eventuell habe ich auch ein verständnissprobel aber bei openhab gint es nicht sowas wie globale Variablen, oder?
Es gibt den openHAB Bus (das B in openHAB), dort gibt es Events. openHAB arbeitet asynchron und stateless. Dennoch braucht es natürlich die Status verschiedener angebundener Geräte, das wird über Items erreicht, die den jeweiligen Status halten und als "Adresse" bei der Kommunikation mit dem Bus dienen.

Innerhalb einer Rule kann man auch Variablen verwenden, was um Größenordnungen schneller ist, als Items zu nutzen - die Daten müssen ja immer in den Bus geschrieben oder von dort gelesen werden, eine Variable steht direkt zur Verfügung.
Nutzt man DSL Rules, so kann man - Definition über Textdateien vorausgesetzt - auch "globale" Variablen nutzen, der Geltungsbereich dieser Variablen ist aber auf die Datei beschränkt, in der die Variable global definiert wurde. Die Variable ist also nur "teil-global" :lol:
In allen anderen Fällen muss man auf den Cache ausweichen, der als Private Cache und als Shared Cache zur Verfügung steht. Auch in der DSL kann man den Cache ansprechen. Der Shared Cache wird, wie der Name schon andeutet, geteilt, ist also global (diesmal in echt), der Private Cache steht nur der Rule zur Verfügung, die ihn anlegt. Dabei geht es dann darum, Daten über die Laufzeit einer Rule hinaus aufzubewahren.
Der Cache ist langsamer als eine Variable innerhalb einer Rule, aber (wesentlich) schneller als ein Item.
yustbeyourself hat geschrieben: 17. Feb 2024 09:16 Wenn meine Haustür geöffnet wird soll ein Timer starten der nach ablauf die "Variable" Haustür_Timer_Auf auf 2 Setzt
Haustür_Timer_Auf ist ein ITEM vom Typ NUMBER
Warum NUMBER ich möchte hier einen 3State schlater darstellen mit einem Mapping (0="AUS"; 1="LÄUFT"; 2="ABGELAUFEN"
Nachdem die Aktion die nach ABLAUF des Timer ausgeführt werden soll gestartet wurde wird hier wider der Wert auf 0 gesetzt.
Eventuell denkst Du auch nur etwas zu kompliziert, denn es gibt eigentlich keine Daseinsberechtigung für den dritten Status. Warum? Wenn der Timer abläuft, wird eine Rule ausgeführt, welche den Staus auf 0 ändert. Wenn diese Rule nicht außerordentlich schlecht programmiert wurde ;) wird sie wenige Millisekunden Laufzeit haben, entsprechend wirst Du den Status 2 nur für wenige Millisekunden zu Gesicht bekommen. So kurz, dass schon ein Wimpernschlag den Status komplett ausblendet.
yustbeyourself hat geschrieben: 17. Feb 2024 09:16 Mir ist bekannt das ich beim starten den auszuführenden CODE dem Timer mitgeben kann aber ich möchte das die Rule "Haustür Auf"
auf Türkontakt chanced und auf Timer abgelaufen reagiert.
Ja, und? Vielleicht zeigst Du mal, was Du wirklich erreichen willst, für mich sieht das nämlich sehr stark nach einem X-Y-Problem aus (Anwender fragt nach X, obwohl Y wesentlich sinnvoller wäre)

Die ganze Nummer mit dem Semantic Model weist für mich auch darauf hin, dass Du etwas ungeordnet vorgehst (mache ich auch...), wichtig ist, sich den Problemen einzeln zu widmen, sonst verliert man sich in den unterschiedlichen Themen...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten