Sting Wert - umbennen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
mad-mike
Beiträge: 464
Registriert: 6. Jan 2021 18:05
Answers: 3

Sting Wert - umbennen

Beitrag von mad-mike »

Moin zusammen.

Ich habe bei mir den Abfuhr Kalender der Müllabfuhr eingebunden.
Diese geben in einem String werte aus wie:

Code: Alles auswählen

    Abfuhr Restmüll (14tägige und vierwöchentliche Abfuhr 
Ich möchte diese Werte umbennen. An anderer Stelle habe ich dies über die MAP datei geschafft, aber hier will das nicht. Ich weiss nicht, ob es an der Länge vom String liegt, oder habe mal was von Leerzeichen gelesen.

Auf dem Habpanel nimmt dieser Info Text jedenfalls viel Platz weg.
Ich möchte erreichen das dort nur noch "Schwarze Tonne" steht.

Oder muss ich hier z.b. eine Rule und ein String erstellen, wo der gewünschte wert dann bearbeitet wird?

Zu Info: Der aufbau vom Kalender Sting ist immer unterschiedlich. Bei Bio steht dann:

Code: Alles auswählen

Abfuhr Biomüll

Jemand eine idee?

Danke und Gruss ;)
Gruss mad-mike

openHABian 4.3.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

Harka
Beiträge: 438
Registriert: 30. Apr 2021 13:13
Answers: 16

Re: Sting Wert - umbennen

Beitrag von Harka »

Moin,
im einfachsten Fall musst Du nur das 2. Wort extrahieren und weiterverarbeiten. Kommt es, z.B. nach Feiertagen, auch vor das mehrere Tonnen gleichzeitig abgeholt werden und im Text zusammen aufgeführt werden?

mad-mike
Beiträge: 464
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: Sting Wert - umbennen

Beitrag von mad-mike »

Danke dir.
im einfachsten Fall musst Du nur das 2. Wort extrahieren und weiterverarbeiten
Habe es mal wie folgt versucht: Item erstellt und folgende regel:

Code: Alles auswählen

    ZAH.postUpdate(Kalender_TiteldesnachstenEintrags.state.toString.split(' ').get(1))                                       // TAB meldung
Damit kann man schon mal was anfangen. Nun steht da erstmal nur 1 Wort, und kein Roman mehr. :D

Aber du hast recht mit dem:
Kommt es, z.B. nach Feiertagen, auch vor das mehrere Tonnen gleichzeitig abgeholt werden und im Text zusammen aufgeführt werden?
Ja, erstens das, zweitens kommt es alle 4 Wochen regulär vor das doppelt abgeholt wird. mal gucken, was er mir dann anzeigen wird auf dem Tab.

Vielen dank mit dem Hinweis oben. :!:
Gruss mad-mike

openHABian 4.3.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: Sting Wert - umbennen

Beitrag von udo1toni »

Im Zweifel (mehrere Tonnen an einem Tag) musst Du den gelieferten Text mittels Script auf die Schlüsselworte scannen und daraus einen komplett neuen Wert erzeugen.
Per Mapping ginge das auch, ist aber sehr umständlich, da Du je Text eine extra Zeile anlegen musst, Du musst also jeden Text exakt kennen, in jeder möglichen Kombination. Leerzeichen musst Du escapen, da sie links vom Gleichheitszeichen stehen. Also z.B.

Code: Alles auswählen

Abfuhr\ Restmüll\ (14tägige\ und\ vierwöchentliche\ Abfuhr)=Restmüll
Abfuhr\ Biomüll=Biomüll
Abfuhr\ Restmüll\ (14tägige\ und\ vierwöchentliche\ Abfuhr)\ und \ Abfuhr\ Biomüll=Restmüll, Biomüll
...
Immer vorausgesetzt, es sind exakt diese Texte, die geliefert werden.
Stattdessen wäre ein Scan auf Schlüsselworte so möglich, ungefähr so:

Code: Alles auswählen

var strMuell = ""
if(input.contains("Rest"))   {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Rest"}
if(input.contains("Bio"))    {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Bio"}
if(input.contains("Papier")) {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Papier"}
if(input.contains("Wert"))   {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Wertstoff"}
strMuell
Unter OH4 geht das Scripting in der Transformation auch mittels DSL, ansonsten müsste man halt ein JavaScript Script schreiben, der Code dürfte aber nahezu identisch sein (bis auf die semantischen Feinheiten...)
Die Formatierung des Codes sieht etwas ungewohnt aus, ist hier aber vermutlich besser lesbar. Man könnte den Code natürlich auch "eleganter" bauen und mit einer Schleife arbeiten.
Oder Du erledigst das Ganze innerhalb einer normalen Rule und setzt für jede Müllsorte ein eigenes (ungebundenes) Item.
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.2, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 464
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: Sting Wert - umbennen

Beitrag von mad-mike »

Moin,

Code: Alles auswählen

var strMuell = ""
if(input.contains("Rest"))   {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Rest"}
if(input.contains("Bio"))    {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Bio"}
if(input.contains("Papier")) {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Papier"}
if(input.contains("Wert"))   {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Wertstoff"}
strMuell
Wie kann ich das in eine rule einsetzen?
Gruss mad-mike

openHABian 4.3.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: Sting Wert - umbennen

Beitrag von udo1toni »

Das wäre ein DSL Script für die Script Transformation. Das funktioniert ab OH4 direkt über die GUI (wahlweise kannst Du auch Dateien verwenden). Du musst lediglich das Script als Datei anlegen und entsprechend im Channel verlinken (wahlweise auch im Link zwischen Channel und Item).
Wenn Du das Ganze in einer DSL Rule erledigen willst, brauchst Du mindestens zwei Items - davon eines ungebunden - welche Input und Output der Rule darstellen:

Code: Alles auswählen

rule "Mülldaten auswerten"
when
    Item MuellInput changed
then
    var strMuell = ""
    if(newState.contains("Rest"))   {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Rest"}
    if(newState.contains("Bio"))    {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Bio"}
    if(newState.contains("Papier")) {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Papier"}
    if(newState.contains("Wert"))   {if(strMuell != "") strMuell = strMuell + ", "   strMuell = strMuell + "Wertstoff"}
    MuellOutput.postUpdate(strMuell)
end
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.2, LXC), mit openHABian eingerichtet

Antworten