Hauptmenü

Neueste Beiträge

#11
Automatisierung / Aw: Ideensuche: Webseiten peri...
Letzter Beitrag von Damian - 09 März 2026, 17:15:39
Zitat von: Damian am 09 März 2026, 17:14:19
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])
(set Produkt_1 reread)
(set Produkt_2 reread)
(set Produkt_3 reread)
(set Produkt_4 reread)
##[...]
(set Produkt_23 reread)
DOELSE ()
mit
Attributes:
   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)
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
TYPE=HTTPMOD:FILTER=NAME=Produkt_.*
Das 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.
#12
SVG / Plots / logProxy / Aw: Farbfehler Text vs. Kurve ...
Letzter Beitrag von Prof. Dr. Peter Henning - 09 März 2026, 17:07:32
Ich will Dich ja nicht enttäuschen, aber wenn ich auf Deine neuen Dateien und den Style f18 umstelle, bleibt das Problem immer noch bestehen. Irgendeine der Änderungen an der 98_SVG.pm sorgt dafür, dass bei diesen Plots die Farben in der Legende nicht mehr zu den Farben im Plot passen.

Edit: Zwei Fehler habe ich jetzt reproduzierbar gefunden.
1. Das Modul 98_SVG.pm holt sich nicht genau Datenspalten, die im Ploteditor eingetragen werden
2. Wenn ich die Texte in der Legende aus dem Attribut "label" nehme, werden die Farben in der Legende nicht richtig gesetzt. Schau mal auf das anliegende Bild, das macht es deutlich: Die Legendeneinträge sind alle grün.

LG

pah

P.S.: Ich habe in meinen Style-Dateien die Umschaltung zwischen bright und dark eingebaut. Das erspart die Pflege mehrerer Dateien. Und innerhalb der CSS_Datei arbeite ich mit Variablen, z.B. "  --svg-l3: magenta;". Damit kann ich die diversen fill- und stroke-Attribute konsistenter halten, weil die eigentliche Farbe nur an einer Stelle am Anfang der Datei steht. Das ist zwar _nicht_ die Ursache für das oben diskutierte Problem, könnte aber Deine Arbeit etwas erleichtern.
#13
Wallboxen und E-Fahrzeuge / Aw: Ladestation (öffentlich) Z...
Letzter Beitrag von rabehd - 09 März 2026, 16:59:09
Ich habe es nicht in die Kommandozeile eingegeben, sondern in das Feld mit dem Plus-Zeichen.
Zitat von: betateilchen am 09 März 2026, 14:06:21, wenn ich in in das große Eingabefeld hinter dem + Zeichen
Was meinst Du damit? Die Kommandozeile? Haben ich Dich mißverstanden?
#14
Automatisierung / Aw: DbLog schreibt nicht laufe...
Letzter Beitrag von MartinD - 09 März 2026, 16:58:36
Danke für deine Zeit!

list SE_10k:
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)
}

Ich möchte _nu_ PV_DC und pvIn logen.

Gruß

Martin
#15
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.
So richtig hilfreich scheint das nicht zu sein.
Stimmt, das Dingens kennt nicht die Hälfte der Ladestationen.

LG

pah
#16
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.

LG

pah
#17
FRITZ!Box / Aw: 72_FRITZBOX.pm wird zu 72_...
Letzter Beitrag von elektron-bbs - 09 März 2026, 16:41:24
Hallo Jörg,
ja, das habe ich.
#18
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.

Ich bin bei 90% Ladung daheim, davon 32% aus der PV-Anlage für das erste E-Auto,
100% Ladung daheim, davon bisher nur 15% aus der PV-Anlage für das 2. E-Auto. Kommt daher, dass wir das erst seit Anfang November haben...

Man muss etwas aufpassen, weil natürlich manche externe Ladestationen auch mit regenerativen Energien arbeiten.

Das mit den DOIFs scheint mir nicht optimal, weil in diesem Modul so viel Kram steckt, dass das für FHEM schon eine gewisse Belastung darstellt. Mittelfristig sollte man das mit einem so schlanken Code lösen, wie ich ihn vorgestellt habe.

LG

pah
#19
Solaranlagen / Aw: Zendure Solarflow in Fhem ...
Letzter Beitrag von denis.robel - 09 März 2026, 15:38:26
Ich habe seit gestern die MQTT Einbindung komplett lokal mit einem ESP32 und einer OpenDTU on Battery umgesetzt.

Die Zendurebridge läuft mit ESP Home:

https://github.com/danez/esphome-zendure-bridge

hier meine config.yml

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);'

Das Ganze funktioniert richtig gut und vom Verhalten ist es so, dass wenn die Bridge läuft, werden keine Daten an die Cloud übermittelt. Wenn die Bridge aus ist, werden die Daten wieder übertragen.

Damit ist die Zendure App nur noch für Firmwareupdates zu gebrauchen. Die restliche Visualisierung und Auswertung erfolgt dann in FHEM.
#20
FRITZ!Box / Aw: 72_FRITZBOX.pm wird zu 72_...
Letzter Beitrag von JoWiemann - 09 März 2026, 15:36:33
Hallo elektron-bbs,

hast du Fhem neu gestartet?

Grüße Jörg