Hauptmenü

Neueste Beiträge

#1
Anfängerfragen / Aw: [gelöst] Wallbox mit HTTPM...
Letzter Beitrag von Prof. Dr. Peter Henning - 11 April 2026, 02:40:23
@UdoR:

1. Bitte in den Postings Code-Tags benutzen. Siebenter Button von Rechts über dem Edit-Feld
2. In diesem Thread geht es um das Auslesen mit HTTPMOD.

LG

pah
#2
Solaranlagen / Aw: [23_BYDBox] - Modul für BY...
Letzter Beitrag von Prof. Dr. Peter Henning - 11 April 2026, 02:36:40
Im konkreten Fall des BYD-Moduls muss ich leider passen, ich habe so viele FHEM-Module als Maintainer, dass meine Kapazität für ein weiteres nicht ausreicht.

Zitat von: alkazaa am 10 April 2026, 21:42:46obwohl neuerdings sogar @rudolfkoenig den Einsatz von KI für diesen Zweck empfiehlt
Es würde mich doch sehr wundern, wenn er das so pauschal geschrieben hätte.

Der "Einsatz von KI" - von spezialisierten Tools, erst Recht von allgemeinen LLM - durch Personen mit wenig Programmierkenntnissen bringt in der Regel nur Schrottcode hervor. Erfahrene Software-Entwickler können damit allerdings ihre Produktivität steigern.



LG

pah
#3
1Wire / Aw: Using OWServer with comple...
Letzter Beitrag von lebardix - 11 April 2026, 02:18:56
The OWserver module does not recognise the sub-modules
Example:
The main bus comprises 3 sub-networks
bus.0/bus.0/1F.0AC004000000
bus.0/bus.0/1F.85C104000000
bus.0/bus.0/1F.03C004000000


each of which supports devices in MAIN and AUX channels
such as:
bus.0/bus.0/1F.0AC004000000/main/30.571762120000 with sensor data such as current  with the value -0.000625


which, under these conditions, is not accessible via FEM.
The owserver module identifies each of these three sub-networks as a "data"


Am I using the owserver module incorrectly??


Thank you for your advice
#4
FHEM Code changes / Revision 31101: 76_SolarForeca...
Letzter Beitrag von System - 11 April 2026, 00:00:47
Revision 31101: 76_SolarForecast: contrib Version 2.6.0

76_SolarForecast: contrib Version 2.6.0

Source: Revision 31101: 76_SolarForecast: contrib Version 2.6.0
#5
Solaranlagen / Aw: PV-Vorhersage algorithmisc...
Letzter Beitrag von DS_Starter - 10 April 2026, 23:36:31
Hallo pah,

ich habe deine neue Logik erfolgreich in das SF-Modul integriert.
Sieht schonmal richtig gut aus. Da die SF-Schleife deutlich häufiger zyklisch läuft, habe ich den implementierten Code mit einem Caching Mechanismus angereichert. model und b0 habe ich erstmal auf default belassen. Damit muß ich mich noch befassen.

Hier nur als Info/Anregung ein Codeauszug aus der Implementierung der natürlich auf SF zugeschnitten ist.

globale Definition:
my %AREA_CACHE;                                                                     # Caching Storage, key → { G_tilt => ..., wcc => ... }
my %AREA_CACHE_STATS = (                                                            # Cache Statistic
    hits   => 0,
    misses => 0,
    evicts => 0,
    size   => 0,
);

Dann:

sub ___computeTiltedIrradianceCached {   
  my $paref    = shift;
  my $name     = $paref->{name};
  my $fd       = $paref->{fd};                                                  # lfd. Tag-Index 0, 1, 2 ...
  my $dday     = $paref->{dday};                                                # abzufragender Tag: 01 .. 31
  my $chour    = $paref->{chour};                                               # aktuelle Stunde (00 .. 23)
  my $hod      = $paref->{hod};                                                 # abzufragende Stunde des Tages 01, 02 ... 24
  my $str_tilt = $paref->{tilt};                                                # String Anstellwinkel / Neigung
  my $str_azi  = $paref->{azimut};                                              # String Ausrichtung / Azimut
  my $model    = $paref->{model} // 0;                                          # 0 - Berechnung mit isotropem Himmelsmodell, 1 - Berechnung nach Hay-Davies
  my $b0       = $paref->{b0}    // 0.05;                                       # Materialfaktor für IAM, 0.05 .. 0.2
  my $rad      = $paref->{rad};                                                 # Rad1h = Absolute Globalstrahlung letzte 1 Stunde, kJ/m2
  my $dofyear  = $paref->{dofyear};                                             # Tag des Jahres (001 - 366)

  .........
  .........
 
  my $cache_key = join ':',                                                     # Cache‑Key erzeugen
    $offset_hours,
    $sunalt // 'U',
    $sunaz  // 'U',
    $rad    // 'U',
    $str_tilt,
    $str_azi,
    $model,
    $b0,
    $dofyear;
   
  # --- Cache-Treffer? ---
  if (exists $AREA_CACHE{$cache_key}) {
      $AREA_CACHE_STATS{hits}++;
      return $AREA_CACHE{$cache_key};
  }

  my $sg  = $rad * KJ2WH;                                                       # rad=kJ/m²h -> 1kJ = 0,27778 Wh
  my $rho = 0.2;                                                                # Bodenalbedo
  my $pi  = 4 * atan2 (1,1);                                                    # klassischer Perl-Trick, um π (Pi) mathematisch exakt zu berechnen – ohne es als feste Zahl einzutragen
  my $deg = $pi / 180.0;
  my $Isc = 1367.0;                                                             # Solarkonstante W/m²

  $AREA_CACHE_STATS{misses}++;

  return 0 if(!defined($sg) || $sg <= 0);

  my $sunaz_r  = $sunaz    * $deg;
  my $sunalt_r = $sunalt   * $deg;
  my $azimut_r = $str_azi  * $deg;
  my $tilt_r   = $str_tilt * $deg;
  my $sin_ele  = sin ($sunalt_r);
  my $cos_ele  = cos ($sunalt_r);

  return 0 if($sin_ele <= 0.0);

  my $I0n = $Isc * (1.0 + 0.033 * cos (2.0 * $pi * $dofyear / 365.0));
  my $I0h = $I0n * $sin_ele;
 
  return 0 if($I0h <= 0.0);

  my $Kt = $sg / $I0h;
  $Kt    = max (0.0, min (1.0, $Kt));                                           # Kt (Clear-Sky-Index), Clamping wichtig

  my $kd;                                                                       # Diffusanteil kd nach Erbs-Polynom
 
  if ($Kt <= 0.22) {
      $kd = 1.0 - 0.09 * $Kt;
  }
  elsif ($Kt <= 0.80) {
      $kd = 0.9511
          - 0.1604  * $Kt
          + 4.388   * $Kt**2
          - 16.638  * $Kt**3
          + 12.336  * $Kt**4;
  }
  else {
      $kd = 0.165;
  }

  $kd = max (0.0, min (1.0, $kd));

  my $sf = $kd * $sg;                                                           # diffuse horizontale Strahlung = DHI
  my $si = $sg - $sf;                                                           # direkte horizontale Strahlung = BHI
  $si    = max (0.0, $si);

  my $cos_thetai = $sin_ele * cos($tilt_r)                                      # Einfallswinkel cos(θi)
                 + $cos_ele * sin($tilt_r) * cos($sunaz_r - $azimut_r);

  my $cos_thetai_pos = $cos_thetai;
  $cos_thetai_pos    = 0.0 if $cos_thetai_pos < 0.0;

  my $dni    = ($sin_ele > 0.01) ? ($si / $sin_ele) : 0.0;                      # DNI (Direct Normal Irradiance)
  my $B_tilt = $dni * $cos_thetai_pos;                                          # Direktstrahlung auf geneigte Fläche
  $B_tilt    = max (0.0, $B_tilt);

  # --- IAM nur für Direktstrahlung (ASHRAE)
  my $IAMb = 1.0;
 
  if ($B_tilt > 0.0 && $cos_thetai_pos > 0.0) {
      $IAMb = 1.0 - $b0 * (1.0 / $cos_thetai_pos - 1.0);                        # IAM (Incidence Angle Modifier)
      $IAMb = max (0.0, min (1.0, $IAMb));
  }

  my $B_eff = $B_tilt * $IAMb;

  my $D_tilt;

  if ($model == 1) {                                                            # Diffusanteil auf geneigte Fläche, Modell 1 (Hay-Davies)
      my $Ai  = $sg > 0.0 ? (($si / $sg) * $Kt) : 0.0;
      $Ai     = max (0.0, $Ai);
      $Ai     = min (1.0, $Ai);
      my $Rb  = $sin_ele > 0.01 ? ($cos_thetai_pos / $sin_ele) : 0.0;
      $Rb     = max (0.0, $Rb);
      $D_tilt = $sf * ($Ai * $Rb + (1.0 - $Ai) * (1.0 + cos($tilt_r)) / 2.0);
  }
  else {
      $D_tilt = $sf * (1.0 + cos($tilt_r)) / 2.0;                               # Diffusanteil auf geneigte Fläche, Modell 0 (isotrop)
  }

  $D_tilt    = max (0.0, $D_tilt);
 
  my $R_tilt = $rho * $sg * (1.0 - cos($tilt_r)) / 2.0;                         # Bodenreflexion
  $R_tilt    = max (0.0, $R_tilt);
 
  my $G_tilt = $B_eff + $D_tilt + $R_tilt;                                      # Gesamteinstrahlung
  $G_tilt    = max (0.0, $G_tilt);

  $G_tilt = round2 ($G_tilt);
 
  $AREA_CACHE{$cache_key} = $G_tilt;                                            # Berechnungsergebnis cachen
  $AREA_CACHE_STATS{size} = scalar keys %AREA_CACHE;

return $G_tilt;                                                                 # effektive Einstrahlung $G_tilt auf die PV-Anlage in W/m²
}

Eine LRU Cacheverwaltung muß ich noch einbauen damit das Ding nicht unkontrolliert wächst.
Der Ergebniswert wird dann wie bekannt mit Bewölkung bzw. Umweltfaktoren in Beziehung gebracht.
Bin gespannt auf die Ergebnisse aus der Community.

LG,
Heiko
#6
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von DS_Starter - 10 April 2026, 23:14:03
Nabend zusammen,

ich habe den neuen Algorithmus von pah in das Modul eingebaut. Die Logik ist um ein Caching ergänzt um CPU bei den Berechnungen zu sparen.
Die neue Logik hat nur mit setupRadiationAPI = <DWD_OpenData Device> eine Relevanz.

Es wird in der Anfangszeit Diskrepanzen bei den gespeicherten Korrekturfaktoren geben.
Wer sein SF-Device diesbezüglich clearen möchte führt einfach aus:

set ...  reset pvCorrection cached
Danach sind alle gespeicherten Korrekturen gelöscht (nicht PV-KI) und speichern sich neu.
V 2.6.0 liegt im contrib.

LG,
Heiko
#7
MQTT / Aw: Migration MQTT_DEVICE -> M...
Letzter Beitrag von TomLee - 10 April 2026, 22:19:46
ZitatNull Zeichen kann zwar theoretisch auch im Topic vorkommen, aber es wird mW nicht praktiziert.

Kann mir nicht vorstellen das bisher mehr als zwei User das entsprechende Attribut gesetzt haben.

Warum nicht wieder rückgängig machen und stattdessen eine verbose 3 Meldung bei
Null Zeichen?
#8
Mobile Devices / Aw: GarminFhem (Widget für Gar...
Letzter Beitrag von max333 - 10 April 2026, 22:17:06
Wäre es möglich die Garmin App auch für neuere Geräte bereit zu stellen, wie z.B. GPSMAP H1i, Edge 550, Edge 1050 usw.?
#9
Solaranlagen / Aw: [23_BYDBox] - Modul für BY...
Letzter Beitrag von alkazaa - 10 April 2026, 21:42:46
Zitat von: Parallix am 10 April 2026, 11:07:55Kann mir jemand von Euch sagen, wer sich aktuell um das Modul kümmert?
Anscheinend hat sich nach den frühem Ausstieg von @MiniBlister nur noch @MadMax (dankenswerterweise) mit der Weiterentwicklung befasst.
Allerdings muss man sich durch diesen thread wühlen, um die aktuellste Version zu finden.

Ich bin auch interessiert an der Weiterentwicklung. Für die Programmierung sind meine Perl Kenntnisse wohl nicht ausreichend (obwohl neuerdings sogar @rudolfkoenig den Einsatz von KI für diesen Zweck empfiehlt), aber ich würde mich als Tester einbringen. Zuletzt habe ich das timing Verhalten des Moduls mit dem vom BYD-Logger tool (aus dem Photovoltaik-Forum) verglichen. Bei Interesse könnte ich meine Erkenntnisse hier teilen.

Was die Readings angeht, hätte ich auch einen Wunsch bzw. Vorschlag: die sehr langen reading-Listen zu Zellspannungen, -temperaturen etc. könnten jeweils durch ein einzelnes reading ersetzt werden, das die Werte als space (oder comma) separated array liefert, ähnlich wie ich das in meiner EPEX-Preisabfrage mache.
Du darfst diesen Dateianhang nicht ansehen.
Es wird dann leichter, skriptmäßig auf die einzelnen Elemente zuzugreifen, z.B. mit einer Funktion wie
sub ReadingsValbyIndex($$$$)
{ my ($device,$reading,$readingindex, $default) = @_;
  my $ret = (split(/,/,ReadingsVal($device,$reading,"-1")))[$readingindex];
  if ($ret eq "")
    {return $default}
  else
    {return $ret};
}
reading02Name             EPEX_price

                          {my ($s,$m,$h,$D,$M,$Y)=localtime();
reading02RecombineExpr    if ($h % 2 == 1 and $m == 0) {fhem("get $name EPEX_prices")}; #reread list only every 2nd hour
                          ReadingsValbyIndex($name,"EPEX_prices",int($m/15)+4*$h,-999)}
#10
Ankündigungen / Aw: readingsProxy: überarbeite...
Letzter Beitrag von Beta-User - 10 April 2026, 21:22:02
Zitat von: Dr. Boris Neubert am 10 April 2026, 21:13:54Danke für die Rückmeldung. Nutzt das jetzt kaum jemand oder haben die Nutzer nur keine Lust aufs Testen? Frag ich am falschen Ort?
Ort ist m.E. OK.

Testaufrufe sind nach meiner Erfahrung eher nur dann mit aktiver Beteiligung, wenn es akut Probleme zu lösen gibt, oder man gemeinsam Features entwickelt.

Hier stört mich persönlich, dass man es zum einen aus dem Forum holen muss (umständlicher als z.B. contrib) und das mit dem "debug"-Kommentar. Das logfile unnötig zu füllen, schreckt mich trotz (oder gerade wegen?) vieler sonstiger Umbauten eher ab ..