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
String-Funktionen
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: String-Funktionen
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
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: String-Funktionen
...
...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)
}
...aber Udo hat schon Recht. Die Version von mir ist halt "quick and dirty".

Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 600
- Registriert: 20. Sep 2019 05:49
Re: String-Funktionen
Also erst einmal Danke an bastler, peter-pan und udo1toni für's mitforschen!
vom http-Binding sowieso einen recht unbrauchbaren Roh-String bekomme und dort schon manipuliere.
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:
VG André
Das leuchtet mir ein. Trotzdem ist es eine schöne Übung um String-Manipulationen zu "erlernen". Zumal ichDie saubere Variante ist aber, die Werte in Zahlen zu wandeln.
vom http-Binding sowieso einen recht unbrauchbaren Roh-String bekomme und dort schon manipuliere.
Das verwirrt mich. Ich war bisher der Meinung, das der State eines Items auch dessen Format hatAlso grundsätzlich ist ein state ein state und kein String.

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.
Darf ich fragen, wieviel kWp Deine Photovoltaikanlage hat?meine PV-Anlage
VG André
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: String-Funktionen
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
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
-
- Beiträge: 600
- Registriert: 20. Sep 2019 05:49
Re: String-Funktionen
Vielen Dank Udo!
Wie immer sehr verständlich und ausführlich erklärt!
VG André
Wie immer sehr verständlich und ausführlich erklärt!
VG André