attr global proxy 192.169.0.100:8118
attr global proxyExclude 127.0.0.1|192.168.*|192.169.*
attr global blockingCallMax 128
tc qdisc del dev eth0 root 2>/dev/null
tc qdisc add dev eth0 root handle 1: htb default 99
tc class add dev eth0 parent 1: classid 1:1 htb rate 20bps ceil 20bps burst 20 cburst 20
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dst 192.169.0.100/32 \
match ip dport 8118 0xffff \
flowid 1:1
Zitat von: Damian am 15 März 2026, 13:05:50Zitat von: PatrickR am 14 März 2026, 22:15:02Ich nehme in solchen Fällen immer ein leeres DOIF (Def nur ##) und event_readings.
Patrick
Damit kann man nicht nur eigene Readings mit Berechnung definieren, sondern auch Aggregationsfunktionen nutzen, die z. B. andere Readings aufsummieren oder sonstige Berechnungen anstellen. Diese kann man auch im gleichen Device visualisieren oder in anderen Devices nutzen.
defmod D_R_Photovoltaik DOIF ##
attr D_R_Photovoltaik DbLogInclude totalpvpower,totalacenergy,totaldcenergy,totalpvenergy,totalbatenergy,availablepower,surpluspower,multiplusmaxpower
attr D_R_Photovoltaik alias Photovoltaik
attr D_R_Photovoltaik event-on-change-reading totalpvenergy:0.25,.*
attr D_R_Photovoltaik event_Readings totalpvpower:(([XX.XX.Cerbo:system_dcpvpower]>=0 ? [XX.XX.Cerbo:system_dcpvpower] : 0)+[XX.XX.FroniusModbus:acpower]),\
totaldcenergy:([XX.XX.MPPT1:energy_system]+[XX.XX.MPPT2:energy_system]+[XX.XX.MPPTRS:energy_system]),\
totalacenergy:([XX.XX.FroniusModbus:energytotal]/1000),\
totalpvenergy:([$SELF:totaldcenergy]+[$SELF:totalacenergy:d1]),\
totalbatenergy:([XX.XX.Multiplus:energy_invertertoacin1_fhem:d1]+[XX.XX.Multiplus:energy_invertertoacout_fhem:d1]),\
gridpower:[UG.KE.Energiezaehler:power_consumption_total:d0]+[AU.GR.Energiezaehler:power_consumption_total:d0]-[AU.GR.Energiezaehler:power_production_total:d0],\
multiplusmaxpower:(\
[AU.GR.Temperatursensoren:temp_garage:d] >= 40 ? 3000 :\
[AU.GR.Temperatursensoren:temp_garage:d] >= 25 ? 3700 :\
4000\
),\
surpluspower:(\
[XX.XX.Cerbo:ess_state] == 10\
? ::minNum(\
[$SELF:availablepower],\
([XX.XX.Pylontech:power:d0] - ([$SELF:gridpower:d0]-[XX.XX.Cerbo:ess_gridsetpoint])\
))\
: 0\
),\
availablepower:(\
[XX.XX.Cerbo:ess_state] == 10\
? ([$SELF:multiplusmaxpower]+[XX.XX.Multiplus:activein_power:d0]) - ([$SELF:gridpower:d0]-[XX.XX.Cerbo:ess_gridsetpoint])\
: 0\
),\
radtoday:(\
(\
[DWD_PV:fc0_0_Rad1h]+[DWD_PV:fc0_0_Rad1h]+[DWD_PV:fc0_2_Rad1h]+[DWD_PV:fc0_3_Rad1h]+[DWD_PV:fc0_4_Rad1h]+\
[DWD_PV:fc0_5_Rad1h]+[DWD_PV:fc0_6_Rad1h]+[DWD_PV:fc0_7_Rad1h]+[DWD_PV:fc0_8_Rad1h]+[DWD_PV:fc0_9_Rad1h]+\
[DWD_PV:fc0_10_Rad1h]+[DWD_PV:fc0_11_Rad1h]+[DWD_PV:fc0_12_Rad1h]+[DWD_PV:fc0_13_Rad1h]+[DWD_PV:fc0_14_Rad1h]+\
[DWD_PV:fc0_15_Rad1h]+[DWD_PV:fc0_16_Rad1h]+[DWD_PV:fc0_17_Rad1h]+[DWD_PV:fc0_18_Rad1h]+[DWD_PV:fc0_19_Rad1h]+\
[DWD_PV:fc0_20_Rad1h]+[DWD_PV:fc0_21_Rad1h]+[DWD_PV:fc0_22_Rad1h]+[DWD_PV:fc0_23_Rad1h]\
)/1000\
),\
radtomorrow:(\
(\
[DWD_PV:fc1_0_Rad1h]+[DWD_PV:fc1_0_Rad1h]+[DWD_PV:fc1_2_Rad1h]+[DWD_PV:fc1_3_Rad1h]+[DWD_PV:fc1_4_Rad1h]+\
[DWD_PV:fc1_5_Rad1h]+[DWD_PV:fc1_6_Rad1h]+[DWD_PV:fc1_7_Rad1h]+[DWD_PV:fc1_8_Rad1h]+[DWD_PV:fc1_9_Rad1h]+\
[DWD_PV:fc1_10_Rad1h]+[DWD_PV:fc1_11_Rad1h]+[DWD_PV:fc1_12_Rad1h]+[DWD_PV:fc1_13_Rad1h]+[DWD_PV:fc1_14_Rad1h]+\
[DWD_PV:fc1_15_Rad1h]+[DWD_PV:fc1_16_Rad1h]+[DWD_PV:fc1_17_Rad1h]+[DWD_PV:fc1_18_Rad1h]+[DWD_PV:fc1_19_Rad1h]+\
[DWD_PV:fc1_20_Rad1h]+[DWD_PV:fc1_21_Rad1h]+[DWD_PV:fc1_22_Rad1h]+[DWD_PV:fc1_23_Rad1h]\
)/1000\
),\
forecasttoday:(sprintf('%.1f', [$SELF:radtoday]*2.9)),\
forecasttomorrow:(sprintf('%.1f', [$SELF:radtomorrow]*2.9)),\
forecasttodaymin:(sprintf('%.1f', [$SELF:radtoday]*1.3)),\
forecasttomorrowmin:(sprintf('%.1f', [$SELF:radtomorrow]*1.3)),\
forecasttodaymax:(sprintf('%.1f', [$SELF:radtoday]*4.2)),\
forecasttomorrowmax:(sprintf('%.1f', [$SELF:radtomorrow]*4.2))\
attr D_R_Photovoltaik group Verbrauch
attr D_R_Photovoltaik icon measure_photovoltaic_inst
attr D_R_Photovoltaik room Energiemanagement,Start
attr D_R_Photovoltaik sortby 10
attr D_R_Photovoltaik stateFormat {sprintf(\
'Gesamtleistung: %.0fW, Verfügbare Leistung: %.0fW, Überschussleistung: %.0fW, Gesamtenergie: %.0fkWh (AC: %.0fkWh, DC: %.0fkWh), Prognose heute/morgen: %.0f kWh/%.0f kWh',\
ReadingsVal($name, 'totalpvpower', ''),\
ReadingsVal($name, 'availablepower', ''),\
ReadingsVal($name, 'surpluspower', ''),\
ReadingsVal($name, 'totalpvenergy', ''),\
ReadingsVal($name, 'totalacenergy', ''),\
ReadingsVal($name, 'totaldcenergy', ''),\
ReadingsVal($name, 'forecasttoday', ''),\
ReadingsVal($name, 'forecasttomorrow', '')\
\
)}
Das dient nicht nur der Anzeige aller relevanten Daten an einer Stelle sondern aggregiert sie auch stufenweise, um z. B. die Prognose zu berechnen. Diese und auch die Berechnung des aktuellen Überschusses benutze ich dann in anderen Devices, um z. B. die Wallboxeinspeisung zu steuern.Zitat von: PatrickR am 14 März 2026, 22:15:02Ich nehme in solchen Fällen immer ein leeres DOIF (Def nur ##) und event_readings.
Patrick

Zitat von: rudolfkoenig am 15 März 2026, 11:03:52Die Doppelung der Texte lag vielleicht an stt.interimResults=true, das habe ich jetzt entfernt.Zumindest unter fully funktioniert das damit erwartungsgemäß
.Zitat von: rudolfkoenig am 15 März 2026, 11:03:52Das Firefox Problem habe ich jetzt in Prinzip (s.u.) gefixt.Jetzt erscheint zumindest sowohl auf dem Androiden wie unter Linux das Dialogfeld. Das unter Android hinzubiegen war was größeres, auf about:config kommt man da nur über einen Umweg, ich hab's mit dem Weg aus https://discuss.techlore.tech/t/i-found-a-way-to-enable-about-config-on-regular-firefox-for-android/14584 gemacht, chrome://geckoview/content/config.xhtml aufgerufen und dort den entsprechenden Punkt direkt aktiviert.
Zum Aktivieren muss in about:config media.webspeech.recognition.enable auf true gesetzt werden.
Zitat von: rudolfkoenig am 15 März 2026, 11:03:52- eine eindeutige Zuordnung des Clients ist kein Problem, will aber (mit dem Rest auch) abwarten, welchen Weg wir gehen wollenDanke, ich hatte mir schon gedacht, dass der Punkt mit dem Rückweg dann einer der Folgeschritte sein soll.
Zitat von: rudolfkoenig am 15 März 2026, 11:03:52- Sprachausgabe ist laut Doku moeglich, habs aber nicht getestetfully kann das, von daher _glaube_ ich, dass es von der technischen Seite her kein Hexenwerk sein wird, "irgendeinen" Browser dazu zu bewegen, entweder eine Audio-File abzuspielen oder das am Endgerät verfügbare TTS-System anzusteuern (allgemeine Berechtigung dazu vorausgesetzt). Die Frage wäre, wie man das aus FHEM heraus testen würde?
Zitat von: rudolfkoenig am 15 März 2026, 11:03:52- Dialog veraltet: ich habe gerne ein Feedback, solange die Erkennung nicht perfekt ist. Was schwebt Dir vor?Das kann ich grade nicht so recht einordnen:
...