Autor Thema: Modulerweiterung um FakeSC/FakeWT  (Gelesen 1615 mal)

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3688
Modulerweiterung um FakeSC/FakeWT
« am: 24 Juli 2013, 13:48:26 »
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");
  }
}
FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamp-Sensoren, RPi mit 2x 1wire, RPi mit Text2Speech.
Maintainer der Module: DbLog, Text2Speech, TrashCal, MediaList
Meine Projekte auf https://github.com/tobiasfaust

 

decade-submarginal