HM-OU-LED16 Funk-Statusanzeige LED16

Aus FHEMWiki
(Weitergeleitet von HM-OU-LED16)
Zur Navigation springen Zur Suche springen
HM-OU-LED16 Funk-Statusanzeige LED16
HomeMatic Funk-Statusanzeige LED16
Allgemein
Protokoll HomeMatic
Typ Empfänger, Aktor
Kategorie HomeMatic
Technische Details
Kommunikation 868MHz
Kanäle 16 (3 Tasten, Hoch, Runter und Enter)
Betriebsspannung 7,5 V DC (über mitgeliefertes Steckernetzteil
Leistungsaufnahme max. 250 mA
Versorgung Netz
Abmessungen 100x100x15mm
Sonstiges
Modulname CUL_HM
Hersteller ELV / eQ-3


Features

Anzeige von 16 Statuswerten über rot/grün/orange LED, ca. € 80 (2019/01)

Allgemeines

Die Funk-Statusanzeige LED16 kann mit ihren 16 Kanälen und insgesamt 32 LED's (je 1xGrün und 1xRot -> Rot+Grün=Orange) diverse Status anzeigen. Das Schriftfeld ist nicht beleuchtet und kann mit einer Word-Vorlage befüllt werden. Außerdem kann man sie auch als 16-Kanal Funk-Fernbedienung verwenden. Hier ist die Auswahl des Kanals allerdings etwas umständlich. Mit Hilfe der Hoch- und Runtertaste auf der Rückseite kann man den Kanal, der durch ein blinken der jeweiligen LED's angezeigt wird, auswählen und seine Wahl mit der, ebenfalls auf der Rückseite liegenden Enter-Taste bestätigen.

Hinweise zur Inbetriebnahme und Installation

Die Funk-Statusanzeige kann nicht direkt gepeered werden, sondern funktioniert nur mit einer Zentrale, wie z.B. FHEM.

Die Statusanzeige dazu ebenso wie die Zentrale in den Anlernmodus versetzen. Dazu ist die Taste learn auf der Rückseite der Anzeige für ca 5 Sekunden zu drücken, bis die LED links oben anfängt, langsam grün zu blinken. Dann die learn-Taste loslassen.

Probleme

<ggfls. ergänzen>

Betrieb mit FHEM

event Monitor

<Bitte ergänzen>

fhem.log Auszug

2014.12.31 16:01:11 3: CUL_HM set OG_Statusdisplay_Led_01 led red
2014.12.31 16:02:37 3: CUL_HM set OG_Statusdisplay_Led_01 led off
2014.12.31 16:03:46 3: CUL_HM set OG_Statusdisplay_Led_01 led green
2014.12.31 16:06:39 3: CUL_HM set OG_Statusdisplay_Led_01 led off

In der vorliegenden fhem.cfg ist das Statusdisplay bereits mittels "set HM_ABC123 deviceRename Statusdisplay" in "statusanzeige" umbenannt. Im weiteren wird dieser Name beibehalten

Achtung: Mit rename wird nur das Gerät selbst umbenannt, die 16 Kanäle und die Logfile behalten weiter ihren HM_ABC123 Namen. Mit deviceRename Statusdisplay" wird der Gerätename, der Name aller Kanäle, der Logfile etc. komplett in einem Schwung umbenannt.

Direkt nach der automatischen Definiton in FHEM sah das ungefähr so aus:

define HM_20F85B CUL_HM 20F85B01

fhem.cfg

define statusanzeige CUL_HM 1EAB54
attr statusanzeige IODev HMLAN1
attr statusanzeige autoReadReg 4_reqStatus
attr statusanzeige expert 2_full
attr statusanzeige firmware 1.1
attr statusanzeige model HM-OU-LED16
attr statusanzeige room Wohnzimmer
attr statusanzeige serialNr JEQxxxxxxx
attr statusanzeige subType outputUnit
attr statusanzeige webCmd getConfig:clear msgEvents

define statusanzeige_Led_01 CUL_HM 1EAB5401
attr statusanzeige_Led_01 model HM-OU-LED16
attr statusanzeige_Led_01 peerIDs 00000000,

define statusanzeige_Led_02 CUL_HM 1EAB5402
attr statusanzeige_Led_02 model HM-OU-LED16
attr statusanzeige_Led_02 peerIDs 00000000,

define statusanzeige_Led_03 CUL_HM 1EAB5403
attr statusanzeige_Led_03 model HM-OU-LED16
attr statusanzeige_Led_03 peerIDs 00000000,

define statusanzeige_Led_04 CUL_HM 1EAB5404
attr statusanzeige_Led_04 model HM-OU-LED16
attr statusanzeige_Led_04 peerIDs 00000000,

define statusanzeige_Led_05 CUL_HM 1EAB5405
attr statusanzeige_Led_05 model HM-OU-LED16
attr statusanzeige_Led_05 peerIDs 00000000,

define statusanzeige_Led_06 CUL_HM 1EAB5406
attr statusanzeige_Led_06 model HM-OU-LED16
attr statusanzeige_Led_06 peerIDs 00000000,

define statusanzeige_Led_07 CUL_HM 1EAB5407
attr statusanzeige_Led_07 model HM-OU-LED16
attr statusanzeige_Led_07 peerIDs 00000000,

define statusanzeige_Led_08 CUL_HM 1EAB5408
attr statusanzeige_Led_08 model HM-OU-LED16
attr statusanzeige_Led_08 peerIDs 00000000,

define statusanzeige_Led_09 CUL_HM 1EAB5409
attr statusanzeige_Led_09 model HM-OU-LED16
attr statusanzeige_Led_09 peerIDs 00000000,

define statusanzeige_Led_10 CUL_HM 1EAB540A
attr statusanzeige_Led_10 model HM-OU-LED16
attr statusanzeige_Led_10 peerIDs 00000000,

define statusanzeige_Led_11 CUL_HM 1EAB540B
attr statusanzeige_Led_11 model HM-OU-LED16
attr statusanzeige_Led_11 peerIDs 00000000,

define statusanzeige_Led_12 CUL_HM 1EAB540C
attr statusanzeige_Led_12 model HM-OU-LED16
attr statusanzeige_Led_12 peerIDs 00000000,

define statusanzeige_Led_13 CUL_HM 1EAB540D
attr statusanzeige_Led_13 model HM-OU-LED16
attr statusanzeige_Led_13 peerIDs 00000000,

define statusanzeige_Led_14 CUL_HM 1EAB540E
attr statusanzeige_Led_14 model HM-OU-LED16
attr statusanzeige_Led_14 peerIDs 00000000,

define statusanzeige_Led_15 CUL_HM 1EAB540F
attr statusanzeige_Led_15 model HM-OU-LED16
attr statusanzeige_Led_15 peerIDs 00000000,

define statusanzeige_Led_16 CUL_HM 1EAB5410
attr statusanzeige_Led_16 model HM-OU-LED16
attr statusanzeige_Led_16 peerIDs 00000000,

So wie aufgelistet erscheint die Stausanzeige nach dem Anlernvorgang in der fhem.cfg.

Will man nun zB den Zustand eines Türkontakt anzeigen so ist die Definition eines notify erforderlich.

define statusanzeige_Led_01 CUL_HM 20F85B01
attr statusanzeige_Led_01 alias 1 TK Essen
attr statusanzeige_Led_01 model HM-OU-LED16
attr statusanzeige_Led_01 peerIDs 00000000,
attr statusanzeige_Led_01 room Türkontakt
define statusanzeige_Led_01_open notify TK_Essen:open set statusanzeige_Led_01 led red
define statusanzeige_Led_01_closed notify TK_Essen:closed set statusanzeige_Led_01 led green

In diesem Beispiel signalisiert statusanzeige_Led_01 die Led 1 der Statusanzeige. TK_Essen ist der Türkontakt im Esszimmer statusanzeige_Led_01_open ist der Zustand Tür offen statusanzeige_Led_01_closed ist der Zustand Tür geschlossen das notify reagiert auf die Zustände open and closed und setz die Statusanzeige LED grün oder rot

Hat man mehr als 2 oder 3 solcher Kontakte so ist es unübersichtlich und zu aufwendig für jeden Kontakt ein eigenes Notify zu schreiben. Hat man bei der Namensgebung die Empfehlungen aus dem Einsteiger Pdf beherzigt und die Namen systematisch vergeben so kann man das deutlich eleganter definieren. Wenn nun die Kontakte jeweils so aussehen FK_Wohnzimmer, FK_Esszimmer, TK_Wohnzimmer, TK_Esszimmer ( FK = Fensterkontakt, TK = Türkontakt ) so sieht das eine notify so aus

#####################  notify über die Zustände der Türen und Fenster ----------
define statusanzeige_Led_update notify (T|F)K_.*:(open|closed) { Update_Fenster_LED("$NAME") }

(T|F)K_.* ist die kurze Schreibweise für die Kontakte (open|closed) ist der aktuelle Zustand der Kontakte

99_myUtils.pm

sub
Disp_Update {
if (isday() ) {
     fhem ("set statusanzeige ilum 15 0")
   } else {
     fhem ("set statusanzeige ilum 1 15")
   }
}

Die erste Zahl ist die Helligkeit (0 bis 15) Die zweite Zahl ist die Leuchtdauer in Sekunden (wobei 0 = dauerhaft eingeschaltet) OG_Statusdisplay ist der Name des Status Displays der mit rename nach Belieben umbenannt werden kann

Beispiel 1

Das Statusdisplay über z:B. einen Bewegungsmelder einschalten und den aktuellen Status der Geräte anzeigen. Das Gerät übernimmt beim einschalten ( ein / ausschalten nicht vorgesehen) nicht die aktuellen Zustände. Dies muss über weitere notifys realisiert werden.

Es sind zwei Schritte in der fhem.cfg erforderlich. 1. Erweiterung der fhem.cfg um ein notify das auf "poweron" reagiert 2. Die Aktualisierung der aktuellen Zustände

define LED_Anzeige_powerOn notify statusanzeige:powerOn.* define UF_LED_Anzeige_powerOn at +00:00:10 {Update_Fenster_LED("Alle")}
attr LED_Anzeige_powerOn room Türkontakt


und eine Erweiterung der 99_myUtils.pm die die aktuellen state Zustände abfragt:

my @Fenster_name = ("FK_Bad_EG", "FK_Buero", "FK_Essen", "FK_Garage", "FK_Keller", "FK_Kueche" , "TK_Essen", "TK_wohnen");
my @Led_name = ("statusanzeige_Led_01", "statusanzeige_Led_02", "statusanzeige_Led_03", "statusanzeige_Led_04", "statusanzeige_Led_05", "statusanzeige_Led_06" , "statusanzeige_Led_07", "statusanzeige_Led_08");

sub Update_Fenster_LED($) {
  my ($fenster) = @_;
  my $i;
  my $zustand;
  my $led;
  my $farbe;
 
  # Reset
  if ($fenster eq "Alle") {
    fhem("set LED_Anzeige led off");
  }
  # Loop über alle Fenster
  for ($i = 0; $i <= $#Fenster_name; $i++) {
     if ($fenster eq "Alle" || $fenster eq $Fenster_name[$i]) {
      # Aktuellen Zustand lesen
      $zustand = Value($Fenster_name[$i]);
      # LED ermitteln
      $led = $Led_name[$i];
      # Farbe setzen
      if ($zustand eq "closed") {
        $farbe = "green";
      } elsif ($zustand eq "gekippt") {
        $farbe = "orange";
      } elsif ($zustand eq "open") {
        $farbe = "red";
      } else {
        $farbe = "off";
      }
      # LED senden
      fhem("set $led led $farbe");
      # Abbruch, falls nicht für alle Fenster
      if ($fenster ne "Alle") {
        last;
      }
    }
  }
}

Achtung gekippt muss noch durch den englishen Begriff ersetzt werden ! Wichtig vor allem die ersten beiden Zeilen wobei der 1. Fenster_name mit dem 1. Led_name korrespondieren muss. Die weiteren natürlih auch entsprechend.

Diskussion hier: http://forum.fhem.de/index.php/topic,25539.msg387495.html#msg387495

Beispiel 2

Ähnlich wie Beispiel 1, aber etwas flexibler. Vorausgesetzt wird, dass das Display "statusanzeige" heißt.

Notify zum Setzen der aktuellen Zustände beim Einschalten des Displays:

define statusanzeige_powerOn notify statusanzeige:powerOn.* {update_led("alle")}

Notify zum Ändern des Zustands, wenn sich Werte ändern:

define statusanzeige_update_led notify (geraet1|geraet2|geraet3|geraet4).* { update_led("$NAME") }

Erweiterung der 99_myUtils.pm, um die Zustände zu setzen (Funktion "update_led"):

# die abgefragten Geräte (oder dummys) auf die LEDs mappen
my %thingToLed = ('geraet1' => 'statusanzeige_Led_01',
  'geraet2' => 'statusanzeige_Led_02',
  'geraet3' => 'statusanzeige_Led_03',
  'geraet4' => 'statusanzeige_Led_04');

# die abgefragten Geräte (oder dummys) auf die "OK-Zustände" mappen
# => wenn dieser Zustand vorliegt, zeigt die LED grün
my %thingToOkState = ('geraet1' => 'closed',
  'geraet2' => 'aus',
  'geraet3' => 'off',
  'geraet4' => 'nein');

# die abgefragten Geräte (oder dummys) auf die "Nicht-OK-Farben" mappen
# => wenn nicht der oben definierte "OK-Zustand" vorliegt, zeigt die LED die hier definierte Farbe
my %thingToNotOkColor = ('geraet1' => 'red',
  'geraet2' => 'red',
  'geraet3' => 'orange',
  'geraet4' => 'red');

sub update_led($) {
  my ($sensor) = @_;
  my $thing;
  my $zustand;
  my $led;
  my $farbe;

  # Reset
  if ($sensor eq "alle") {
    fhem("set statusanzeige led off");
  }
  # Loop über alle Sensoren
  # TODO nur bei 'alle' die Schleife durchlaufen, sonst den Sensor direkt via Hash ansprechen
  foreach my $thing (keys %thingToLed) {
    if ($sensor eq "alle" || $sensor eq $thing) {
      # Aktuellen Zustand lesen
      $zustand = Value($thing);
      # LED ermitteln
      $led = $thingToLed{$thing};
      # Farbe setzen
      if ($zustand eq $thingToOkState{$thing}) {
        $farbe = "green";
      } else {
        $farbe = $thingToNotOkColor{$thing};
      }
      # LED senden
      fhem("set $led led $farbe");
      # Abbruch, falls nicht für alle Sensoren
      if ($sensor ne "alle") {
        last;
      }
    }
  }
}

Links