Hauptmenü

Neueste Beiträge

#41
Sonstiges / EventAggregator: Patch für kon...
Letzter Beitrag von wurmthomas80 - 20 Februar 2026, 14:59:32
Hallo zusammen,

ich habe den EventAggregator für meinen Anwendungsfall erweitert und möchte die Änderung hier zur Diskussion stellen bzw. der Allgemeinheit zur Verfügung stellen.

Motivation

Standardmäßig ist beim EventAggregator die Anzahl der ausgegebenen Dezimalstellen nicht konfigurierbar, und Änderungen bestimmter Parameter erfordern ein Neuinitialisieren bzw. Neustarten.
Für meine Anwendung (kontinuierliche Messwerte / dynamische Konfiguration) war es notwendig:

  • die Anzahl der Dezimalstellen frei festlegen zu können
  • Parameteränderungen zur Laufzeit zu ermöglichen, ohne Neustart oder Recreate
  • bestehende Funktionalität unverändert zu lassen (abwärtskompatibel)

Umsetzung

Ich habe dazu Anpassungen in folgenden Dateien vorgenommen:


Die Änderungen ermöglichen:

  • Angabe der gewünschten Dezimalstellen
  • Übernahme geänderter Parameter während des Betriebs
  • keine Auswirkungen auf bestehende Konfigurationen ohne Nutzung der neuen Optionen

Patch

Bei Interesse kann ich gerne den Patch zur verfügung stellen.

Fragen / Feedback erwünscht

  • Ist Interesse vorhanden, diese Funktion offiziell zu unterstützen?
  • Gibt es Bedenken hinsichtlich Nebenwirkungen oder Design?
  • Sollte das anders implementiert werden (z. B. als Modul-Erweiterung statt Core-Änderung)?

Falls gewünscht, kann ich auch eine sauber aufbereitete Version oder Dokumentation nachreichen.

Viele Grüße
Thomas
#42
Automatisierung / Aw: Leeres Reading in einem no...
Letzter Beitrag von Gisbert - 20 Februar 2026, 13:38:32
Hallo Dan,

ich hab weiter experimentiert. Wenn ich die Funktion chop weglasse und mit
$read =~ m/errors/ bzw.
$read =~ m/temperature/abfrage, dann erhalte ich die Nachrichten wie erwartet - und auch mit der jeweiligen richtigen Formatierung.
Offensichtlich macht chop in diesem Zusammenhang etwas anderes als beabsichtigt.

Hier nochmals meine finale Definition, gerne kommentieren, falls dir noch was auffällt.
defmod JK_BMS.notify notify JK_BMS:(errors|power_tube_temperature|temperature_sensor_1|temperature_sensor_2):.* {\
my $alias = AttrVal($NAME,'alias','');;\
my @evt = split(' ',$EVENT);;\
my $read = $evt[0];;\
my $val = $evt[1];;\
if ($read =~ m/errors/ && $val) {\
fhem "set Pushover.Nachricht msg '$alias Fehler' '$EVENT';;\
set NTFY message Title=\"$alias Fehler\" $EVENT"\
} \
elsif ($read =~ m/errors/ && !$val) {\
fhem "set Pushover.Nachricht msg '$alias Fehler' '$read erledigt';; \
set NTFY message Title=\"$alias Fehler\" $read erledigt"\
}\
elsif ($read =~ m/temperature/ && $val && $val >= 40) {\
$read =~ s/_/ /;;\
$read =~ s/_/ /;;\
fhem "set Pushover.Nachricht msg '$alias Temperatur' '$read $val°C';;\
set NTFY message Title=\"$alias Temperatur\" $read $val°C"}}

Viele Grüße Gisbert
#43
Automatisierung / Aw: Leeres Reading in einem no...
Letzter Beitrag von DeeSPe - 20 Februar 2026, 12:55:36
Eine Idee habe ich aktuell nicht.
Aber man kann ja Zwischenausgaben mit einbauen, meist liegt es an anderen ankommenden Daten als mit denen man rechnet.
Baue doch mal vor dem ersten "if" folgendes ein:
Debug "reading=$read value=$val";Dann lass mal auslösen und schaue was im Log ankommt.
Kommt das Reading in der gewünschten Form heraus? Und auch der Wert?

Gruß
Dan
#44
Sonstige Systeme / Aw: Bresser Wetterstation 868M...
Letzter Beitrag von laserrichi - 20 Februar 2026, 12:28:40
Batteriespannung gemessen: 4,1V
Akku abgeklemmt  4,3V für die Ladung gemessen (leerlauf)
Wert für Batteriespannung ändert sich nicht.
#45
Automatisierung / Aw: Leeres Reading in einem no...
Letzter Beitrag von Gisbert - 20 Februar 2026, 12:04:03
Hallo Dan,

ich hab versucht deine Vorschläge alle umzusetzen.
defmod JK_BMS.notify notify JK_BMS:(errors|power_tube_temperature|temperature_sensor_1|temperature_sensor_2):.* {\
my $alias = AttrVal($NAME,'alias','');;\
my @evt = split(' ',$EVENT);;\
my $read = chop $evt[0];;\
my $val = $evt[1];;\
if ($read eq 'errors' && $val) {\
fhem "set Pushover.Nachricht msg '$alias Fehler' '$EVENT';; \
set NTFY message Title=\"$alias Fehler\" $EVENT"\
# true wenn Reading gleich errors und value vorhanden\
} \
elsif ($read eq 'errors' && !$val) {\
fhem "set Pushover.Nachricht msg '$alias Fehler' 'erledigt';; \
set NTFY message Title=\"$alias Fehler\" erledigt"\
# true wenn Reading gleich errors und value nicht vorhanden\
}\
elsif ($read =~ m/temperature/ && $val && $val >= 40) {\
$read =~ s/_/ /;;\
$read =~ s/_/ /;;\
fhem "set Pushover.Nachricht msg '$alias Temperatur' '$read $val°C';;\
set NTFY message Title=\"$alias Temperatur\" $read $val°C"}}

Das positive ist, das notify triggert und erzeugt keine Fehlereinträge in der log-Datei.
Negativ ist, dass der Ausführungsanteil nicht ausgeführt wird. Ich hab's dadurch getestet, dass ich die Temperaturabfrage auf <= 40 statt >= 40 versuchsweise umgestellt hab. Aber auch ein leeres "errors" Reading führt nicht zur Ausführung des notify, obwohl ein Event vorliegt und das notify triggert.

Ich hab keine Idee, woran das liegen könnte. Hast du noch eine Idee?

Viele Grüße Gisbert
#46
Sonstige Systeme / Aw: Bresser Wetterstation 868M...
Letzter Beitrag von laserrichi - 20 Februar 2026, 11:34:05
hatte mit der KI bissl untersucht... die ist zu doof :-)
Noch mal paar werte:
4AA0007063102182F01150701440157038FFFB32FB4CFA023A72F4F
 54AA0007063102182F01150701440157038FFFB32FB4CFA023A72F4F
 54AA0007063102182F011C0501450157038FEEDA4BDBCFA023A72F4F
 54AA0007063102182F011C0501450157038FEEDA4BDBCFA023A72F4F
 54AA0007063102182F012C060121015703900E018002CFA023A72F4F
 54AA0007063102182F012C060121015703900E018002CFA023A72F4F
 54AA00070631021931012D0901A00157039006282529CFA023A72F4F
 54AA00070631021930011D07018001570390154F2850CFA023A72F4F
 54AA0007063102192F013B090184015703901D767A77CFA023A72F4F
 54AA0007063102192F013B090184015703901D767A77CFA023A72F4F
 54AA0007063102172E012F0B01B001570390139DB69ECFA023A72F4F
 
 ohne Sonne Nachts:
 54AA0007063102004501541101410157010101B2E4B3CFA023A72F4F
 54AA0007063102004501541101410157010101B2E4B3CFA023A72F4F
 54AA00070631020145015410013E0157010101D908DACFA023A72F4F
 54AA000706310201460106020148015701010100DE01CFA023A72F4F
 54AA000706310200460112020112015701010127DA28CFA023A72F4F
#47
Multimedia / Aw: Squeezebox Modul - erste V...
Letzter Beitrag von dadoc - 20 Februar 2026, 11:32:30
Moin,
ich war schon lang auf der Suche nach einem physischen Controller für bestimmte Player, mit dem man Basis-Funktionen wie MUTE oder VOLUME schnell und ohne umständlich das Handy zu suchen, die App zu starten usw. nutzen kann.
Zum einen habe ich mir dafür kürzlich den coolen "Roon Knob" geholt, der viel mehr kann. Allerdings hat er eine extrem kurze Batterienutzungsdauer und massive Wifi-Reichweitenprobleme.
Nun habe ich mir eine einfachere und sehr preiswerte Alternative gebastelt, die in fhem nutzbar ist, wenn man bereits zigbee2mqtt integriert hat: Den Bilresa E2490 Remote von Ikea. Das ist eine kleine Fernbedienung mit Scrollrad und zwei Buttons 5,99€), die offiziell Matter, halb inoffiziell (Ikea schweigt dazu weitestgehend) aber auch Zigbee unterstützt.
Wenn man sie mittels zigbee2mqtt und meinem Template in fhem geholt hat, kann man mit einem notify
- die Lautstärke eines oder mehrere Player steuern,
- sie durch Druck auf das Scrollrad muten/unmuten
- durch Doppelklick auf das Scrollrad durch die Favoriten scrollen (der untere Button wird im Zigbee-Modus nicht genutzt).
Das funktioniert prima, Reichweite ist exzellent (wie bei fast allen Zigbee-Geräten) und die beiden AAA-Batterien halten recht lange.
Vielleicht kann es ja jemand brauchen. Namen müssen ggfalls angepasst werden. Das Beispiel geht davon aus, dass die Fernbedienung in fhem Bilresa heisst, das notify di_Bilresa_SB. Zudem muss
attr NOTIFY-NAME userattr players
attr NOTIFY-NAME players PLAYER-NAME1[,PLAYER-NAME2,PLAYER-NAME3...]
gesetzt werden.
Bilresa:action:.* {
  # Liste der Player aus Attribut
  my @targets = split(",", AttrVal("di_Bilresa_SB","players",""));
  return unless @targets;

  my $act      = ReadingsVal("Bilresa","action","");
  my $lvl255   = ReadingsNum("Bilresa","action_level",0);

  # 0–255 → 0–100
  my $lvl = int(($lvl255/255)*100);
  $lvl = 0   if $lvl < 0;
  $lvl = 100 if $lvl > 100;

  # Helper-Hash für intern genutzte Speicherwerte
  my $hash = $defs{"di_Bilresa_SB"};
  $hash->{helper}{lastUsed} //= $targets[0];
  my $last = $hash->{helper}{lastUsed};

###################################
# Double → Favoriten wechseln
###################################
if($act eq "on_double") {

  my $favstr = ReadingsVal($last,"ftuiFavoritesItems","");
  return unless $favstr ne "";

  my @fav = split(":", $favstr);
  return unless @fav;

  my $current = ReadingsVal($last,"favorites","");

  my $idx = 0;
  for(my $i=0; $i<@fav; $i++){
    if($fav[$i] eq $current){
      $idx = $i;
      last;
    }
  }

  $idx = ($idx+1) % scalar(@fav);

  fhem("set $last favorites $fav[$idx]");
  return;
}

  ###################################
  # Scroll → Lautstärke 0–100
  ###################################
  if($act eq "brightness_move_to_level") {
    my $current = ReadingsNum($last,"volume",-1);
    if($current != $lvl) {
      fhem("set $last volume $lvl");
    }
    return;
  }

  ###################################
  # Single → Mute Toggle
  ###################################
  if($act eq "on" || $act eq "off") {
    my $muted = ReadingsVal($last,"mute","off");
    if($muted eq "on") {
      fhem("set $last mute");     # Alternativ: fhem("set $last toggleMute") falls unterstützt
    } else {
      fhem("set $last mute");
    }
    return;
  }
}
Ist noch sehr frisch, möglicherweise buggy und sicher optimierbar. Als NARP (Nicht Annähernd Richtiger Programmierer) habe ich es mit freundlicher Unterstützung durch ChatGPT gebaut...
Ich werde mir in der Nähe von jedem Player so ein Teil bereitlegen - es kommt mit magnetischer Wandhalterung.

edit: wer statt mute/unmute lieber Pause/Play auf den Button legt (wie ich es gerade als praktischer empfinde), kann den Mute-Part ersetzen durch
###################################
# Single → Play/Pause Toggle
###################################
if($act eq "on" || $act eq "off") {

  my $state = ReadingsVal($last,"playStatus","");

  if($state eq "playing") {
    fhem("set $last pause");
  } else {
    fhem("set $last play");
  }

  return;
}

#48
MQTT / Aw: mqtt2.template: Contributi...
Letzter Beitrag von dadoc - 20 Februar 2026, 11:08:12
Moin,
mein Basis-Template für den Ikea Bilresa E2490 remote, eine 6-Euro-Fernbedienung mit Scrollrad, die Matter und Zigbee unterstützt.
Ich wollte testen, ob ich damit eine Art Media Controller für meine SB_Player (Lyrion Music Server formerly known as Logitech Media Server) basteln kann. Ich konnte
###########################################
# IKEA Bilresa E2490 Remote
# contributed by dadoc
###########################################
name:zigbee2mqtt_IKEA_Bilresa_E2490
filter:TYPE=MQTT2_DEVICE:FILTER=CID~zigbee.*
desc:IKEA Bilresa E2490 remote with dial (Matter + Zigbee)
order:L12e
par:BASE_TOPIC;base topic set in configuration.yaml of the zigbee2mqtt bridge;{ AttrVal("DEVICE","readingList","") =~ m,[\b]?([^/:]+)[/].*:, ? $1 : undef }
par:BASE_TOPIC;base topic set in configuration.yaml of the zigbee2mqtt bridge;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,[\b]?([^/:]+)[/].+, ? $1 : undef }
par:DEV_ID;name of the device in the zigbee2mqtt bridge;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,[^/]+[/]([^/:]+).*, ? $1 : undef }
par:ICON;ICON as set, defaults to control_home;{ AttrVal("DEVICE","icon","control_home") }
attr DEVICE icon ICON
attr DEVICE stateFormat Click: click Action: action
attr DEVICE devicetopic BASE_TOPIC/DEV_ID
attr DEVICE readingList $\DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }

# Mapped Actions
attr DEVICE jsonMap \
  on:on \
  off:off \
  on_double:on_double \
  brightness_move_to_level:brightness_move_to_level

# State of dial or action
attr DEVICE stateFormat { \
  ReadingsVal($name,"action","-") eq "brightness_move_to_level" \
    ? "scroll ".ReadingsVal($name,"action_level","-") \
    : ReadingsVal($name,"action","-") \
}
attr DEVICE model IKEA_Bilresa_E2490
setreading DEVICE attrTemplateVersion 20260218
#49
Automatisierung / Gelöst: Aw: ASC: readingsProxy...
Letzter Beitrag von piet_pit - 20 Februar 2026, 11:06:42
Hallo Zusammen,
die weiteren Infos sowie die Anbindung von ASC im u.a. Thread...


https://forum.fhem.de/index.php?topic=142739.0

Viele Grüße
Pit
#50
Multimedia / Aw: Modul für Denon (Marantz) ...
Letzter Beitrag von olwaldi - 20 Februar 2026, 11:02:53
Ihr habt's ja sicher "befürchtet": ich habe wieder eine größere Änderung in DENON_AVR umgesetzt, da man mich überzeugen konnte, statt NotifyFn das AttrFn zu benutzen. Dadurch wird der (unnötige) Software-Umweg über das fhem-notify-System vermieden.

U.U. funktioniert dadurch die Media-Steuerung bei älteren Receivern aus der Prä-Heos-Zeit (älter als Denon-AVR-X?300) nicht mehr. Mein Denon hat bereits Heos, so daß ich diese alte Funktionalität nicht testen kann. Aber wenn die nicht funktionieren sollte, war schon in der alten Version von DENON_AVR was ungeschickt gelöst - müßte dann aber jemand anderes als ich fixen. Wir anderen profitieren von der Änderung dadurch, daß alle damit zusammenhängenden Readings nicht mehr existieren - die wurden logischerweise seit Heos nie aktualisiert.

Und ich hatte bzgl. Denon-trigger zuviel "rausgeworfen". Ist jetzt wieder eingebaut.

Habe jetzt auch mal get remotecontrol ausprobiert, tut auch, aber es fehlen einige Icons in FHEMROOT/www/images/default/remotecontrol. Im ersten Beitrag von ramann sind die enthalten, hier als tgz angehängt. Zum Auspacken (ggf. mit sudo und anderen Rechten)
cd FHEMROOT/www/images/default
tar zxvf rc.tgz
chown fhem:dialout remotecontrol/*.png
Damit die Icons von fhem gesehen wird, mußte ich fhem neu starten.
Die remotecontrol erscheint ganz unten auf der Unsorted-Seite von fhem.


Bitte testen, Danke Michael