Neues Modul - Heating_Control, WeekdayTimer

Begonnen von Dietmar63, 04 Januar 2013, 19:42:26

Vorheriges Thema - Nächstes Thema

Dietmar63

#810
Zitat von: FHEM_Starter am 21 November 2016, 09:38:27
Hallo Dietmar,

ich hatte an folgende Möglichkeit gedacht:

define Timer_EG_KU_Rollo_Fenster WeekdayTimer EG_KU_Rollo_Fenster 12345|{sunrise(+40,"06:30:40","06:59:40")}|auf  (ReadingsVal("Besuch_WZI", "state", "") ne "heute")) 12345|{sunset(+40,"22:00:40","23:00:40")}|ab 6|{sunrise(+40,"07:30:40","07:59:40")}|auf  (ReadingsVal("Besuch_WZI", "state", "") ne "heute")) 6|{sunset(+40,"22:00:40","23:00:40")}|ab 0|{sunrise(+40,"08:30:40","08:59:40")}|auf  (ReadingsVal("Besuch_WZI", "state", "") ne "heute")) 0|{sunset(+40,"22:00:40","23:00:40")}|ab

Gruß Wolfgang

sieht ziemlich unübersichtlich aus - dürfte auch recht aufwendig sein es zu implementieren.
Ich würde eher dem Vorschlag von  c2j2 folgen wollen


sub cleanupParam($) {
my ($param) =@_;
if ($param !~ m/^{.*}$/)         # Abfrage ob Perlausdruck ...
  $param = eval $param;
if ($param =~ m/^\d{1,3}$/)
  return sprintf("%.1f", $aktParam);
return $param;
}


Das ließe sich leichter umseten.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

ZitatDer Status des Moduls entspricht nicht immer ...

ja, das ist blöd und nicht wirklich machbar, weil das Modul immer Perlcode erzeut und nicht weiß was der Perlcode dann wirlich tut.
Ich wüde den Status am liebsten abschaffen.

Zitat

Und weil bald Weihnachten ist, hätte ich da noch einen Wusnchzettel:
* Ein Urlaubmodus wäre  toll: disable bis 23.12.2016 16:00; danach wieder zurück ins laufende Programm
* Eine Variante wäre der Partymodus wäre auch toll: Anheizen für die nächsten X Stunden, dann wieder zurück ins laufende Programm

wünschen ist erlaubt, aber Wünsche gehen nicht immer in Erfüllung und schon gar nicht so zeitnah.
Das Problem Urlaubsmodus und weitere Dinge habe ich mir durch die Definition zweier HC und das Attribut disabledCond gelöst.
Der Partymodus ist nicht realisert, weil er für mich zu selten vorkommt und es bei mir reicht wenn ich die Thermostate von Hand nachstelle.

Zu aufwendigen Änderungen werde ich in nächster Zeit nicht kommen, weil ich anderweitig beschäftigt bin.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

cwagner

Vielen Dank für die rasche und ehrliche Antwort. Und da ich schon groß bin, erfülle ich mir manchmal die Wünsche einfach selbst. Werde also mal Deine Anregung aufgreifen und mir da was selbst stricken.

Herzliche Grüße

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

c2j2

Ich habe es so gelöst, dass ich einen Betriebsmodus "Automatik" habe, in dem ich eine Absenkung (in Grad) fest vorgeben kann (wenn ich wegfahre, kann ich den Modus einstellen, und ein paar Stunden, bevor ich zurückkomme, wieder auf "nein" gehen) oder per Anwesenheitserkennung automatisch betreiben kann.

Oder ich stelle auf "manuell", dann kann ich die Thermostaten eben manuell einstellen, das HC ist unwirksam.


define Var_Regelungsmodus dummy
attr Var_Regelungsmodus setList state:automatisch,voll_manuell
attr Var_Regelungsmodus webCmd state
attr Var_Regelungsmodus alias Betriebsmodus
attr Var_Regelungsmodus sortby 1
attr Var_Regelungsmodus room Wochenprogramme,Übersicht
# set Var_Regelungsmodus automatisch
define n_Var_Regelungsmodus notify Var_Regelungsmodus:.* {Heating_Control_SetAllTemps()}

define Var_TemperaturAbsenkung dummy
attr Var_TemperaturAbsenkung setList state:nein,1(Anwesenheit),2(Anwesenheit),3(Anwesenheit),4(Anwesenheit),5(Anwesenheit),1(fest),2(fest),3(fest),4(fest),5(fest)
attr Var_TemperaturAbsenkung webCmd state
attr Var_TemperaturAbsenkung alias Temperaturabsenkung
attr Var_TemperaturAbsenkung sortby 2
attr Var_TemperaturAbsenkung room Wochenprogramme,Übersicht
# set Var_TemperaturAbsenkung 2(auto)
define n_Var_TemperaturAbsenkung notify Var_TemperaturAbsenkung:.* {Heating_Control_SetAllTemps()}

define HC_Woche_wohnzimmer Heating_Control Thermostat_wohnzimmer de Mo-Fr|05:00|HC_Temp(22) Mo-Fr|06:30|HC_Temp(21) Mo-Fr|15:00|HC_Temp(22) So-Do|22:00|HC_Temp(20) Sa-So|06:00|HC_Temp(22) Fr-Sa|24:00|HC_Temp(19) {\
  HC_setTemp($NAME, eval $EVENT);;\
}


und die PL-Skripte:


sub HC_Temp($)
{
  my $degree = $_[0];
  my $value = Value("Var_TemperaturAbsenkung");
 
  Log(2, "Var_TemperaturAbsenkung = $value");
  if ($value =~ /^\d+/)
{
if ($value =~ /Anwesenheit/)
{
Log(2, " auto: " . Value("Var_JemandAnwesend"));
if (Value("Var_JemandAnwesend") == 0)
{
Log(1, "DEGREE = ". $degree . " - " . $value);
return max($degree - $value, 16);
}
}
  else
{
return max($degree - $value, 16);
}
}
  return($degree);
}

sub HC_setTemp($$)
{
  my ($Device, $degree) = @_;
  my $OldTemp = ReadingsVal($Device, "desiredTemperature", "0");
  Log(2, "********************HC_setTemp(): set $degree deg in $Device. Was: $OldTemp");
  if ($degree < $OldTemp || $degree > $OldTemp) # no "!=" as it would compare strings
    {
if (Value("Var_Regelungsmodus") eq "automatisch")
{
Log(1, "FHEM/Heating_Control: set $Device desiredTemperature $degree");
fhem("set $Device desiredTemperature $degree");
return 1;
}
Log(2, "FHEM/Heating_Control disabled by 'Var_Regelungsmodus'!='automatisch'");
}
  return 0;
}


Damit bin ich vorerst glücklich, und ein Datum vorgeben ist komplizierter, als es "von Hand" zu machen.

Christian72D

Zitat von: Christian72D am 25 Oktober 2016, 16:49:59
Ich habe seit ein paar Tagen ein Problem mit dem Modul HCS: nach einem Reboot ist es nicht mehr aktiv, das war es Anfang des Jahres aber noch.
Kann sowas durch ein Update gekommen sein?
Und wie kann ich das SO einstellen daß es automatisch läuft?
KEINER eine Idee?

Dietmar63

Du musst schon ein wenig mehr erklären, wie du mit dem Modul was machst.
Versuch mal die betroffenen Geräte auf verbose 5 zu stellen
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

FHEM_Starter

Hallo Dietmar,

kannst Du mit bitte einen Tipp geben, warum eine Definition mit on-till nicht klappt?
Mit der Def:
define shutter WeekdayTimer UG_AZ_Licht_Schrank FR-SA|11:32|on-till:11:33:00  FR-SA|11:02|off
erhalte ich im LogFile
on-till requires parameter: -time-

Ich steh auf dem Schlauch ...

Gruß Wolfgang


Dietmar63

Liefere bitte mal den output des Logs wenn du verbose 5 eingeschaltet hast
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

FHEM_Starter

Hallo Dietmar,

das ist das Ergebnis der Definition aus dem Logfile.

Gruß Wolfgang

2016.12.03 12:54:21 5: Cmd: >define shutter WeekdayTimer UG_AZ_Licht_Schrank FR-SA|12:55|on-till:12:56:00  FR-SA|12:57|off<
2016.12.03 12:54:21 5: [shutter] FR-SA|12:55|on-till:12:56:00  - trying to accept as a switchtime
2016.12.03 12:54:21 4: [shutter] FR-SA|12:55|on-till:12:56:00 - accepted
2016.12.03 12:54:21 5: [shutter] FR-SA|12:57|off  - trying to accept as a switchtime
2016.12.03 12:54:21 4: [shutter] FR-SA|12:57|off - accepted
2016.12.03 12:54:21 5: Compute sunrise/sunset for latitude 49.9142 , longitude 8.2133
2016.12.03 12:54:21 5: Compute sunrise/sunset for latitude 49.9142 , longitude 8.2133
2016.12.03 12:54:21 4: [shutter] 07:30:45 17:04:55 Samstag
2016.12.03 12:54:21 4: [shutter] 12:55:00 on-till:12:56:00, 12:57:00 off (Profil 5: Freitag)
2016.12.03 12:54:21 4: [shutter] 12:55:00 on-till:12:56:00, 12:57:00 off (Profil 6: Samstag)
2016.12.03 12:54:21 5: [shutter] setting  Timer: shutter_SetTimerOfDay 2016-12-04 00:00:05
2016.12.03 12:54:21 5: Triggering global (1 changes)
2016.12.03 12:54:21 5: Starting notify loop for global, first event DEFINED shutter
2016.12.03 12:54:21 4: [shutter] device type CUL_HM:HM-LC-SW1-FM recognized, setModifier:
2016.12.03 12:54:21 4: [shutter] no switch in the yesterdays because of the devices type(UG_AZ_Licht_Schrank is not recognized as heating) - use attr switchInThePast
2016.12.03 12:54:21 5: Triggering shutter (1 changes)
2016.12.03 12:54:21 5: Starting notify loop for shutter, first event inactive
2016.12.03 12:54:21 4: [shutter] condition: - Tage:5,6
2016.12.03 12:54:21 5: [shutter] condition: {my $days={};;map{$days->{$_}=1}(5,6);;;;( 1 && (defined $days->{$wday}))}
2016.12.03 12:54:21 5: Cmd: >{my $days={};map{$days->{$_}=1}(5,6);;( 1 && (defined $days->{$wday}))}<
2016.12.03 12:54:21 5: [shutter] result of condition:1
2016.12.03 12:54:21 5: Triggering shutter (1 changes)
2016.12.03 12:54:21 5: Starting notify loop for shutter, first event active
2016.12.03 12:54:21 4: [shutter] setTimer - timer seems to be active today: 56|12:55|on-till:12:56:00
2016.12.03 12:54:21 5: [shutter] setting  Timer: shutter_1 2016-12-03 12:55:00
2016.12.03 12:54:21 4: [shutter] condition: - Tage:5,6
2016.12.03 12:54:21 5: [shutter] condition: {my $days={};;map{$days->{$_}=1}(5,6);;;;( 1 && (defined $days->{$wday}))}
2016.12.03 12:54:21 5: Cmd: >{my $days={};map{$days->{$_}=1}(5,6);;( 1 && (defined $days->{$wday}))}<
2016.12.03 12:54:21 5: [shutter] result of condition:1
2016.12.03 12:54:21 5: Triggering shutter (1 changes)
2016.12.03 12:54:21 5: Starting notify loop for shutter, first event active
2016.12.03 12:54:21 4: [shutter] setTimer - timer seems to be active today: 56|12:57|off
2016.12.03 12:54:21 5: [shutter] setting  Timer: shutter_2 2016-12-03 12:57:00
2016.12.03 12:54:21 5: Triggering shutter (1 changes)
2016.12.03 12:54:21 5: Starting notify loop for shutter, first event nextUpdate: 2016-12-03 12:55:00
2016.12.03 12:54:21 5: Triggering shutter (1 changes)
2016.12.03 12:54:21 5: Starting notify loop for shutter, first event nextValue: on-till:12:56:00
2016.12.03 12:54:21 5: Triggering shutter (1 changes)
2016.12.03 12:54:21 5: Starting notify loop for shutter, first event currValue: off
2016.12.03 12:54:21 4: WEB_192.168.17.24_54871 GET /fhem?detail=shutter&fw_id=5073; BUFLEN:0
2016.12.03 12:54:21 4: name: /fhem?detail=shutter&fw_id=5073 / RL:3775 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2016.12.03 12:54:21 4: WEB_192.168.17.24_54871 GET /fhem?cmd={ReadingsVal(%22shutter%22,%22disable%22,%22%22)}&XHR=1; BUFLEN:0
2016.12.03 12:54:21 5: Cmd: >{ReadingsVal("shutter","disable","")}<

Dietmar63

Hast du auch den Teil des Protokolls verfügbar, in dem on-till dann nicht funktioniert hat: 12:56
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

FHEM_Starter

Upps, das hatte ich übersehen.
Bitte sehr.

2016.12.03 12:55:00 4: [shutter] time=12:55/1480766100 delay=0, nextDelay=60, nextRetry=1480766160
2016.12.03 12:55:00 4: [shutter] delayedExecutionCond:0
2016.12.03 12:55:00 4: [shutter] result of delayedExecutionCond:0
2016.12.03 12:55:00 4: [shutter] list of window sensors found: 'shutter'
2016.12.03 12:55:00 4: [shutter] condition: - Tage:5,6
2016.12.03 12:55:00 5: [shutter] condition: {my $days={};;map{$days->{$_}=1}(5,6);;;;( 1 && (defined $days->{$wday}))}
2016.12.03 12:55:00 5: Cmd: >{my $days={};map{$days->{$_}=1}(5,6);;( 1 && (defined $days->{$wday}))}<
2016.12.03 12:55:00 5: [shutter] result of condition:1
2016.12.03 12:55:00 4: [shutter] Update   - timer seems to be active today: 56|12:55|on-till:12:56:00
2016.12.03 12:55:00 4: [shutter] device type CUL_HM:HM-LC-SW1-FM recognized, setModifier:
2016.12.03 12:55:00 4: [shutter] aktParam: newParam:on-till:12:56:00 - is  not disabled
2016.12.03 12:55:00 4: [shutter] command: 'set $NAME  $EVENT' executed with %NAME=>UG_AZ_Licht_Schrank,%EVENT=>on-till 12 56 00
2016.12.03 12:55:00 5: Cmd: >set $NAME  $EVENT<
2016.12.03 12:55:00 3: on-till requires parameter: -time-
2016.12.03 12:55:00 5: Triggering shutter (4 changes)
2016.12.03 12:55:00 5: Starting notify loop for shutter, first event nextUpdate: 2016-12-03 12:57:00

Dietmar63

Ich glaube ich kann da was machen, damit on-till funktioniert
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

FHEM_Starter

Hallo Dietmar,

das wäre klasse. Gebe Bescheid, wenn ich was testen soll.

Gruß Wolfgang

Dietmar63

eingecheckt:
98_Heating_Control, 98_WeekdayTimer:

-  a bug fixed when starting a WDT or a HC an trying to switch in the past. 
-  now being able to use on-till:13:30:30 as a parameter
-  the parameter can now be a Perlcode
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

FHEM_Starter

Hallo Dietmar,

zunächst Danke für Deine Arbeit. Ich habe es getestet und es kam folgendes heraus: Einschalten geht doch das Ausschalten bleibt aus. Setze ich auf dem Device das attribut on-till manuell, klappt es. Anbei der Auszug aus dem Logfile. Hast Du dafür eine Erklärung?

Danke und Gruß
Wolfgang

Definition war:
define shutter WeekdayTimer UG_AZ_Licht_Schrank MO-DI|13:16|on-till:13:17  FR-SA|13:00|off

LogFile kam:
2016.12.05 13:15:06 5: Cmd: >define shutter WeekdayTimer UG_AZ_Licht_Schrank MO-DI|13:16|on-till:13:17  FR-SA|13:00|off<
2016.12.05 13:15:06 5: [shutter] MO-DI|13:16|on-till:13:17   - trying to accept as a switchtime
2016.12.05 13:15:06 4: [shutter] MO-DI|13:16|on-till:13:17  - accepted
2016.12.05 13:15:06 5: [shutter] FR-SA|13:00|off  - trying to accept as a switchtime
2016.12.05 13:15:06 4: [shutter] FR-SA|13:00|off - accepted
2016.12.05 13:15:06 5: Compute sunrise/sunset for latitude 49.9142 , longitude 8.2133
2016.12.05 13:15:06 5: Compute sunrise/sunset for latitude 49.9142 , longitude 8.2133
2016.12.05 13:15:06 4: [shutter] 07:32:56 17:04:21 Montag
2016.12.05 13:15:06 4: [shutter] 13:16:00 on-till:13:17  (Profil 1: Montag)
2016.12.05 13:15:06 4: [shutter] 13:16:00 on-till:13:17  (Profil 2: Dienstag)
2016.12.05 13:15:06 4: [shutter] 13:00:00 off (Profil 5: Freitag)
2016.12.05 13:15:06 4: [shutter] 13:00:00 off (Profil 6: Samstag)
2016.12.05 13:15:06 5: [shutter] setting  Timer: shutter_SetTimerOfDay 2016-12-06 00:00:05
2016.12.05 13:15:06 5: Triggering global (1 changes)
2016.12.05 13:15:06 5: Starting notify loop for global, first event DEFINED shutter
2016.12.05 13:15:06 4: [shutter] device type CUL_HM:HM-LC-SW1-FM recognized, setModifier:
2016.12.05 13:15:06 4: [shutter] no switch in the yesterdays because of the devices type(UG_AZ_Licht_Schrank is not recognized as heating) - use attr switchInThePast
2016.12.05 13:15:06 5: Triggering shutter (1 changes)
2016.12.05 13:15:06 5: Starting notify loop for shutter, first event inactive
2016.12.05 13:15:06 4: [shutter] condition: - Tage:1,2
2016.12.05 13:15:06 5: [shutter] condition: {my $days={};;map{$days->{$_}=1}(1,2);;;;( 1 && (defined $days->{$wday}))}
2016.12.05 13:15:06 5: Cmd: >{my $days={};map{$days->{$_}=1}(1,2);;( 1 && (defined $days->{$wday}))}<
2016.12.05 13:15:06 5: [shutter] result of condition:1
2016.12.05 13:15:06 5: Triggering shutter (1 changes)
2016.12.05 13:15:06 5: Starting notify loop for shutter, first event active
2016.12.05 13:15:06 4: [shutter] setTimer - timer seems to be active today: 12|13:16|on-till:13:17 
2016.12.05 13:15:06 5: [shutter] setting  Timer: shutter_1 2016-12-05 13:16:00
2016.12.05 13:15:06 4: [shutter] condition: - Tage:5,6
2016.12.05 13:15:06 5: [shutter] condition: {my $days={};;map{$days->{$_}=1}(5,6);;;;( 1 && (defined $days->{$wday}))}
2016.12.05 13:15:06 5: Cmd: >{my $days={};map{$days->{$_}=1}(5,6);;( 1 && (defined $days->{$wday}))}<
2016.12.05 13:15:06 5: [shutter] result of condition:
2016.12.05 13:15:06 5: Triggering shutter (1 changes)
2016.12.05 13:15:06 5: Starting notify loop for shutter, first event nextUpdate: 2016-12-05 13:16:00
2016.12.05 13:15:06 5: Triggering shutter (1 changes)
2016.12.05 13:15:06 5: Starting notify loop for shutter, first event nextValue: on-till:13:17 
2016.12.05 13:15:06 5: Triggering shutter (1 changes)
2016.12.05 13:15:06 5: Starting notify loop for shutter, first event currValue: off
2016.12.05 13:15:06 4: WEB_192.168.17.24_52021 GET /fhem?cmd={ReadingsVal(%22shutter%22,%22disable%22,%22%22)}&XHR=1; BUFLEN:0
2016.12.05 13:15:06 5: Cmd: >{ReadingsVal("shutter","disable","")}<
2016.12.05 13:15:06 4: name: /fhem?cmd={ReadingsVal(%22shutter%22,%22disable%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.12.05 13:15:06 4: WEB_192.168.17.24_52021 GET /fhem?cmd={AttrVal(%22shutter%22,%22room%22,%22%22)}&XHR=1; BUFLEN:0
2016.12.05 13:15:06 5: Cmd: >{AttrVal("shutter","room","")}<
2016.12.05 13:15:06 4: name: /fhem?cmd={AttrVal(%22shutter%22,%22room%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.12.05 13:16:00 4: [shutter] time=13:16/1480940160 delay=0, nextDelay=60, nextRetry=1480940220
2016.12.05 13:16:00 4: [shutter] delayedExecutionCond:0
2016.12.05 13:16:00 4: [shutter] result of delayedExecutionCond:0
2016.12.05 13:16:00 4: [shutter] list of window sensors found: 'shutter'
2016.12.05 13:16:00 4: [shutter] condition: - Tage:1,2
2016.12.05 13:16:00 5: [shutter] condition: {my $days={};;map{$days->{$_}=1}(1,2);;;;( 1 && (defined $days->{$wday}))}
2016.12.05 13:16:00 5: Cmd: >{my $days={};map{$days->{$_}=1}(1,2);;( 1 && (defined $days->{$wday}))}<
2016.12.05 13:16:00 5: [shutter] result of condition:1
2016.12.05 13:16:00 4: [shutter] Update   - timer seems to be active today: 12|13:16|on-till:13:17 
2016.12.05 13:16:00 4: [shutter] device type CUL_HM:HM-LC-SW1-FM recognized, setModifier:
2016.12.05 13:16:00 4: [shutter] aktParam: newParam:on-till:13:17  - is  not disabled
2016.12.05 13:16:00 4: [shutter] command: 'set $NAME  $EVENT' executed with %NAME=>UG_AZ_Licht_Schrank,%EVENT=>on-till 13:17