Buttons von LED16 abfragen

Begonnen von selfarian, 24 Mai 2013, 17:01:21

Vorheriges Thema - Nächstes Thema

selfarian

Hallo zusammen,

ich habe kürzlich erst mit der Hausautomatisierung angefangen und habe mit der Umsetzung einer Alarmanlage begonnen.
Dazu gab es ja im Wiki eine gute Vorlage/Beschreibung.
Nun möchte ich gerne über die LED16 die Alarmanlage an bzw. ausschalten können.
Ich habe das wie folgt versucht:
LED16.Btn1:on {
  if (Value("ANLAGE_SCHARF") eq "on") {
    fhem("set ANLAGE_SCHARF off");
  } else {
    fhem("set ANLAGE_SCHARF on");
  }
}


ANLAGE_SCHARF ist bei mir ein Dummy, den ich derzeit nur über die Weboberfläche ansprechen kann.

Im LOG der LED16 OutputUnit erscheint bei der Betätigung eines Buttons folgendes:
2013-05-24_16:08:57 LED16 Btn1 on (to HMLAN1)

Kann mir da jemand weiterhelfen?

Vielen Dank und liebe Grüße,

Alex
RasPi mit HMLAN, 5x HM-SEC-SC, HM LED16 als Alarmanlagendisplay, HM-TC-IT-WM-W-EU, 4x HM-CC-RT-DN, 1x HM PBU, 1x HM PBI-4

martinp876

Hi Alex,
du hast ein notify definiert? Das kommando ist nicht vollstaendig, korrekt?

also
define nf notify LED16.*Btn1.on.* {....}


Gruss Martin

selfarian

Hallo Martin,

herzlichen Dank. Jetzt funktioniert es!
Es lag an dem Part zwischen notify und der geöffneten Klammer. Ich hatte den Auszug aus dem Webinterface entnommen, daher fehlte das define xy notify.
Kannst du mir den Syntax hier vielleicht noch erläutern wari, es die Zeichenfolge .* benötigt?

Leider musste ich feststellen, das eine grüne Diode kaputt ist :( Nun muss das ding erstmal zurück :(

Viele Grüße,
Alex
RasPi mit HMLAN, 5x HM-SEC-SC, HM LED16 als Alarmanlagendisplay, HM-TC-IT-WM-W-EU, 4x HM-CC-RT-DN, 1x HM PBU, 1x HM PBI-4

martinp876

Hi Alex,

fhem nutzt an vielen stellen die sog. regular experssions (regexp). Kannst du mal im web nachsehen, ist ein recht langes kapitel

. -> beliebiges Zeichen
* -> beliebig haeufige Wiederholung des Zeichens davor
.* -> beliebige Zeichenkette
a* -> beliebige Anzahl von "a"

LED16.Btn -> könnte sein "LED16 Btn", "LED16:Btn", "LED16xBtn", aber nur 1 Zeichen zwischen LED16 und Btn

Beachte, dass FHEM meist den kompletten Sting parsed. Daher musst du am ende oft ein ".*" anhaengen, falls noch Zeichen nachkommen.
Wenn du nach einem "." suchst musst du mit "\" markieren, dass das nächste Zeichen nicht interpretiert werden soll.
LED16\.Btn -> ist "LED16.Btn"
LED16\*Btn -> ist "LED16*Btn"
\L\E\D\1\6\*\B\t\n -> ist "LED16*Btn"

das ist nur die Oberfläche der regexp,  aber . und .* ist wohl eine der am haeufigsten genutzten Steuerzeichen.

Gruss Martin


selfarian

Hi Martin,

ah ok, danke für die Erklärung. Prinzipiell kenne ich schon regex, aber irgendwie bin ich damit nie richtig warm geworden ;)

Verstehe ich das richtig, das die Ausdrücke beim notify dann auf das Log beziehen?

Viele Grüße,
Alex
RasPi mit HMLAN, 5x HM-SEC-SC, HM LED16 als Alarmanlagendisplay, HM-TC-IT-WM-W-EU, 4x HM-CC-RT-DN, 1x HM PBU, 1x HM PBI-4

martinp876

Hi,

ja, in den logs sollten die zu vergleichenden Ausdruecke stehen. Im commandref ist eine Beschreibung. Notify wertet entweder nur den "Namen" aus oder den "name:reading:wert". Notify probiert beides, ob es nicht doch einen match gibt. Wie gesagt, immer der ganze string, also ggf. mit ".*" 'beenden'
Probleme gibt es immer bei State, da dies aus dem Reading vorher entfernt wird.

Gruss Martin

selfarian

Ok. Danke. Ich denke, damit komme ich ein ziemliches Stück weiter!
RasPi mit HMLAN, 5x HM-SEC-SC, HM LED16 als Alarmanlagendisplay, HM-TC-IT-WM-W-EU, 4x HM-CC-RT-DN, 1x HM PBU, 1x HM PBI-4

selfarian

Ich bräuchte nochmal einen Tipp :-)

Da mein "altes" LED16 ja leider nicht ganz funktioniert, wird es ja die Tage getauscht.
Gibt es eine schnelle Möglichkeit, die 2 Geräte so zu tauschen, das das neue Gerät die Einstellungen/Namen vom alten Gerät übernimmt?
Beim LED16 ist es ja so, das er einmal das Device anlegt und dann nochmal 16 für die einzelnen LED-Kanäle.
Ich befürchte, das ich nun das neue Gerät normal pairen muss und dann alle 17 Objekte umbenennen muss :/

Viele Dank und viele Grüße.
RasPi mit HMLAN, 5x HM-SEC-SC, HM LED16 als Alarmanlagendisplay, HM-TC-IT-WM-W-EU, 4x HM-CC-RT-DN, 1x HM PBU, 1x HM PBI-4

martinp876

Hallo Alex,

gibt es.
oh, hab ich das commandref vergessen?

erst musst du die Daten lesen, also ein
set LED16 getConfig
damit die Daten gelesen werden. Warten bis fertig...

dann ein
get LED16 saveConfig <filename>

Es werden alle Register und peerings in Rohdaten in das File gespeichert.
Im File stehen die Kommandos um alles zurueckzuschreiben. Du kannst das File also einfach in FHEM ausfuehren.
Vorher solltest du das neue LED16 wieder anlernen und ihm den gleichen Namen geben.

Hier noch ein Tip, um es fuer die gesamte Installation einfacher zu machen: Nutze HMinfo:
#setze in allen devices das attribut autoReadReg auf '1' oder hoeher (wuerde ich eh machen)

#definieren
define hm HMinfo

#protocol events loeschen und somit zaehler ruecksetzen
set hm clear Protocol

#gesamte Konfiguration lesen:
# alle devices mit dem Attribut >1 auslesen
set hm autoReadReg
#dauert etwas, da die Kommando zeitlich entzerrt abgesetzt werden.

#Status des lesens pruefen:
set hm protoEvents
# kann man gut im web-interface - und dann refresh druecken
# warten bis alle pending commands erledigt sind. Fehler beachten/beheben. Das stellt sicher, dass alle Daten gelesen wurden.

# alle peerings und register speichern.
set hm saveConfig <filename>

#das File wird kumulativ angelegt, neue Eintraege werden immer hinten angehaengt. Du kannst danach den Teil der Konfiguration herausnehmen und ausfuehren, der dir fehlt.

Gruss
Martin

selfarian

Hallo Martin,

ok, das wäre eine Möglichkeit. Ich hatte nur gehofft, das es irgendwie eine Möglichkeit gibt, das Umbenennen zu "umgehen".
Da es ja nicht nur das LED16 an sich ist, sondern er ja auch die 16 LED's einzeln anlegt :-)

Gruß,
Alex
RasPi mit HMLAN, 5x HM-SEC-SC, HM LED16 als Alarmanlagendisplay, HM-TC-IT-WM-W-EU, 4x HM-CC-RT-DN, 1x HM PBU, 1x HM PBI-4

martinp876

Hi Alex,
ich sehe das Problem nicht.

Also erst einmal die Daten sichern, das ist Pflicht. Geht mit den 2 Kommandos, einmal Lesen (getConfig), dann Schreiben (saveConfig).

Wenn du den neuen bekommst willst du den Alten ersetzen. Also erst anlernen - da legt FHEM einen Namen fest (muss ja...) und zwar fuer alle LEDs. Es gibt viele Wege hier seinen Namen reinzubekommen, auch 16 mal.

a) Anlernen mit haesslichen Namen -> save -> in fhem.cfg ein suche/ersetze auf den Namen machen -> mit neuem Namen starten
b) terminalfenster zu fhem aufmachen und 17 renames reinpasten, die du im Editor erstellt hast
c) eine message des neuen LED16 abfangen (taste druecken/anlernen...) und die HMID des device notieren -> FHEM neu starten ohne vorher zu speichern -> define <name> CUL_HM <HMID> nur fuer das Device machen -> anlernen => alle 16 Channels werden mit deinem Namen und _BTN1 angelegt.

Ist nicht viel zu tippen, wenn man es geschickt macht - aber einmal musst du den Namen schon eingeben. HM nutzt eigentlich die HMID als "key" - die Zuordnung zum Namen den ein FHEM user als 'key' nutzt musst du min einmal machen.

Falls dein Problem beim Rueckschreiben der Register/peers liegt kannst du den Namen auch im gespeicherten File editieren. Wenn dein LED16 wieder den gleichen Namen bekommt kannst du einfach so ablaufen starten.

Gruss Martin

selfarian

Okay. Das versuche ich mal :-)

Bzgl. dem HMInfo. Hattest du dich hier auf das LED16 bezogen, oder meintest du wirklich alle HM Aktoren/Reaktoren die im gesamten FHEM im Einsatz sind?
RasPi mit HMLAN, 5x HM-SEC-SC, HM LED16 als Alarmanlagendisplay, HM-TC-IT-WM-W-EU, 4x HM-CC-RT-DN, 1x HM PBU, 1x HM PBI-4

martinp876

HMinfo habe gebaut um ALLE HM Entities verwalten zu koennen.
Speziell wenn ich sichern will oder den Protokoll-zustand sehen will. Auch registerlisten erzeugen oder parameter-tabellen.

Du kannst faktisch alle Kommandos auch mit eigenen Filtern nutzen. So zum beispiel nur alle Devices, alle Channels , alle virtuellen Entities, auch Namensfilter.

Im Commandref oder mit "set hm help" solltest du einen Ueberblick erhalten.

selfarian

Hallo Martin,

zur Info:
Ich habe das mit der Umbenennung jetzt anders geregelt:
Ich habe zuerst das neue LED16 gepairt und habe so die Seriennummer und die HMID bekommen (ja... man hätte sie sicherlich auch einfacher kriegen können ;))
Dann habe ich einfach die HMID und Seriennummer vom alten LED16 mit denen vom neuen ersetzt und die neu angelegten Devices aus der Config geschmissen :-)
So musste ich nur 2x mit "ersetzen" über die Datei gehen :-)

Gruß,
Alex
RasPi mit HMLAN, 5x HM-SEC-SC, HM LED16 als Alarmanlagendisplay, HM-TC-IT-WM-W-EU, 4x HM-CC-RT-DN, 1x HM PBU, 1x HM PBI-4

martinp876

Hi Alex,

auch eine Gute Loesung. Die HMID in den Channels hast du sicher mit ersetzt.

An die HMID kommt man nur, wenn man dem Device irgend eine message entlockt und diese ansieht - das hat deine Loesung ja auch gemacht.

Was handarbeit ist sind ggf folgende Aufgaben:
1) falls ein channel gepeert war musst du ihn wieder peeren.
2) falls du Registereinstellungen manipuliert hast musst du diese wieder setzen

3) falls ein channel gepeert war musst du in der Gegenstelle
3a) den neuen Peer einrichten
3b) den alten Peer loeschen
4) falls in der Gegenstelle Register geaendert wurden im Bezug auf diesen peer musst du diese wieder herstellen.

Dann sollte aber alles beruecksichtigt sein.

Gruss Martin