Trick der Woche: Unterschied zwischen den Versionen
(März ist im April) |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
Diese Seite enthält Tipps und Tricks, die zu unbedeutend sind, einen eigenen Artikel zu rechtfertigen, alternative Schreibweisen/Lösungen für eine Problem darstellen, Ungenauigkeiten oder unklare Formulierungen in den offiziellen Dokumenten ergänzen und ähnliches. Jeder Eintrag ist typischerweise sehr kurz (wenige Zeilen lang) und beleuchtet vielleicht nur einen Aspekt von Fhem, er kann allgemeiner Natur sein, oder sich auf ein spezielles Gerät oder einen speziellen Anwendungsfall beziehen. | Diese Seite enthält Tipps und Tricks, die zu unbedeutend sind, einen eigenen Artikel zu rechtfertigen, alternative Schreibweisen/Lösungen für eine Problem darstellen, Ungenauigkeiten oder unklare Formulierungen in den offiziellen Dokumenten ergänzen und ähnliches. Jeder Eintrag ist typischerweise sehr kurz (wenige Zeilen lang) und beleuchtet vielleicht nur einen Aspekt von Fhem, er kann allgemeiner Natur sein, oder sich auf ein spezielles Gerät oder einen speziellen Anwendungsfall beziehen. | ||
== April 2014== | |||
=== Code sparen === | |||
Wer Definitionen wie die aus dem April zum [[Trick_der_Woche#Zuverl.C3.A4ssigkeit_von_FS20_Schaltungen_erh.C3.B6hen|Abfangen von Fehlbedienungen]] verwendet, kann durch eine ELSE Erweiterung auch gleich das Auschalten erledigen. | |||
define act_on_TV_on notify TV { if ("%" eq "on" || "%" eq "dimup") { fhem("set TV on") } else { fhem("set TV off") } } | |||
Hierdurch schaltet ON oder versehentlich zu langes Drücken, also DIMUP den Fernseher ein, jeder ''andere'' Tastendruck (also insbesondere die OFF Taste oder zu langes Drücken der OFF Taste -> DIMDOWN) den Fernseher aus. | |||
Voraussetzung ist, dass die Fernbedienung standardkonfiguriert ist, siehe auch nächster Tip. | |||
=== Konfiguration eines FS20 Senders prüfen === | |||
Gelegentlich reagieren bestimmte notifys nicht, die von Sendern (Fernbedienungen, Sensoren oder Schaltern) ausgelöst werden sollen. Speziell bei FS20 aber auch bei HomeMatic kann das daran liegen, dass der Sender nicht sendet was man denkt. So gut wie alle FS20 Sender kennen nämlich nicht nur ON und OFF, sondern über ein Dutzend Schaltzustände. Dimmen ist einem noch hinreichend bewusst, es gibt aber auch exotische Dinge wie Ein-für-Zeitdauer, Ein-auf-alte-Helligkeit, Aus-für-Zeitdauer (nur FS20), Ein-für-Teitdauer-dannach-alter-Zustand und vieles mehr. | |||
Was also ein InfrarotBewegungsmelder bei Auslösung sendet und auch was eine Fernbedienungstaste sendet ist einstellbar. Wenn jetzt zum Beispiel an einer Fernbedienung Auf Tastendruck nicht ON sondern Ein-für-Zeitdauer (ON-FOR-TIMER) gesendet wird, wird | |||
define act_on_TV_on notify TV:on set TV on | |||
seltsamerweise nicht auslösen, obwohl die richtige Taste (und diese auch nicht zu lang) gedrückt wurde. | |||
Auch wenn man sich sicher ist, das richtige in die Fernbedienung/Sensoren einprogramiert zu haben, ist ein einfacher Test immer, dies mit | |||
define act_on_TV notify TV set TV on | |||
zu prüfen. Dieses define löst immer aus, wenn "TV" ''irgendetwas'' sendet, egal was.(Beachte: Mann kann dann den Fernseher aber nicht mehr ausschalten, da auch die Austaste das notivy auslöst und zum TV-Aktor nur "on" sendet) | |||
Geht die Schaltung jetzt (kann man den Fernseher als jetzt EINschalten), liegt der Verdacht nahe, dass die Konfiguration des Senders /Sensors anders ist als man denkt. | |||
Version vom 26. April 2014, 20:59 Uhr
Diese Seite enthält Tipps und Tricks, die zu unbedeutend sind, einen eigenen Artikel zu rechtfertigen, alternative Schreibweisen/Lösungen für eine Problem darstellen, Ungenauigkeiten oder unklare Formulierungen in den offiziellen Dokumenten ergänzen und ähnliches. Jeder Eintrag ist typischerweise sehr kurz (wenige Zeilen lang) und beleuchtet vielleicht nur einen Aspekt von Fhem, er kann allgemeiner Natur sein, oder sich auf ein spezielles Gerät oder einen speziellen Anwendungsfall beziehen.
April 2014
Code sparen
Wer Definitionen wie die aus dem April zum Abfangen von Fehlbedienungen verwendet, kann durch eine ELSE Erweiterung auch gleich das Auschalten erledigen.
define act_on_TV_on notify TV { if ("%" eq "on" || "%" eq "dimup") { fhem("set TV on") } else { fhem("set TV off") } }
Hierdurch schaltet ON oder versehentlich zu langes Drücken, also DIMUP den Fernseher ein, jeder andere Tastendruck (also insbesondere die OFF Taste oder zu langes Drücken der OFF Taste -> DIMDOWN) den Fernseher aus.
Voraussetzung ist, dass die Fernbedienung standardkonfiguriert ist, siehe auch nächster Tip.
Konfiguration eines FS20 Senders prüfen
Gelegentlich reagieren bestimmte notifys nicht, die von Sendern (Fernbedienungen, Sensoren oder Schaltern) ausgelöst werden sollen. Speziell bei FS20 aber auch bei HomeMatic kann das daran liegen, dass der Sender nicht sendet was man denkt. So gut wie alle FS20 Sender kennen nämlich nicht nur ON und OFF, sondern über ein Dutzend Schaltzustände. Dimmen ist einem noch hinreichend bewusst, es gibt aber auch exotische Dinge wie Ein-für-Zeitdauer, Ein-auf-alte-Helligkeit, Aus-für-Zeitdauer (nur FS20), Ein-für-Teitdauer-dannach-alter-Zustand und vieles mehr.
Was also ein InfrarotBewegungsmelder bei Auslösung sendet und auch was eine Fernbedienungstaste sendet ist einstellbar. Wenn jetzt zum Beispiel an einer Fernbedienung Auf Tastendruck nicht ON sondern Ein-für-Zeitdauer (ON-FOR-TIMER) gesendet wird, wird
define act_on_TV_on notify TV:on set TV on
seltsamerweise nicht auslösen, obwohl die richtige Taste (und diese auch nicht zu lang) gedrückt wurde.
Auch wenn man sich sicher ist, das richtige in die Fernbedienung/Sensoren einprogramiert zu haben, ist ein einfacher Test immer, dies mit
define act_on_TV notify TV set TV on
zu prüfen. Dieses define löst immer aus, wenn "TV" irgendetwas sendet, egal was.(Beachte: Mann kann dann den Fernseher aber nicht mehr ausschalten, da auch die Austaste das notivy auslöst und zum TV-Aktor nur "on" sendet) Geht die Schaltung jetzt (kann man den Fernseher als jetzt EINschalten), liegt der Verdacht nahe, dass die Konfiguration des Senders /Sensors anders ist als man denkt.
März 2014
Zuverlässigkeit von FS20 Schaltungen erhöhen
FS20 Fernbedienungen senden bei Tastendrücken von mehr als 0,4 Sekunden anstatt ON bzw. OFF DIMUP bzw DIMDOWN.
Das führt gelegentlich zu allgemein schlechter Bedienbarkeit (und schlechtem WAF), da 0,4 Sekunden relativ kurz ist und gerne aus versehen länger gedrückt wird. Das ist vor allem problematisch, wenn etwas geschaltet werden soll, was keinen Dimmer hat oder Dimmen nicht unterstützt.
Eine Konfiguration wie
define act_on_TV_on notify TV:on set TV on
hat also dann den Nachteil, dass bei versehentlich zu langem Tastendruck das TV nicht angeht. Da die meisten Nutzer unbewusst dazu neigen, bei Misserfolg die selbe Taste erneut aber länger zu drücken (was erneut keinen Erfolg zeigt) ist Frustration zu erwarten.
Es kann daher speziell bei nicht dimmbaren Aktoren von Vorteil sein, auch dimmen abzufangen, z.b. durch eine zweite zusätzliche Definition:
define act_on_TV_dimup notify TV:dimup set TV on
Es ist idR. einfacher einige dieser zusätzlichen Definitionen einzufügen, als allen Bedienern des Systems zu erklären, dass man keinesfalls länger als 0,4 Sekunden drücken darf.
Alternativ kann man auch beide Befehle in einer Definition durch Perlbefehle {} abfangen:
define act_on_TV_on notify TV { if ("%" eq "on" || "%" eq "dimup") { fhem("set TV on") }}
Februar 2014
Sequence nutzen
Man kann Aktionen statt mit einem Tastedruck auch mit einer Sequenz von Tastendücken auslösen. Das Format des Befehle ist:
define <name> sequence <re1> <timeout1> <re2> [<timeout2> <re3> ...]
wobei <re1> ...<re_n> die Aktionen sind und <timeout_n> der maximale Abstand der Tastendrücke in Sekunden.
Angenommen, man wolle z.B. eine Lampe dann anschalten, wenn man zuerst Taste1 EIN , dann Taste2 AUS und dann wieder Taste1 EIN einer Fernbedienung drückt, könnte das konkret so aussehen:
define MeineLampenSequenz1 sequence Btn1:on 0.5 Btn2:off 0.5 Btn1:on
Zwischen jedem der Tastendrücke darf eine halbe Sekunde Abstand sein. Diese Definition selbst löst die Lampe nicht aus, sondern definiert nur wie die Sequenz aussehen soll. Um die Lampe bei erfolgreicher Betätigung der Sequenz auch einzuschalten bedarf es zusätzlich etwas wie:
define MeineLampe notify MeineLampenSequenz1:trigger set Lampe on
Sequence kann man gut nutzen, um mit einer Fernbedienung mehr Funktionen zu schalten als Tasten zur Verfügung stehen. Ebenso könnte man damit simple Codeschlösser für Alarmanlagen bauen, z.b. um eine Anlage auszuschalten, wenn eine bestimmte Abfolge von Tasten gedrückt wird.
Je nach Funksystem nimmt die Zuverlässigkeit aber rasch ab. Angenommen im Bereich FS20 (das System ist etwas unzuverlässiger ist als z.b. HomeMatic) seien 95% aller Funktsingnale ungestört übertragbar, dann würden in der Praxis von 100 Tastendrücken an einer Fernbedienung 95x Erfolg zeigen und 5x fehlschlagen; das ist sicher tolerabel. Bei einer Sequenzlänge von nur 4 Tasten würde die kombinierte Erfolgsquote der Sequenz jedoch nur noch ca. 80% sein, zum Ausschalten einer Alarmanlage vermutlich bereits unpraktisch.
Januar 2014
isday
Bekanntlich kann man mit "isday" leicht testen ob es draussen hell ist oder nicht. isday ist eine Funktion des (automatisch geladenen) 99_SUNRISE_EL.pm Moduls das auch sunset und sunrise enthält.
Problematisch bei isday ist die fehlende Möglichkeit, Sonnenaufgang und Untergang einzustellen. (zumindest wenn man nicht 99_SUNRISE_EL.pm verändern will): isday ist wahr, wenn die Sonne im gegebenen Breitengrad sichtbar ist. Wenn örtliche Gegebenheiten eine Anpassung erfordern, kann man sich auch ein eigenes isday basteln, in dem man sunrise und sunset verwendet und dieses mit getrennten offsets versieht.
Zuerst definiert man sich eine Variable ("dummy") der anstelle isday eingesetzt werden soll, z.b.:
define Tageslicht dummy
Dann wird diese mit sunset und sunrise befüllt:
define SetDummy1 at *{sunset(-3600)} set Tageslicht hell define SetDummy2 at *{sunrise(+1800)} set Tageslicht dunkel
Jetzt kann für jeden Wechsel ein eigener Offset gewählt werden, im Beispiel 3600 Sekunden vor Sonnenuntergang und 1800 Sekunden nach Sonnenaufgang. Anstatt das Dummy "Tageslicht" mit den Werten "hell/dunkel" zu befüllen, kann natürlich auch 1/0 oder "Tag/Nacht" etc. verwendet werden, je nach dem was bei der Anwendung besser passt.
Für höhere Ansprüche könnte hingegen das Twiglight-Modul verwendet werden, das Dämmerungsstufen kennt.
Struktur von "Else IF" Schleifen
define ... notify ... {\ if ... {\ fhem ("... ;; ...")\ }\ elsif {\ if ... {\ fhem ("... ;; ...")\ }\ elsif {\ if ... {\ fhem ("... ;; ...")\ }\ else {\ if ... {\ fhem ("... ;; ...")\ }\ }}}}
Achtung: es muss tatsächlich "elsif" heissen und nicht "elseif" oder "else if"
Dezember 2013
notify durch mehrere Ereignisse auslösen lassen
Bekanntermassen löst
define irgendwas notify MeinSchalter …
aus, wenn irgendein Ereignis vom Sender "MeinSchalter" eintrifft.
Mit
define irgendwas notify MeinSchalter:on …
wird das notify jedoch nur ausgelöst, wenn dieses Ereignis eine "on" ist. Wenn man aber möchte, das z.B. "on" und "off" auslöst (um etwa Dim-Befehle auszuschliessen) kann dies wie folgt erreicht werden:
define irgendwas notify MeinSchalter:(on|off) …
Die Klammern sind wichtig, vergleiche eine Lösung, bei der zwei Sender alternativ das notify auslösen können:
define irgendwas notify MeinSchalter:on|MeinAndererSchalter:on …
Selbstverständlich geht z.B. auch folgendes:
define irgendwas notify MeinSchalter:on|MeinAndererSchalter …
Hier wird ausgelöst wenn "MeinSchalter" das Ereignis "on" liefert oder "MeinAndererSchalter" irgendein Ereignis
Aktoren über mehrere Funkschnittstellen ansprechen
Falls man mehrere Funkschnittstellen zur Reichweitenverlängerung hat (CUL / CUNO etc), und ein Aktor von beiden Funkschnittstellen in etwa gleich (schlecht) erreichbar ist, mag der Wunsch aufkommen, einen Funkbefehl über beide Schnittstellen auszusenden. Dies ist bei Funkprotokollen möglich, die kein echtes Pairing der Aktoren an die Funkschnittstelle erfordern, also z.b. FS20 oder Intertechno, nicht jedoch bei HomeMatic.
Problematisch ist aber, dass die Funkschnittstelle über IODev eindeutige je Aktor festgelegt werden muss, eine Zuordnung mehrerer IODevs ist nicht vorgesehen. (wenn man IODev nicht setzt, wird per default die LETZTE definiert Schnittstelle verwendet)
Diess Problem kann mit einem Trick aber umgangen werden. Und zwar legt man den Aktor 2x mit gleicher Adresse aber abweichenden Namen und IOdevs an, z.b. so:
define brenner_CUL1 FS20 11114244 11 attr brenner_CUL1 IODev CUL1 attr brenner_CUL2 room Keller
define brenner_CUL2 FS20 11114244 11 attr brenner_CUL2 IODev CUL2 attr brenner_CUL2 room Keller
Ein Befehl der Art:
set brenner_CUL1,brenner_CUL2 on
sendet den ON Befehl für den FS20 Aktor 11114244 11 jetzt tatsächlich über beide CULs aus!
Achtung: Wenn die Schnittstellen gleich schnell angebunden sind, sollte vermutlich der Sendpool verwendet werden, da die Aussendungen sonst tatsächlich gleichzeitig erfolgen könnten und sich dann gegenseitig stören würden.
Retrycount bei FHTs ist überflüssig
Das von autocreate beim Anlegen von FHT80 Heizungsreglern voreingetragene attribute "retrycount" hat in den allermeisten Fällen keine Wirkung, da es NUR greift, wenn man als Funkschnittstelle eine FHZ1X00PC verwendet und dann den Softbuffer einschaltet. Selbst wenn man diese Konfiguration nutzt, will gut überlegt werden, ob die Wirkung postiv ist: Bei ungenügender Empfangslage vergrössert es Kommunikationsprobleme eventuell sogar.
Es kann also in der Regel entfernt oder auf den Wert "1" gesetzt werden.
define Heizung_Bad FHT 060d attr Heizung_Bad retrycount 3 <=== Diese Zeile entfernen
Siehe auch:Kommunikationsprobleme mit FHT
November 2013
FS20 Funksteckdose sicherer schalten
Seltsamerweise kommt es vor, das FS20 Aktoren - insbesondere die FS20 Funksteckdose - an der Grenze der Funkreichweite bestimmte Befehle eines Typs empfängt, andere aber nicht. Z.B. lässt sich die FS20 Steckdose zwar immer einschalten, aber oft nicht mehr aus (oder umgekehrt).
Gelegentlich kann man die Zuverlässigkeit erhöhen, indem man statt dem nicht funktionierenden Befehl das Gegenteil mit "for-timer 1" verwendet.
Im Fall, dass eine FS20 Steckdose sich also einwandfrei EINschalten lässt:
set SteckdoseA on
aber oft ein AUSschalten mittels
set SteckdoseA off
nicht funktioniert, kann man versuchen die Dose anstelle mit "off" mit dem Befehl
set SteckdoseA on-for-timer 1
auszuschalten.
Mehrere Geräte zugleich schalten
Ein Ereignis soll mehrere Geräte schalten:
define act_on_Bewegungsmelder notify Bewegungsmelder set Lampe1 on;;set Lampe2 on;;set FunksteckdoseA on
Aus Übersichtlichkeitsgründen können vor und nach den Semikolons auch Leerzeichen eingefügt werden (obwohl in einigen Dokumentation behauptet wird, dies dürfe man nicht machen):
define act_on_Bewegungsmelder notify Bewegungsmelder set Lampe1 on ;; set Lampe2 on ;; set FunksteckdoseA on
Wenn der Schaltbefehl bei allen Geräten gleich ist, kann man wie folgt zusammenfassen:
define act_on_Bewegungsmelder notify Bewegungsmelder set Lampe1,Lampe2,FunksteckdoseA on
Das Komma wird nicht escaped (verdoppelt), hier darf tatsächlich KEIN Leerzeichen vor oder nach dem Komma eingefügt werden.
Logfileinträge unterdrücken
Das Attribute "verbose 0" verhindert, dass das Gerät Logfileinträge erzeugt.
Beispiel:
define Funksteckdose FS20 22224222 01 attr Funksteckdose verbose 0
FHT Lazy Mode benutzen
Es gibt wenig Gründe, den FHT "Lazy Mode" nicht zu verwenden
define Heizung_Bad FHT 060d attr Heizung_Bad lazy
Dieser sorgt dafür, das Temperaturänderungen (genau genommen alle Änderungen, auch z.b. date) nur übertragen werden, wenn sie nicht sowieso schon am FHT eingestellt sind und veringern die Funklast dadurch deutlich.
Siehe auch:Kommunikationsprobleme mit FHT
Oktober 2013
Zuverlässigkeit von Wiedereinschalten erhöhen
Speziell bei FS20 Aktoren ist wegen des fehlenden Rückkanals nicht leicht erkennbar, ob ein Einschaltbefehl Wirkung gezeigt hat. Das hat ganz schlechten WAF, wenn man z.b. mit einem FS20 Aktor eine Heizung ausschaltet und das Wiedereinschalten nach z.b. einer Stunde nicht klappt.
Hier empfiehlt es sich, das Ausschalten mittels
set Heizungs_schalter off-for-timer 3584 (= fast eine Stunde)
zu erledigen. Da bei FS20 der off-for-timer Befehl im Aktor abgewickelt wird (und nicht durch FHEM), schaltet sich der Aktor auch dann garantiert wieder ein, wenn Fhem abstürzt, eine Funkstörung vorliegt oder ähnliches. Bei Bedarf kann der Befehl off-for-timer zur Verlängerung der Ausschaltzeit wiederholt werden. Dies kann z.B. nötig sein, wenn die Ausschaltung länger als 4,5 Stunden (15360 Sekunden = der Maximalwert des Timers) dauern soll.
Achtung: dieser Trick funktioniert nur, wenn der Aktor "off-for-timer" selbst beherrscht. FS20 Geräte können das, HomeMatic können aber nur "on-for-timer". Man kann off-for-timer mit HomeMatic trotzdem verwenden, aber in diesem Fall sendet Fhem den Einschaltbefehl nach der Timerzeit. InterTechno, RSL etc, können gar keinen Timer, hier sendet Fhem immer 2 Befehle im passenden Abstand.
FS20 Timerzeiten
FS20 Timer werden in Sekunden angegeben. Es sind jedoch nicht alle Werte einstellbar. Da der Timer Wert in 7 Bit übertragen werden muss, sind nur 128 Werte möglich. Um mit diesen Werten im unteren Bereich möglichst fein aufzulösen, andererseits aber auch lange Zeiten zu ermöglichen, ist die Verteilung nicht linear. Einstellbar sind folgende Zeiten in Sekunden;
0,25 0,5 0,75 1 1,25 1,5 1,75 2 2,25 2,5 2,75 3 3,25 3,5 3,75 4 4,5 5 5,5 6 6,5 7 7,5 8 9 10 11 12 13 14 15 16 18 20 22 24 26 28 30 32 36 40 44 48 52 56 60 64 72 80 88 96 104 112 120 128 144 160 176 192 208 224 240 256 288 320 352 384 416 448 480 512 576 640 704 768 832 896 960 1024 1152 1280 1408 1536 1664 1792 1920 2048 2304 2560 2816 3072 3328 3584 3840 4096 4608 5120 5632 6144 6656 7168 7680 8192 9216 10240 11264 12288 13312 14336 15360
Andere Zeiten werden von Fhem gerundet. Ein neues Setzen des Timer für FS20 löscht den alten Wert.
Butterflecken in Wollpullovern
Butterflecken in Wollpullovern können leicht durch grossflächiges Aufstreichen von Teer beseitigt werden.