ich nutze ein Wandthermostat, an das keine Ventile gekoppelt sind, als zentrale Steuereinheit. Aktuell nutze ich nur die Mode-Umschaltung, um alle Heizungen auf Auto/Manuell/Urlaub umzustellen. Für eine sinnvolle Umstellung auf Urlaub muss until auslesbar werden.
Dafür sind folgende Änderungen an 10_MAX.pm notwendig.
Wer kann/möchte die Änderungen prüfen und ggf. übernehmen?
diff -up 10_MAX.pm
--- ../testfhem/FHEM/10_MAX.pm 2016-05-05 17:36:48.332450060 +0200
+++ FHEM/10_MAX.pm 2016-06-17 16:07:30.435615188 +0200
@@ -724,11 +724,22 @@ MAX_Parse($$)
}
$heaterTemperature = "" if(!defined($heaterTemperature));
+# => habeIchVergessen
+ if($mode == 2){
+ $shash->{until} = "$untilStr";
+ }else{
+ delete($shash->{until});
+ }
+# <= habeIchVergessen
+
Log3 $hash, 5, "battery $batterylow, rferror $rferror, panel $panel, langateway $langateway, dstsetting $dstsetting, mode $mode, displayActualTemperature $displayActualTemperature, heaterTemperature $heaterTemperature, untilStr $untilStr";
$shash->{rferror} = $rferror;
readingsBulkUpdate($shash, "mode", $ctrl_modes[$mode] );
readingsBulkUpdate($shash, "battery", $batterylow ? "low" : "ok");
readingsBulkUpdate($shash, "displayActualTemperature", ($displayActualTemperature) ? 1 : 0);
+# => habeIchVergessen
+ readingsBulkUpdate($shash, "until", $untilStr);
+# <= habeIchVergessen
} else {
Log3 $hash, 2, "Invalid $msgtype packet"
}
99_MyUtils.pm
package main;
use strict;
use warnings;
use POSIX;
use DateTime::Format::Strptime;
sub MyUtils_Initialize($$)
{
my ($hash) = @_;
}
sub processThermostatWohnzimmer() {
my $mode = ReadingsVal("ThermostatWohnzimmer", "mode", "auto");
my $desTemp = ReadingsVal("ThermostatWohnzimmer", "desiredTemperature", "");
my $until = ReadingsVal("ThermostatWohnzimmer", "until", "");
my $action = $mode . ($mode eq "manual" ? " $desTemp" : "");
if ($mode eq "temporary") {
my $parser = DateTime::Format::Strptime->new(pattern => '%d.%m.%y %H:%M');
my $untilDate = $parser->parse_datetime($until);
my $until = ($untilDate ? $untilDate->strftime('%d.%m.%Y %H:%M') : "");
$action = ($until ne "" ? "$action until " . $until : "");
}
if ($action eq AttrVal("HeizungZentraleSteuerung_Eingabe", "state", "")) {
return;
}
Log(3, "HeizungZentraleSteuerung_Eingabe : $action ");
fhem("attr HeizungZentraleSteuerung_Eingabe state $action");
if ($action ne "") {
fhem("set HeizungZentraleSteuerung desiredTemperature $action");
}
}
1;
DOIF
# ZentraleSteuerung ueber Thermostat
define HeizungZentraleSteuerung_Eingabe DOIF ( [ThermostatWohnzimmer:mode] ) ({ processThermostatWohnzimmer() })
attr HeizungZentraleSteuerung_Eingabe do always
Geräte
# Wohnzimmer
define ThermostatWohnzimmer MAX WallMountedThermostat xxxxxx
attr ThermostatWohnzimmer IODev MaxCube
attr ThermostatWohnzimmer room Wohnzimmer,EG
attr ThermostatWohnzimmer event-on-change-reading .*
# alle Heizungen
define HeizungZentraleSteuerung structure room HeizungKeller HeizungHausanschluss HeizungBad HeizungSchlafzimmer HeizungBuero HeizungAnkleide HeizungKinderzimmer
10_MAX.pm angepasst.
until muss jetzt als Internat gelesen werden.
sub processThermostatWohnzimmer() {
my $mode = ReadingsVal("ThermostatWohnzimmer", "mode", "auto");
my $desTemp = ReadingsVal("ThermostatWohnzimmer", "desiredTemperature", "");
my $until = InternalVal("ThermostatWohnzimmer", "until", "");
...