Hauptmenü

Neueste Beiträge

#51
Bastelecke / Aw: ESP RGBWW Controller - Fir...
Letzter Beitrag von pjakobs - 31 Oktober 2025, 09:57:42
Ich überarbeite mal die Code-Teile, die nach einem neuen Namen momentan einen Reboot erfordern. Gebt mir ein bisschen Zeit.
#52
MQTT / Aw: Shelly H&T Gen3 als TempGe...
Letzter Beitrag von amehl - 31 Oktober 2025, 09:50:20
Sorry, hat sich erledigt ich habe es gefunden
#53
MQTT / Aw: ShellyWall Display
Letzter Beitrag von joachimS - 31 Oktober 2025, 09:37:49
Zitat von: kingmathers am 31 Oktober 2025, 01:02:27Kann man (per MQTT oder anderweitig) auch einstellen was im Display angezeigt wird? Also ist ein benutzerdefinierter Text (von FHEM generiert und gesendet) zur Darstellung von Gerätezuständen möglich?
Denke nicht.
Aber schau mal hier: https://shelly-forum.com/thread/29897-rpc-mqtt-topics/
#54
Unterstützende Dienste / Aw: ble2mqtt - Bluetooth Anwes...
Letzter Beitrag von DasQ - 31 Oktober 2025, 09:32:14
Ohne Logs configs usw. Ist das immer wie hellsehen. Den jsonvariablen hast du Namen gegeben? Wenn nicht landen die alle zeitgleich in einer und werden dann sofort überschrieben. (Laienhafter Versuch das zu erklären)
#55
Off-Topic / Aw: Verzeichnis von Diskstatio...
Letzter Beitrag von betateilchen - 31 Oktober 2025, 09:24:33
Das ,,mounten wenn gebraucht" kann doch inzwischen systemd nahezu perfekt übernehmen? Da muss man sich mit fstab nicht mehr rumärgern.
#56
FHEM Development / Aw: pre-commit hook: file has ...
Letzter Beitrag von betateilchen - 31 Oktober 2025, 09:22:13
@Boris: kann ich fast alles nachvollziehen, nur Dein beschriebenes Anspruchsdenken nicht.
Und um auf 2007 zurückzukommen: damals gab es noch keine 500 Module mit zusätzlichen Anforderungen an benötigten perl-Modulen.

Wie groß würde FHEM werden, wenn jedes Modul seine Abhängigkeiten mitbrächte, und das auch noch zwangsweise für jeden Nutzer, egal ob er ein Modul überhaupt nutzt oder nicht?
#57
TabletUI / FTUI3 pipes format
Letzter Beitrag von PNinBB - 31 Oktober 2025, 09:21:38
Bei der Anzeige des Batteriezustandes eines entsprechenden Gerätes wollte ich eigentlich nur das Datum des battery Readings darstellen. Aus Platzgründen sollte die Jahreszahl aber zweistellig sein, also schrieb ich
   <ftui-label class="size-1" [text]="AZ_HZ_T1:battery:time | toDate() | format('DD.MM.YY') | prepend(' (') | append(')')"></ftui-label>
Das bleibt aber wirkungslos, die Jahreszahl ist vierstellig !
Der berühmte Hund liegt in '../ftui/modules/ftui/ftui.helper.js', Zeile 243 begraben.
  const YY = date.getFullYear().toString().substring(-2);Da Javascript die Funktion 'substring ...' mit einem negativen Wert nicht so verarbeitet wie erwartet, müsste
diese Zeile wie folgt abgewandelt werden:
  const YY = date.getFullYear().toString().slice(-2);Ich habe es in meiner 'ftui.helper.js' gemacht; alles funktioniert wie gewünscht; es müsste aber das nächste Update überstehen !
Mit besten Dank im Voraus
Peter
#58
Anfängerfragen / Aw: $data hash erweitern
Letzter Beitrag von betateilchen - 31 Oktober 2025, 09:10:04
Was ich noch gar nicht verstanden habe: wenn Du doch die Werte ohnehin nach jedem Neustart neu in einen hash schreiben musst, warum muss es dann unbedingt $data sein? Du kannst doch den von Dir benutzten hash benennen, wie Du möchtest. Damit umgehst Du die oben genannten, möglicherweise auftretenden Probleme durch Überschneidungen.
#59
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von DS_Starter - 31 Oktober 2025, 08:57:59
Moin Hadl,
ich habe mir die Kodierung mal genau angesehen und wir schauen  ob/wo Unterschiede zu finden sind...

Zitat- Aktuelle Stunden erhält wieder den Überschuss Anteilig der Rest-Minuten
- Der Überschuss des Rest Tages bis zum letzen Überschuss wird in RemainingSurp gespeichert
Vermutlich hast du nicht meine Version gändert in #4377 als Vorlage genommen.
Jedenfalls war die Zeitgewichtichtung nicht raus, sondern steckt in $total (= $RemainingSurp  bei dir).

Du hast es nur etwas umgemodelt. Erst das Replacement direkt ersetzt:

      if ($nh eq '00') {
              ...
              $hsurp->{$k}{surplswh} = $replacement;
              ...
      }

Und später:

      for my $h (@remaining_hods) {                                                                             
          my $val = $hsurp->{$h}{nhr} eq '00'
                    ? $replacement // 0
                    : $hsurp->{$h}{surplswh};
         
          $RemainingSurp += int $val;      (heißt bei mir nur $total += int $val;)
      }

Hier wird wird in der Stunde 00 das Replacement verwendet und sonst der Originalwert. Deswegen hättest du oben nicht das Replacement ersetzen müssen sondern nur extrahieren wie ich es bereits getan hatte.
Also bis zu diesem Punkt sind die Versionen identisch, nur dass $total nun $RemainingSurp heißt.
Das ist allerdings ein besserer Name den ich übernehmen werde.

Zitat- RemainingSurp wird zur SmartPower Margin Berechnung verwendet statt spday
Du verwendest:

          if ($strategy eq 'smartPower') {
              $pneedmin = ___batAdjustPowerByMargin ($name,                                                     
                                                     $limpower,
                                                     $bpinmax,
                                                     $runwhneed,
                                                     $otpMargin,
                                                     $RemainingSurp
                                                    );         
          }

Was wieder zu meinem

          if ($strategy eq 'smartPower') {
              $pneedmin = ___batAdjustPowerByMargin ($name,                                                     
                                                     $limpower,
                                                     $bpinmax,
                                                     $runwhneed,
                                                     $otpMargin,
                                                     $total
                                                    );         
          }

identisch ist wegen $total==$RemainingSurp ($spday ist hier schon in der Vorversion raus wenn ich mich recht erinnere).

Hier ist eine Stelle die den Nutzern von optPower wie Parallix nicht gefallen wird:

          my $fref      = ___batFindMinPhWh ($hsurp, \@remaining_hods, $runwhneed);
          my $limpower  = $fref->{ph};


Es wird die gewählte Strategie bzw. Erreichbarkeit des Ziel keine Beachtung mehr geschenkt. Im Original

          my $limpower  = $achievable || $strategy eq 'optPower'
                          ? min ($fref->{ph}, $spls)                                                           
                          : $fref->{ph};

wird eine Fallentscheidung vorgenommen und bei Erreichbarkeit des Ladeziels oder bei optPower Verwendung der Surplus-Wert als (zunächst) begrenzender Wert herangezogen. Achtung: wichtige Unterscheidung in der Ladeaggressivität was natürlich so bleiben soll.

Weiterhin wird nun durch die direkte Replacement-Ersetzung in der Iteration der Überschuß der aktuellen Stunde tendienziell gegen 0 gehen mit fortschreitender Zeit. Das hatte ich schonmal drin und hat sich als kontraproduktiv gezeigt, weswegen es entfernt wurde. 

Das hast du selbst auch erkannt und in dem Text beschrieben:
Zitat....
Die kleinen Wellen innerhalb einer Stunde möchte ich auch noch wegbekommen, dazu fehlt mir aber gerade der Ansatz. Ich glaube aber ich hab den Grund verstanden.

Wenn ich in einer Stunde 5kWh Überschuss habe, und im Schnitt 1kW brauche, dann passt das zu Beginn der Stunde.
Nach einer halben Stunde rechne ich noch mit 2,5kWh Überschuss in der Stunde. Die Stundenbasierte Suche nach minimaler Ladeleistung sieht also damit immer noch diese Stunde so als könnte man daraus 1kW ziehen. Der Akku ist aber schon voller, dadurch sinkt ungerechtfertigt die Ladeleistung.
....

Deswegen verwenden wir für die Iteration die Surplus-Stunden ohne Replacement und berechnen Zielerreichbarkeit und Steilheit der Margin bei smartPower mit dem Replacement. Dann hast du auch keine Wellen mehr in der Leistungsvorgabe bzw. eigentlich ja Ladeleistungsbeschränkung.


Zitat- Wenn der SOC unterhalb lowSoc ist wird die Ladeleistung nichtmehr auf bpinreduced nach oben hin begrenzt, sondern minimal bpinreduced gesetzt.
Das ist nicht gut. Wenn die Ladung unter lowSoc gefallen ist (was eigentlich nicht vorkommen sollte) wird die Batterie ggf. durch Netzstrom geladen. Das soll nur zaghaft mit pinreduced vorgenommen werden.
Aus welchem Grund bist du der Meinung dies ändern zu wollen?

ZitatHast du eine Idee, wie man die restliche Energiemenge der aktuellen Stunde so einrechnen könnte, das diese nur der minimal notwendigen Ladeleistung mal Rest-Zeit der Stunde entspricht?
Deswegen wird die Iteration ohne Zeitgewichtung vorgenommen. Dadurch bleibt die Leistungsbegrenzung über die Stunde weitgehend konstant. Nehmen wir an es ist ein Überschuß von 5kWh für die aktuelle Stunde prognostiziert und in der Gesamtkalkulation reicht es aus mit 1kW über diese eine Stunde zu laden, d.h. eine 1kWh in die Bat zu verbringen. Dann ist es völlig in Ordnung wenn zu Beginn der Stunde mit einer Leistung von 1kW geladen wird und am Ende dieser Stunde ebenfalls. Denn dann haben wir genau 1 kWh in der Batterie unter der Voraussetzung, dass über die gesamte Zeit mehr Überschuß als gewünschte/begrenzte Ladeleistung vorliegt.


LG,
Heiko
#60
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von Max_Meyer - 31 Oktober 2025, 08:50:46
Zitat von: DS_Starter am 30 Oktober 2025, 14:05:38der Setter "reset" ist nun deutlich aufgewertet. Die KI-Daten lassen sich selektiver löschen:

Guten Morgen Heiko,
Danke! - der Reset klappt gut.
Ich werde jetzt das Ergebnis beobachten - eigentlich müssten die 'Today_PVdeviation' wesentlich besser werden
Viele Grüße
Gerd