mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-19 18:56:03 +00:00
76_SolarForecast.pm: contrib 0.65.5
git-svn-id: https://svn.fhem.de/fhem/trunk@26228 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
6f35311962
commit
d43851d2d2
@ -120,6 +120,8 @@ BEGIN {
|
|||||||
|
|
||||||
# Versions History intern
|
# Versions History intern
|
||||||
my %vNotesIntern = (
|
my %vNotesIntern = (
|
||||||
|
"0.65.5 "=> "13.07.2022 extend isInterruptable and isAddSwitchOffCond ",
|
||||||
|
"0.65.4 "=> "11.07.2022 new function isConsumerLogOn, minor fixes ",
|
||||||
"0.65.3 "=> "10.07.2022 consumer with mode=must are now interruptable, change hourscsme ",
|
"0.65.3 "=> "10.07.2022 consumer with mode=must are now interruptable, change hourscsme ",
|
||||||
"0.65.2 "=> "08.07.2022 change avgenergy to W p. hour ",
|
"0.65.2 "=> "08.07.2022 change avgenergy to W p. hour ",
|
||||||
"0.65.1 "=> "07.07.2022 change logic of __calcEnergyPieces function and the \%hef hash ",
|
"0.65.1 "=> "07.07.2022 change logic of __calcEnergyPieces function and the \%hef hash ",
|
||||||
@ -2323,7 +2325,7 @@ sub _specialActivities {
|
|||||||
$data{$type}{$name}{consumers}{$c}{onoff} = "off";
|
$data{$type}{$name}{consumers}{$c}{onoff} = "off";
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteReadingspec ($hash, "consumer.*_planned.*");
|
# deleteReadingspec ($hash, "consumer.*_planned.*");
|
||||||
|
|
||||||
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
||||||
|
|
||||||
@ -2836,20 +2838,8 @@ sub _manageConsumerData {
|
|||||||
## Laufzeit (in Minuten) wird pro Stunde erfasst
|
## Laufzeit (in Minuten) wird pro Stunde erfasst
|
||||||
## bei Tageswechsel Rücksetzen in _specialActivities
|
## bei Tageswechsel Rücksetzen in _specialActivities
|
||||||
#######################################################
|
#######################################################
|
||||||
my $nompower = ConsumerVal ($hash, $c, "power", 0); # nominale Leistung lt. Typenschild
|
|
||||||
my $rpcurr = ConsumerVal ($hash, $c, "rpcurr", ""); # Reading für akt. Verbrauch angegeben ?
|
|
||||||
|
|
||||||
if (!$rpcurr && isConsumerPhysOn($hash, $c)) { # Workaround wenn Verbraucher ohne Leistungsmessung
|
|
||||||
$pcurr = $nompower;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $currpowerpercent = $pcurr;
|
|
||||||
$currpowerpercent = (($pcurr / $nompower) * 100) if($nompower > 0);
|
|
||||||
|
|
||||||
$data{$type}{$name}{consumers}{$c}{currpowerpercent} = $currpowerpercent;
|
|
||||||
|
|
||||||
my $starthour;
|
my $starthour;
|
||||||
if($pcurr > $ethreshold || $currpowerpercent > $defpopercent) { # Verbraucher ist aktiv
|
if(isConsumerLogOn ($hash, $c, $pcurr)) { # Verbraucher ist logisch "an"
|
||||||
if(ConsumerVal ($hash, $c, "onoff", "off") eq "off") {
|
if(ConsumerVal ($hash, $c, "onoff", "off") eq "off") {
|
||||||
$data{$type}{$name}{consumers}{$c}{startTime} = $t;
|
$data{$type}{$name}{consumers}{$c}{startTime} = $t;
|
||||||
$data{$type}{$name}{consumers}{$c}{onoff} = "on";
|
$data{$type}{$name}{consumers}{$c}{onoff} = "on";
|
||||||
@ -3518,13 +3508,13 @@ sub ___switchConsumerOn {
|
|||||||
|
|
||||||
$state = qq{switching Consumer "$calias" to "$oncom"};
|
$state = qq{switching Consumer "$calias" to "$oncom"};
|
||||||
|
|
||||||
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
||||||
|
|
||||||
Log3 ($name, 2, "$name - $state (Automatic = $auto)");
|
Log3 ($name, 2, "$name - $state (Automatic = $auto)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif (isInterruptible($hash, $c) && isConsRcmd ($hash, $c) && # unterbrochenen Consumer fortsetzen
|
elsif (((isInterruptable($hash, $c) == 1 && isConsRcmd ($hash, $c)) || isInterruptable($hash, $c) == 3) && # unterbrochenen Consumer fortsetzen
|
||||||
isInTimeframe ($hash, $c) && simplifyCstate ($pstate) =~ /interrupted|interrupting/xs &&
|
isInTimeframe ($hash, $c) && simplifyCstate ($pstate) =~ /interrupted|interrupting/xs &&
|
||||||
$auto && $oncom) {
|
$auto && $oncom) {
|
||||||
|
|
||||||
CommandSet(undef,"$cname $oncom");
|
CommandSet(undef,"$cname $oncom");
|
||||||
@ -3535,7 +3525,8 @@ sub ___switchConsumerOn {
|
|||||||
|
|
||||||
delete $paref->{ps};
|
delete $paref->{ps};
|
||||||
|
|
||||||
$state = qq{switching Consumer "$calias" to "$oncom", caution: continuing by surplus};
|
my $caution = isInterruptable($hash, $c) == 3 ? 'interrupt condition no longer present' : 'existing surplus';
|
||||||
|
$state = qq{switching Consumer "$calias" to "$oncom", caution: $caution};
|
||||||
|
|
||||||
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
||||||
|
|
||||||
@ -3566,6 +3557,7 @@ sub ___switchConsumerOff {
|
|||||||
|
|
||||||
my $offcom = ConsumerVal ($hash, $c, "offcom", ""); # Set Command für "off"
|
my $offcom = ConsumerVal ($hash, $c, "offcom", ""); # Set Command für "off"
|
||||||
my ($swoffcond,$info,$err) = isAddSwitchOffCond ($hash, $c); # zusätzliche Switch on Bedingung
|
my ($swoffcond,$info,$err) = isAddSwitchOffCond ($hash, $c); # zusätzliche Switch on Bedingung
|
||||||
|
my $caution;
|
||||||
|
|
||||||
Log3 ($name, 1, "$name - $err") if($err);
|
Log3 ($name, 1, "$name - $err") if($err);
|
||||||
|
|
||||||
@ -3587,15 +3579,15 @@ sub ___switchConsumerOff {
|
|||||||
|
|
||||||
delete $paref->{ps};
|
delete $paref->{ps};
|
||||||
|
|
||||||
my $caution = $swoffcond ? "switch-off condition (key swoffcond) is true" : "planned switch-off time reached/exceeded";
|
$caution = $swoffcond ? "switch-off condition (key swoffcond) is true" : "planned switch-off time reached/exceeded";
|
||||||
$state = qq{switching Consumer "$calias" to "$offcom", caution: $caution};
|
$state = qq{switching Consumer "$calias" to "$offcom", caution: $caution};
|
||||||
|
|
||||||
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
||||||
|
|
||||||
Log3 ($name, 2, "$name - $state (Automatic = $auto)");
|
Log3 ($name, 2, "$name - $state (Automatic = $auto)");
|
||||||
}
|
}
|
||||||
elsif (isInterruptible($hash, $c) && !isConsRcmd ($hash, $c) && # Consumer unterbrechen
|
elsif (((isInterruptable($hash, $c) == 1 && !isConsRcmd ($hash, $c)) || isInterruptable($hash, $c) == 2) && # Consumer unterbrechen
|
||||||
isInTimeframe ($hash, $c) && simplifyCstate ($pstate) =~ /started|continued|interrupting/xs &&
|
isInTimeframe ($hash, $c) && simplifyCstate ($pstate) =~ /started|continued|interrupting/xs &&
|
||||||
$auto && $offcom) {
|
$auto && $offcom) {
|
||||||
|
|
||||||
CommandSet(undef,"$cname $offcom");
|
CommandSet(undef,"$cname $offcom");
|
||||||
@ -3606,7 +3598,8 @@ sub ___switchConsumerOff {
|
|||||||
|
|
||||||
delete $paref->{ps};
|
delete $paref->{ps};
|
||||||
|
|
||||||
$state = qq{switching Consumer "$calias" to "$offcom", caution: surplus shortage};
|
$caution = isInterruptable($hash, $c) == 2 ? 'interrupt condition' : 'surplus shortage';
|
||||||
|
$state = qq{switching Consumer "$calias" to "$offcom", caution: $caution};
|
||||||
|
|
||||||
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
||||||
|
|
||||||
@ -3654,7 +3647,7 @@ sub ___setConsumerSwitchingState {
|
|||||||
|
|
||||||
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
||||||
|
|
||||||
Log3 ($name, 2, "$name - $state (Automatic = $auto)");
|
Log3 ($name, 2, "$name - $state");
|
||||||
}
|
}
|
||||||
elsif ($pstate eq 'stopping' && isConsumerPhysOff ($hash, $c)) {
|
elsif ($pstate eq 'stopping' && isConsumerPhysOff ($hash, $c)) {
|
||||||
$paref->{ps} = "switched off:";
|
$paref->{ps} = "switched off:";
|
||||||
@ -3669,7 +3662,7 @@ sub ___setConsumerSwitchingState {
|
|||||||
|
|
||||||
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
writeDataToFile ($hash, "consumers", $csmcache.$name); # Cache File Consumer schreiben
|
||||||
|
|
||||||
Log3 ($name, 2, "$name - $state (Automatic = $auto)");
|
Log3 ($name, 2, "$name - $state");
|
||||||
}
|
}
|
||||||
elsif ($pstate eq 'continuing' && isConsumerPhysOn ($hash, $c)) {
|
elsif ($pstate eq 'continuing' && isConsumerPhysOn ($hash, $c)) {
|
||||||
$paref->{ps} = "continued:";
|
$paref->{ps} = "continued:";
|
||||||
@ -4424,7 +4417,7 @@ sub collectAllRegConsumers {
|
|||||||
|
|
||||||
my $interruptable = 0;
|
my $interruptable = 0;
|
||||||
if(exists $hc->{interruptable}) {
|
if(exists $hc->{interruptable}) {
|
||||||
$interruptable = 1 if($hc->{interruptable} ne '0');
|
$interruptable = $hc->{interruptable} if($hc->{interruptable} ne '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
my $rauto = $hc->{auto} // q{};
|
my $rauto = $hc->{auto} // q{};
|
||||||
@ -7413,7 +7406,7 @@ sub isConsumerPhysOn {
|
|||||||
|
|
||||||
if(!$defs{$cname}) {
|
if(!$defs{$cname}) {
|
||||||
Log3($name, 1, qq{$name - the consumer device "$cname" is invalid, the "on" state can't be identified});
|
Log3($name, 1, qq{$name - the consumer device "$cname" is invalid, the "on" state can't be identified});
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $reg = ConsumerVal ($hash, $c, "onreg", "on");
|
my $reg = ConsumerVal ($hash, $c, "onreg", "on");
|
||||||
@ -7424,11 +7417,11 @@ sub isConsumerPhysOn {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# Funktion liefert 1 wenn Consumer physisch "ausngeschaltet"
|
# Funktion liefert 1 wenn Consumer physisch "ausgeschaltet"
|
||||||
# ist, d.h. der Wert offreg des Readings rswstate wahr ist
|
# ist, d.h. der Wert offreg des Readings rswstate wahr ist
|
||||||
################################################################
|
################################################################
|
||||||
sub isConsumerPhysOff {
|
sub isConsumerPhysOff {
|
||||||
@ -7440,7 +7433,7 @@ sub isConsumerPhysOff {
|
|||||||
|
|
||||||
if(!$defs{$cname}) {
|
if(!$defs{$cname}) {
|
||||||
Log3($name, 1, qq{$name - the consumer device "$cname" is invalid, the "off" state can't be identified});
|
Log3($name, 1, qq{$name - the consumer device "$cname" is invalid, the "off" state can't be identified});
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $reg = ConsumerVal ($hash, $c, "offreg", "off");
|
my $reg = ConsumerVal ($hash, $c, "offreg", "off");
|
||||||
@ -7451,7 +7444,53 @@ sub isConsumerPhysOff {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
# Funktion liefert 1 wenn Consumer logisch "eingeschaltet"
|
||||||
|
# ist, d.h. wenn der Energieverbrauch über einem bestimmten
|
||||||
|
# Schwellenwert oder der prozentuale Verbrauch über dem
|
||||||
|
# Defaultwert $defpopercent ist.
|
||||||
|
#
|
||||||
|
# Logisch "on" schließt physisch "on" mit ein.
|
||||||
|
################################################################
|
||||||
|
sub isConsumerLogOn {
|
||||||
|
my $hash = shift;
|
||||||
|
my $c = shift;
|
||||||
|
my $pcurr = shift // 0;
|
||||||
|
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
my $cname = ConsumerVal ($hash, $c, "name", ""); # Devicename Customer
|
||||||
|
|
||||||
|
if(!$defs{$cname}) {
|
||||||
|
Log3($name, 1, qq{$name - the consumer device "$cname" is invalid, the "on" state can't be identified});
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isConsumerPhysOff($hash, $c)) { # Device ist physisch ausgeschaltet
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $type = $hash->{TYPE};
|
||||||
|
my $nompower = ConsumerVal ($hash, $c, "power", 0); # nominale Leistung lt. Typenschild
|
||||||
|
my $rpcurr = ConsumerVal ($hash, $c, "rpcurr", ""); # Reading für akt. Verbrauch angegeben ?
|
||||||
|
my $ethreshold = ConsumerVal ($hash, $c, "energythreshold", 0); # Schwellenwert (Wh pro Stunde) ab der ein Verbraucher als aktiv gewertet wird
|
||||||
|
|
||||||
|
if (!$rpcurr && isConsumerPhysOn($hash, $c)) { # Workaround wenn Verbraucher ohne Leistungsmessung
|
||||||
|
$pcurr = $nompower;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $currpowerpercent = $pcurr;
|
||||||
|
$currpowerpercent = ($pcurr / $nompower) * 100 if($nompower > 0);
|
||||||
|
|
||||||
|
$data{$type}{$name}{consumers}{$c}{currpowerpercent} = $currpowerpercent;
|
||||||
|
|
||||||
|
if($pcurr > $ethreshold || $currpowerpercent > $defpopercent) { # Verbraucher ist logisch aktiv
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
@ -7490,8 +7529,11 @@ return (0, $info, $err);
|
|||||||
}
|
}
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# Funktion liefert "1" wenn die vorrangige Ausschaltbedingung
|
# Funktion liefert "1" wenn eine Ausschaltbedingung
|
||||||
# aus dem Schlüssel "swoffcond" im Consumer Attribut wahr ist
|
# erfüllt ist
|
||||||
|
# ("swoffcond" oder "interruptable" im Consumer Attribut)
|
||||||
|
# Der Inhalt von "interruptable" wird optional in $cond
|
||||||
|
# übergeben.
|
||||||
#
|
#
|
||||||
# $info - den Info-Status
|
# $info - den Info-Status
|
||||||
# $err - einen Error-Status
|
# $err - einen Error-Status
|
||||||
@ -7500,20 +7542,29 @@ return (0, $info, $err);
|
|||||||
sub isAddSwitchOffCond {
|
sub isAddSwitchOffCond {
|
||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
my $cond = shift // q{};
|
||||||
|
|
||||||
my $info = q{};
|
my $info = q{};
|
||||||
my $err = q{};
|
my $err = q{};
|
||||||
|
my $dswoffcond = q{}; # Device zur Lieferung einer Ausschaltbedingung
|
||||||
|
my $rswoffcond = q{}; # Reading zur Lieferung einer Ausschaltbedingung
|
||||||
|
my $swoffcondregex = q{}; # Regex der Ausschaltbedingung (wenn wahr)
|
||||||
|
|
||||||
my $dswoffcond = ConsumerVal ($hash, $c, "dswoffcond", ""); # Device zur Lieferung einer vorrangigen Ausschaltbedingung
|
if ($cond) {
|
||||||
|
($dswoffcond,$rswoffcond,$swoffcondregex) = split ":", $cond;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$dswoffcond = ConsumerVal ($hash, $c, "dswoffcond", "");
|
||||||
|
$rswoffcond = ConsumerVal ($hash, $c, "rswoffcond", "");
|
||||||
|
$swoffcondregex = ConsumerVal ($hash, $c, "swoffcondregex", "");
|
||||||
|
}
|
||||||
|
|
||||||
if($dswoffcond && !$defs{$dswoffcond}) {
|
if($dswoffcond && !$defs{$dswoffcond}) {
|
||||||
$err = qq{ERROR - the device "$dswoffcond" doesn't exist! Check the key "swoffcond" in attribute "consumer${c}"};
|
$err = qq{ERROR - the device "$dswoffcond" doesn't exist! Check the key "swoffcond" or "interruptable" in attribute "consumer${c}"};
|
||||||
return (0, $info, $err);
|
return (0, $info, $err);
|
||||||
}
|
}
|
||||||
|
|
||||||
my $rswoffcond = ConsumerVal ($hash, $c, "rswoffcond", ""); # Reading zur Lieferung einer vorrangigen Ausschaltbedingung
|
my $condstate = ReadingsVal ($dswoffcond, $rswoffcond, "");
|
||||||
my $swoffcondregex = ConsumerVal ($hash, $c, "swoffcondregex", ""); # Regex einer vorrangigen Ausschaltbedingung
|
|
||||||
my $condstate = ReadingsVal ($dswoffcond, $rswoffcond, "");
|
|
||||||
|
|
||||||
if ($condstate && $condstate =~ m/^$swoffcondregex$/x) {
|
if ($condstate && $condstate =~ m/^$swoffcondregex$/x) {
|
||||||
return (1, $info, $err);
|
return (1, $info, $err);
|
||||||
@ -7545,13 +7596,31 @@ return ConsumerVal ($hash, $c, 'isConsumptionRecommended', 0);
|
|||||||
}
|
}
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# ist Consumer $c unterbrechbar (1) oder nicht (0)
|
# ist Consumer $c unterbrechbar (1|2) oder nicht (0|3)
|
||||||
################################################################
|
################################################################
|
||||||
sub isInterruptible {
|
sub isInterruptable {
|
||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
|
||||||
return ConsumerVal ($hash, $c, 'interruptable', 0);
|
my $intable = ConsumerVal ($hash, $c, 'interruptable', 0);
|
||||||
|
|
||||||
|
if ($intable eq '0') {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
elsif ($intable eq '1') {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
my ($swoffcond,$info,$err) = isAddSwitchOffCond ($hash, $c, $intable);
|
||||||
|
|
||||||
|
if ($swoffcond) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
@ -8608,7 +8677,7 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
|
|||||||
<li><b>consumerXX <Device Name> type=<type> power=<power> [mode=<mode>] [icon=<Icon>] [mintime=<minutes>] <br>
|
<li><b>consumerXX <Device Name> type=<type> power=<power> [mode=<mode>] [icon=<Icon>] [mintime=<minutes>] <br>
|
||||||
[on=<Kommando>] [off=<Kommando>] [swstate=<Readingname>:<on-Regex>:<off-Regex>] [notbefore=<Stunde>] [notafter=<Stunde>] <br>
|
[on=<Kommando>] [off=<Kommando>] [swstate=<Readingname>:<on-Regex>:<off-Regex>] [notbefore=<Stunde>] [notafter=<Stunde>] <br>
|
||||||
[auto=<Readingname>] [pcurr=<Readingname>:<Einheit>[:<Schwellenwert>]] [etotal=<Readingname>:<Einheit>[:<Schwellenwert>]] <br>
|
[auto=<Readingname>] [pcurr=<Readingname>:<Einheit>[:<Schwellenwert>]] [etotal=<Readingname>:<Einheit>[:<Schwellenwert>]] <br>
|
||||||
[swoncond=<Device>:<Reading>:<Regex>] [swoffcond=<Device>:<Reading>:<Regex>] [interruptable=0|1] </b><br><br>
|
[swoncond=<Device>:<Reading>:<Regex>] [swoffcond=<Device>:<Reading>:<Regex>] [interruptable=<Option>] </b><br><br>
|
||||||
|
|
||||||
Registriert einen Verbraucher <Device Name> beim SolarForecast Device. Dabei ist <Device Name>
|
Registriert einen Verbraucher <Device Name> beim SolarForecast Device. Dabei ist <Device Name>
|
||||||
ein in FHEM bereits angelegtes Verbraucher Device, z.B. eine Schaltsteckdose.
|
ein in FHEM bereits angelegtes Verbraucher Device, z.B. eine Schaltsteckdose.
|
||||||
@ -8630,48 +8699,53 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
|
|||||||
|
|
||||||
Mit dem optionalen Schlüssel <b>interruptable</b> kann während der geplanten Einschaltzeit eine automatische
|
Mit dem optionalen Schlüssel <b>interruptable</b> kann während der geplanten Einschaltzeit eine automatische
|
||||||
Unterbrechung sowie Wiedereinschaltung des Verbrauchers vorgenommen werden.
|
Unterbrechung sowie Wiedereinschaltung des Verbrauchers vorgenommen werden.
|
||||||
Unterschreitet der PV Überschuß die benötigte Energie, wird der Verbraucher ausgeschaltet (interrupted) und
|
Der Verbraucher wird temporär ausgeschaltet (interrupted) und wieder eingeschaltet (continued) wenn die
|
||||||
eingeschaltet wenn wieder ausreichend PV Überschuß vorhanden ist (continued).
|
Interrupt-Bedingung nicht mehr vorliegt.
|
||||||
Die verbleibende Laufzeit wird durch einen Interrupt nicht beeinflusst !
|
Die verbleibende Laufzeit wird durch einen Interrupt nicht beeinflusst !
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<table>
|
<table>
|
||||||
<colgroup> <col width=12%> <col width=88%> </colgroup>
|
<colgroup> <col width=12%> <col width=88%> </colgroup>
|
||||||
<tr><td> <b>type</b> </td><td>Typ des Verbrauchers. Folgende Typen sind erlaubt: </td></tr>
|
<tr><td> <b>type</b> </td><td>Typ des Verbrauchers. Folgende Typen sind erlaubt: </td></tr>
|
||||||
<tr><td> </td><td><b>dishwasher</b> - Verbaucher ist eine Spülamschine </td></tr>
|
<tr><td> </td><td><b>dishwasher</b> - Verbaucher ist eine Spülamschine </td></tr>
|
||||||
<tr><td> </td><td><b>dryer</b> - Verbaucher ist ein Wäschetrockner </td></tr>
|
<tr><td> </td><td><b>dryer</b> - Verbaucher ist ein Wäschetrockner </td></tr>
|
||||||
<tr><td> </td><td><b>washingmachine</b> - Verbaucher ist eine Waschmaschine </td></tr>
|
<tr><td> </td><td><b>washingmachine</b> - Verbaucher ist eine Waschmaschine </td></tr>
|
||||||
<tr><td> </td><td><b>heater</b> - Verbaucher ist ein Heizstab </td></tr>
|
<tr><td> </td><td><b>heater</b> - Verbaucher ist ein Heizstab </td></tr>
|
||||||
<tr><td> </td><td><b>charger</b> - Verbaucher ist eine Ladeeinrichtung (Akku, Auto, etc.) </td></tr>
|
<tr><td> </td><td><b>charger</b> - Verbaucher ist eine Ladeeinrichtung (Akku, Auto, etc.) </td></tr>
|
||||||
<tr><td> </td><td><b>other</b> - Verbraucher ist keiner der vorgenannten Typen </td></tr>
|
<tr><td> </td><td><b>other</b> - Verbraucher ist keiner der vorgenannten Typen </td></tr>
|
||||||
<tr><td> <b>power</b> </td><td>typische Leistungsaufnahme des Verbrauchers (siehe Datenblatt) in W </td></tr>
|
<tr><td> <b>power</b> </td><td>typische Leistungsaufnahme des Verbrauchers (siehe Datenblatt) in W </td></tr>
|
||||||
<tr><td> <b>mode</b> </td><td>Planungsmodus des Verbrauchers (optional). Erlaubt sind: </td></tr>
|
<tr><td> <b>mode</b> </td><td>Planungsmodus des Verbrauchers (optional). Erlaubt sind: </td></tr>
|
||||||
<tr><td> </td><td><b>can</b> - der Verbaucher wird eingeplant wenn wahrscheinlich genügend PV Überschuß verfügbar sein wird (default) </td></tr>
|
<tr><td> </td><td><b>can</b> - der Verbaucher wird eingeplant wenn wahrscheinlich genügend PV Überschuß verfügbar sein wird (default) </td></tr>
|
||||||
<tr><td> </td><td><b>must</b> - der Verbaucher wird optimiert eingeplant auch wenn wahrscheinlich nicht genügend PV Überschuß vorhanden sein wird </td></tr>
|
<tr><td> </td><td><b>must</b> - der Verbaucher wird optimiert eingeplant auch wenn wahrscheinlich nicht genügend PV Überschuß vorhanden sein wird </td></tr>
|
||||||
<tr><td> <b>icon</b> </td><td>Icon zur Darstellung des Verbrauchers in der Übersichtsgrafik (optional) </td></tr>
|
<tr><td> <b>icon</b> </td><td>Icon zur Darstellung des Verbrauchers in der Übersichtsgrafik (optional) </td></tr>
|
||||||
<tr><td> <b>mintime</b> </td><td>Mindestlaufzeit bzw. typische Laufzeit für einen Zyklus des Verbrauchers nach dem Einschalten in Minuten, mind. 60 (optional) </td></tr>
|
<tr><td> <b>mintime</b> </td><td>Mindestlaufzeit bzw. typische Laufzeit für einen Zyklus des Verbrauchers nach dem Einschalten in Minuten, mind. 60 (optional) </td></tr>
|
||||||
<tr><td> <b>on</b> </td><td>Set-Kommando zum Einschalten des Verbrauchers (optional) </td></tr>
|
<tr><td> <b>on</b> </td><td>Set-Kommando zum Einschalten des Verbrauchers (optional) </td></tr>
|
||||||
<tr><td> <b>off</b> </td><td>Set-Kommando zum Ausschalten des Verbrauchers (optional) </td></tr>
|
<tr><td> <b>off</b> </td><td>Set-Kommando zum Ausschalten des Verbrauchers (optional) </td></tr>
|
||||||
<tr><td> <b>swstate</b> </td><td>Reading welches den Schaltzustand des Consumers anzeigt (default: 'state'). </td></tr>
|
<tr><td> <b>swstate</b> </td><td>Reading welches den Schaltzustand des Consumers anzeigt (default: 'state'). </td></tr>
|
||||||
<tr><td> </td><td><b>on-Regex</b> - regulärer Ausdruck für den Zustand 'ein' (default: 'on') </td></tr>
|
<tr><td> </td><td><b>on-Regex</b> - regulärer Ausdruck für den Zustand 'ein' (default: 'on') </td></tr>
|
||||||
<tr><td> </td><td><b>off-Regex</b> - regulärer Ausdruck für den Zustand 'aus' (default: 'off') </td></tr>
|
<tr><td> </td><td><b>off-Regex</b> - regulärer Ausdruck für den Zustand 'aus' (default: 'off') </td></tr>
|
||||||
<tr><td> <b>notbefore</b> </td><td>Verbraucher nicht vor angegebener Stunde (01..23) einschalten (optional) </td></tr>
|
<tr><td> <b>notbefore</b> </td><td>Verbraucher nicht vor angegebener Stunde (01..23) einschalten (optional) </td></tr>
|
||||||
<tr><td> <b>notafter</b> </td><td>Verbraucher nicht nach angegebener Stunde (01..23) einschalten (optional) </td></tr>
|
<tr><td> <b>notafter</b> </td><td>Verbraucher nicht nach angegebener Stunde (01..23) einschalten (optional) </td></tr>
|
||||||
<tr><td> <b>auto</b> </td><td>Reading im Verbraucherdevice welches das Schalten des Verbrauchers freigibt bzw. blockiert (optional) </td></tr>
|
<tr><td> <b>auto</b> </td><td>Reading im Verbraucherdevice welches das Schalten des Verbrauchers freigibt bzw. blockiert (optional) </td></tr>
|
||||||
<tr><td> </td><td>Readingwert = 1 - Schalten freigegeben (default), 0: Schalten blockiert </td></tr>
|
<tr><td> </td><td>Readingwert = 1 - Schalten freigegeben (default), 0: Schalten blockiert </td></tr>
|
||||||
<tr><td> <b>pcurr</b> </td><td>Reading:Einheit (W/kW) welches den aktuellen Energieverbrauch liefert (optional) </td></tr>
|
<tr><td> <b>pcurr</b> </td><td>Reading:Einheit (W/kW) welches den aktuellen Energieverbrauch liefert (optional) </td></tr>
|
||||||
<tr><td> </td><td>:<Schwellenwert> (W) - aktuelle Leistung ab welcher der Verbraucher als aktiv gewertet wird. </td></tr>
|
<tr><td> </td><td>:<Schwellenwert> (W) - aktuelle Leistung ab welcher der Verbraucher als aktiv gewertet wird. </td></tr>
|
||||||
<tr><td> <b>etotal</b> </td><td>Reading:Einheit (Wh/kWh) des Consumer Device, welches die Summe der verbrauchten Energie liefert (optional) </td></tr>
|
<tr><td> <b>etotal</b> </td><td>Reading:Einheit (Wh/kWh) des Consumer Device, welches die Summe der verbrauchten Energie liefert (optional) </td></tr>
|
||||||
<tr><td> </td><td>:<Schwellenwert> (Wh) - Energieverbrauch pro Stunde ab dem der Verbraucher als aktiv gewertet wird. </td></tr>
|
<tr><td> </td><td>:<Schwellenwert> (Wh) - Energieverbrauch pro Stunde ab dem der Verbraucher als aktiv gewertet wird. </td></tr>
|
||||||
<tr><td> <b>swoncond</b> </td><td>zusätzliche Bedingung die erfüllt sein muß um den Verbraucher einzuschalten (optional). </td></tr>
|
<tr><td> <b>swoncond</b> </td><td>zusätzliche Bedingung die erfüllt sein muß um den Verbraucher einzuschalten (optional). </td></tr>
|
||||||
<tr><td> </td><td><b>Device</b> - Device zur Lieferung der zusätzlichen Einschaltbedingung </td></tr>
|
<tr><td> </td><td><b>Device</b> - Device zur Lieferung der zusätzlichen Einschaltbedingung </td></tr>
|
||||||
<tr><td> </td><td><b>Reading</b> - Reading zur Lieferung der zusätzlichen Einschaltbedingung </td></tr>
|
<tr><td> </td><td><b>Reading</b> - Reading zur Lieferung der zusätzlichen Einschaltbedingung </td></tr>
|
||||||
<tr><td> </td><td><b>Regex</b> - regulärer Ausdruck der für die Einschaltbedingung erfüllt sein muß </td></tr>
|
<tr><td> </td><td><b>Regex</b> - regulärer Ausdruck der für die Einschaltbedingung erfüllt sein muß </td></tr>
|
||||||
<tr><td> <b>swoffcond</b> </td><td>vorrangige Bedingung um den Verbraucher auszuschalten (optional). </td></tr>
|
<tr><td> <b>swoffcond</b> </td><td>vorrangige Bedingung um den Verbraucher auszuschalten (optional). </td></tr>
|
||||||
<tr><td> </td><td><b>Device</b> - Device zur Lieferung der vorrangigen Ausschaltbedingung </td></tr>
|
<tr><td> </td><td><b>Device</b> - Device zur Lieferung der vorrangigen Ausschaltbedingung </td></tr>
|
||||||
<tr><td> </td><td><b>Reading</b> - Reading zur Lieferung der vorrangigen Ausschaltbedingung </td></tr>
|
<tr><td> </td><td><b>Reading</b> - Reading zur Lieferung der vorrangigen Ausschaltbedingung </td></tr>
|
||||||
<tr><td> </td><td><b>Regex</b> - regulärer Ausdruck der für die Ausschaltbedingung erfüllt sein muß </td></tr>
|
<tr><td> </td><td><b>Regex</b> - regulärer Ausdruck der für die Ausschaltbedingung erfüllt sein muß </td></tr>
|
||||||
<tr><td> <b>interruptable</b> </td><td>Verbraucher darf (optional) unterbrechbar (1) oder nicht unterbrechbar (0) sein (default: 0) </td></tr>
|
<tr><td> <b>interruptable</b> </td><td>definiert die möglichen Unterbrechungsoptionen für den Verbraucher (optional) </td></tr>
|
||||||
|
<tr><td> </td><td><b>0</b> - Verbraucher wird nicht temporär unterbrochen falls der PV Überschuß die benötigte Energie unterschreitet (default) </td></tr>
|
||||||
|
<tr><td> </td><td><b>1</b> - Verbraucher darf temporär unterbrochen werden falls der PV Überschuß die benötigte Energie unterschreitet </td></tr>
|
||||||
|
<tr><td> </td><td><b>Device:Reading:Regex</b> - Verbraucher wird temporär unterbrochen wenn der Wert des angegebenen Device/Readings auf den Regex matched </td></tr>
|
||||||
|
<tr><td> </td><td>Matched der Wert nicht mehr, wird der unterbrochene Verbraucher wieder eingeschaltet. </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user