Anfängerfragen

Hier bitte alles rein was Off-topic ist.

Moderatoren: Cyrelian, seppy

harasch
Beiträge: 17
Registriert: 24. Dez 2023 20:09
Answers: 0

Re: Anfängerfragen

Beitrag von harasch »

Hallo udo1toni,
wenn ich das wüßte! Ich habe die Seiten von ESPEasy schon durchforstet um zu erfahren von welchem typ counter ist. Bisher ohne Erfolg. Ich hatte auch schon einmal mit Tasmota gearbeitet dort ist es Json format und mußte quasi mit jsonpath extrahiert werden. Auf der Browseroberfläche vom ESPEasy könnte man den Wert mit einer Formel verändern bevor er per MQTT versendet wird.
Ich weiß aber auch nicht welches Format Number ist. Ich bin davon ausgegangen, dass es ein Ganzzahlenwert ist oder man kann es explizit angeben welchen Typ Number darstellen soll.
Falls das item zahler bezw. der Wert oder den Status nicht passen würde sollte doch instanceof eine Fehlermeldung bringen, oder?
In Bascom bekomme ich beim kompilieren sofort eine Fehlermeldung wenn ich mit Werten rechnen möchte welche nicht zueinander passen. Ist das bei openHab nicht so?
Wenn ich z.B. eine Variable erstelle, gibt es keine Möglichkeit die Variable zu debuggen?

Gruß,Harald

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

Re: Anfängerfragen

Beitrag von udo1toni »

Das Item hast Du ja selbst definiert (oder das von openHAB erledigen lassen). In der Liste der Items steht der Itemtyp immer mit dabei.
Wenn ein Item nicht zum Channel passt, dann merkst Du das ganz schnell, weil halt keine Daten im Item landen. Im log wird dann außerdem gemeldet, dass der gelieferte Wert nicht im Item gespeichert werden kann. Beim Verknüpfen über die UI werden außerdem gewöhnlich nur die Itemtypen angeboten, welche auch sinnvoll nutzbar sind.
Aber da kommt schon das erste Aber. Nehmen wir an, Du hast einen Switch Channel. Der Switch Channel kann exakt die Zustände ON und OFF annehmen. Dennoch kann es sinnvoll sein, den Channel mit einem DateTime Item zu koppeln - allerdings unter Verwendung eines speziellen Profiles, welches dann nämlich den Zeitstempel der letzten Änderung/des letzten Updates in das DateTime Item speichert. Du kannst einen Channel, der eine Zahl liefert ohne weiteres auch an ein String Item verlinken,. nur enthält der Status des String Items dann halt einen Text anstatt einer Zahl, und mit Texten kann man nicht rechnen.

In openHAB gibt es eine Menge verschiedener Itemtypen, aber solange es um eine Zahl geht, ist der Itemtyp immer Number, egal ober nun Ganzzahl, Float oder was auch immer. Allerdings kommt openHAB auch mit UoM an - Units of Measurement - dabei hält das Item nicht nur eine Zahl als Status, sondern gleichzeitig auch noch die Einheit dieser Zahl. Und UoM ist in diesem Fall eine sehr weitreichende Funktion, angefangen von Kleinigkeiten (im Log steht halt 230 V statt 230), über schicke Umrechnungen (der Sensor liefert 32 °F, Du lässt Dir aber 0 °C anzeigen, und zwar ohne irgendwelche Formeln verwenden zu müssen) bis hin zu komplexeren Berechnungen (Item a liefert 24 V, Item b liefert 150 mA, Item a mal Item b ergibt 3.6 VA bzw. 3.6 W, und damit hört das Ganze noch nicht auf, sehr unterschätzt in dem Zusammenhang: Ein Sensor liefert seine Messung als Ganzzahl, aber in Zehntel Genauigkeit, z.V. 225 statt 22,5 °C, dann heißt die Unit einfach d°C (Dezigrad Celsius) und schon wird der Wert später korrekt angezeigt.
Die Kehrseite ist natürlich eine etwas "empfindlichere" Schnittstelle, wenn Du mit solchen Werten rechnen willst.
Die Zeile

Code: Alles auswählen

zaehler = (gaszaehler.state as Number).intValue
wird aber immer funktionieren, unter folgenden Voraussetzungen:
  • Das Item gaszaehler ist vom Typ Number (oder einem der QuantiotyType Untertypen)
  • Der Status des Items enthält einen gültigen Zahlenwert, der sich als Number darstellen lässt
  • Die Variable zaehler ist als Variable definiert und kann mindestens Ganzzahlen aufnehmen - also entweder Number, Integer, Float, BigDezimal oder auch eine Primitive (int, float usw.), wobei Primitives unbedingt vermieden werden sollten, soweit das möglich ist.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

harasch
Beiträge: 17
Registriert: 24. Dez 2023 20:09
Answers: 0

Re: Anfängerfragen

Beitrag von harasch »

Hallo udo1toni,
also das item gaszaehler habe ich in openHab als Number definiert. Der Wert welcher vom esp kommt wird auch korrekt angezeigt.
Wie kann ich aber sehen was in der Variablen zaehler steht?
Gruß,Harald

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

Re: Anfängerfragen

Beitrag von udo1toni »

Den Inhalt der Variablen zaehler sendest Du an ein Item, in welchem der Wert in der Variablen dann gespeichert wird und auch in der UI angezeigt werden kann, dafür sind Items da.
Da Du den Status des Items setzen willst, musst Du postUpdate() als Methode verwenden, wie von mir oben im Code gezeigt...

Code: Alles auswählen

Gaszaehler_Stand.postUpdate(gaszaehler) 
Dem Item Gaszaehler_Stand wird der Inhalt der Variablen gaszaehler als Status zugewiesen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

harasch
Beiträge: 17
Registriert: 24. Dez 2023 20:09
Answers: 0

Re: Anfängerfragen

Beitrag von harasch »

Hallo udo1toni,
erst mal ein gutes neues Jahr, wünsche ich!
In Deiner letzten Antwort sprichst Du von der Variable gaszaehler, aber gaszaehler ist ja ein item.

Ich habe nun eine Rule erstellt in der Maske von openHab 'Rule', als Ereignis habe ich das item gaszaehler ausgewählt. Als Aktion habe ich das script von Dir angegeben. Eine Frage gleich hier. Vorher konnte ich hier auswählen 'run script' jetzt kann ich nur noch auswählen 'ececute script', irgendwie läuft das alles nicht richtig.

Also wie gesagt habe ich das script von Dir per paste eingefügt und alles gespeichert. Wenn ich nun den Magnet an dem Reedkontakt vorbeiführe wird anscheinend die Rule ausgeführt der Wert im item Gaszaehler_Stand ändert sich aber nicht. Er müßte ja den wert von gaszaehler + 1 annehmen. Ich lasse mir das in der Basic UI anzeigen. Ich sehe dort, dass das item gaszahler seinen Wert verändert das item Gaszaehler_Stand bleibt aber stur auf seinem Wert.

Code: Alles auswählen

var zaehler = 0
if(gaszaehler.state instanceof Number)
   zaehler = (gaszaehler.state as Number).intValue
Gaszaehler_Stand.postUpdate(zaehler + 1)
Was mache ich falsch?
Gruß, Harald

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

Re: Anfängerfragen

Beitrag von udo1toni »

Was hast Du als Trigger für die Rule eingetragen? Die Rule muss auslösen, wenn das Item gaszaehler sich ändert, also changed als Trigger
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

harasch
Beiträge: 17
Registriert: 24. Dez 2023 20:09
Answers: 0

Re: Anfängerfragen

Beitrag von harasch »

Hallo udo1toni,
erstmal Deine Frage, ja ich hatte das item auf changed gesetzt. Funktioniert trotzdem nicht. Ich glaube, dass überhaupt keine scripte laufen. Ich habe das jetzt an einem anderen Rechner, welcher eigentlich für die Automation vorgesehen ist, ausprobiert mit dem gleichen Ergebnis.
Ich habe dann alle scripts und rules gelöscht und habe nur eine einzige rule erstellt. Trigger item gaszaehler changed und als action nur update an item state und da dann halt das item Gaszaehler_Stand eingegeben. Und siehe da es funktioniert. Sobald das item gaszaehler seinen state ändert ändert sich auch das state des items Gaszaehler_Stand.
Wiso aber funktionieren bei mir keine scripts? Kann das durch irgendwas blockiert werden?
Ich bin ratlos. Sollte ich vieleicht doch updaten auf openHab4?

Gruß, Harald

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

Re: Anfängerfragen

Beitrag von udo1toni »

Grundsätzlich sollte man - gerade als Anfänger (wenn ich das Topic mal wörtlich nehme) immer eine aktuelle Version einsetzen, schon um auch bestmöglichen Support zu bekommen (wohlgemerkt, die aktuelle stable Version ist 4.1.0)
Und gerade wenn das System noch nicht weit gediehen ist, schmerzt das neu Aufsetzen vergleichsweise wenig.

Grundsätzlich hat die Funktion von Scripten aber nichts mit der Version von openHAB zu tun, DSL Rules gab es schon in der Version 1.0, und sie wurden auch nie abgeschafft, es kamen nur immer mehr Funktionen hinzu.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

harasch
Beiträge: 17
Registriert: 24. Dez 2023 20:09
Answers: 0

Re: Anfängerfragen

Beitrag von harasch »

Hallo udo1toni,
damit scripte laufen, muss da das exec binding installiert sein?

Gruß, Harald

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

Re: Anfängerfragen

Beitrag von udo1toni »

Nein.

openHAB bringt (noch) im Core die DSL mit. Für DSL Rules muss also gar nichts extra installiert werden. Hintergrund dazu: Scripting ist per Definition eine essenzielle Funktion von Hausautomationen. Entsprechend war das immer Bestandteil des Kerns von openHAB.
Zukünftig soll die DSL aber optional werden. Das bedeutet nicht, dass es sie irgendwann nicht mehr geben wird, sondern lediglich, dass sie zukünftig - wie alle anderen Scripting Engines auch - als Addon installiert werden muss.
Wenn Du eine andere Scriptsprache als die DSL verwenden willst, muss die entsprechende Engine als Addon installiert werden.

Das exec Addon ist ein Binding wie z.B. das http Binding oder das mqtt Binding. Es dient dazu, Dinge anzubinden, die über externe Programmaufrufe kontrolliert werden. Man kann damit z.B. unter Windows Batchdateien, oder unter GNU/Linux Bash-Scripte ausführen lassen (was unterm Strich bedeutet, dass Du damit alles machen kannst, was anders nicht lösbar ist).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten