Ultraschallsensor in OpenHAB intigrieren

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
mic905
Beiträge: 47
Registriert: 29. Aug 2020 19:07

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von mic905 »

Hallo,
ich habe mir den YAML Code mal kopiert und mal ein bisschen damit rum gespielt.
Immerhin wird schon mal ein Wert angezeigt und auch die momentane Distanz passt.
Aber einiges funktioniert leider noch nicht so wie gewünscht.
Folgende Zeilen scheinen bei mir nicht zu funktionierten:

Code: Alles auswählen

component: oh-label-card
config:
  color: '=items.Wemos1_Abstand.state < 10  ?  "red"  :  "green"'
  footer: ="momentane Distanz ist. " + items.Wemos1_Abstand.displayState
  icon: '=(items.Wemos1_Abstand.state > 10) ? "oh:wassertank-0" :
    (items.Wemos1_Abstand.state > 25) ? "oh:wassertank-60" :
    (items.Wemos1_Abstand.state > 40) ? "oh:wassertank-100" : ""'
  item: Wemos1_Abstand
  on: =items.Wemos1_Abstand.state >1
  subtitle: Fassungsvermögen 80 ltr.
  title: Zisterneninhalt
  label: =Number(xx - ( x/x) * (items.Wemos1_Abstand.state -20)).toFixed(0) + " Liter"
slots: null
Mein Test Idem heisst Wemos1_Abstand
Mein Wasserbehälter hat ca. 80 Liter Vassungsvermögen.
Die Icons habe ich schon eingebunden in Icons/classic.

Vielleicht kann mir jemand mal den Aufbau der Zeile Label näher erklären.
Ich hoffe ich konnte es halbwegs verständlich rüber bringen.
Vielen Dank
Michael

Benutzeravatar
peter-pan
Beiträge: 2568
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von peter-pan »

mic905 hat geschrieben: 2. Feb 2022 11:51 Vielleicht kann mir jemand mal den Aufbau der Zeile Label näher erklären.
Ist eigentlich gar nicht so schwer, mal davon abgesehen, dass du den Yaml-Code einer Label-Cell nicht einfach in einen Yaml-Code hinein kopieren kannst.
Z.B. gibt es bei der Card keinen "Subtitle" und keine "Color".

Annahme:
max. Füllmenge: 6000 ltr.
max. Füllhöhe: 230 cm
Abstand Sensor bis max. Füllhöhe: 20 cm

label: =Number(6000 - ( 6000/230) * (items.esp_amica_01_dist.state-20)).toFixed(0) + " Liter"

Das könnte dann bei dir evtl. so aussehen:

label: =Number(80 - ( 80/50) * (items.esp_amica_01_dist.state-20)).toFixed(0) + " Liter"

Die Werte musst du natürlich noch anpassen, da ich das in meinem Beispiel ja auch nur "theoretisch" angenommen habe.

Der Yaml-Code für eine Label-Card, könnte dann so aussehen:

Code: Alles auswählen

component: oh-label-card
config:
  title: Zisterneninhalt
  footer: ="momentane Distanz ist. " + items.esp_amica_01_dist.displayState
  item: esp_amica_01_dist
  label: =Number(80 - ( 80/50) * (items.esp_amica_01_dist.state-20)).toFixed(0) +
    " Liter"
  icon: '=(items.esp_amica_01_dist.state > 50) ? "oh:cistern-0"
    :     (items.esp_amica_01_dist.state > 30) ? "oh:cistern-60"
    :     (items.esp_amica_01_dist.state > 21) ? "oh:cistern-100" : ""'
  background: "linear-gradient(to bottom, #6fa8dc 0%, #ffe74c 100%)"
  fontSize: 28px
  iconSize: 40
slots: null
und der Screeshot dazu:
zisterne.jpg
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Zemec
Beiträge: 19
Registriert: 7. Nov 2021 09:17

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von Zemec »

Hallo zusammen,

hab das Ganze nun auch mal nachgebaut und mein item "zisternenstring" (angelehnt an die Nomenklatur von @Pepe1907) zeigt auch einen Wert in vscode an. Nur wird der Wert nicht an das Item zisternenstand2 übergeben. Das ist in einer der Rules geregelt. Weiß jemand woran es liegen könnte?

Code: Alles auswählen

rule "Zisternenstand"
  when
     Item zisternenstring received update
    then
        zisternenstand2.postUpdate(Float::parseFloat(zisternenstring.state.toString)
      )
 
end
Warum wird diese Regel überhaupt benötigt?

Im Log sehe ich diese beiden Fehler:

Code: Alles auswählen

2022-04-19 18:47:48.342 [WARN ] [ng.exec.internal.handler.ExecHandler] - Couldn't transform response because transformationService of type 'REGEX' is unavailable

2022-04-19 18:47:48.350 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'zisternenstand-1' failed: For input string: "5018 l" in zisternenstand
Danke für eure Hilfe.

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

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von udo1toni »

Der erste Hinweis erklärt schon, was Sache ist: Du hast vergessen, die REGEX Transformation zu installieren.
Ob der zweite Fehler damit zusammenhängt, ist nicht eindeutig, weil aus der Warnmeldung nicht hervorgeht, an welcher Stelle die Transformation fehlschlägt.

Kannst Du bitte mal Deine Konfiguration in Textform zeigen - mindestens der Channel, über den die Information rein kommt und das zugehörige Item, Ersteres als Code-Block (bitte nicht vergessen, Code Tags zu setzen), letzteres gerne auch beschreibend, da bei den Items keine Textansicht existiert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Zemec
Beiträge: 19
Registriert: 7. Nov 2021 09:17

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von Zemec »

Danke dir. Der erste Fehler ist weg nach Installation der REGEX-Transformation (das ist Neuland für mich).
zisterne.things

Code: Alles auswählen

Thing exec:command:zisternenstand [command="sudo /usr/bin/python /etc/openhab/scripts/hc.py", interval=30, timeout=5, autorun=false]
zisterne.items

Code: Alles auswählen

String 	zisternenstring  						{channel="exec:command:zisternenstand:output"}
Switch 	zisternenmessung 						{channel="exec:command:zisternenstand:run"}
Number 	zisternenstand2                 				"Füllmenge Zisterne [%.0f Liter]" <flow>
Number  zisternenchart
zisternenstand.rules

Code: Alles auswählen

rule "Zisternenstand"
  when
     Item zisternenstring received update
    then
        zisternenstand2.postUpdate(Float::parseFloat(zisternenstring.state.toString)
      )
 
end

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

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von udo1toni »

Ah, Exec...

Also, das Problem ist, das externe Script liefert den Wert incl. Einheit.

Code: Alles auswählen

failed: For input string: "5018 l" in zisternenstand
                                ^
                                |
Entweder, Du passt das Script hc.py dahingehend an, dass es ausschließlich den Zahlenwert liefert, oder Du änderst die Rule so, dass sie nur den Teil vor dem Leerzeichen verwendet, z.B. so:

Code: Alles auswählen

rule "Zisternenstand"
when
    Item zisternenstring changed // reicht völlig, Wertübernahme nur bei Wertänderung, nicht alle 30 Sekunden
then
    zisternenstand2.postUpdate(Float::parseFloat(zisternenstring.state.toString.split(" ").get(1)))
    //                                                                         ^^^^^^^^^^^^^^^^^^
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Zemec
Beiträge: 19
Registriert: 7. Nov 2021 09:17

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von Zemec »

Problem gelöst durch ändern des Skriptes :)

Zum Verständnis: warum der "Umweg" über zwei Items und die Rule? Das Item zisternenstring gibt doch bereits einen Wert aus.

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

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von udo1toni »

Ja, aber das ist dann halt vom Typ String.

Exec kann nur Strings befüllen.

Ein String "12345" ist beim Vergleich kleiner als der String "2345", ganz abgesehen davon, dass die DSL sich weigert, Strings mit < oder > zu vergleichen, hier sind nur != (ungleich) und == (ist gleich) als Operatoren erlaubt.
Auch Trendlinien lassen sich nicht aus Strings generieren, ebenso funktioniert die Steuerung der dynamischen Icons dann nicht (bei numerischen Werten, die als String gespeichert sind).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Zemec
Beiträge: 19
Registriert: 7. Nov 2021 09:17

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von Zemec »

Danke für die Aufklärung.

Zemec
Beiträge: 19
Registriert: 7. Nov 2021 09:17

Re: Ultraschallsensor in OpenHAB intigrieren

Beitrag von Zemec »

Ich bins nochmal. Ich würde gerne die Werte der Füllstandsmessung glätten für das Chart Widget. Dafür habe ich ein weiteres Item angelegt und möchte diesem über eine Regel einen Wert vergeben.
die Regel:

Code: Alles auswählen

rule "Zisternenstand geglättet"
  when
    Item zisternenstand2 received update
    then
     zisternenstand2_avg = zisternenstand2.averageSince(now.minusMinutes(3))

      end
Im Log kommt diese Fehlermeldung

Code: Alles auswählen

[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'zisternenstand-3' failed: An error occurred during the script execution: Cannot assign a value in null context. in zisternenstand
Hab bisher keine Lösung gefunden. Wäre super wenn ich hier nochmal Rat bekomme.

Antworten