FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: manne44 am 05 Februar 2016, 12:45:33

Titel: [Gelöst] HM-CC-RT-DN und Reed Relais als Fensterkontakt
Beitrag von: manne44 am 05 Februar 2016, 12:45:33
Ich habe an den Fenstern des Untergeschosses ReedRelais aus früheren Zeiten, die bereits verkabelt waren und nun als Fensterkontakte dienen sollen. Die Signale werden auf einen DS2408 geschaltet, der über einen DS2482-800 (I2C-1Wire-Bridge) mittels I2C am BananaPi angeschlossen ist, auf dem FHEM läuft. Alles okay. Ob Fenster geschlossen oder geöffnet ist kann leicht mit folgendem Code festgestellt werden:

fhem.cfg:

...
define OpenWinDoorDummy dummy

define RRuDS2408 OWDevice 29.86xxxxxxxxx 2
attr RRuDS2408 IODev OWSERVER
attr RRuDS2408 model DS2408
attr RRuDS2408 room OWDevice

define notity.RRuDS2408 notify RRuDS2408:sensed.* { evtHandlerWindowInformer($NAME,$EVENT);; }
...


Funktion in 99_myUlils.pm:
sub
evtHandlerWindowInformer($$)
{
  my $Component = shift;
  my $State = shift;
  my $OnOff = " ";
  my $idx = 0;
  my $win = " ";
  my $value = " ";
  my @def = ("KochF","HausD","SchuppenD","GarageD","BadF","WohnFL","WohnFR","WohnFV");

  if (substr($State, 0, 6) eq "sensed") {
    $idx = int(substr($State, 7, 1));
    $value = substr($State, 10, 1);
    $OnOff = ($value eq '1' ? 'on' : 'off');
    $win = $def[$idx];
    fhem('setreading OpenWinDoorDummy '.$win.' '.$OnOff);
  }
}


Auswertung mit TabletUI einwandfrei, reagiert schnell und zuverlässig. Man hätte das sicherlich auch mit readingProxys machen können, aber die Schreibarbeit schien mir hier das Minimum zu sein.
Nun möchte ich aber gern die 6 Fensterkontakte mit den 6 Heizkörperthermostaten "peeren", d.h. Heizung aus, wenn Fenster auf ist und zurück, wenn Fenster wieder geschlossen ist. Ich finde aber beim Suchen nur was mit den originalen Fensterkontakten.
Kann mir da mal jemand einen Hinweis geben wie ich vorgehen kann? Vielleicht könnte das gleich in der Funktion geschehen? Wenn "off", dann Heizventil zu und wenn "on", dann alte Temp. Wie könnte das genau aussehen?
Titel: Antw:HM-CC-RT-DN und Reed Relais als Fensterkontakt
Beitrag von: frank am 06 Februar 2016, 14:54:40
such mal nach virtuellen fensterkontakten (fk) bei homematik.
Titel: Antw:HM-CC-RT-DN und Reed Relais als Fensterkontakt
Beitrag von: Deudi am 06 Februar 2016, 18:47:33
Zitat von: manne44 am 05 Februar 2016, 12:45:33
Kann mir da mal jemand einen Hinweis geben wie ich vorgehen kann? Vielleicht könnte das gleich in der Funktion geschehen? Wenn "off", dann Heizventil zu und wenn "on", dann alte Temp. Wie könnte das genau aussehen?
Wenn du es in der Funktion machen willst, würde ich mir noch ein "@def2" machen, mit den Namen der dazugehörigen Thermostaten. Bei den Türen einen Leerstring. Wenn das Fenster geöffnet wurde, schickst du an das Thermostat ein "controlManu off", wenn es geschlossen wurde ein "controlMode auto". Vorher prüfen, ob es kein Leerstring ist. So in der Art mache ich das auch.
Titel: Antw:HM-CC-RT-DN und Reed Relais als Fensterkontakt
Beitrag von: manne44 am 08 Februar 2016, 11:58:09
Vielen Dank für die Antworten.
@Deudi: Genauso wollte ich es auch machen, aber ich habe die Befehle für das Einschalten und Ausschalten des Auto-Modus nicht gekannt. Steht zwar in der Commandref, aber auch extrem kurz. Vielen Dank, nun ist alles paletti.
Titel: Antw:HM-CC-RT-DN und Reed Relais als Fensterkontakt
Beitrag von: manne44 am 08 Februar 2016, 16:20:08
Hallo,
abschließend nochmal der vollständige Code, wobei der Winterbetrieb noch nicht berücksichtigt ist, denn im Sommer muß das Thermostat nicht "arbeiten" (Batterie). Damit nur bei Änderungen die Funktion aufgerufen wird das "event-on-change-reading" und wenn ein Fenster im Wohnzimmer geöffnet wird, dann alle beiden Thermostate ausschalten.

In der fhem.cfg:

define OpenWinDoorDummy dummy

define RRuDS2408 OWDevice 29.00000000000 2
attr RRuDS2408 IODev OWSERVER
attr RRuDS2408 model DS2408
attr RRuDS2408 room OWDevice
attr RRuDS2408 event-on-change-reading sensed.*

define notity.RRuDS2408 notify RRuDS2408:sensed.* { evtHandlerWindowInformer($NAME,$EVENT);; }


und in der 99_myUtil.pm:

sub
evtHandlerWindowInformer($$)
{
  my $Component = shift;
  my $State = shift;
  my $OnOff = " ";
  my $idx = 0;
  my $value = " ";
  my @def = ("KochF","HausD","SchuppenD","GarageD","BadF","WohnFL","WohnFR","WohnFV");
  my @term = ("KochT_Clima","","","","BadT_Clima","-","-","-");

  if (substr($State, 0, 6) eq "sensed") {
    $idx = int(substr($State, 7, 1));
$value = substr($State, 10, 1);
    $OnOff = ($value eq '1' ? 'on' : 'off');
    fhem('setreading OpenWinDoorDummy '.$def[$idx].' '.$OnOff);
    # ToDo: Nur bei Winterbetrieb wenn Heizung an ist
    if ($term[$idx] ne "") { # keine Tür
      if ($value eq '1') { # Fenster geöffnet
    if ($term[$idx] eq "-") {
              {fhem ('set WohnTR_Clima controlManu off');}
              {fhem ('set WohnTL_Clima controlManu off');}
    } else {
              {fhem ('set '.$term[$idx].' controlManu off');}
}
      } else  {
    if ($term[$idx] eq "-") {
              {fhem ('set WohnTR_Clima controlMode auto');}
              {fhem ('set WohnTL_Clima controlMode auto');}
    } else {
              {fhem ('set '.$term[$idx].' controlMode auto');}
    }
      }
    }


Vielen Dank nochmals für die Hilfe.