Mehrere Werte in einer Zeile anzeigen

GUI Relevanten, PaperUI, BasicUI, HabPanel ...

Moderatoren: seppy, udo1toni

domi1705
Beiträge: 35
Registriert: 11. Aug 2019 21:28

Mehrere Werte in einer Zeile anzeigen

Beitrag von domi1705 »

Hallo, ich habe schon mehrere Visualiesierungem gesehen wo man in einer Zeile 2 oder 3 Werte anzeigen lassen kann.
Leider komme ich nicht darauf das anzuzeigen. Ich habe schon irgendwas gelesen dass man rules erstellen muss, aber ich weiß nicht wie es aussehen soll.

Beispiel 1:

Wohnzimmer 22° / 2Lampen an

Beispiel 2:

Aussen Temp. 22° / 60% Feuchtigkeit


Danke

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Mehrere Werte in einer Zeile anzeigen

Beitrag von PeterA »

Hi,

ja das ist garnicht so schwer.
Du brauchst eine Rule die dir via "postUpdate" ein neues String Item zusammenfasst.
Das "Kombiitem" muss vom Type String sein.

Code: Alles auswählen


rule "SensorsInfoKombiKGTechnikraum"
when
Item InnenKellerTechnikTemp     changed or
Item InnenKellerTechnikFeuchte  changed or
 System started
then
LaCrosse_Innen_KG_Technik_Kombi.postUpdate(InnenKellerTechnikTemp_Tendenz.state.toString + " " + InnenKellerTechnikTemp.state + " / " + InnenKellerTechnikFeuchte_Tendenz.state.toString + " " + InnenKellerTechnikFeuchte.state.toString + " ")
end
 
- OpenHab 2.4
#PWRUP

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

Re: Mehrere Werte in einer Zeile anzeigen

Beitrag von udo1toni »

Du musst dazu ein String Item erstellen. Innerhalb einer Rule, die auf alle beteiligten Items triggert, wird dann jeweils der passende String errechnet.
z.B.

Code: Alles auswählen

rule "Anzeige"
when
    Item Temperatur changed or
    Item Luftfeuchte changed
then
    val String strTemp = if(Temperatur.state instanceof Number) String::format("%.1f °C",(Temperatur.state as Number).floatValue) else "--.- °C"
    val String strHum = if(Luftfeuchte.state instanceof Number) String::format("%.0f %",(Luftfeuchte.state as Number).floatValue) else "-- %"
    MyStringItem.postUpdate(strTemp + " / "+strHum)
end
MyStringItem kannst Du dann in der Sitemap oder in HABpanel verwenden, mit einem Label wie z.B. "Wohnzimmer [%s]", was dann als Anzeige etwa

Code: Alles auswählen

Wohnzimmer                   21.0 °C / 45 %
ergibt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

domi1705
Beiträge: 35
Registriert: 11. Aug 2019 21:28

Re: Mehrere Werte in einer Zeile anzeigen

Beitrag von domi1705 »

schon mal danke!

Was muss ich denn in der Sitemap eingeben damit es angezeigt wird?
Und wie soll der Item Ordner aussehen?


Achso, und ihr beide habt mir einen Beispiel für Temp. und Feuchte vorgeschlagen, wie ist das denn wenn ich anzeigen will wie viele Lampen an sind in einem Bereich?

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

Re: Mehrere Werte in einer Zeile anzeigen

Beitrag von peter-pan »

...das sollte genauso gehen, wie das Udo beschrieben hat. Evtl. mit dem Gruppen-Item oder mit der "members-Methode"

Wie sehen denn deine items und Gruppen-Items für den Bereich aus ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

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

Re: Mehrere Werte in einer Zeile anzeigen

Beitrag von peter-pan »

Hier noch eine Regel zur Ermittlung der Mitglieder der Gruppe:

Code: Alles auswählen

rule "zimmercount_test"
when
    Item Dummy_6 changed to ON
then
      logInfo("Dummy-Test", "Zimmer Y triggert")
      val count = gSonoff.members.filter[ i | i.state == ON ].size
      logInfo("Dummy-Test", "Zimmerlichter an: {}", count)

      val names = gSonoff.members.filter[ i | i.state == ON ].map[ name ].reduce[ s, name | s + ", " + name ]
      logInfo("Dummy-Test", "Licht/Schaltername: {}", names)
      // Nur Notlösung - https://community.openhab.org/t/solved-group-members-count-if-on/60451/3
      val count1 = gSonoff.members.filter[ i | i.state == ON ].map[ (1).doubleValue].reduce[ sum, v | sum + v ]
      logInfo("Dummy-Test", "Zimmerlichter an-double/float: {}", count1)

end
Die Ermittlung von "count" sollte den Wert für die entsprechende Gruppe ermitteln. Die anderen zwei Methoden sind "Abarten". Die Zeile

Code: Alles auswählen

val count = gSonoff.members.filter[ i | i.state == ON ].size
kannst du in deine Regel einbauen
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

domi1705
Beiträge: 35
Registriert: 11. Aug 2019 21:28

Re: Mehrere Werte in einer Zeile anzeigen

Beitrag von domi1705 »

Also, sorry dass ich erst so spät antworte, ich hatte keine Lust mich drum zu kümmern.
Jetzt würde ich das doch machen wollen.

Meine Rules

rule "Anzeige"
when
Item localCurrentTemperature changed or
Item localCurrentHumidity changed
then
val String strTemp = if(localCurrentTemperature.state instanceof Number) String::format("%.1f °C",(localCurrentTemperature.state as Number).floatValue) else "--.- °C"
val String strHum = if(localCurrentHumidity.state instanceof Number) String::format("%.0f %",(localCurrentHumidity.state as Number).floatValue) else "-- %"
MyStringItem.postUpdate(strTemp + " / "+strHum)
end


Sitemap:

Text item=MyStringItem label="Wetter" icon="temperature"


Item:

Number:Temperature localCurrentTemperature "Current temperature [%.1f %unit%]" <temperature> { channel="openweathermap:weather-and-forecast:api:local:current#temperature" }
Number:Dimensionless localCurrentHumidity "Current atmospheric humidity [%d %unit%]" <humidity> { channel="openweathermap:weather-and-forecast:api:local:current#humidity" }
String MyStringItem "Anzeige Test"




Leider wird gar nichts angezeigt.. was mache ich falsch?

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Mehrere Werte in einer Zeile anzeigen

Beitrag von PeterA »

Bitte benutze zum Posten von Code die "Codefences"

Dann sieht dein Code besser lesbar aus:

Code: Alles auswählen

rule "Anzeige"
when
Item localCurrentTemperature changed or
Item localCurrentHumidity changed
then
val String strTemp = if(localCurrentTemperature.state instanceof Number) String::format("%.1f °C",(localCurrentTemperature.state as Number).floatValue) else "--.- °C"
val String strHum = if(localCurrentHumidity.state instanceof Number) String::format("%.0f %",(localCurrentHumidity.state as Number).floatValue) else "-- %"
MyStringItem.postUpdate(strTemp + " / "+strHum)
end

Code: Alles auswählen

Text item=MyStringItem label="Wetter" icon="temperature"

Code: Alles auswählen

Number:Temperature localCurrentTemperature "Current temperature [%.1f %unit%]" <temperature> { channel="openweathermap:weather-and-forecast:api:local:current#temperature" }
Number:Dimensionless localCurrentHumidity "Current atmospheric humidity [%d %unit%]" <humidity> { channel="openweathermap:weather-and-forecast:api:local:current#humidity" }
String MyStringItem "Anzeige Test"

Und nun zum Code für die Sitemap:

Wie Udo das schon weiter oben geschrieben hat, muss das Label deines Items in der Sitemap besser so lauten:

Code: Alles auswählen

Text item=MyStringItem label="Wetter[%s]" icon="temperature"
Das im Label sorgt dafür das der zusammengesetzte String im Label in der Sitemap verwendet wird.
- OpenHab 2.4
#PWRUP

domi1705
Beiträge: 35
Registriert: 11. Aug 2019 21:28

Re: Mehrere Werte in einer Zeile anzeigen

Beitrag von domi1705 »

So... ich habe es geändert dann wurde mir alles angezeigt

Danach wollte ich die String Namen usw ändern und jetzt geht gar nichts mehr...

ich bekomme einen Error

Code: Alles auswählen

[ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Anzeige Test': Conversion = '%'

habe auch schon system neu gestartet

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Mehrere Werte in einer Zeile anzeigen

Beitrag von PeterA »

Das System (ich nehme an OpenHab) ständig neu zu Starten ist normalerweise nicht notwendig.

Könntest Du bitte Deine Änderungen auch posten ?

Eines hatte ich noch übersehen:

Das String Item sollte auch so definiert werden:

Code: Alles auswählen

String MyStringItem "Anzeige Test[%s]"
- OpenHab 2.4
#PWRUP

Antworten