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
Hi Alex,
du hast ein notify definiert? Das kommando ist nicht vollstaendig, korrekt?
also
define nf notify LED16.*Btn1.on.* {....}
Gruss Martin
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
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
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
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
Ok. Danke. Ich denke, damit komme ich ein ziemliches Stück weiter!
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.
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
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
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
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?
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.
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
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
Hi Martin,
ja. Ich habe einfach alle Vorkommen ersetzt.
Peerings hatte ich keine. Aber soweit ich es verstanden habe, kann die LED16 auch nicht direkt gepeert werden. Lt. Beschreibung ist hier auch zwingend eine Zentrale erforderlich.
Ich könnte mir auch nicht so recht vorstellen, wie das mit dem Peering dann funktioniert. Das Peering müsste dann ja auf einen Channel gehen.
Wenn ich die LED16 aber in den "Lern"-Modusversetze, dann kann ich ja nicht auswählen, das Channel XY gepeert werden soll.
Sonst würde ich u.U. den Fenstersensor direkt mit LED16 peeren.
Gruß,
Alex
Hi Alex,
ok, da hast du recht. Die Zentrale koennte zwar die Kommandos absetzen, und peeren kann man nur per Anlernen wenn nicht gepairt ist, aber ich erinnere mich, der LED16 spielt nur mit der Zentrale.
Also in diesem Fall sind alle Fragen 1-5 mir nein zu beantworten :-)
Demnach nur die uebrigen Register setzen. Oh, die sind garnicht eingebaut, jedenfalls die Dekodierung. Da kannst du dann eine EnergyOption steuern...
Dabei sehe ich, dass dein Device auch einen LED Sleepmode je Kanal unterstuetzen sollte. Sagt dir das etwas? Sollte FHEM das unterstuetzen?
Gruss
Martin
Hi Martin,
hm... ne, sagt mir nix. Ich hätte das jetzt Prinzipiell mit dem Ilum verbunden, damit kann man ja die Helligkeit und Leuchtdauer für das komplette Gerät festlegen.
Oder ist der Sleepmode noch etwas anderes?
An sich wäre es natürlich nicht schlecht, wenn FHEM das pro Kanal unterstützen würde. Dann könnte man ja z.B. beim Status von Alarmsensoren sagen, wenn du grün bist, leuchte ein paar Sekunden und geh dann in den Sleepmode. Wenn du rot bist, dann bleib bitte wach... oder so in der Richtung ;)
Kann ich da irgendwie helfen?
Gruß,
Alex
Hi Alex,
nach xml ist dies ein kanal-spezifischel Kommando und man kann sleepmode on und off setzen.
Das erste Problem ist, dass on und off nicht spezifiziert sind.
Du kannst einmal rumprobieren. dazu musst du
set LED16 raw ++A011<hmID_HMLAN><HMID_led16>82<chn><wert>
schicken. Immer die 6-stellige HMID des HMLAN und des LED16. Den Channel als 00, 01 02... eintragen. Der erste ist 01, 00 sollte nicht genutzt sein. Als Wert wuerde ich 00, 01 und FF probieren. Also
set LED16 raw ++A011222222333333820100
set LED16 raw ++A011222222333333820101
set LED16 raw ++A0112222223333338201FF
Normal sollte 00 = aus sein (kein sleep mode) und 01 oder FF eben sleepmode.
Zu unteruchen ist, ob der Kanal irgendwie abgeschaltet wird und keine Kommandos mehr sender oder empfaegt. Oder es ist etwas anderes...
Gruss
Martin