Zitat von: Per am 17 April 2026, 22:02:15Andere Frage: warum wird der Speicher bei 89% schon nicht mehr geladen?
Internals:
CFGFN
CID Kinderzimmer
DEF Kinderzimmer
FUUID 69e28685-f33f-e93f-3a0c-27570ae43d8deed5
IODev myBroker
LASTInputDev myBroker
MSGCNT 70
NAME Kinderzimmer
NR 425
STATE lock:LOCK\modus:off
Measured: 21°C / Desired: 17.5°C<br>Battery: ok
TYPE MQTT2_DEVICE
eventCount 98
myBroker_CONN myBroker_192.168.187.76_54192
myBroker_MSGCNT 70
myBroker_TIME 2026-04-17 21:53:34
periodicCounter 42
JSONMAP:
Battery battery_low
current_heating_setpoint desired-temp
local_temperature temperature
system_mode mode
OLDREADINGS:
READINGS:
2026-04-17 21:23:46 IODev myBroker
2026-04-17 21:14:13 associatedWith zigbee2mqtt
2026-04-17 21:25:00 attrTemplateVersion 20251221
2026-04-17 21:53:34 batteryState ok
2026-04-17 21:53:34 battery_low false
2026-04-17 21:53:34 child_lock LOCK
2026-04-17 21:53:34 desired-temp 17.5
2026-04-17 21:53:34 frost_protection ON
2026-04-17 21:53:34 linkquality 149
2026-04-17 21:53:34 local_temperature_calibration 4
2026-04-17 21:53:34 mode off
2026-04-17 21:53:34 pi_heating_demand 20
2026-04-17 21:53:34 running_state idle
2026-04-17 21:53:34 scale_protection ON
2026-04-17 21:53:34 schedule_friday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_monday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_saturday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_sunday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_thursday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_tuesday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_wednesday 06:00/17.0 08:00/17.0 12:00/17.0 14:00/16.0 20:00/16.0 22:00/16.0
2026-04-17 21:53:34 temperature 21
Attributes:
comment For use with weekprofile, additional configuration and code would be needed, 6 Transitions required, format example: "HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C"
devStateIcon lock.LOCK:secur_locked:child_lock+UNLOCK lock.UNLOCK:secur_open:child_lock+LOCK modus.auto:sani_heating_automatic modus.heat:sani_heating_manual modus.off:sani_heating_level_0
devicetopic z2m/Kinderzimmer
getList desired-temp:noArg desired-temp $DEVICETOPIC/get {"current_heating_setpoint": ""}
temperature:noArg temperature $DEVICETOPIC/get {"local_temperature": ""}
attr Kinderzimmer periodicCmd temperature:55
icon temp_control
jsonMap current_heating_setpoint:desired-temp local_temperature:temperature Battery:battery_low system_mode:mode
model zigbee2mqtt_thermostat_AVATTO_TRV06_TS0601
periodicCmd temperature:55
readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
room MQTT2_DEVICE
setList desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }
child_lock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}
schedule_monday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_monday":"$payload"})}
schedule_tuesday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_tuesday":"$payload"})}
schedule_wednesday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_wednesday":"$payload"})}
schedule_thursday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_thursday":"$payload"})}
schedule_friday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_friday":"$payload"})}
schedule_saturday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_saturday":"$payload"})}
schedule_sunday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_sunday":"$payload"})}
mode:heat,auto,off $DEVICETOPIC/set {"system_mode": "$EVTPART1"}
frost_protection:ON,OFF $DEVICETOPIC/set {"frost_protection": "$EVTPART1"}
scale_protection:ON,OFF $DEVICETOPIC/set {"scale_protection": "$EVTPART1"}
local_temperature_calibration:slider,-9.0,1,9.0,1 $DEVICETOPIC/set {"local_temperature_calibration": $EVTPART1 }
x_send_set_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set $payload)}
setStateList on off
stateFormat lock:child_lock\modus:mode
Measured: temperature°C / Desired: desired-temp°C<br>Battery: batteryState
userReadings batteryState:battery_low.* {ReadingsVal($name,'battery_low','false') eq 'false'?'ok':'low'}
userattr weekprofile
webCmd desired-temp
weekprofile zigbee_Kinderzimmer
Zitat von: CoolTux am 17 April 2026, 08:55:08Leider finde ich keinen weiteren Hinweis auf das Verzeichnis .dockerenv ausser im Modulcode von DockerImageInfo.
Woher sollte das Verzeichnis denn kommen?
Zitat von: passibe am 17 April 2026, 13:13:26Nein, es ist korrekt referenziert, nur die Textausgabe ist in falscher Schreibweise.Zitat von: ch.eick am 17 April 2026, 11:15:37Soap::LiteVielleicht ist das im Modul einfach auch falsch geschrieben? Also Soap statt SOAP?
Zitat von: Prof. Dr. Peter Henning am 17 April 2026, 19:25:05Dass BMW diese Daten abgreift, ist klar - aber die Weitergabe ist in der Form nicht statthaft.Was? Wenn schon ist das Abgreifen durch BMW das Datenschutzproblem. Die Weitergabe an die betroffene Person ist doch dann sogar eher noch begrüßenswert (zumal diese Daten sowieso vom Anspruch aus Art. 15 Abs. 3 DSGVO umfasst sein dürften).
defmod di_energy_card DOIF {}
attr di_energy_card uiTable {\
$ATTRIBUTESFIRST = 1;;\
\
## Energy_card kann über das Attribut zoom skaliert werden\
\
$TABLE = 'zoom: 1;; width: 473px;; height: 374px;; text-align: left;; vertical-align: top;; border-radius:0%;; position:relative;; background: linear-gradient(to bottom, rgb(40,40,40), rgb(60, 60, 60));; ';;\
\
package ui_Table;;\
\
sub move {\
my ($left, $top, $content) = @_;;\
my $value;;\
if (ref($content) eq "ARRAY") {\
$value = $content->[0];;\
} else {\
$value =$content;;\
}\
\
my $out = '<div style="position:absolute;; left:'\
. $left . 'px;; top:'\
. $top . 'px;;">'\
. $value .\
'</div>';;\
\
if (ref($content) eq "ARRAY") {\
return ([$out,$content->[1]]);;\
} else {\
return ($out);;\
}\
}## end of move\
\
sub flow {\
\
my ($d,$item,$power,$max,$leftright)=@_;;\
my $dur;;\
if ($power == 0) {\
$dur=0;;\
} else {\
$power=$max if ($power>$max);;\
$dur=int((6-abs(5*$power/$max))*10)/10;;\
}\
\
\
my $from;;\
my $to;;\
my $x1;;\
my $x2;;\
\
\
if ($leftright) {\
$from="-1 -1";;\
$to="1 1";;\
$x1=0;;\
$x2=100;;\
} else {\
$from="1 1";;\
$to="-1 -1";;\
$x1=100;;\
$x2=0;;\
}\
\
my $out='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 90 35" width="90" height="35" style="width:90px;; height:35px;; ">';;\
\
$out .= '<defs>\
<linearGradient id="flowGradient_'.$item.'" \
x1="'.$x1.'%" y1="0%" \
x2="'.$x2.'%" y2="0%" \
>\
<stop offset="0%" stop-color="white" stop-opacity="0.2"/>\
<stop offset="95%" stop-color="white" stop-opacity="1"/>\
<stop offset="100%" stop-color="white" stop-opacity="0.2"/>\
<animateTransform \
id="flowAnim_'.$item.'" \
attributeName="gradientTransform" \
type="translate" \
from="'.$from.'" \
to="'.$to.'" \
dur="'.$dur.'s" \
repeatCount="indefinite" \
calcMode="linear"/>\
</linearGradient>\
</defs>\
<path d="'.$d.'" fill="none" stroke="url(#flowGradient_'.$item.')" stroke-width="3" />';;\
\
##$out .= '<defs> <linearGradient id="flowGradient_'.$item.'" x1="'.$x1.'%" y1="0%" x2="'.$x2.'%" y2="0%"> <stop offset="0%" stop-color="gray" stop-opacity="0.2"/> <stop offset="100%" stop-color="white" stop-opacity="1"/> <stop offset="0%" stop-color="gray" stop-opacity="0.2"/></defs><path d="'.$d.'" fill="none" stroke="gray" stroke-opacity="0.2" stroke-width="3"/><path d="'.$d.'" fill="none" stroke="url(#flowGradient_'.$item.')" stroke-width="2" stroke-dasharray="3 9"><animate id="flowAnim_'.$item.'" attributeName="stroke-dashoffset" from="'.$from.'" to="'.$to.'" dur="'.$dur.'s" repeatCount="indefinite"/></path>';;\
\
return ([$out,'var e=document.getElementById("flowAnim_'.$item.'");;if (e) {e.setAttribute("dur","'.$dur.'s");;e.setAttribute("from","'.$from.'");;e.setAttribute("to","'.$to.'");;};; var e=document.getElementById("flowGradient_'.$item.'");;if (e) {e.setAttribute("x1","'.$x1.'%");;e.setAttribute("x2","'.$x2.'%");;}'])\
} ## end of flow\
\
sub grid_power {\
my ($power,$max)=@_;;\
return (move(110,149,flow("M 5 0 A 30 30 0 0 0 35 30 L 90 30","grid",$power,$max,($power > 0 ? 0 : 1))));;\
} \
\
sub solar_power {\
my ($power,$max)=@_;;\
return move(274,149,flow("M 85 0 A 30 30 0 0 1 55 30 L 0 30","solar",$power,$max,0));;\
} \
\
sub home_power {\
my ($power,$max)=@_;; \
return move(110,185,flow("M 5 35 A 30 30 0 0 1 35 5 L 90 5","home",$power,$max,0));;\
}\
\
sub battery_power {\
my ($power,$max)=@_;;\
return move(274,185,flow("M 85 35 A 30 30 0 0 0 55 5 L 0 5","battery",$power,$max,($power < 0 ? 0:1)));;\
}\
\
sub grid {\
my ($power,$feed,$consum)=@_;;\
move(2,2,card($power,"Netz","scene_power_grid\@silver",-5,5,undef,undef,"kW",[(-1,20,-0.01,40,1,65,5,85)],"3","130,autoscaling,steps,footer,noycolor,ring,180","nogradient,,innerring,nopointer,negzeropos",undef, [[$feed,0,30,undef,undef,"Einsp.",[(10,65,30,85)]],[$consum,0,10,undef,undef,"Bezug",[(3,40,10,20)]]],0,10,undef,undef,["",""],undef,"1,,fill:silver, kWh"));;\
}\
\
\
sub self {\
my ($autark,$EVG)=@_;;\
move(200,151,ring2($autark,0,100,undef,undef,"Autarkie",120,[(33.3,40,66.6,65,100,85)],"0,,fill:silver, %",$EVG,0,100,undef,undef,"EVQ",[(33.3,40,66.6,65,100,85)],"0,,fill:silver, %",undef,undef,"nogradient,,innerring,nopointer"))\
}\
\
sub solar { \
my ($power,$energy)=@_;; move(237,2,card($power,"PV","solar_icon\@silver",0,3.6,undef,undef,"kW",[(1.2,45,2.4,65,3.6,85)],"3,,,","130,autoscaling,steps,footer,noycolor,ring,180","nogradient,,innerring,nopointer",undef, [$energy],0,30,undef,undef,"",[(10,45,20,65,30,85)],"1,,, kWh"))\
}\
\
sub home {\
my ($power,$consum)=@_;;\
move(2,222,card($power,"Haus ","fa_home\@silver",0,5,undef,undef,"kW",[(1,40,5,20)],"3","130,autoscaling,steps,footer,noycolor,ring,180","nogradient,,innerring,nopointer,negzeropos",undef, [[$consum]],0,10,undef,undef,[""],[(5,40,10,20)],"1,,, kWh"));;\
}\
\
sub battery {\
my ($power,$Cap)=@_;;\
move(237,222,card($power,"Speicher","battery_100\@silver",-1000,1000,undef,undef,"Watt",[(-300,30,-0.01,40,300,190,1000,170)],"0,,,","130,fixedscaling,steps,footer,noycolor,ring,180","1,,1,0,negzeropos",undef,[$Cap],0,100,undef,undef,"",[(20,20,50,40,80,65,100,85)],"0,font-size:120%,, %"))\
}\
\
} ## end of perl area\
\
## Tabellendefinition\
## Hier auf eigene Readings anpassen\
\
grid([MQTT2_DVES_C58DCB:power_fc:144col1d],[di_counter_new:MQTT2_DVES_C58DCB.total_f.day],[di_counter_new:MQTT2_DVES_C58DCB.total_c_positiv.day]).\
solar([MQTT2_DVES_C58DCB:power_pv:144col1d],[di_counter_new:MQTT2_DVES_C58DCB.total_pv.day]).\
home ([MQTT2_DVES_C58DCB:power_consum:144col1d],[di_counter_new:MQTT2_DVES_C58DCB.total_consum.day]).\
battery([ecoflowStreamACpro:quota_powGetBpCms:144col1d],[ecoflowStreamACpro:quota_soc]).\
self([energy:autark],[energy:evg]).\
grid_power([MQTT2_DVES_C58DCB:power_fc],3.6).\
solar_power([MQTT2_DVES_C58DCB:power_pv],3.6).\
battery_power([ecoflowStreamACpro:quota_powGetBpCms],1050).\
home_power([MQTT2_DVES_C58DCB:power_consum],3.6)