mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-25 09:55:38 +00:00
ch.eick: Update WP LAD9
git-svn-id: https://svn.fhem.de/fhem/trunk@28494 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
b6e3a6788a
commit
94960bbb46
@ -0,0 +1,24 @@
|
||||
defmod Heizung LUXTRONIK2 192.168.178.10 300
|
||||
attr Heizung DbLogExclude .*
|
||||
attr Heizung DbLogInclude 2ndHeatSource1,SWTin_PV-Eigenverbrauch,ambientTemperature,averageAmbientTemperature,counterHeatQHeating,counterHeatQHotWater,counterHeatQPool,counterHeatQTotal,flowDispersion,flowTemperature,heatSourceIN,heatSourceMotor,heatingBufferTemperature,heatingSystemCircPump,heatingSystemCircPumpDeaerate,hotWaterCircPumpDeaerate,hotWaterCircPumpExtern,hotWaterTemperature,hotWaterTemperatureTarget,opStateHeatPump1,opStateHeatPump2,opStateHeatPump3,opStateHotWater,returnTemperature,returnTemperatureExtern,returnTemperatureHeating,returnTemperatureHyst,returnTemperatureSetBack,returnTemperatureTarget
|
||||
attr Heizung alias Heizung
|
||||
attr Heizung allowSetParameter 1
|
||||
attr Heizung comment stateFormat alternative\
|
||||
{sprintf("Outside:%.1f°C<br>Flow:%.1f°C<br>Return:%.1f°C(Trgt:%.1f°C)<br> Water:%.1f°C(Trgt:%.1f°C) %s",\
|
||||
ReadingsVal($name,"ambientTemperature",0),\
|
||||
ReadingsVal($name,"flowTemperature",0),\
|
||||
ReadingsVal($name,"returnTemperature",0), ReadingsVal($name,"returnTemperatureTarget",0),\
|
||||
ReadingsVal($name,"hotWaterTemperature",0), ReadingsVal($name,"hotWaterTemperatureTarget",0),\
|
||||
ReadingsVal($name,"opStateHeatPump3","error") )}
|
||||
attr Heizung event-on-change-reading SWTin_PV-Eigenverbrauch,ambientTemperature,averageAmbientTemperature,counterHeatQ.*,flowDispersion,flowTemperature,heatSourceIN,2ndHeatSource1,heatSourceMotor,heatingBufferTemperature,heatingSystemCircPump,heatingSystemCircPumpDeaerate,hotWaterCircPumpDeaerate,hotWaterCircPumpExtern,hotWaterTemperature.*,opStateHeatPump.*,opStateHotWater,returnTemperature,returnTemperatureExtern,returnTemperatureHeating,returnTemperatureHyst,returnTemperatureSetBack,returnTemperatureTarget,opMode.*,Verbrauch_Heizung,Verbrauch_Warmwasser
|
||||
attr Heizung group Heizung
|
||||
attr Heizung icon sani_earth_source_heat_pump
|
||||
attr Heizung ignoreFirmwareCheck 1
|
||||
attr Heizung room Heizung->System
|
||||
attr Heizung sortby 01
|
||||
attr Heizung userHeatpumpParameters 1136 Verbrauch_Heizung, 1137 Verbrauch_Warmwasser
|
||||
attr Heizung userHeatpumpValues 36 SWTin_PV-Eigenverbrauch
|
||||
attr Heizung userReadings flowDispersion:opStateHeatPump1 { ReadingsVal($name,"opStateHeatPump1","Error") eq "Wärmepumpe läuft" ? round((ReadingsVal($name,"flowTemperature",0) - ReadingsVal($name,"returnTemperature",0)),1) : round(ReadingsVal($name,"flowDispersion",0),1) },\
|
||||
heatingBufferTemperature:opStateHotWater { ReadingsVal($name,"opStateHotWater","Error") ne "Aufheizen" ? ReadingsVal($name,"returnTemperature",0) : ReadingsVal($name,"heatingBufferTemperature",0) },\
|
||||
Verbrauch_Gesamt:Verbrauch_.* { ReadingsVal($name,"Verbrauch_Heizung",0) + ReadingsVal($name,"Verbrauch_Warmwasser",0) }
|
||||
attr Heizung verbose 0
|
@ -0,0 +1,12 @@
|
||||
defmod LWP_Counter HourCounter StromZaehler_Heizung:SMAEM1901401955_Saldo_Wirkleistung:\s-[0-9]{4}(\.[0-9]{1})*$ StromZaehler_Heizung:SMAEM1901401955_Saldo_Wirkleistung:\s-[0-9]{1,3}(\.[0-9]{1})*$
|
||||
attr LWP_Counter DbLogExclude .*
|
||||
attr LWP_Counter alias LWP_Counter
|
||||
attr LWP_Counter comment Version 2021.01.09 11:16
|
||||
attr LWP_Counter event-min-interval .*:600
|
||||
attr LWP_Counter event-on-change-reading .*
|
||||
attr LWP_Counter group PV Eigenverbrauch-Steuerung
|
||||
attr LWP_Counter icon time_timer
|
||||
attr LWP_Counter interval 5
|
||||
attr LWP_Counter room Heizung->System,Strom->Photovoltaik
|
||||
attr LWP_Counter sortby 413
|
||||
attr LWP_Counter verbose 0
|
@ -0,0 +1,521 @@
|
||||
defmod LWP_PV_Perl DOIF ################################################################################################################\
|
||||
## Eigenverbrauch einschalten: wenn PV Produktion über dem Mindestbedarf ist und die Laufzeit pro Tag noch nicht erreicht ist\
|
||||
##\
|
||||
01_1_Eigenverbrauch_automatisch_An\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
( [WR_1:SW_Total_PV_P_reserve] >= [$SELF:PowerLimitOn] ## Es besteht PV-Überschuss\
|
||||
and [[$SELF:TimeStart]-[$SELF:TimeEnd]] ## Das Zeitfenster ist erreicht\
|
||||
and get_Exec("LWP_Ein_timer") < 1 ## Der Wait Timer ist noch nicht gestartet\
|
||||
and [$SELF:LWP_Status] eq "Aus" ## Die LWP ist aus\
|
||||
and [LWP_Counter:pulseTimePerDay] < [$SELF:RunTimePerDay] ## Die maximale Laufzeit der LWP ist noch nicht erreicht\
|
||||
and [Heizung:hotWaterTemperature] < 60 ## Das Maximum des PV-Modus ist noch nicht erreicht\
|
||||
and [WR_ctl:Yield_fc0_day] < [WR_1_Speicher_1_ExternControl:SpeicherMinSOC_fc1_Limit] ## Im Herbst/Winter ist wenig zu erwarten\
|
||||
)\
|
||||
or [$SELF:ui_command_1] eq "01_1_Eigenverbrauch_automatisch_An" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 01_1 : LWP on waiting"};;\
|
||||
\
|
||||
set_Exec("LWP_Ein_timer",[$SELF:PowerLevelMinTime],'PV_Modus_Ein_LWP();;set_Reading("LWP_Status","An")');; ## Den PV-Modus verzögert einschalten\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## Signal für den PV-Modus der LWP einschalten.\
|
||||
##\
|
||||
01_2_Eigenverbrauch_manuell_An\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
[$SELF:ui_command_1] eq "01_2_Eigenverbrauch_manuell_An" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 01_2 : LWP on for manuel PV-Modus"};;\
|
||||
\
|
||||
PV_Modus_Ein_LWP();;\
|
||||
set_Reading("LWP_Status","warten");;\
|
||||
set_Exec("LWP_Man_timer",180,'set_Reading("LWP_Status","manuell")');; ## Den Status verzögert ändern\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## Signal für den PV-Modus der LWP abschalten.\
|
||||
##\
|
||||
01_3_Eigenverbrauch_manuell_Aus\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
[$SELF:ui_command_1] eq "01_3_Eigenverbrauch_manuell_Aus" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 01_3 : LWP off after manuel PV-Modus"};;\
|
||||
\
|
||||
del_Exec("LWP_Man_timer");;\
|
||||
PV_Modus_Aus_LWP();;\
|
||||
set_Reading("LWP_Status","Aus");;\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## Eigenverbrauch abschalten: wenn Mindestlaufzeit erreicht wurde und Maximallaufzeit pro Tag erreicht ist\
|
||||
##\
|
||||
02_1_Eigenverbrauch_Laufzeit_Aus\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
( [LWP_Counter:pulseTimePerDay] >= [$SELF:RunTimePerDay] ## Die Tages Laufzeit ist überschritten\
|
||||
and [LWP_Counter:pulseTimeIncrement] >= [$SELF:RunTimeMin] ## Die Mindestlaufzeit ist überschritten\
|
||||
and [$SELF:LWP_Status] eq "An" ## Die LWP Läuft\
|
||||
)\
|
||||
or [$SELF:ui_command_1] eq "02_1_Eigenverbrauch_Laufzeit_Aus" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 02_1 : LWP off Laufzeit"};;\
|
||||
\
|
||||
PV_Modus_Aus_LWP();;\
|
||||
set_Reading("LWP_Status","Aus");;\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## Eigenverbrauch abschalten: wenn Mindestlaufzeit erreicht wurde und die PV Produktion unter dem Mindestbedarf ist\
|
||||
##\
|
||||
02_2_Eigenverbrauch_PV_Min_Aus\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
( [WR_1:SW_Total_PV_P_reserve] < 100 ## es soll noch eine Reserve bleiben\
|
||||
and [LWP_Counter:pulseTimeIncrement] >= [$SELF:RunTimeMin] ## Die Mindestlaufzeit ist überschritten\
|
||||
and [$SELF:LWP_Status] eq "An" ## Die LWP Läuft\
|
||||
)\
|
||||
or [$SELF:ui_command_1] eq "02_2_Eigenverbrauch_PV_Min_Aus" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 02_2 : LWP off PV-Min"};;\
|
||||
\
|
||||
PV_Modus_Aus_LWP();;\
|
||||
set_Reading("LWP_Status","Aus");;\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## Stop, wenn es nur ein kurzer peak ist. Dieser Do Zweig setzt den wait timer vom Einschaltkommando cmd_4 wieder außer kraft,\
|
||||
## wenn während der Wartezeit die PV Anlage zuwenig liefert.\
|
||||
##\
|
||||
03___Stop_Wait_Timer\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
( get_Exec("LWP_Ein_timer") > 0 ## läuft eine Wartezeit\
|
||||
and get_Exec("LWP_Ein_timer") < 5 ## läuft die Wartezeit bald ab\
|
||||
and\
|
||||
(\
|
||||
( [WR_1:SW_Total_PV_P_reserve] < [$SELF:PowerLimitOn] ## Ist die PV-Leistung zu niedrig?\
|
||||
and [$SELF:LWP_Status] eq "Aus" ## und gibt es keine manuelle Einschaltung\
|
||||
)\
|
||||
or ## eventuell läuft die LWP bereits an, dann muss auch der timer gestoppt werden\
|
||||
( [StromZaehler_Heizung:SMAEM1901401955_Bezug_Wirkleistung] > 300\
|
||||
and [Heizung:opStateHeatPump1] eq "Wärmepumpe kommt"\
|
||||
and [Heizung:opStateHeatPump3] eq "Pumpenvorlauf"\
|
||||
)\
|
||||
or ## eventuell läuft die LWP bereits an, dann muss auch der timer gestoppt werden\
|
||||
( [StromZaehler_Heizung:SMAEM1901401955_Bezug_Wirkleistung] > 300\
|
||||
and [Heizung:opStateHeatPump1] eq "Wärmepumpe läuft"\
|
||||
)\
|
||||
)\
|
||||
)\
|
||||
or [$SELF:ui_command_1] eq "03___Stop_Wait_Timer" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 03__ : Stop wait timer LWP ".get_Exec("LWP_Ein_timer")};;\
|
||||
del_Exec("LWP_Ein_timer");; ## Die LWP wird nicht mehr eingeschaltet\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## LWP Zwangseinschalten: Sollte das Brauchwasser noch nicht aufgeheizt sein, wird um die Hysterese erhöht.\
|
||||
## Dies kann passieren, wenn am Tag vorher der PV-Modus lief und dann das Wasser noch knapp über dem Mindestwert ist.\
|
||||
##\
|
||||
04_1_LWP_Nachheizen_WW\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
( [WR_ctl:Yield_fc0_day] < [WR_1_Speicher_1_ExternControl:SpeicherMaxSOC_fc1_Limit] ## Im Herbst/Winter ist wenig zu erwarten\
|
||||
and [[$SELF:TimeEnd]] ## Am Ende der möglichen PV Steuerung\
|
||||
and [Heizung:hotWaterTemperature] <= 48 ## wenn das Wasser noch nicht im Sollbereich ist\
|
||||
and\
|
||||
( [LWP_Counter:pulseTimePerDay] < [$SELF:RunTimePerDay] ## Die maximale Laufzeit der LWP/Tag ist noch nicht erreicht\
|
||||
or [LWP_Counter:countsPerDay] eq 0) ## oder die LWP ist noch gar nicht gelaufen\
|
||||
)\
|
||||
or [$SELF:ui_command_1] eq "04_1_LWP_Nachheizen_WW" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 04_1 : LWP on for water heating"};;\
|
||||
## Es wird die Soll Temperatur um die Hysterese angehoben \
|
||||
::CommandSet(undef, "Heizung hotWaterTemperatureTarget ".(ReadingsVal("Heizung","hotWaterTemperature",48)+5));;\
|
||||
## Das zurücksetzen auf den Standard von 50° erfolgt generell beim Abschalten\
|
||||
set_Reading("LWP_Status","Nachheizen");;\
|
||||
\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 04_1 : LWP hotWaterTemperatureTarget ".ReadingsVal("Heizung","hotWaterTemperatureTarget",0)};;\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## Hohe Priorität im Winter für die LWP\
|
||||
## Einschalten, wenn der Pool läuft, der Speicher geladen ist und noch Überschuss da ist.\
|
||||
##\
|
||||
04_2_LWP_Prioritaet_An\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
( [WR_ctl:Yield_fc0_day] < [WR_1_Speicher_1_ExternControl:SpeicherMaxSOC_fc1_Limit] ## Im Herbst/Winter ist wenig zu erwarten\
|
||||
and [WR_1:SW_Total_PV_P_reserve] >= 2000 ## es besteht jedoch noch eine Reserve und der\
|
||||
and [shelly02:power_0] > 800 ## Pool wird gerade aufgeheizt, was im Winter auch in der Nacht passiert\
|
||||
and [WR_1:Act_state_of_charge] > 60 ## Der Speicher sollte schon 60 % gefüllt sein\
|
||||
and [Heizung:hotWaterTemperature] < 60 ## und die WW Temperatur noch unter 60°\
|
||||
and [$SELF:LWP_Priority] eq "frei" ## Aber nur einmal am Tag\
|
||||
)\
|
||||
or [$SELF:ui_command_1] eq "04_2_LWP_Prioritaet_An" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 04_2 : LWP Priorität"};;\
|
||||
\
|
||||
PV_Modus_Ein_LWP();;\
|
||||
set_Reading("LWP_Status","An");;\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## LWP Ende\
|
||||
##\
|
||||
05___LWP_Ende\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
( [StromZaehler_Heizung:SMAEM1901401955_Bezug_Wirkleistung] < 300\
|
||||
and\
|
||||
( [$SELF:LWP_Status] eq "An"\
|
||||
or [$SELF:LWP_Status] eq "manuell"\
|
||||
or [$SELF:LWP_Status] eq "Nachheizen"\
|
||||
)\
|
||||
and [LWP_Counter:pulseTimePerDay] >= [$SELF:RunTimeMin]\
|
||||
and ([Heizung:opStateHeatPump1] ne "Wärmepumpe läuft" or [Heizung:opStateHeatPump3] eq "Luftabtauen" )\
|
||||
)\
|
||||
or [$SELF:ui_command_1] eq "05___LWP_Ende" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 05__ : LWP run finished"};;\
|
||||
\
|
||||
PV_Modus_Aus_LWP();;\
|
||||
set_Reading("LWP_Status","Aus");;\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## Priorität für LWP wieder frei geben, damit einmal am Tag der PV-Modus verwendet werden kann\
|
||||
##\
|
||||
06___LWP_Prioritaet_Reset\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
[23:55]\
|
||||
or [$SELF:ui_command_1] eq "06___LWP_Prioritaet_Reset" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 06__ : LWP Priorität frei"};;\
|
||||
set_Reading("LWP_Priority","frei");; ## Der PV-Modus darf wieder verwendet weden\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## In der Überganszeit wird die Heizung kurz vor der PV-Zeit wieder ein geschaltet\
|
||||
## Während des Winters kann man die Heizung bis in die Morgenstunden ganz abschalten (Accu sparen)\
|
||||
##\
|
||||
07_1_Heizung_An\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
[[$SELF:TimeStartHeizung]] ## Einschalten der Heizung, damit aus dem Puffer nachgeheizt wird 02:03\
|
||||
or [$SELF:ui_command_1] eq "07_1_Heizung_An" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 07_1 : LWP Heizung Automatik"};;\
|
||||
::CommandSet(undef, "Heizung opModeHeating Auto");; ## Die Heizungssteuerung erfolgt wieder Automatisch\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
################################################################################################################\
|
||||
## Während des Winters kann man die Heizung bis in die Morgenstunden ganz abschalten (Accu sparen)\
|
||||
##\
|
||||
07_2_Heizung_Aus\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
[[$SELF:TimeEndHeizung]] ## Abschalten der Heizung, damit der Puffer für morgens Heizreserve hat\
|
||||
or [$SELF:ui_command_1] eq "07_2_Heizung_Aus" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 07_2 : LWP Heizung aus"};;\
|
||||
::CommandSet(undef, "Heizung opModeHeating Off");; ## Die Heizung wird komplett abgeschaltet\
|
||||
\
|
||||
if ( [WR_ctl:Yield_fc1_day] < [WR_1_Speicher_1_ExternControl:SpeicherMinSOC_fc1_Limit] ## Auch morgen ist das Wetter schlecht\
|
||||
and [Heizung:averageAmbientTemperature] <= 5.6 ) { ## Die Heizgrenze ist schon ziemlich tief\
|
||||
set_Reading("TimeStartHeizung",[$SELF:TimeStartHeizungWinter]);; ## Im Winter bis in die Morgenstunden den Accu sparen\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 07_2 : Parameter: ".[WR_ctl:Yield_fc1_day]." < ".[WR_1_Speicher_1_ExternControl:SpeicherMinSOC_fc1_Limit]." and ".[Heizung:averageAmbientTemperature]." <= 5.6"};;\
|
||||
} else {\
|
||||
set_Reading("TimeStartHeizung",[$SELF:TimeStartHeizungUebergang]);; ## Bei schönerem Wetter erst später Heizen\
|
||||
}\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 07_2 : TimeStartHeizung switched to ".[$SELF:TimeStartHeizung]};;\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
\
|
||||
################################################################################################################\
|
||||
## Heizung im Wohnzimmer auf 19°\
|
||||
##\
|
||||
07_3_Heizung_WZ_19_Grad\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
[$SELF:ui_command_1] eq "07_3_Heizung_WZ_19_Grad" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 07_3 : Heizung WZ 19 Grad"};;\
|
||||
::CommandSet(undef, "Thermostat_WO desired-temp 19");; ## Die Warmwasserbereitung wird ausgeschaltet\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
\
|
||||
################################################################################################################\
|
||||
## Heizung im Wohnzimmer auf 22°\
|
||||
##\
|
||||
07_4_Heizung_WZ_22_Grad\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
[$SELF:ui_command_1] eq "07_4_Heizung_WZ_22_Grad" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 07_4 : Heizung WZ 22 Grad"};;\
|
||||
::CommandSet(undef, "Thermostat_WO desired-temp 22");; ## Die Warmwasserbereitung wird ausgeschaltet\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
\
|
||||
################################################################################################################\
|
||||
## Warmwasser Bereitung aus\
|
||||
##\
|
||||
07_5_Warmwasser_aus\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
[$SELF:ui_command_1] eq "07_5_Warmwasser_aus" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 07_5 : LWP Warmwasser aus"};;\
|
||||
::CommandSet(undef, "Heizung opModeHotWater Off");; ## Die Warmwasserbereitung wird ausgeschaltet\
|
||||
::CommandSet(undef, "n_Zirkulation inactive");; ## Zirkulation ebenfalls abschalten\
|
||||
::CommandSet(undef, "Heizung statusRequest");; ## Einen aktuellen Status abholen\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
\
|
||||
################################################################################################################\
|
||||
## Warmwasser Bereitung auf Automatik\
|
||||
##\
|
||||
07_6_Warmwasser_an\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
[$SELF:ui_command_1] eq "07_6_Warmwasser_an" ## Hier wird das uiTable select ausgewertet\
|
||||
) {\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 07_6 : LWP Warmwasser Automatik"};;\
|
||||
::CommandSet(undef, "Heizung opModeHotWater Auto");; ## Die Warmwassersteuerung erfolgt wieder automatisch\
|
||||
::CommandSet(undef, "n_Zirkulation active");; ## Zirkulation wieder einschalten\
|
||||
::CommandSet(undef, "Heizung statusRequest");; ## Einen aktuellen Status abholen\
|
||||
\
|
||||
set_Reading("ui_command_1","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
\
|
||||
################################################################################################################\
|
||||
## 12 Stromboerse\
|
||||
##\
|
||||
12_Stromboerse\
|
||||
{if( !([$SELF:state] eq "off") ## DOIF enabled\
|
||||
and\
|
||||
(( [WR_ctl:Yield_fc0_day] < [WR_1_Speicher_1_ExternControl:SpeicherMinSOC_fc1_Limit] ## Im Herbst/Winter ist wenig zu erwarten\
|
||||
\
|
||||
and [$SELF:LWP_Stromboerse] eq "Tibber" ## Soll Tibber verwendet werden?\
|
||||
and [EVU_Tibber_connect:fc0_trigger] ## Wurde der Trigger geändert\
|
||||
)\
|
||||
or [$SELF:ui_command_4] eq "12_Stromboerse" ## Hier wird das uiTable select ausgewertet\
|
||||
)\
|
||||
) {\
|
||||
\
|
||||
if ([?EVU_Tibber_connect:fc0_trigger] eq "on") {\
|
||||
set_Reading("LWP_TriggerLaden","An");;\
|
||||
\
|
||||
if ([?Heizung:opModeHeating] eq "Off") { ## Ist die Heizung abgeschaltet ?\
|
||||
set_Reading("LWP_Stromborse_Heizung_before","Off");; ## Den vorherigen Zustand merken\
|
||||
::CommandSet(undef, "Heizung opModeHeating Auto");; ## Die Heizungssteuerung erfolgt wieder Automatisch\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 12_1 : LWP Heizung Automatik"};;\
|
||||
}\
|
||||
\
|
||||
PV_Modus_Ein_LWP();;\
|
||||
set_Reading("LWP_Status","warten");;\
|
||||
set_Exec("LWP_Man_timer",180,'set_Reading("LWP_Status","Stromboerse")');; ## Den Status verzögert ändern\
|
||||
\
|
||||
if (AttrVal("$SELF","verbose",0) >= 3)\
|
||||
{Log 3, "$SELF 12_Stromboerse : PV-Modus Start"};;\
|
||||
\
|
||||
} else {\
|
||||
set_Reading("LWP_TriggerLaden","Aus");;\
|
||||
\
|
||||
PV_Modus_Aus_LWP();;\
|
||||
set_Reading("LWP_Status","Aus");;\
|
||||
\
|
||||
if (AttrVal("$SELF","verbose",0) >= 3)\
|
||||
{Log 3, "$SELF 12_Stromboerse : PV-Modus Stop"};;\
|
||||
\
|
||||
if ([$SELF:LWP_Stromborse_Heizung_before] eq "Off") { ## War die Heizung vorher abgeschaltet ?\
|
||||
set_Reading("LWP_Stromborse_Heizung_before","Auto");; ## Den jetzigen Zustand merken\
|
||||
::CommandSet(undef, "Heizung opModeHeating Off");; ## Die Heizungssteuerung wieder abschalten\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 12_1 : LWP Heizung Off, wie zuvor"};;\
|
||||
}\
|
||||
\
|
||||
}\
|
||||
\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF 12_Stromboerse : ".[EVU_Tibber_connect:fc0_trigger]." by ".[$SELF:LWP_Stromboerse]};;\
|
||||
\
|
||||
set_Reading("ui_command_4","---");; ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
|
||||
## kann das Kommando nicht sofort wiederholt werden\
|
||||
}\
|
||||
}\
|
||||
\
|
||||
################################################################################################################\
|
||||
## Definition von Sub Routinen\
|
||||
subs {\
|
||||
sub PV_Modus_Ein_LWP() { ## PV-Modus Einschalten\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF sub : LWP on"};;\
|
||||
fhem("".ReadingsVal("$SELF","SetCmdOn",0));;\
|
||||
::CommandSet(undef, "Heizung hotWaterTemperatureTarget 60.0");;\
|
||||
set_Reading("LWP_Priority","verwendet");;\
|
||||
}\
|
||||
\
|
||||
sub PV_Modus_Aus_LWP() { ## PV-Modus Ausschalten\
|
||||
if (AttrVal("$SELF","verbose",0) >=3)\
|
||||
{Log 3, "$SELF sub : LWP off"};;\
|
||||
fhem("".ReadingsVal("$SELF","SetCmdOff",0));;\
|
||||
::CommandSet(undef, "Heizung hotWaterTemperatureTarget 50.0");;\
|
||||
}\
|
||||
}
|
||||
attr LWP_PV_Perl DbLogExclude .*
|
||||
attr LWP_PV_Perl DbLogInclude state,cmd.*,Device,LWP_Status,wait_timer
|
||||
attr LWP_PV_Perl alias LWP_PV_Perl
|
||||
attr LWP_PV_Perl comment Version 2023.01.18 09:00
|
||||
attr LWP_PV_Perl disable 0
|
||||
attr LWP_PV_Perl group PV Eigenverbrauch-Steuerung
|
||||
attr LWP_PV_Perl icon sani_earth_source_heat_pump
|
||||
attr LWP_PV_Perl room Heizung->System,Strom->Photovoltaik
|
||||
attr LWP_PV_Perl sortby 411
|
||||
attr LWP_PV_Perl uiTable {\
|
||||
package ui_Table;;\
|
||||
$TABLE = "style='width:100%;;'";;\
|
||||
\
|
||||
$TD{0..10}{0} = "align='center' style='font-size:16px;;border-right-style:solid;;border-color:darkgreen;;border-right-width:2px;;width:26%'";;\
|
||||
\
|
||||
$TD{0..10}{1} = "style='border-top-style:solid;;border-bottom-style:solid;;border-right-style:solid;;border-color:darkgreen;;border-top-width:2px;;border-bottom-width:2px;;border-right-width:1px;;width:36%;;font-weight:bold;;'";;\
|
||||
$TD{0..10}{2..4} = "style='border-top-style:solid;;border-bottom-style:solid;;border-right-style:solid;;border-color:darkgreen;;border-top-width:2px;;border-bottom-width:2px;;border-right-width:1px;;width:8%;;text-align:center;;'";;\
|
||||
$TD{0..10}{5} = "style='border-top-style:solid;;border-bottom-style:solid;;border-right-style:solid;;border-color:darkgreen;;border-top-width:2px;;border-bottom-width:2px;;border-right-width:2px;;width:8%;;text-align:center;;'";;\
|
||||
\
|
||||
sub FUNC_Status {\
|
||||
my($value, $min, $colorMin, $statusMin, $colorMiddel, $statusMiddle, $max, $colorMax, $statusMax)=@_;;\
|
||||
my $ret = ($value < $min)? '<span style="color:'.$colorMin.'">'.$statusMin.'</span>' : ($value > $max)? '<span style="color:'.$colorMax.'">'.$statusMax.'</span>' : '<span style="color:'.$colorMiddel.'">'.$statusMiddle.'</span>';;\
|
||||
return $ret;;\
|
||||
}\
|
||||
\
|
||||
}\
|
||||
\
|
||||
"$SELF"|\
|
||||
::ReadingsTimestamp("Heizung","counterHeatQTotal","")."<dd>Status / LWP Status / Brauchwasser</dd>" |\
|
||||
widget([$SELF:ui_command_1],"uzsuDropDown,---,01_1_Eigenverbrauch_automatisch_An,01_2_Eigenverbrauch_manuell_An,01_3_Eigenverbrauch_manuell_Aus,02_1_Eigenverbrauch_abschalten_Laufzeit,02_2_Eigenverbrauch_abschalten_PV_Min,03___Stop_Wait_Timer,04_1_LWP_Nachheizen_WW,04_2_LWP_Prioritaet_An,05___LWP_Ende,06___LWP_Prioritaet_Reset,07_1_Heizung_An,07_2_Heizung_Aus,07_3_Heizung_WZ_19_Grad,07_4_Heizung_WZ_22_Grad,07_5_Warmwasser_aus,07_6_Warmwasser_an") |\
|
||||
[Heizung:opStateHeatPump1]." ".[Heizung:opStateHeatPump2]|\
|
||||
[Heizung:opStateHeatPump3]|\
|
||||
FUNC_Status([Heizung:hotWaterTemperature],47,"orange",[Heizung:hotWaterTemperature],"green",[Heizung:hotWaterTemperature],53,"red",[Heizung:hotWaterTemperature])." °C"\
|
||||
\
|
||||
|\
|
||||
"Konfiguration<dd>PowerLevelMinTime, | PowerLimit On/Off | Time Start/End</dd><dd>RunTime Min/PerDay</dd>"|\
|
||||
""|\
|
||||
widget([$SELF:PowerLevelMinTime],"selectnumbers,60,60,900,0,lin")."<br>".widget([$SELF:RunTimeMin],"selectnumbers,300,300,7200,0,lin").widget([$SELF:RunTimePerDay],"selectnumbers,900,300,28800,0,lin")|\
|
||||
widget([$SELF:PowerLimitOn],"selectnumbers,1000,250,4000,0,lin").widget([$SELF:PowerLimitOff],"selectnumbers,1000,250,4000,0,lin")|\
|
||||
widget([$SELF:TimeStart],"time").widget([$SELF:TimeEnd],"time")\
|
||||
\
|
||||
|\
|
||||
"<dd>PV-Modus / Heiz-Modus / Winter, Übergangszeit Heiz Start/Ende</dd>"|\
|
||||
"PV-Modus:<br>".[$SELF:LWP_Priority]." / ".(([$SELF:LWP_Status] ne "Aus")?'<span style="color:green">'.[$SELF:LWP_Status].'</span>' : '<span style="color:black">'.[$SELF:LWP_Status].'</span>')|\
|
||||
"Heizung: ".[Heizung:opModeHeating]."<br>Warmwasser: ".[Heizung:opModeHotWater]|\
|
||||
widget([$SELF:TimeStartHeizungWinter],"time").widget([$SELF:TimeStartHeizungUebergang],"time")|\
|
||||
[$SELF:TimeStartHeizung].widget([$SELF:TimeEndHeizung],"time")\
|
||||
\
|
||||
|\
|
||||
"Strombörse<dd>Auswahl / Ladefenster / Trigger Status </dd>" |\
|
||||
widget([$SELF:LWP_Stromboerse],"uzsuDropDown,Aus,Tibber") | \
|
||||
"<span style=font-weight:bold>Trigger fc0</span><br><br>".Format("trigger_0")|\
|
||||
"<span style=font-weight:bold>Trigger fc1</span><br><br>".Format("trigger_1")|\
|
||||
[EVU_Tibber_connect:fc0_trigger]\
|
||||
\
|
||||
|"Statistiken"|"Zähler"|""|"Information"|"Wert"\
|
||||
|""|"EVU"|""|"Gesamt"|sprintf("%06d kWh",[EVU_StromZaehler:Strom_Status-02])\
|
||||
|""|"Heizung"|""|"LWP/KWL"|sprintf("%06d kWh",[StromZaehler_Heizung:SMAEM1901401955_Bezug_Wirkleistung_Zaehler])\
|
||||
|""|"LWP"|""|"Heizung"|sprintf("%06d kWh",[Heizung:counterHeatQHeating])\
|
||||
|""|"LWP"|""|"Warmwasser"|sprintf("%06d kWh",[Heizung:counterHeatQHotWater])\
|
||||
|""|"LWP"|""|"Photovoltaik"|sprintf("%06d kWh",[Heizung:counterHeatQPool])\
|
||||
|""|"LWP"|""|"Gesamt"|sprintf("%06d kWh",[Heizung:counterHeatQTotal])\
|
||||
|
||||
attr LWP_PV_Perl verbose 3
|
||||
|
||||
setstate LWP_PV_Perl 2024-02-07 23:55:00 LWP_Priority frei
|
||||
setstate LWP_PV_Perl 2024-02-05 11:09:07 LWP_Status Aus
|
||||
setstate LWP_PV_Perl 2023-12-11 14:54:21 LWP_Stromboerse Aus
|
||||
setstate LWP_PV_Perl 2023-12-11 14:54:19 LWP_TriggerLaden Aus
|
||||
setstate LWP_PV_Perl 2022-05-13 12:21:48 PowerLevelMinTime 600
|
||||
setstate LWP_PV_Perl 2022-05-10 15:51:44 PowerLimitOff 3000
|
||||
setstate LWP_PV_Perl 2022-05-10 15:50:44 PowerLimitOn 2250
|
||||
setstate LWP_PV_Perl 2022-10-25 19:00:12 RunTimeMin 2400
|
||||
setstate LWP_PV_Perl 2022-05-10 15:55:35 RunTimePerDay 28800
|
||||
setstate LWP_PV_Perl 2022-05-10 16:23:06 SetCmdOff set shelly01 off 0
|
||||
setstate LWP_PV_Perl 2022-05-10 16:23:24 SetCmdOn set shelly01 on 0
|
||||
setstate LWP_PV_Perl 2022-05-10 15:50:37 TimeEnd 15:05
|
||||
setstate LWP_PV_Perl 2023-02-07 13:27:25 TimeEndHeizung 18:35
|
||||
setstate LWP_PV_Perl 2022-05-10 15:50:19 TimeStart 11:30
|
||||
setstate LWP_PV_Perl 2024-02-07 18:35:00 TimeStartHeizung 09:50
|
||||
setstate LWP_PV_Perl 2022-05-13 16:37:59 TimeStartHeizungUebergang 09:50
|
||||
setstate LWP_PV_Perl 2022-12-17 16:11:07 TimeStartHeizungWinter 02:05
|
||||
|
||||
setstate LWP_PV_Perl 2024-02-08 09:50:00 ui_command_1 ---
|
||||
setstate LWP_PV_Perl 2023-12-11 14:54:19 ui_command_4 ---
|
@ -0,0 +1,45 @@
|
||||
defmod shelly01 Shelly 192.168.178.54
|
||||
attr shelly01 DbLogExclude .*
|
||||
attr shelly01 DbLogInclude relay.*,power.*,energy.*
|
||||
attr shelly01 alias LWP
|
||||
attr shelly01 comment Version 2020.10.19 18:28
|
||||
attr shelly01 event-on-change-reading relay.*,power.*,energy.*,state,network
|
||||
attr shelly01 group PV Eigenverbrauch-Steuerung
|
||||
attr shelly01 icon taster_ch_1
|
||||
attr shelly01 mode relay
|
||||
attr shelly01 model shelly1pm
|
||||
attr shelly01 room Shelly,Heizung->System,Strom->Photovoltaik
|
||||
attr shelly01 sortby 412
|
||||
attr shelly01 stateFormat {\
|
||||
my $link = ReadingsVal($name,"WebLink","none");;\
|
||||
\
|
||||
my $e0 = sprintf("%08.2f KWh",ReadingsVal("StromZaehler_Heizung","SMAEM1901401955_Bezug_Wirkleistung_Zaehler",0));;\
|
||||
my $r0 = (ReadingsVal($name,"relay","") eq "off") ? "<span style='color:red'>off</span>":"<span style='color:green'>on</span>";;\
|
||||
my $p0 = sprintf("%06.1f Watt",ReadingsVal("StromZaehler_Heizung","SMAEM1901401955_Bezug_Wirkleistung",0));;\
|
||||
\
|
||||
"<html><table border=2 bordercolor='darkgreen' cellspacing=0 style='width: 100%'>\
|
||||
<colgroup>\
|
||||
<col span='1' style='width: 30%;;'>\
|
||||
<col span='1' style='width: 30%;;'>\
|
||||
<col span='1' style='width: 20%;;'>\
|
||||
</colgroup>\
|
||||
<tr>\
|
||||
<td style='text-align:left'>\
|
||||
</td>\
|
||||
<td style='text-align:left'>\
|
||||
WebLink: $link\
|
||||
</td>\
|
||||
<td style='text-align:right'>\
|
||||
Wärmepumpe Gesamt 0: $e0<br>\
|
||||
<td style='text-align:right'>\
|
||||
Relais 0: $r0 $p0<br>\
|
||||
</td>\
|
||||
</tr>\
|
||||
</table>\
|
||||
</html>"\
|
||||
}
|
||||
attr shelly01 timeout 8
|
||||
attr shelly01 userReadings WebLink:network.* { my $ip=ReadingsVal($name,"network","na");; $ip =~ s/connected to //gs;; $ip =~ s/<[^>]*>//gs;; return("<a href='http://".$ip."/'>".$ip."</a>") },\
|
||||
\
|
||||
energy_Total:energy.* monotonic { ReadingsVal($name,"energy",0) }
|
||||
attr shelly01 webCmd |
|
Loading…
x
Reference in New Issue
Block a user