String-Funktionen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

bastler
Beiträge: 121
Registriert: 7. Jan 2020 19:36
Answers: 2

Re: String-Funktionen

Beitrag von bastler »

hi peter-pan,
sieht auf jeden fall sehr "simpel" und einfach verständlich aus die formel. nur wenn ich so überlege... was ist wenn b < 10 ist, müsste für diesen fall nicht auch noch eine if-kondition gemacht werden damit dann zwei nullen hinzugefügt werden?
viele grüße, stefan

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

Re: String-Funktionen

Beitrag von udo1toni »

Deswegen macht man so was ja auch nicht so ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: String-Funktionen

Beitrag von peter-pan »

bastler hat geschrieben: 22. Mai 2020 19:28 was ist wenn b < 10 ist
...
...genau "else If"

Code: Alles auswählen

rule "test Regel"

  when
    Item Dummy6 changed to ON
  then
   val a = "38"         // String 1
   val b = "32.6"      // String 2
   var d = 0.0
   if (Float.parseFloat(b) < 10) {
    d = Float.parseFloat(a + "00" + b)
//    logInfo("test Regel", " Der Gesamtwert ist kleiner 10")  //test
   }
   else if (Float.parseFloat(b) < 100) {
     d = Float.parseFloat(a + "0" + b)
//     logInfo("test Regel", " Der Gesamtwert ist kleiner 100")  //test
   }
   else {
     d = Float.parseFloat(a + b)
   }
udo1toni hat geschrieben: 22. Mai 2020 19:30 Deswegen macht man so was ja auch nicht so
...aber Udo hat schon Recht. Die Version von mir ist halt "quick and dirty". :lol:
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: String-Funktionen

Beitrag von violine21 »

Also erst einmal Danke an bastler, peter-pan und udo1toni für's mitforschen!
udo1toni hat geschrieben: 22. Mai 2020 19:30 Deswegen macht man so was ja auch nicht so ;)
Die saubere Variante ist aber, die Werte in Zahlen zu wandeln.
Das leuchtet mir ein. Trotzdem ist es eine schöne Übung um String-Manipulationen zu "erlernen". Zumal ich
vom http-Binding sowieso einen recht unbrauchbaren Roh-String bekomme und dort schon manipuliere.
Also grundsätzlich ist ein state ein state und kein String.
Das verwirrt mich. Ich war bisher der Meinung, das der State eines Items auch dessen Format hat :?:
Würde mich über ein paar aufklärende Worte von @Udo freuen.

Ich habe ja die String-Variante eher durch einen Zufall zum Laufen gebracht.
Da ich mit dem Ergebnis evtl. auch einmal rechnen will, überzeugte mich dann doch die Zahlen-Variante.
Auch dazu habe ich noch eine Frage. Muss der String vor der Wandlung zur Zahl ein bestimmtes Format haben?
Ich meine, ist es egal (wahrscheinlich nicht), ob das Komma im String ein Komma oder ein Punkt ist?
Zum Dezimaltrenner hattest Du ja bereits das hier geschrieben:
Das replace wird gebraucht, falls der Zahlenwert tatsächlich ein Komma als Dezimaltrenner enthält.
meine PV-Anlage
Darf ich fragen, wieviel kWp Deine Photovoltaikanlage hat?

VG André

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

Re: String-Funktionen

Beitrag von udo1toni »

Also, um die Punkte von oben nach unten zu beantworten:

Ein state ist ein state. Wenn es sich um ein String Item handelt, wird openHAB meistens den korrekten Schluss ziehen, dass es den state als String betrachten soll. Die Chancen dafür stehen auch bei jedem Item gut, denn die Methode .toString steht immer zur Verfügung. Trotzdem kann das auch schief gehen, und wenn man dann auf Fehlersuche gehen muss...
Meistens wird openHAB auch Zahlen im Status eines Number Items korrekt erkennen, aber es gibt Situationen, wo das nicht oder nicht zuverlässig funktioniert. Dann muss man den Typ explizit nach Number casten. Methoden stehen auch nur zur Verfügung, wenn der Typ feststeht, da Du .length verwenden willst, musst Du vorher explizit das .toString verwenden.

Float::parseFloat() erwartet einen String mit einer Fließkommazahl (wobei auch Integer Werte korrekt interpretiert werden, das ist halt eine Fließkommazahl ohne Nachkommastellen). Die Schreibweise muss mit . als Dezimaltrenner ausgeführt werden, deshalb das .replace(",",".") Leerzeichen um die Zahl herum sind statthaft, aber soweit ich weiß keine Leerzeichen innerhalb der Zahl.

Meine PV-Anlage hat 9,88kWpeak Nennleistung, wobei ich als Spitzenwert bisher nie mehr als 8,9kW gesehen habe. Da die Anlage aber maximal 70% einspeist, müsste ich zu dem Zeitpunkt schon etwas mehr als 3kW verbrauchen, um tatsächlich volle Leistung sehen zu könnnen, das passiert höchstens, wenn mehrere Großverbraucher wie Backofen und Herd gleichzeitig auf Hochtouren laufen :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: String-Funktionen

Beitrag von violine21 »

Vielen Dank Udo!
Wie immer sehr verständlich und ausführlich erklärt!

VG André

Antworten