Neues Modul readingsGroup

Begonnen von Niko, 24 August 2013, 11:59:11

Vorheriges Thema - Nächstes Thema

Haecksler

Zitat von: justme1968 am 28 Mai 2014, 10:26:27
die größe der icons wird über die stylesheets bestimmt. du kannst versuchen die relevanten parameter über die unterschiedlichen style attribute zu ändern.

den füllstsand kann man ausser mit icons auch noch mit direktem html code darstellen. vielleicht ist das ja auch etwas für dich. schau mal hier für ein beispiel: http://forum.fhem.de/index.php/topic,11609.msg68591.html#msg68591

gruss
  andre

Vielen Dank für deine schnelle Rückantwort.
Mit dem styl attr in der ReadingsGroup geht da also nichts?

justme1968

dich. es müsste gehen. wie oben geschrieben: du kannst versuchen die relevanten parameter über die unterschiedlichen style attribute zu ändern.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

stromer-12

Nabend,

ist es möglich für nicht gefundene Readings Platzhalter zu erstellen, um die Tabellenstruktur zu erhalten?

Gruß
Gerd
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

justme1968

nein das geht nicht direkt aber z.b. mit

  <{ReadinsVal($DEVICE,"reading","default")}@reading>

warum haben deine devices nicht alle readings?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

stromer-12

#454
Ich lasse mir eine Tabelle mit den RSSI Werten und Zeit des Empfangs Anzeigen, und jedes Devices empfängt aber nicht alles.

Geht das Auch mit INTERNALS? (erledigt geht auch)
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

marvin78

Oder wenn man Temperatur und Humidity in einer Gruppe hat, aber auch Sensoren aufnehmen möchte, die bspw. nur die Temperatur können.

justme1968

#456
@stromer-12: das wäre dann InternalVal statt ReadingsVal.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

@matvin78:  ...:temperature,<{ReadinsVal($DEVICE,"humidity","")}@humidity>
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

maxritti

Mich wundert gerade etwas bei meiner Readingsgroup.
Und zwar habe ich da HM-SEC und HM-SEC-2 Kontakte drin, wo ich den Status und die Batterie überwache.
Nun wollte ich auch cyclicInfoMsg überwachen und habe die Definition und valueIcons abgeändert.
Komisch ist, dass bei 2 von den Kontakten nach wie vor der Begriff "on" und nicht das Icon dargestellt wird.
Bei den anderen aber schon.

Irgendwie finde ich den Fehler nicht.
Kann mir da jemand einen Tip geben?

Internals:
   CFGFN
   DEF        .*_TK_.*:battery,state,R-cyclicInfoMsg BM_.*:battery,<> EG_wz_xx_Voralarm.*:battery,<> KG_k2_xx_Alarm.*:battery,<> .*_BM_.*:battery,<>
   NAME       rg_Batterie_TK
   NR         69
   NTFY_ORDER 50-rg_Batterie_TK
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   CHANGETIME:
   Content:
     DG_hz_TK_Dachfenster 1
     DG_wz_TK_Dachfenster 1
     EG_fl_TK_Haustuer 1
     EG_ku_TK_Strasse 1
     EG_wc_BM_Motion 1
     EG_wz_TK_Carport 1
     EG_wz_TK_Terrasse 1
     EG_wz_xx_Voralarm 1
     KG_k2_xx_Alarm 1
     OG_bz_BM_Motion 1
     OG_kz_TK_SchlafenTim 1
     at_addLog_DG_hz_TK_Dachfenster 1
     at_addLog_DG_wz_TK_Dachfenster 1
     at_addLog_EG_fl_TK_Haustuer 1
     at_addLog_EG_ku_TK_Strasse 1
     at_addLog_EG_wz_TK_Carport 1
     at_addLog_EG_wz_TK_Terrasse 1
     at_addLog_OG_kz_TK_SchlafenTim 1
     no_TK_Strasse_closed 1
     no_TK_Terrasse_closed 1
     pl_TK_All  1
   DEVICES:
     ARRAY(0x9d1b334)
     ARRAY(0xa10482c)
     ARRAY(0x9d31de4)
     ARRAY(0x9d31ea4)
     ARRAY(0x9d94e44)
     ARRAY(0x9d94f24)
     ARRAY(0xa10483c)
     ARRAY(0xa03f78c)
     ARRAY(0xa0c0934)
     ARRAY(0x9fff81c)
     ARRAY(0x9fdc49c)
     ARRAY(0xa125f14)
     ARRAY(0xa072e2c)
     ARRAY(0xa05bbdc)
     ARRAY(0xa02f90c)
     ARRAY(0xa0c00f4)
     ARRAY(0xa05ba1c)
     ARRAY(0x9e6598c)
     ARRAY(0x9d2d9dc)
     ARRAY(0xa045034)
     ARRAY(0xa05bbac)
   Helper:
     Dblog:
       Dg_hz_tk_dachfenster.battery:
         Mydblog:
           TIME       1402054724.58585
           VALUE      <img class='icon Batterie_full' src="/fhem/images/default/Batterie.full.png" alt="ok" title="ok">
       Dg_hz_tk_dachfenster.state:
         Mydblog:
           TIME       1402067729.09723
           VALUE      <svg class="icon fts_window_1w green" version="1.0" xmlns="http://www.w3.org/2000/svg"  width="468pt" height="492pt" viewBox="0 0 468 492"  preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.8, written by Peter Selinger 2001-2007 </metadata> <g transform="translate(0,492) scale(0.192593,-0.192593)" fill="green" stroke="none"> <path d="M73 2520 c-68 -41 -64 57 -61 -1241 3 -1145 3 -1175 22 -1200 11 -14 31 -34 45 -45 25 -19 52 -19 1138 -19 1106 0 1112 0 1140 21 15 11 38 40 51 64 l22 44 0 1143 c0 1259 3 1193 -62 1233 -33 20 -47 20 -1148 20 -1088 0 -1116 -1 -1147 -20z m2217 -765 l0 -415 -34 0 c-45 0 -86 -33 -86 -70 0 -41 34 -70 82 -70 l38 0 -2 -527 -3 -528 -1059 -3 c-774 -1 -1062 1 -1072 9 -12 10 -14 182 -14 1015 l0 1004 1075 0 1075 0 0 -415z"/> </g> </svg>
       Dg_wz_tk_dachfenster.r-cyclicinfomsg:
         Mydblog:
           TIME       1402054762.81685
           VALUE      on
       Dg_wz_tk_dachfenster.battery:
         Mydblog:
           TIME       1402054751.15109
           VALUE      <img class='icon Batterie_full' src="/fhem/images/default/Batterie.full.png" alt="ok" title="ok">
       Dg_wz_tk_dachfenster.state:
         Mydblog:
           TIME       1402067729.11378
           VALUE      <svg class="icon fts_window_1w green" version="1.0" xmlns="http://www.w3.org/2000/svg"  width="468pt" height="492pt" viewBox="0 0 468 492"  preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.8, written by Peter Selinger 2001-2007 </metadata> <g transform="translate(0,492) scale(0.192593,-0.192593)" fill="green" stroke="none"> <path d="M73 2520 c-68 -41 -64 57 -61 -1241 3 -1145 3 -1175 22 -1200 11 -14 31 -34 45 -45 25 -19 52 -19 1138 -19 1106 0 1112 0 1140 21 15 11 38 40 51 64 l22 44 0 1143 c0 1259 3 1193 -62 1233 -33 20 -47 20 -1148 20 -1088 0 -1116 -1 -1147 -20z m2217 -765 l0 -415 -34 0 c-45 0 -86 -33 -86 -70 0 -41 34 -70 82 -70 l38 0 -2 -527 -3 -528 -1059 -3 c-774 -1 -1062 1 -1072 9 -12 10 -14 182 -14 1015 l0 1004 1075 0 1075 0 0 -415z"/> </g> </svg>
       Eg_fl_tk_haustuer.battery:
         Mydblog:
           TIME       1402067225.1402
           VALUE      <img class='icon Batterie_full' src="/fhem/images/default/Batterie.full.png" alt="ok" title="ok">
       Eg_fl_tk_haustuer.state:
         Mydblog:
           TIME       1402067728.92285
           VALUE      <svg class="icon fts_window_1w green" version="1.0" xmlns="http://www.w3.org/2000/svg"  width="468pt" height="492pt" viewBox="0 0 468 492"  preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.8, written by Peter Selinger 2001-2007 </metadata> <g transform="translate(0,492) scale(0.192593,-0.192593)" fill="green" stroke="none"> <path d="M73 2520 c-68 -41 -64 57 -61 -1241 3 -1145 3 -1175 22 -1200 11 -14 31 -34 45 -45 25 -19 52 -19 1138 -19 1106 0 1112 0 1140 21 15 11 38 40 51 64 l22 44 0 1143 c0 1259 3 1193 -62 1233 -33 20 -47 20 -1148 20 -1088 0 -1116 -1 -1147 -20z m2217 -765 l0 -415 -34 0 c-45 0 -86 -33 -86 -70 0 -41 34 -70 82 -70 l38 0 -2 -527 -3 -528 -1059 -3 c-774 -1 -1062 1 -1072 9 -12 10 -14 182 -14 1015 l0 1004 1075 0 1075 0 0 -415z"/> </g> </svg>
       Eg_ku_tk_strasse.battery:
         Mydblog:
           TIME       1402035913.72139
           VALUE      <img class='icon Batterie_full' src="/fhem/images/default/Batterie.full.png" alt="ok" title="ok">
       Eg_ku_tk_strasse.state:
         Mydblog:
           TIME       1402067728.91489
           VALUE      <svg class="icon fts_window_1w green" version="1.0" xmlns="http://www.w3.org/2000/svg"  width="468pt" height="492pt" viewBox="0 0 468 492"  preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.8, written by Peter Selinger 2001-2007 </metadata> <g transform="translate(0,492) scale(0.192593,-0.192593)" fill="green" stroke="none"> <path d="M73 2520 c-68 -41 -64 57 -61 -1241 3 -1145 3 -1175 22 -1200 11 -14 31 -34 45 -45 25 -19 52 -19 1138 -19 1106 0 1112 0 1140 21 15 11 38 40 51 64 l22 44 0 1143 c0 1259 3 1193 -62 1233 -33 20 -47 20 -1148 20 -1088 0 -1116 -1 -1147 -20z m2217 -765 l0 -415 -34 0 c-45 0 -86 -33 -86 -70 0 -41 34 -70 82 -70 l38 0 -2 -527 -3 -528 -1059 -3 c-774 -1 -1062 1 -1072 9 -12 10 -14 182 -14 1015 l0 1004 1075 0 1075 0 0 -415z"/> </g> </svg>
       Eg_wc_bm_motion.battery:
         Mydblog:
           TIME       1402084295.48211
           VALUE      <img class='icon Batterie_full' src="/fhem/images/default/Batterie.full.png" alt="ok" title="ok">
       Eg_wz_tk_carport.battery:
         Mydblog:
           TIME       1402046946.14508
           VALUE      <img class='icon Batterie_full' src="/fhem/images/default/Batterie.full.png" alt="ok" title="ok">
       Eg_wz_tk_carport.state:
         Mydblog:
           TIME       1402067728.90599
           VALUE      <svg class="icon fts_window_1w green" version="1.0" xmlns="http://www.w3.org/2000/svg"  width="468pt" height="492pt" viewBox="0 0 468 492"  preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.8, written by Peter Selinger 2001-2007 </metadata> <g transform="translate(0,492) scale(0.192593,-0.192593)" fill="green" stroke="none"> <path d="M73 2520 c-68 -41 -64 57 -61 -1241 3 -1145 3 -1175 22 -1200 11 -14 31 -34 45 -45 25 -19 52 -19 1138 -19 1106 0 1112 0 1140 21 15 11 38 40 51 64 l22 44 0 1143 c0 1259 3 1193 -62 1233 -33 20 -47 20 -1148 20 -1088 0 -1116 -1 -1147 -20z m2217 -765 l0 -415 -34 0 c-45 0 -86 -33 -86 -70 0 -41 34 -70 82 -70 l38 0 -2 -527 -3 -528 -1059 -3 c-774 -1 -1062 1 -1072 9 -12 10 -14 182 -14 1015 l0 1004 1075 0 1075 0 0 -415z"/> </g> </svg>
       Eg_wz_tk_terrasse.battery:
         Mydblog:
           TIME       1402062075.20193
           VALUE      <img class='icon Batterie_full' src="/fhem/images/default/Batterie.full.png" alt="ok" title="ok">
       Eg_wz_tk_terrasse.state:
         Mydblog:
           TIME       1402067728.89772
           VALUE      <svg class="icon fts_window_1w green" version="1.0" xmlns="http://www.w3.org/2000/svg"  width="468pt" height="492pt" viewBox="0 0 468 492"  preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.8, written by Peter Selinger 2001-2007 </metadata> <g transform="translate(0,492) scale(0.192593,-0.192593)" fill="green" stroke="none"> <path d="M73 2520 c-68 -41 -64 57 -61 -1241 3 -1145 3 -1175 22 -1200 11 -14 31 -34 45 -45 25 -19 52 -19 1138 -19 1106 0 1112 0 1140 21 15 11 38 40 51 64 l22 44 0 1143 c0 1259 3 1193 -62 1233 -33 20 -47 20 -1148 20 -1088 0 -1116 -1 -1147 -20z m2217 -765 l0 -415 -34 0 c-45 0 -86 -33 -86 -70 0 -41 34 -70 82 -70 l38 0 -2 -527 -3 -528 -1059 -3 c-774 -1 -1062 1 -1072 9 -12 10 -14 182 -14 1015 l0 1004 1075 0 1075 0 0 -415z"/> </g> </svg>
       Eg_wz_xx_voralarm.battery:
         Mydblog:
           TIME       1402063136.22731
           VALUE      <img class='icon Batterie_full' src="/fhem/images/default/Batterie.full.png" alt="ok" title="ok">
       Kg_k2_xx_alarm.battery:
         Mydblog:
           TIME       1402063134.44329
           VALUE      <img class='icon Batterie_empty' src="/fhem/images/default/Batterie.empty.png" alt="low" title="low">
       Og_bz_bm_motion.battery:
         Mydblog:
           TIME       1402084423.73882
           VALUE      <img class='icon Batterie_full' src="/fhem/images/default/Batterie.full.png" alt="ok" title="ok">
       Og_kz_tk_schlafentim.state:
         Mydblog:
           TIME       1402067728.93172
           VALUE      <svg class="icon fts_window_1w green" version="1.0" xmlns="http://www.w3.org/2000/svg"  width="468pt" height="492pt" viewBox="0 0 468 492"  preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.8, written by Peter Selinger 2001-2007 </metadata> <g transform="translate(0,492) scale(0.192593,-0.192593)" fill="green" stroke="none"> <path d="M73 2520 c-68 -41 -64 57 -61 -1241 3 -1145 3 -1175 22 -1200 11 -14 31 -34 45 -45 25 -19 52 -19 1138 -19 1106 0 1112 0 1140 21 15 11 38 40 51 64 l22 44 0 1143 c0 1259 3 1193 -62 1233 -33 20 -47 20 -1148 20 -1088 0 -1116 -1 -1147 -20z m2217 -765 l0 -415 -34 0 c-45 0 -86 -33 -86 -70 0 -41 34 -70 82 -70 l38 0 -2 -527 -3 -528 -1059 -3 c-774 -1 -1062 1 -1072 9 -12 10 -14 182 -14 1015 l0 1004 1075 0 1075 0 0 -415z"/> </g> </svg>
   Fhem:
     last_update 1402124352.08163
Attributes:
   alias      Batterien/TF-Kontakte
   group      Status
   icon       Batterie.empty
   mapping    %ALIAS
   valueIcon  {'battery.ok' => 'Batterie.full', 'battery.low' => 'Batterie.empty', 'state.closed' => 'fts_window_1w@green', 'state.open' => 'fts_window_1w_open@red', 'R-cyclicInfoMsg.on' => 'im_checkmark@green', 'R-cyclicInfoMsg.off' => 'im_close'} 

tpm88

#459
 Hallo Andre,

mir ist es nicht gelungen, ein Reading, welches die Werte 0 und 1 annehmen kann, in einer readingsGroup mit den Attributen commands und valueIcon vernünftig zu verwenden.

Kurz zum Hintergrund - Dietmar hat in die Module WeekdayTimer und Heating_Control auf meinen Wunsch ein reading "disabled" eingeführt, welches beim Timer das attribut "diable" widerspiegelt. D.h. Attribut disable=1 bedeutet Reading disabled=1. Siehe auch: http://forum.fhem.de/index.php/topic,10011.msg175605.html#msg175605

Die numerischen Werte 0 und 1 für "disabled" machen wie folgt Schwierigkeiten. Edit: lässt sich nicht mehr reproduzieren.

Es funktioniert nicht: Edit: Funktioniert sehr wohl.
commands { 'disabled.0' => 'set $DEVICE disable', 'disabled.1' => 'set $DEVICE enable' }
valueIcon { 'disabled.0' => 'Restart', 'disabled.1' => 'Shutdown' }


Liefert das Reading "disabled" jedoch stattdessen z.B. die Strings yes und no, funktionieren die readingsGroup Attribute einwandfrei:
commands { 'disabled.no' => 'set $DEVICE disable', 'disabled.yes' => 'set $DEVICE enable' }
valueIcon { 'disabled.no' => 'Restart', 'disabled.yes' => 'Shutdown' }


Hier für Details noch die komplette Definition der readingsGroup:
list rg_Timer_Wasser

Internals:
   DEF        timer_Wasser_..:disabled,+DEF,<{rg_timer_Wasser_show_conditional($DEVICE)}@disabled>
   NAME       rg_timer_Wasser
   NR         212
   NTFY_ORDER 50-rg_timer_Wasser
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   Content:
     timer_Wasser_01 1
     timer_Wasser_02 1
   DEVICES:
     ARRAY(0x16eebd8)
     ARRAY(0x165c0f0)
   Readings:
   Fhem:
     last_update 1402397337.40354
   Helper:
Attributes:
   alias      Scheduling
   commands   { 'disabled.no' => 'set $DEVICE disable', 'disabled.yes' => 'set $DEVICE enable' }
   group      Bewässerung
   notime     1
   room       Terrasse
   sortDevices 1
   style      style="border:0px;background:none;box-shadow:none"
   valueFormat { if ( $READING =~ m/.*DEF/ ) {      my @text = split(" ", $VALUE); shift @text; return join(" ", @text) }}
   valueIcon  { 'disabled.no' => 'Restart', 'disabled.yes' => 'Shutdown' }


Funktionieren die Attribute commands und valueIcon mit der Syntax '<reading>.<value>' => 'command' bzw. 'icon' generell nur, wenn value ein String ist? Oder machen nur die numerischen Werte 0 und 1 (in Perl mit Sonderbedeutung) hier Probleme?

Edit: Wie Andre zwei Beiträge weiter unten ausführt, darf es da keine Probleme geben, da auch numerische Readings wie Strings behandelt werden.

Danke & Gruß
Tobias

PS: Ich gestehe schon vorweg, dass ich nicht alle Seiten dieses Threads vorher durchgegangen bin. Möglicherweise wurde die Frage also schon einmal beantwortet.
Test FHEM Server on RPi, CUL_HM
Prod FHEM Server on Odroid HC1, HM-USB, JeeLink
Devices: diverse HM, IT1500, 1wire, LaCrosse, MQTT

Elektrolurch

Hallo,

möglicherweise liegt das gar nicht an der readingsGroup, sondern an 01-fhemweb. Da gibt es nämlich bei der Darstellung von commands mit dem Wert 0 ein Problem.
Ich habe das Problem bei Menüs:
commands {'meinrd' => 'meinrd:aus,0,1,2,3'...

Hat meinrd den wert aus,1,2,3 wird er koorekt von fhemweb vorselektiert, bei dem Wert 0 erscheint statt dessen der oberste Menüeintrag "aus".

Denke, dass die 0 für das widgetes von webCmd ein Problem darstellt.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

ich habe es eben mit einem dummy und einem WeekdayTimer probiert und dein problem nicht nachvollziehen können.

da für die readignsGroup jedes reading ein string ist und vor allem an der stelle wo das mapping gemacht wird nur mit srings gearbeitet wird  füllt mir auch kein grund ein warum es mit yes/no gehe aber 0/1 nicht.

was genau macht rg_timer_Wasser_show_conditional?

was genau meinst du mit 'vernünftig zu verwenden.' ?

kannst du das problem mit einem dumm und 'setreading <dummy> disabled 0' bzw 'setreading <dummy> disabled 1' reproduzieren?

siehst du auf der javascript konsole etwas?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

tpm88

Hallo Andre, Elektrolurch,

peinlich - aber ich kann das Problem auch nicht mehr nachvollziehen. Habe mit zwei neuen Dummy WD-Timern eine zusätzliche RG angelegt und es hat auf Anhieb mit 0/1 auch funktioniert.

Nach dem Rückbau der ursprünglichen RG für die Bewässerungstimer funktioniert diese jetzt auch. Ich kann mir eigentlich nur erklären, dass ich beim Testen heute früher am Tag irgendwo einen kleinen Typo (z.B. disable statt disabled o.ä.) drin hatte.

Sorry und danke für eure Bereitschaft, das vermeintliche Problem nachzuvollziehen.

Gruss
Tobias
Test FHEM Server on RPi, CUL_HM
Prod FHEM Server on Odroid HC1, HM-USB, JeeLink
Devices: diverse HM, IT1500, 1wire, LaCrosse, MQTT

Phil__

Hallo,

ich habe versucht mit einer readingsGroup Temperatur, Luftfeuchte; Soll-Temp und Batterie anzuzeigen. Das ganze wird gemessen durch ein HM-CC-TC.
Mir gelingt es aber nicht mit valueFormat °C und % auszugeben.

Was mache ich falsch?
Hier ein Screeshot und mein Code:

define Heizungswerte readingsGroup <%sani_heating>,<Ist>,<Hum>,<Soll>,<Bat> WZ_WTH:measured-temp,humidity,desired-temp,battery
attr Heizungswerte nameStyle style="color:black;;font-weight:bold"
attr Heizungswerte valueIcon {'battery.ok' => 'batterie@lightgreen', 'battery.low' => 'batterie@red'}
attr Heizungswerte valueStyle {($VALUE eq "00")?'style="visibility:hidden"':}
attr Heizungswerte room Technik
attr Heizungswerte valueFormat {measured-temp => '%.1f °C', humidity => '%.1f %%', desired-temp => '%.1f °C' }


Viele Grüße
Server: Intel DH77EB + Core i3-2120 mit Ubuntu Server 14.04
Backup: Beaglebone Black
Homematic: HM-LAN-Adapter, HM-CC-RT-DN, HM-CC-TC, HM-LC-SW1-PL2, HM-SEC-RHS, HM-SEC-SC, HM-TC-IT-WM-W-EU, HM-WDS10-TH-O
Weitere: Denon-AVR, PhilipsTV, PhilipsHue, Raspi+XBMC
Nexus 7 (WebViewControl + FTUI)

justme1968

measured-temp und desired-temp müssen jeweils in anführungszeichen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968