Hauptmenü

Neueste Beiträge

#1
Danke, ich habe es jetzt auch komplett lokal. Über meinen DNS-Eintrag und einen Apache-Server mit diversen rewrite rules erfolgreich umgeleitet auf eines meiner FHEM-Systeme.

LG

pah
#2
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von 300P - 15 März 2026, 15:19:25
Ja glaub ich .... Danke für die Aufnahme des Request in den Backlog 8)
#3
FHEMWEB / Aw: VoiceButton für Fhemweb
Letzter Beitrag von Beta-User - 15 März 2026, 15:18:44
Zitat von: rudolfkoenig am 15 März 2026, 11:03:52Was schwebt Dir vor?
Vielleicht sollten wir auch bei Gelegenheit klären, wer "Dir" ist, bzw. wer welche Zielsetzung(en) hat.

Mir persönlich ging es als Minimalziel darum, einen Weg zu finden, wie man diverse Androiden möglichst einfach und möglichst ohne viele Abhängigkeiten von irgendwelchen großen Internetdienstleistern dazu nutzen kann, "typische Nutzerinteraktionen per Sprache" an und mit FHEM zu ermöglichen.

Das Gespann Rhasspy/RHASSPY war im Hinblick auf offline-Fähigkeit nahezu ideal, nur leider war (und ist) der STT-Teil im Hinblick auf Useability und effektive Ergebnisse eher bescheiden.
Der "alte" Workaround, für den STT-Teil eben doch die "normale online"-Fähikeit der Handys zu verwenden, war (mit ein paar Abstichen) ganz ok, benötigt(e) aber entweder die "Automagic"-App, die zwar noch erhältlich ist, aber nur in der vorletzten Version mit aktuellen Handys nutzbar ist, aber im mittelfristig "tot" ist, oder "Tasker", dessen Konfiguration (der aktuellen Version) (nicht nur) mich überfordert...

Wenn "wir" (also eher ihr...) den TTS/STT-Teil erfolgreich hier implementiert haben sollten, wäre mein persönliches Minimalziel eigentlich schon erreicht.
Vermutlich läßt sich das dann auch genauso mit Babble nutzen. Das war nie in meinem Fokus, mir lag die (bezogen auf den FHEM-Teil) weitgehend dezentrale Konfiguration von RHASSPY sehr viel näher.

Soweit, so gut.

Mittelfristig wird sich auch das Problem stellen, dass Rhasspy nicht mehr - jedenfalls nicht mehr in der jetzigen Systematik - weiterentwickelt werden wird. Nach meinem jetzigen Verständnis ist das "eigentlich" kein Beinbruch, denn der eigentliche Kern - die Intent-Erkennung - scheint sowieso (wie bei Babble auch) auf Rivescript zu basieren. Das "passend" zu konfigurieren (bzw. bei Änderungen der FHEM-Konfiguration auch zu aktualisieren), ist sicher etwas Aufwand, aber vermutlich (mit Unterstützung...) lösbar.

RHASSPY selbst ist gepackaged, so dass es praktisch kein Aufwand wäre, das zu klonen - und den Klon dann dieselben Attribute verwenden zu lassen, wie das bisherige Modul ;D .

Von daher wäre die "mittelfristige Mission", RHASSPY2 (oder künftig vielleicht "RiveInterface") zu basteln, um damit eine (relativ) einfach zu konfigurierende Zwischenschicht pro FHEM-Installation (und Sprache) anbieten zu können, die - abgesehen von der STT-Seite - offline läuft.
#4
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von DS_Starter - 15 März 2026, 15:15:07
Ich habe mir den Link des Requests in mein Backlog gelegt.
Komme sonst mit meinem Plan durcheinander. (Ist eine größere Sache)
#5
FRITZ!Box / Aw: 72_FRITZBOX.pm wird zu 72_...
Letzter Beitrag von JoWiemann - 15 März 2026, 15:13:28
Hallo elektron-bbs,

vielen Dank für die Rückmeldung. Schaue ich mir an.

Grüße Jörg
#6
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von 300P - 15 März 2026, 15:07:04
Zitat von: DS_Starter am 15 März 2026, 11:48:03@300P,

ZitatDie andere Sache ... zeige mal bitte den Wert von pvInverterCapSum  aus "get .. valCurrent".
Problem erkannt ... Problem gebannt  ;)  Liegt im contrib.
Leider erst nach neuem Training aktiviert.

Macht nix - mir ist eigentlich der R2 zu tief - hätte so oder so nochmals trainiert bis er in Richtung 0.7 kommt....


Zitat von: DS_Starter am 15 März 2026, 11:48:03@300P,
ZitatDie Peaks kommen (glaub ich) eher von der Wärmepumpe bei der 2-maligen täglichen WW-Aufbereitung
Ja durchaus. Die Rekalibrierung benötigt einen rmse_rel_ratio und bias_var unter einem vorgebénen Schwellenwert.
Sonst ändert man auf einen neuen Bias der zu sehr von den Ausreißern geprägt ist. Die Schwellenwerte beobachte ich aber weiter.

=>> Könntest du evtl. als attr doch (statt der internen Ermittlungen für die möglichen WP-Modi heating/hot_water/defrost/cool/off) diese zum Überschreiben der interne (soweit vorhanden) einbringen / nutzen ?

Hier schon mal meine (stark abgekupferten) Codezeilen vom Anfang Februar als "Anreiz" die ich genutzt hatte...

Attribute anlegen:
#+ 300P
#+
################################################################
#                      Attr setupHPDev pu
################################################################
sub _attrHPDev {                   ## no critic "not used"
  my $paref = shift;
  my $name  = $paref->{name};
  my $aVal  = $paref->{aVal};
  my $aName = $paref->{aName};
  return if(!$init_done);

  my $hash = $defs{$name};
  my $valid = {
      hpspf             => { comp => '',          act => 0 }, ##+ noch nicht aktiv
      hptempflow        => { comp => '',          act => 0 }, ##+ noch nicht aktiv
      hptempreturn      => { comp => '',          act => 0 }, ##+ noch nicht aktiv
      hpmodeheat        => { comp => '',          act => 0 }, ##+
      hpmodehwater      => { comp => '',          act => 0 }, ##+
      hpmodedefrost     => { comp => '',          act => 0 }, ##+
      hpmodeoff         => { comp => '',          act => 0 }, ##+
      hpmodecool        => { comp => '',          act => 0 }, ##+
      hpmodepool        => { comp => '',          act => 0 }, ##+
      hpmodepoolheat    => { comp => '',          act => 0 }, ##+
  };
    my ($a, $h) = parseParams ($aVal);

  if ($paref->{cmd} eq 'set') {
      for my $key (keys %{$h}) {
          return 'The keys entered must not contain square brackets [...]' if($key =~ /[\[\]]+/xs);           # Absturzschutz!

          if (!grep /^$key$/, keys %{$valid}) {
              return qq{The key '$key' is not a valid key in attribute '$aName'};
          }
      }

      for my $akey (keys %{$h}) {         
          my $comp = $valid->{$akey}{comp};

          if ($comp && $h->{$akey} !~ /^$comp$/xs) {
              return "The key '$akey=$h->{$akey}' is not specified correctly. Please refer to the command reference.";
          }
         
          my ($dv, $rd, $regex) = split ':', $h->{$akey};
          my ($err)             = isDeviceValid ( { name => $name, obj => $dv, method => 'string' } );
          return $err if($err);

          my $val = ReadingsVal ($dv, $rd, undef);
         
          if (!defined $val) {
              return "The reading '$rd' of device '$dv' is invalid or doesn't contain a defined value";
          }
         
          if (defined $regex) {
              $err = checkRegex ($regex);
              return "$akey Regex check failed: $err" if($err);
          }
      }
  }
  elsif ($paref->{cmd} eq 'del') {

  }

  InternalTimer (gettimeofday() + 2, 'FHEM::SolarForecast::createAssociatedWith', $hash, 0);
  InternalTimer (gettimeofday() + 3, 'FHEM::SolarForecast::writeCacheToFile', [$name, 'plantconfig', $plantcfg.$name], 0);   # Anlagenkonfiguration File schreiben

return;
}

Parse

################################################################
#                Parse setupHPDev 300P
################################################################
sub __parseAttrHPDev { ##+
  my $name = shift;    ##+
  my $hpm = AttrVal ($name, 'setupHPDev', '');##+
  return if(!$hpm);##+
  my ($pa, $ph) = parseParams ($hpm);##+
  ##+
  my ($hpspfdev,           $hpspfrdg)           = split (':', $ph->{hpspf},             2) if(defined $ph->{hpspf});##+
  my ($hptempflowdev,      $hptempflowrdg)      = split (':', $ph->{hptempflow},        2) if(defined $ph->{hptempflow});##+
  my ($hptempreturndev,    $hptempreturnrdg)    = split (':', $ph->{hptempreturn},      2) if(defined $ph->{hptempreturn});##+
  my ($hpmodeheatdev,      $hpmodeheatrdg)      = split (':', $ph->{hpmodeheat},        2) if(defined $ph->{hpmodeheat}); ##+
  my ($hpmodehwaterdev,    $hpmodehwaterrdg)    = split (':', $ph->{hpmodehwater},      2) if(defined $ph->{hpmodehwater}); ##+
  my ($hpmodedefrostdev,   $hpmodedefrostrdg)   = split (':', $ph->{hpmodedefrost},     2) if(defined $ph->{hpmodedefrost}); ##+
  my ($hpmodeoffdev,       $hpmodeoffrdg)       = split (':', $ph->{hpmodeoff},         2) if(defined $ph->{hpmodeoff}); ##+
  my ($hpmodecooldev,      $hpmodecoolrdg)      = split (':', $ph->{hpmodecool},        2) if(defined $ph->{hpmodecool}); ##+
  my ($hpmodepooldev,      $hpmodepoolrdg)      = split (':', $ph->{hpmodepool},        2) if(defined $ph->{hpmodepool}); ##+
  my ($hpmodepoolheatdev,  $hpmodepoolheatrdg)  = split (':', $ph->{hpmodepoolheat},    2) if(defined $ph->{hpmodepoolheat}); ##+
  # Moeggliche wpmode-werte sind "off","heating","cooling","hot water","pool","pool heating","defrost","compressor alarm" not used   ##+
##+ Ein Modus Alarm wird in SF nicht bewertet
##+
  my $parsed = {    ##+
      hpspfDev           => $hpspfdev,           ##+
      hpspfRdg           => $hpspfrdg,           ##+
      hptempflowDev      => $hptempflowdev,      ##+
      hptempflowRdg      => $hptempflowrdg,      ##+
      hptempreturnDev    => $hptempreturndev,    ##+
      hptempreturnRdg    => $hptempreturnrdg,    ##+
      hpmodeheatDev      => $hpmodeheatdev,      ##+
      hpmodeheatRdg      => $hpmodeheatrdg,      ##+
      hpmodehwaterDev    => $hpmodehwaterdev,    ##+
      hpmodehwaterRdg    => $hpmodehwaterrdg,    ##+
      hpmodedefrostDev   => $hpmodedefrostdev,   ##+
      hpmodedefrostRdg   => $hpmodedefrostrdg,   ##+
      hpmodeoffDev       => $hpmodeoffdev,       ##+
      hpmodeoffRdg       => $hpmodeoffrdg,       ##+
      hpmodecoolDev      => $hpmodecooldev,      ##+
      hpmodecoolRdg      => $hpmodecoolrdg,      ##+
      hpmodepoolDev      => $hpmodepooldev,      ##+
      hpmodepoolRdg      => $hpmodepoolrdg,      ##+
      hpmodepoolheatDev  => $hpmodepoolheatdev,  ##+
      hpmodepoolheatRdg  => $hpmodepoolheatrdg,  ##+
   };

   ##+ Debuglog HPDev
   ################
   ##+ if ($debug =~ /aiProcess/xs) {
   #Log3 ($name, 2, "$name DEBUG> parseAttrHPDev hpmodeheat: $hpmodeheatdev - hpmodewater : $hpmodehwaterdev - hpmodedefrost : $hpmodedefrostdev -hpmodeoff : $hpmodeoffdev ");
   #Log3 ($name, 2, "$name DEBUG> parseAttrHPDev hpmodeheat: $hpmodeheatrdg - hpmodewater : $hpmodehwaterrdg - hpmodedefrost : $hpmodedefrostrdg -hpmodeoff : $hpmodeoffrdg ");
    ##+ }
return $parsed;
}

Hilfe Ergänzung EN
      <a id="SolarForecast-attr-setupHPDev"></a>
       <li><b>setupHPDev &lt;key=value&gt; &lt;key=value&gt; ... </b><br>
         By optionally specifying the 'key=value' pairs listed below, various
         heatpump data / sensor can be integrated.
         The entry can be made on multiple lines.
         <br><br>
         ##+ 300P
         <br><br>


       <br>            <tr><td> English missing !!!!!!!                             </td><td>                                                                                                                                                  </td></tr>
       </li>
       <br>


Hilfe Ergänzung DE

      <a id="SolarForecast-attr-setupHPDev"></a>
       <li><b>setupHPDev &lt;key=value&gt; &lt;key=value&gt; ... </b><br>
         Durch die optionale Angabe der nachfolgend aufgeführten 'Schlüssel=Wert' Paare können verschiedene
         WP-Messwerte und Zustaende eingebunden werden.
         Die Eingabe kann mehrzeilig erfolgen. Dieses Setuop wird aktuell nur bei Auswahl der AI:FANN mit der Version V1_heatpump_pv_buderus genutzt
         <br><br>

         <br><br>
         ##+ 300P
         <br><br>

         <ul>
         <table>
         <colgroup> <col width="15%"> <col width="77%"> </colgroup>
            <tr><td> <b>hpspf</b>                 </td><td>deutsche JAZ  = erzeugte Waermemenge / Energiegesamteinsatz -  keine Pflichtangabe          </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td> <b>hptempflow</b>            </td><td>Vorlauftemperatur vom Aussengeraet   - nicht vom Heizkreis  - ca. 34.0 Grad    - keine Pflichtangabe            </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td> <b>hptempreturn</b>          </td><td>Ruecklauftemperatur zum Aussengeraet - nicht vom Heizkreis  = hptempflow-(delta 4.5 K --> Differenz VL/RL) </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td> <b>hpmodeheat</b>            </td><td>WP laeuft im Heizmodus     - keine Pflichtangabe                                                        </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td> <b>hpmodehwater</b>          </td><td>WP laeuft im Heizmodus     - keine Pflichtangabe                                                         </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td> <b>hpmodedefrost</b>         </td><td>WP laeuft im Abtaumodus    - keine Pflichtangabe                                                        </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td> <b>hpmodeoff</b>             </td><td>WP ist AUS - OFF           - keine Pflichtangabe                                                        </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td> <b>hpmodecool</b>            </td><td>WP laeuft im Kuehlmodus    - keine Pflichtangabe                                                        </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td> <b>hpmodepool</b>            </td><td>WP laeuft im Poolmodus     - keine Pflichtangabe                                                        </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td> <b>hpmodepoolheat</b>        </td><td>WP laeuft im Poolheatmodus - keine Pflichtangabe                                                         </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td>                              </td><td>Eine &lt;Gerät&gt;:&lt;Reading&gt; Kombination, die die jeweiligen aktuellen Werte der Waermepumpe liefert.                           </td></tr>
            <tr><td>                              </td><td>Syntax: &lt;Device&gt;:&lt;Reading&gt;                                                                                                    </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td>                              </td><td>  noch nicht vorhanden......                                                                                                                                        </td></tr>
            <tr><td>                              </td><td>                                                                                                                                          </td></tr>
            <tr><td>                              </td><td>Eine &lt;Gerät&gt;:&lt;Reading&gt;:&lt;Regex&gt; Kombination, die den aktuellen Kompressormodus für "heating" liefert.                    </td></tr>
            <tr><td>                              </td><td>Der angegebene reguläre Ausdruck muß 'true' für den Status 'heating|cooling|hotwater|defrost|off|pool|poolheating' ergeben, sonst 'false'.</td></tr>
            <tr><td>                              </td><td>Syntax: &lt;Gerät&gt;:&lt;Reading&gt;:&lt;Regex&gt;                                                                                       </td></tr>
            <tr><td>                                                                                                                                                                                 </td></tr>
            <tr><td>                                                                                                                                                                                 </td></tr>
            <tr><td>                                                                                                                                                                                 </td></tr>
         </table>
         </ul>
       <ul>

         <b>Beispiel: </b> <br>
         attr &lt;name&gt; setupHPDev hpmodeheat=Forecast:user_hpmodeheating <br>
                                      hpmodehwater=Forecast:user_hpmodehwater <br>
                                      hpmodedefrost=Forecast:user_hpmodedefrost <br>
                                      hpmodeoff=Forecast:user_hpmodeoff <br>
        <br><br>
        Userreading als Beispiel: (Device/Reading anpassen)<br>

                    user_hpmodeheating {if(ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "heating") {return "1"} else {return 0}},
                    user_hpmodehwater {if(ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "hot water") {return "1"} else {return 0}},
                    user_hpmodeoff {if(ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "off") {return "1"} else {return 0}},
                    user_hpmodedefrost {if(ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "off") {return "1"} else {return 0}},
       </ul>

       </li>
       <br>
#7
Bastelecke / Aw: Panasonic Klima mit ESP32 ...
Letzter Beitrag von Guybrush - 15 März 2026, 15:03:30
Ein Webportal kenn ich nicht bei der Lösung. Ich hab das mit ESPHome gemacht. Ein OTA Update funktioniert über ESPHome, indem du im YAML File die IP des Geräts definierst. Setzt natürlich voraus, dass OTA Updates in der Liveconfig damals auch aktiviert wurden.
#8
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von DS_Starter - 15 März 2026, 14:59:08
Unser System bzw. die Eingangsparameter und Kanäle sind hoch dynamisch. Wir müssen auch mal damit leben, dass es Phasen der ungenügenden Realitätsnähe gibt. Was wir hier machen ist ein Spiel mit Wahrscheinlichkeiten, die überwiegend gut getroffen werden aber auch mal - aus verschiedensten Gründen - (evtl. völlig) daneben liegen können.
#9
Heizungssteuerung/Raumklima / Aw: Neues Modul: 58_DaikinClou...
Letzter Beitrag von FrankL - 15 März 2026, 14:56:42
Ich habe bei mir die Redirect URI individuell auf FHEM konfiguriert. Gerade nochmal getestet - funktioniert auch (immernoch). Das setzt allerdings voraus, dass FHEM mit https angesprochen wird und das Attribut csrfToken im WEB-Device statisch definiert ist, wenn csrfToken verwendet wird. Meine Redirect-Url lautet z.B.:

https://192.168.202.153:8083/fhem?cmd=set%20DaikinCloud%20AuthCode%20&fwcsrf=csrf_xxx_geheim
Wichtig ist, dass auch genau diese Redirect URI im Daikin-Developer-Portal angegeben wird (100% Übereinstimmung, daher auch statisches csrfToken erforderlich, damit das ganze von Dauer ist). Bei der Lösung entfällt dann auch das umständliche Copy&Paste des AuthCode.

Falls das nicht funktioniert, gibt es auch eine andere Behelfslösung (wie sie z.B. bei 37_Spotify.pm verwendet wird) mit der Redirect URI "https://oskar.pw/"

Nähere Infos siehe hier

Eine Firewall-Freigabe ist in keinem der Fälle erforderlich, da die Redirect URI am Ende jeweils lokal im Browser aufgerufen/abgesetzt wird.

MfG Frank
#10
Bastelecke / Aw: Panasonic Klima mit ESP32 ...
Letzter Beitrag von TomS85 - 15 März 2026, 14:55:25
Ich habe die Lösung so bei mir auch in Betrieb (damals war eine Ähnliche Anleitung bei espthings.io drin, mit der ich das Teil in FHEM anbinden konnte.

Ich habe nun allerdings das Problem, dass ich mein WLAN Passwort ändern muss. Ich komme über die IP des ESP ja auf ein Webportal von dem Gerät, auf der es auch die Option "OTA Update" gibt. Kann ich dort direkt eine YAML mit geändertem Passwort hochladen und muss das Teil dann nicht erneut im FHEM anmelden?