Seite 2 von 2

Re: String-Funktionen

Verfasst: 22. Mai 2020 19:28
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

Re: String-Funktionen

Verfasst: 22. Mai 2020 19:30
von udo1toni
Deswegen macht man so was ja auch nicht so ;)

Re: String-Funktionen

Verfasst: 23. Mai 2020 13:52
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:

Re: String-Funktionen

Verfasst: 23. Mai 2020 18:46
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é

Re: String-Funktionen

Verfasst: 23. Mai 2020 23:39
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 :)

Re: String-Funktionen

Verfasst: 24. Mai 2020 09:53
von violine21
Vielen Dank Udo!
Wie immer sehr verständlich und ausführlich erklärt!

VG André