HM-OU-LED16 Power on

Begonnen von cerberus, 21 Juli 2014, 12:14:21

Vorheriges Thema - Nächstes Thema

cerberus

Hallo, wie bekomme ich es hin das nach einem Stromausfall das HM-OU-LED16 den letzten Staus der LED´s wie vor dem Stromausfall gesetzt wieder annimmt?

Gruß
cerberus
Banana PI mit Bananian + Fhem 5.5, 2x SCC SlowRF/Homematic + RS485 LAN Gateway HMW-LGW-O-DR-GS-EU + RPI2 I2C to 1-Wire Host Adapter for Raspberry Pi

LuckyDay

ist eigentlich standard, sprich du musst nichts tun für das Feature

cerberus

Funktioniert aber nicht bei mir. Der Status in FHEM ist eigenartigerweise im WEBFrontend dann auch bei allen LED´s off. Kommen die Werte aus der fhem.save?
Banana PI mit Bananian + Fhem 5.5, 2x SCC SlowRF/Homematic + RS485 LAN Gateway HMW-LGW-O-DR-GS-EU + RPI2 I2C to 1-Wire Host Adapter for Raspberry Pi

justme1968

fhem sendet beim einschalten den letzten stand den fhem kennt. also das was aus save kommt.

um das halbwegs aktuell z halten bietet es sich an per at regelmäßig zu speichern.

zusätzlich ist es sinnvoll in den routinen die die leds schalten jeweils selber zu prüfen ob der neue zustand ungleich dem alten ist. dann muss mannein. du musst nicht. du sollst nicht. du darfst nich b in den notifys nicht event-on-change verwenden sondern kann den status immer aktualisiern und es wird trozdem nur gesendet wenn sich etwas ändert.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

LuckyDay

Zitat von: cerberus am 21 Juli 2014, 12:14:21
nach einem Stromausfall das HM-OU-LED16 den letzten Staus der LED´s wie vor dem Stromausfall gesetzt wieder annimmt?

nur nochmal zum Verständnis
ist eigentlich standard, sprich du musst nichts tun für das Feature

Wenn du davon sprichst, dass  dein FHEM Stromausfall und dein HM-OU-LED16 hat, wird das HM-OU-LED16 nicht mit den Daten aus fhem.save versorgt.

Deudi

Dafür habe ich mir ein Notify angelegt:

define LED_Anzeige_powerOn notify LED_Anzeige:powerOn.* define UF_LED_Anzeige_powerOn at +00:00:10 {Update_Fenster_LED("Alle")}

Zur Sicherheit gibt es noch eine Verzögerung, damit das Display auch komplett gebootet hat. Eine Perl Funktion sendet dann die Updates für die LEDs.
Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

Gunther

Dein notify interessiert mich.
Leider verstehe ich noch nicht ganz, wie Du vorgehst.

Hast Du pro LED ein notify?
Was speziell ist bei Dir UF_LED_Anzeige_powerOn und Update_Fenster_LED("Alle")?
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Deudi

Hallo Gunther,

es gibt nur ein notify. Dieses wird getriggert, wenn das Display startet. Nun wird ein at definiert mit dem Namen "UF_LED_Anzeige_powerOn", um die Ausführung noch etwas zu verzögern. Das at kann auch Klaus oder Hugo heissen. Bei mir zeigt das Display den Zustand der 16 Fenster im Haus an (UF = Update Fenster). Nach 10 Sekunden wird die Perl Funktion "Update_Fenster_LED" aufgerufen. Normalerweise wird hier der Name eines Fensters übergeben. Die Funktion ermittelt die dazugehörige LED und sendet den Befehl, um die Farbe zu setzen. Wenn der Fenstername "Alle" heißt, werden alle LEDs neu gesendet.

Gruß Deudi
Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

FHEMAN

Hallo Deudi,

magst Du Deinen Code hier posten?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Deudi

Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

Deudi

So, hier mein Code aus der 99_myUtils.pm. Um es gleich vorweg zu nehmen: Das geht bestimmt auch eleganter. Der Code ist aus meinen FHEM-Anfangszeiten. Aber er funktioniert gut und daher habe ich keinen Anlass das zu ändern. Es sei denn, jemand macht mir daraus einen wurschteligen Perl Einzeiler  ;D

Ich habe eine Liste der 16 Fenster und eine für die LEDs. Für Fenster_Arbeitszimmer ist LED01 zuständig, für Fenster_Flur_DG die LED02 usw. Die Fenstersensoren (RHS) haben ein eventMap, daher die deutschen Zustände. Denglisch ist toll  ::)


my @Fenster_name = ("Fenster_Arbeitszimmer", "Fenster_Flur_DG",  ...  , "Fenster_Hobbykeller");
my @Led_name = ("LED01", "LED02",  ...  , "LED16");

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 < 16; $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 "geschlossen") {
        $farbe = "green";
      } elsif ($zustand eq "gekippt") {
        $farbe = "orange";
      } elsif ($zustand eq "offen") {
        $farbe = "red";
      } else {
        $farbe = "off";
      }
      # LED senden
      fhem("set $led led $farbe");
      # Abbruch, falls nicht für alle Fenster
      if ($fenster ne "Alle") {
        last;
      }
    }
  }
}


Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

FHEMAN

Hey Deudi, sorry für die späte Antwort, ich sollte mal eine Benachrichtigung konfigurieren.
Ich finde Deinen Code gut! Sieht aus wie meine Spaghetti Code Ergüsse, aber hey, es funktioniert und man erkennt auch nach Monaten sofort, was es tut!
Danke, dass Du ihn veröffentlicht hast!

Ich habe es zwischenzeitlich mit einzelnen Notifies für jeden TFK realisiert, die ich dann per Wildcard TFK.* antriggere.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Deudi

Zitat von: derron am 13 April 2015, 23:54:42
Ich habe es zwischenzeitlich mit einzelnen Notifies für jeden TFK realisiert, ...

Hast du für jedes Fenster ein Notify? Das ist nicht optimal. Bedenke, dass jedes Event gegen jedes Notify geprüft werden muss. Cubietruck ist zwar nicht langsam, aber es kostet trotzdem. Ich hatte auch solche Konstrukte aus den Anfangszeiten und habe es dann nach und nach umgebaut.

Gruß Deudi
Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

FHEMAN

OK, du hast mich motiviert, ein zentrales Notify umzusetzen auf Basis deines Codes. Die Abarbeitung ist dadurch allerdings langsamer geworden. Ich habe das Gefühl, dass Notifies ziemlich performant parallel abgearbeitet werden. Aber die Umstellung hat sich trotzdem gelohnt, alleine der Code ist nun viel besser zu warten.

Um unnötige Sets zu durch die Luft zu funken, habe ich übrigens noch eine Statusabfrage vorher eingebaut in der Form
if (Value($LED[$i]) ne "green") {
  fhem ("set $LED[$i] led green");
}   
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Franz Tenbrock

#14
Hallo
habe das gleiche Problem.
bin aber nicht gerade EDV Programmierer Profi.

Wäre schön wenn wie ein komplettes Beispiel für das Wiki hätten.
http://www.fhemwiki.de/wiki/HM-OU-LED16_Funk-Statusanzeige_LED16

Möchte das Display per Bewegungsmelder einschalten, das natürlich mit den aktuellen Zuständen.
Dafür scheint der code ja geeigent.

muss man hier die Pünktchen durch die echten Namen ersetzen?

my @Fenster_name = ("Fenster_Arbeitszimmer", "Fenster_Flur_DG",  ...  , "Fenster_Hobbykeller");
my @Led_name = ("LED01", "LED02",  ...  , "LED16");

also zB 16 Fenster und 16 LEDs oder eben nur 8 ?!

Sorry verstehe den code och nicht ganz

So wäre das Disply dann wirklich brauchbar

habs mal probiert:
Die Namen der LEDs habe ich aus der automatisierten Analge des devices übernommen, gerade für Anfänger sicher dann einfacher zu vertehen.

99_myUtils.pm


my @Fenster_name = ("FK_Bad_EG", "FK_Buero", "FK_Essen", "FK_Garage", "FK_Keller", "FK_Kueche" , "TK_Essen", "TK_wohnen");

my @Led_name = ("HM_20F85B_Led_01", "HM_20F85B_Led_02", "HM_20F85B_Led_03", "HM_20F85B_Led_4", "HM_20F85B_Led_05", "HM_20F85B_Led_06" , "HM_20F85B_Led_07", "HM_20F85B_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 < 16; $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;
      }
    }
  }
}





in der fhem.cfg


define LED_Anzeige_powerOn notify LED_Anzeige:powerOn.* define UF_LED_Anzeige_powerOn at +00:00:10 {Update_Fenster_LED("Alle")}


cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi