Erweiterung: Wandthermostat als Steuerung nutzen

Begonnen von habeIchVergessen, 17 Juni 2016, 16:21:03

Vorheriges Thema - Nächstes Thema

habeIchVergessen

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


habeIchVergessen

#1
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", "");
  ...