[Gelöst] HM-CC-RT-DN und Reed Relais als Fensterkontakt

Begonnen von manne44, 05 Februar 2016, 12:45:33

Vorheriges Thema - Nächstes Thema

manne44

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?
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

frank

such mal nach virtuellen fensterkontakten (fk) bei homematik.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Deudi

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.
Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

manne44

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.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

manne44

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.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm