Zitat von: Damian am 09 März 2026, 17:14:19Das kannst du doch in Perl formulieren, solange die Bedingung sich nicht ändert (die Trigger) sollte es kein Problem sein. Mit devspec2array kannst du eine Schleife bauen. Spätestens im DOIF-Perl kannst du auch dynamisch mit set_Exec Ausführungen verzögern.Zitat von: Damian am 09 März 2026, 13:21:26Bei den Nachteilen sprichst du immer von zufälliger Verzögerung. Warum baust du sie nicht in deinem DOIF ein? Den Zufall kannst du sowohl im wait-Attribut, als auch bei berechneten Zeittriggern angeben.Dann hab ich mich mißverständlich ausgedrückt - das DOIF funktioniert, inklusive variabler Zeitdifferenz via wait Attribut. Was mich nervt (first world problems!) ist die Tatsache, dass wenn ich ein HTTPMOD Device hinzufüge/entferne, ich die DOIF DEF sowie was wait Attribut anpassen muss. Das DOIF sieht etwa so aus:([([06:50]+int(rand(300)))-([20:30]-int(rand(300)))|8])mit
(set Produkt_1 reread)
(set Produkt_2 reread)
(set Produkt_3 reread)
(set Produkt_4 reread)
##[...]
(set Produkt_23 reread)
DOELSE ()Attributes:Schön wäre, wenn das DOIF im Ausfrührungsteil über die vorhandenen Devices iterieren und ein reread durchführen könnte - mit jeweiliger Pause dazwischen. Devspec wäre
do always
repeatcmd 4600+rand(400)
wait 0,45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30),45+rand(30)TYPE=HTTPMOD:FILTER=NAME=Produkt_.*
Zitat von: betateilchen am 09 März 2026, 14:06:21, wenn ich in in das große Eingabefeld hinter dem + ZeichenWas meinst Du damit? Die Kommandozeile? Haben ich Dich mißverstanden?
Internals:
DEF 1 19 192.168.2.40 TCP
DeviceName 192.168.2.40:502
EXPECT idle
FD 16
FUUID 69a041c3-f33f-3e5d-aa24-15098763127d2b28
IODev SE_10k
Interval 19
LASTOPEN 1773034548.98278
MODBUSID 1
MODE master
MODULEVERSION Modbus 5.0.1 - 7.12.2025
NAME SE_10k
NOTIFYDEV global
NR 59
NTFY_ORDER 50-SE_10k
PARTIAL
PROTOCOL TCP
STATE vom Dach:0.583 kW, zum Speicher: 0 kW, ins Netz: 0.320 kW, ins Haus: 0.254 kW, vom Speicher: 0 kW, im Speicher ist noch: 9.43 kWh
TCPConn 1
TYPE ModbusAttr
devioLoglevel 3
devioNoSTATE 1
eventCount 12479
nextOpenDelay 60
DICACHE:
3:
UNPACK
EXPRS:
EXTRAS:
FNAMES:
Helper:
DBLOG:
B_Available_Energy:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 9.53
B_Average_Temperature:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 19.3
B_Instantaneous_Power:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE -0.37
B_State_of_Energy:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 92.6
B_State_of_Energy_in_kWh:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 8.82
B_State_of_Health:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 99.0
B_Status:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE Discharge
BatExport:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.010
BatHaus:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.360
BatIN_TOTAL_kWh:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 971.86
BatIn:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0
BatNet:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.370
BatOUT_TOTAL_kWh:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 917.53
BatOut:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.37
Energie_FeedIN_HM_Meter_kWh:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 169.70
Energiebezug_HM_Meter_kWh:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 874.20
Haus_Last_kW:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.29
Hausverbrauch:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.288
I_AC-Power:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 0.29793
I_AC_Current:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 1.43
I_AC_Energy_WH:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 1374.713
I_DC_Power:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 0.3024
I_Status:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE On
I_Temp_SF:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE -2
I_Temp_Sink:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 39
Leistung_FeedIN_HM_Meter_kW:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.00
Leistungbezug_HM_Meter_kW:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.00
M_AC_POWER:
csl_debian_DbLog:
TIME 1772993969.36704
VALUE 0.01
M_AC_POWER_FeedIn:
csl_debian_DbLog:
TIME 1772993969.36704
VALUE 0.01
M_AC_POWER_Purchased:
csl_debian_DbLog:
TIME 1772993969.36704
VALUE 0
M_Energy_W_SF:
csl_debian_DbLog:
TIME 1772993969.36704
VALUE -3
M_Exported:
csl_debian_DbLog:
TIME 1772993969.36704
VALUE 186.17
M_Imported:
csl_debian_DbLog:
TIME 1772993969.36704
VALUE 951.46
NetzHaus:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.000
PV_DC:
csl_debian_DbLog:
TIME 1773071775.31023
VALUE 0.583
PV_Export:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.000
PV_Haus:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.004
PV_Leistung:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 0
PV_Leistung-temp:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 0.02
WR_Effizienz:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.985
ac2dc:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 0.000
dc2ac:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE 0.292
etotal:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 649.864
pvIn:
csl_debian_DbLog:
TIME 1773071775.02316
VALUE 0.485
pvOut:
csl_debian_DbLog:
TIME 1772993969.1459
VALUE 0.000
state:
csl_debian_DbLog:
TIME 1772992464.90796
VALUE CONNECTED
vom_Dach:
csl_debian_DbLog:
TIME 1772993969.49062
VALUE -0.068
OICACHE:
QUEUE:
READ:
BUFFER
READINGS:
2026-03-09 16:56:15 B_Available_Energy 9.53
2026-03-09 16:56:15 B_Average_Temperature 19.2
2026-03-09 16:56:15 B_Instantaneous_Power 0.00
2026-03-09 16:56:15 B_State_of_Energy 98.9
2026-03-09 16:56:15 B_State_of_Energy_in_kWh 9.43
2026-03-09 16:56:15 B_State_of_Health 99.0
2026-03-09 16:56:15 B_Status TrickleCharge
2026-03-09 16:56:15 BatExport 0.000
2026-03-09 16:56:15 BatHaus 0.000
2026-03-09 16:56:15 BatIN_TOTAL_kWh 978.10
2026-03-09 16:56:15 BatIn 0
2026-03-09 16:56:15 BatNet 0.000
2026-03-09 16:56:15 BatOUT_TOTAL_kWh 923.16
2026-03-09 16:56:15 BatOut 0
2026-03-09 16:56:15 Energie_FeedIN_HM_Meter_kWh 182.70
2026-03-09 16:56:15 Energiebezug_HM_Meter_kWh 874.70
2026-03-09 16:56:15 Haus_Last_kW 0.25
2026-03-09 16:56:15 Hausverbrauch 0.254
2026-03-09 16:56:15 I_AC-Power 0.5743
2026-03-09 16:56:15 I_AC_Current 2.53
2026-03-09 16:56:15 I_AC_Energy_WH 1396.35
2026-03-09 16:56:15 I_DC_Power 0.5831
2026-03-09 16:56:15 I_Status On
2026-03-09 16:56:15 I_Temp_SF -2
2026-03-09 16:56:15 I_Temp_Sink 40.56
2026-03-09 16:56:15 Leistung_FeedIN_HM_Meter_kW 0.00
2026-03-09 16:56:15 Leistungbezug_HM_Meter_kW 0.00
2026-03-09 16:56:15 M_AC_POWER 0.32
2026-03-09 16:56:15 M_AC_POWER_FeedIn 0.32
2026-03-09 16:56:15 M_AC_POWER_Purchased 0
2026-03-09 16:56:15 M_Energy_W_SF -3
2026-03-09 16:56:15 M_Exported 199.30
2026-03-09 16:56:15 M_Imported 951.88
2026-03-09 16:56:15 NetzHaus 0.000
2026-03-09 16:56:15 PV_DC 0.583
2026-03-09 16:56:15 PV_Export 0.320
2026-03-09 16:56:15 PV_Haus 0.254
2026-03-09 16:56:15 PV_Leistung 0.90
2026-03-09 16:56:15 PV_Leistung-temp 0.90
2026-03-09 16:56:15 WR_Effizienz 0.985
2026-03-09 16:56:15 ac2dc 0.000
2026-03-09 16:56:15 dc2ac 0.000
2026-03-09 16:56:15 etotal 667.054
2026-03-09 16:56:15 pvIn 0.485
2026-03-09 16:56:15 pvOut 0.350
2026-03-09 06:35:48 state opened
2026-03-09 16:56:15 vom_Dach 0.583
REMEMBER:
lid 1
lname SE_10k
lrecv 1773071775.29285
lsend 1773071775.2368
UPDATECACHE:
h40071:
adr 40071
combine h40071 len 5 I_AC_Current with h40083 len 2 I_AC-Power and h40093 len 3 I_AC_Energy_WH and h40100 len 2 I_DC_Power and h40103 len 1 I_Temp_Sink and h40106 len 1 I_Temp_SF and h40107 len 1 I_Status
len 5
objCombi h40071
reading I_AC_Current
span 37
type h
h40206:
adr 40206
combine h40206 len 5 M_AC_POWER with h40226 len 2 M_Exported and h40234 len 2 M_Imported and h40242 len 1 M_Energy_W_SF
len 5
objCombi h40206
reading M_AC_POWER
span 37
type h
h62828:
adr 62828
combine h62828 len 2 B_Average_Temperature with h62836 len 2 B_Instantaneous_Power and h62848 len 2 B_Available_Energy and h62850 len 2 B_State_of_Health and h62852 len 2 B_State_of_Energy and h62854 len 2 B_Status
len 2
objCombi h62828
reading B_Average_Temperature
span 28
type h
defptr:
SE_10k 1
gotReadings:
B_Available_Energy 9.53
B_Average_Temperature 19.2
B_Instantaneous_Power 0.00
B_State_of_Energy 98.9
B_State_of_Health 99.0
B_Status TrickleCharge
hmccu:
lastRead:
h40071 1773071775.00384
h40083 1773071775.00444
h40093 1773071775.00492
h40100 1773071775.00534
h40103 1773071775.00585
h40106 1773071775.00597
h40107 1773071775.00632
h40206 1773071775.15331
h40226 1773071775.15394
h40234 1773071775.15451
h40242 1773071775.15459
h62828 1773071775.303
h62836 1773071775.30338
h62848 1773071775.30363
h62850 1773071775.30374
h62852 1773071775.30385
h62854 1773071775.30403
Attributes:
dev-h-combine 105
dev-h-defPoll 1
dev-h-defShowGet 1
enableControlSet 1
icon measure_power@green
maxTimeoutsToReconnect 3
obj-h40071-expr ($val[0] * (10 ** $val[4]))
obj-h40071-len 5
obj-h40071-reading I_AC_Current
obj-h40071-unpack s>s>s>s>s>
obj-h40083-expr ($val * (10 ** $val[1]))/1000
obj-h40083-len 2
obj-h40083-reading I_AC-Power
obj-h40083-unpack s>s>
obj-h40093-expr $val * (10 ** $val[1])/1000
obj-h40093-len 3
obj-h40093-reading I_AC_Energy_WH
obj-h40093-unpack l>s>
obj-h40100-expr $val * (10 ** $val[1])/1000
obj-h40100-len 2
obj-h40100-reading I_DC_Power
obj-h40100-unpack s>s>
obj-h40103-expr $val * (10 ** ReadingsNum ($name ,'I_Temp_SF',0))
obj-h40103-len 1
obj-h40103-reading I_Temp_Sink
obj-h40103-unpack s>
obj-h40106-reading I_Temp_SF
obj-h40106-unpack s>
obj-h40107-map 1:Off, 2:Sleeping, 3:Starting, 4:On, 5:Throttled, 6:ShuttingDown, 7:Fault, 8:Maintenance
obj-h40107-reading I_Status
obj-h40206-expr ($val[0] * (10 ** $val[4]))/1000
obj-h40206-format %.2f
obj-h40206-len 5
obj-h40206-reading M_AC_POWER
obj-h40206-unpack s>s>s>s>s>
obj-h40226-expr $val * (10 ** ReadingsNum ($name ,'M_Energy_W_SF',0))/1000
obj-h40226-format %.2f
obj-h40226-len 2
obj-h40226-reading M_Exported
obj-h40226-unpack N
obj-h40234-expr $val * (10 ** ReadingsNum ($name ,'M_Energy_W_SF',0))/1000
obj-h40234-format %.2f
obj-h40234-len 2
obj-h40234-reading M_Imported
obj-h40234-unpack N
obj-h40242-reading M_Energy_W_SF
obj-h40242-unpack s>
obj-h62828-format %.1f
obj-h62828-len 2
obj-h62828-reading B_Average_Temperature
obj-h62828-revRegs 1
obj-h62828-unpack f>
obj-h62836-expr $val / 1000
obj-h62836-format %.2f
obj-h62836-len 2
obj-h62836-reading B_Instantaneous_Power
obj-h62836-revRegs 1
obj-h62836-unpack f>
obj-h62848-expr $val / 1000
obj-h62848-format %.2f
obj-h62848-len 2
obj-h62848-reading B_Available_Energy
obj-h62848-revRegs 1
obj-h62848-unpack f>
obj-h62850-format %.1f
obj-h62850-len 2
obj-h62850-reading B_State_of_Health
obj-h62850-revRegs 1
obj-h62850-unpack f>
obj-h62852-format %.1f
obj-h62852-len 2
obj-h62852-reading B_State_of_Energy
obj-h62852-revRegs 1
obj-h62852-unpack f>
obj-h62854-len 2
obj-h62854-map 0:Off, 1:Standby, 2:Init, 3:Charge, 4:Discharge, 5:Fault, 6:TrickleCharge,7:Idle, 10: PowerSaving
obj-h62854-reading B_Status
room Solar
stateFormat vom Dach:PV_DC kW, zum Speicher: BatIn kW, ins Netz: PV_Export kW, ins Haus: PV_Haus kW, vom Speicher: BatOut kW, im Speicher ist noch: B_State_of_Energy_in_kWh kWh
userReadings BatIn:B_Instantaneous_Power.* {
my $pwr = ReadingsNum ($name, 'B_Instantaneous_Power', 0);
$pwr = $pwr > 0 ? $pwr : 0;
$pwr;
},
BatOut:B_Instantaneous_Power.* {
my $pwr = ReadingsNum ($name, 'B_Instantaneous_Power', 0);
$pwr = $pwr < 0 ? abs $pwr : 0;
$pwr;
},
B_State_of_Energy_in_kWh:B_State_of_Energy.* {
sprintf("%.2f", ReadingsNum ($name,'B_State_of_Energy',0)*(ReadingsNum ($name,'B_Available_Energy',0)/100))
},
BatIN_TOTAL_kWh:I_AC-Power.* {
my $batIN = ReadingsNum ('MD_SolarEdge','storage-7B083F14-lifeTimeEnergyCharged',0)/1000;
my $result =0;
$result= $batIN;
return sprintf("%.2f",$batIN);
},
BatOUT_TOTAL_kWh:I_AC-Power.* {
my $batOUT = ReadingsNum ('MD_SolarEdge','storage-7B083F14-lifeTimeEnergyDischarged',0)/1000;
my $result =0;
$result= $batOUT;
return sprintf("%.2f",$batOUT);
},
M_AC_POWER_Purchased:M_AC_POWER.* {
my $pwr = ReadingsNum ($name, 'M_AC_POWER', 0);
$pwr = $pwr < 0 ? abs $pwr : 0;
return $pwr;
},
M_AC_POWER_FeedIn:M_AC_POWER.* {
my $pwr = ReadingsNum ($name, 'M_AC_POWER', 0);
$pwr = $pwr > 0 ? $pwr : 0;
return $pwr;
},
Leistungbezug_HM_Meter_kW {
my $power = ReadingsNum ('Energiemessung_Smart_Bezug','Leistung_Verbrauch',0)/1000;
my $result = 0;
$result = $power;
return sprintf("%.2f", $result);
},
Energiebezug_HM_Meter_kWh {
my $energie = ReadingsNum ('Energiemessung_Smart_Bezug','IEC_ENERGY_COUNTER',0);
my $result = 0;
$result = $energie;
return sprintf("%.2f", $result);
},
Leistung_FeedIN_HM_Meter_kW {
my $power = ReadingsNum ('Energiemessung_Smart_Einspeisung','Leistung_Einspeisung',0)/1000;
my $result = 0;
$result = $power;
return sprintf("%.2f", $result);
},
Energie_FeedIN_HM_Meter_kWh {
my $energie = ReadingsNum ('Energiemessung_Smart_Einspeisung','IEC_ENERGY_COUNTER',0);
my $result = 0;
$result = $energie;
return sprintf("%.2f", $result);
},
pvIn:I_DC_Power.* {
my $capacity = 10;
my $wr_self = 0.12;
my $dc = ReadingsNum($name,"I_DC_Power",0);
my $house = ReadingsNum($name,"Haus_Last_kW",0);
my $gridin = ReadingsNum($name,"M_AC_POWER_Purchased",0);
my $gridout = ReadingsNum($name,"M_AC_POWER_FeedIn",0);
my $batout = ReadingsNum($name,"BatOut",0);
my $bat_eta = 0.79;
my $bat_ac = $batout * $bat_eta;
my $pv_ac = $house - $gridin + $gridout - $bat_ac;
$pv_ac = 0 if $pv_ac < 0;
$pv_ac -= $wr_self if $pv_ac > $wr_self;
my $pv_dc = $pv_ac / 0.97;
# Clipping
$pv_dc = $capacity if $pv_dc > $capacity;
# Nachtfilter
$pv_dc = 0 if $pv_dc < 0.08;
return sprintf("%.3f",$pv_dc);
},
pvOut:I_DC_Power.* {
my $wr_self = 0.12;
my $pvin = ReadingsNum($name,"pvIn",0);
my $batin = ReadingsNum($name,"BatIn",0);
my $pv_to_ac = $pvin - $batin;
$pv_to_ac = 0 if $pv_to_ac < 0;
my $pv_ac = ($pv_to_ac * 0.97) - $wr_self;
$pv_ac = 0 if $pv_ac < 0;
return sprintf("%.3f",$pv_ac);
},
dc2ac:BatOut.* {
my $batout = ReadingsNum($name,"BatOut",0);
# Wirkungsgradbereich
my $eta = 0.79;
my $ac = $batout * $eta;
$ac = 0 if $ac < 0.05;
return sprintf("%.3f",$ac);
},
ac2dc:I_AC-Power.* {
my $batin = ReadingsNum($name,"BatIn",0);
# Batterie lädt direkt DC von PV
# daher kein AC->DC
return sprintf("%.3f",0);
},
etotal:I_AC_Energy_WH.* {
my $ac_total = ReadingsNum($name,"I_AC_Energy_WH",0);
my $bat_total = ReadingsNum($name,"BatOUT_TOTAL_kWh",0);
my $bat_ac = $bat_total * 0.79;
my $pv_total = $ac_total - $bat_ac;
$pv_total = 0 if $pv_total < 0;
return sprintf("%.3f",$pv_total);
},
PV_Leistung-temp:I_DC_Power.* {
my $i_dc_power = ReadingsNum ($name, 'I_DC_Power', 0);
my $bat_power = ReadingsNum ($name, 'BatIn', 0);
my $bat_out = ReadingsNum ($name, 'BatOut', 0);
my $i_ac_feedin = ReadingsNum ($name, 'M_AC_POWER_FeedIn', 0);
my $pow_faktor = 0.79;
my $result = 0;
$result = $i_dc_power + $bat_power + $i_ac_feedin - ($bat_out * $pow_faktor) ;
if ($result < 0) {
$result = 0;
}
return sprintf("%.2f", $result);
},
PV_Leistung:PV_Leistung-temp.* {
my $pwr = ReadingsNum ($name, 'PV_Leistung-temp', 0);
if (ReadingsVal ('Tag_Nacht', 'state', '0') ne "Tag"){
$pwr = 0;
}
elsif ($pwr < 0.01){
$pwr = 0;
}
return $pwr;
},
Haus_Last_kW:.* {
my $inv_ac = ReadingsNum ($name, 'I_AC-Power', 0);
my $feedin_ac = ReadingsNum ($name,'M_AC_POWER_FeedIn',0);
my $result = 0;
$result = $inv_ac - $feedin_ac;
return sprintf("%.2f", $result);
},
vom_Dach:.* {
my $dc=ReadingsNum("SE_10k","I_DC_Power",0);
my $bin=ReadingsNum("SE_10k","BatIn",0);
my $bout=ReadingsNum("SE_10k","BatOut",0);
sprintf("%.3f",$dc-$bout+$bin)
},
Hausverbrauch:.* {
my $ac=ReadingsNum($name,'I_AC-Power',0);
my $buy=ReadingsNum($name,'M_AC_POWER_Purchased',0);
my $sell=ReadingsNum($name,'M_AC_POWER_FeedIn',0);
sprintf("%.3f",$ac+$buy-$sell)
},
WR_Effizienz:.* {
my $dc=ReadingsNum("SE_10k","I_DC_Power",0);
my $ac=ReadingsNum("SE_10k","I_AC-Power",0);
return 0 if $dc==0;
sprintf("%.3f",$ac/$dc)
},
PV_DC:.* {
my $dc=ReadingsNum($name,'I_DC_Power',0);
my $bin=ReadingsNum($name,'BatIn',0);
my $bout=ReadingsNum($name,'BatOut',0);
my $result = $dc-$bout+$bin;
$result = $result > 0.08 ? $result : 0;
sprintf("%.3f",$result)
},
BatNet:.* {
my $out = ReadingsNum($name,'BatOut',0);
my $in = ReadingsNum($name,'BatIn',0);
my $net = $out - $in;
$net = 0 if $net < 0;
sprintf("%.3f",$net)
},
BatExport:.* {
my $bout=ReadingsNum($name,'BatOut',0);
my $feed=ReadingsNum($name,'M_AC_POWER_FeedIn',0);
my $exp=($bout<$feed)?$bout:$feed;
sprintf("%.3f",$exp)
},
BatHaus:.* {
my $bout=ReadingsNum($name,'BatOut',0);
my $feed=ReadingsNum($name,'M_AC_POWER_FeedIn',0);
my $exp=($bout<$feed)?$bout:$feed;
sprintf("%.3f",$bout-$exp)
},
PV_Export:.* {
my $feed=ReadingsNum($name,'M_AC_POWER_FeedIn',0);
my $bout=ReadingsNum($name,'BatOut',0);
my $exp=($bout<$feed)?$bout:$feed;
sprintf("%.3f",$feed-$exp)
},
PV_Haus:.* {
my $ac=ReadingsNum($name,'I_AC-Power',0);
my $buy=ReadingsNum($name,'M_AC_POWER_Purchased',0);
my $sell=ReadingsNum($name,'M_AC_POWER_FeedIn',0);
my $bout=ReadingsNum($name,'BatOut',0);
my $eta=0.79;
my $haus=$ac+$buy-$sell;
my $batExport = ($bout<$sell)?$bout:$sell;
my $batHaus = ($bout-$batExport)*$eta;
my $pv=$haus-$batHaus-$buy;
$pv=0 if $pv<0;
sprintf("%.3f",$pv)
},
NetzHaus:.* {
my $buy=ReadingsNum($name,'M_AC_POWER_Purchased',0);
sprintf("%.3f",$buy)
}
Zitat von: betateilchen am 08 März 2026, 12:48:02Die API liefert hier (natürlich ohne gesetzte Filter) genau eine von drei vorhandenen öffentlichen Ladesäulen.Stimmt, das Dingens kennt nicht die Hälfte der Ladestationen.
So richtig hilfreich scheint das nicht zu sein.
Zitat von: rabehd am 09 März 2026, 13:24:53Das meldet mir einen Syntaxfehler.Wundert mich etwas. Wenn man den Code in die Kommandozeile eingeben will, statt in das textField-long Editierfeld, muss man die Semikola verdoppeln. Aber eben auch im "for"-Befehl.
{for(my $i=0;$i<10;$i++){Log 1,"xyz"}}liefert einen Fehler{for(my $i=0;;$i<10;;$i++){Log 1,"xyz"}}wird ausgeführt.Zitat von: fred_feuerstein am 09 März 2026, 15:16:51Jahresschnitt aktuell 35% PV und 65% Netz, mal sehen wo ich mit der Quote bis Ende des Jahres lande.
esphome:
name: zendure-bridge
esp32: #
board: esp32dev
framework:
type: arduino
time:
- platform: sntp
id: esptime
timezone: Europe/Berlin
wifi: # Ihre WiFi-Daten hier
ssid: "SSID"
password: "wifipassword"
# Fallback Hotspot bei Verbindungsproblemen
ap:
ssid: "Zendure-Bridge-Fallback"
password: "12345678"
# Logger für Debugging
logger:
level: DEBUG
# MQTT für FHEM (Broker-IP anpassen!)
mqtt:
broker: xxx.xxx.xxx.xxx # IP Ihres FHEM-Servers
topic_prefix: zendure/
birth_message:
topic: 'zendure/bridge/status'
payload: 'online'
discovery: false
discovery_retain: false
# OTA-Updates (Passwort setzen!)
ota:
- platform: esphome
password: "password"
packages:
zendure:
url: https://github.com/danez/esphome-zendure-bridge
files:
- path: packages/hub2000.yaml
vars:
mac_address: "xx:xx:xx:xx:xx" # Bluetooth MAC Solarhub
time_id: esptime
name: "Zendure Hub 2000"
id: "hub_2000"
- path: packages/ab2000.yaml
vars:
name: "Hub 2000 Battery 1"
device_id: "hub_2000"
serial_number: "Serial No. Battery_1"
- path: packages/ab2000.yaml
vars:
name: "Hub 2000 Battery 2"
device_id: "hub_2000"
serial_number: "Serial No. Battery_2"
ref: v1
refresh: 1d
# Alle 5 Sekunden Update
interval:
- interval: 5s
then:
- mqtt.publish:
topic: "zendure/bridge/heartbeat"
payload: !lambda 'return to_string(id(esptime).now().timestamp);'