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
