Modulerweiterung um FakeSC/FakeWT

Begonnen von Tobias, 24 Juli 2013, 13:48:26

Vorheriges Thema - Nächstes Thema

Tobias

Hi,
bisher versende ich die Temperaturen zu meinen 4 Thermostaten per Notify und einer kleinen Prozedur.
Ichh abe also 4 Notify´s und eine Basisprozedur in MyUtils. Jetzt rüste ich aber auf 15Thermostate auf, habe aber keine Lust 15 Notifys im System dümpeln zu lassen.
Ich denke es ist besser das gelich im Modul zu lösen. Komme aber noch nicht so richtig weiter....

1. Ich benötige neue Attribute für jedes Thermostat: FakeSCDevice und FakeWTDevice. Wo sollte ich die Anlegen? im CUL_MAX oder MAX? Sollen aber nur erstellt werden wenn das IODev ein CUL_MAX Typ und das Device vom Typ Thermostat ist.
2. Es muss die NotifyFn implementiert werden. Ich denke die muss ins MAX Modul rein..?

Idee: in den FakeSCDevice und FakeWTDevice Attributen steht dann drin: "<Device>:<Reading>", also zb. als Temperaturfühler: WZ_Raumtemp:temperature
Sobald ein Wert erfasst wird, springt die NotifyFn an, überprüft ob dieses Notify zum Wert im Attr passt, prüft dann die Notwendigkeit einer Weitergabe an das Thermostat (siehe Prozedur unten) und schickt Sie dann ggf weiter an das Thermostat

Ist es überhaupt sinnvoll das Modul dahingehend aufzurüsten oder sollte es eine MyUtilsFunktion bleiben?

ZurZeit sieht es so aus:
define WZ_Temperatur_Notify NOTIFY WZ_Klima:temperature.* {  
   MaxFakeWallThermostat("WZ_Heizung", %EVTPART1);
}

sub
MaxFakeWallThermostat($$)
{
  my ($heizung, $aktTemp)       = @_;
  my $CULMAX          = $defs{$heizung}{LASTInputDev};
  my $desiredTemp     = ReadingsVal($heizung, "desiredTemperature", undef);
  my $windowOpenTemp  = ReadingsVal($heizung, "windowOpenTemperature", undef);
  my $lastTemp        = ReadingsVal($heizung, "LastExtTemperature", 0);
  my $lastSet         = ReadingsTimestamp($heizung, "LastExtTemperature", 0);

  if($desiredTemp && $windowOpenTemp &&
  $desiredTemp != $windowOpenTemp &&
  (time()-time_str2num($lastSet) >= 600 || abs($aktTemp-$lastTemp)>=0.2 )) {
    Log 3, "set $CULMAX fakeWT $heizung $desiredTemp $aktTemp";
    readingsSingleUpdate($defs{$heizung}, "LastExtTemperature", $aktTemp, 0);
    fhem("set $CULMAX fakeWT $heizung $desiredTemp $aktTemp");
  }
}
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter