Trick der Woche: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
 
(99 dazwischenliegende Versionen von 13 Benutzern werden nicht angezeigt)
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. Dieser Artikel wendet sich eher an den Anfänger.
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.
 
== August 2022==
=== Update ===
Wenn der Befehl "Update" nicht funktioniert und insbesondere die Fehlermeldung ''Bad hostname 'fhem.de:80''' zurück gibt, kann es sinnvoll sein, den Parameter  -noSSL zu versuchen. Details dazu im Artikel [[Update]]
 
 
 
== Januar 2022==
=== günstiger Luftfeuchtesensor ===
Der [[HM-CC-TC Funk-Wandthermostat]] ist schon lange abgekündigt. Er wird derzeit oft recht günstig im Netz angeboten und eignet sich daher als billiger "StandAlone" Temperatur- und Luftfeuchtesensor, auch wenn er keinen Ventielantrieb steuern soll.
 
== Dezember 2020 ==
=== Performance von Notifys ===
Im Tipp vom Dezember 2013 [[Trick der Woche#notify durch mehrere Ereignisse auslösen lassen|notify durch mehrere Ereignisse auslösen lassen]] heisst es:
:''[…] Wenn man aber möchte, dass z.B. "on" und "off" auslöst (um etwa Dim-Befehle auszuschliessen), kann dies wie folgt erreicht werden:''
::<code>define irgendwas notify MeinSchalter:(on|off) …</code>
Performanter ist allerdings:
:<code>define irgendwas notify MeinSchalter:o[nf]+  …</code>
wobei '''o[nf]+''' eine "Regexp" für beliebige Zeichenketten ist, die mit '''o''' anfangen und '''n''' und/oder '''f''' enthalten, also (auch) on und off.
 
Alternativ kann auch:
:<code>define irgendwas notify MeinSchalter:on|MeinSchalter:off … </code>
verwendet werden.
Die letzten beiden Varianten sparen Ausführungszeit. Ganz allgemein ist es besser, im notify das Suchmuster mit einem [[Regulärer Ausdruck|regulären Ausdruck]] (Regexp) eng zu definieren.
 
:<code>define irgendwas notify MeinSchalter:on ... </code>
ist performanter als
:<code>define irgendwas notify MeinSchalter { if ($EVENT eq "on" ... </code>
auch wenn das Ergebnis gleich ist.
 
Allerdings ist
:<code>define irgendwas notify MeinSchalter:on ... </code>
:<code>define irgendwas1 notify MeinSchalter:off ... </code>
langsamer als
:<code>define irgendwas notify MeinSchaltero[nf]+ { if ($EVENT eq "on"  ) { fhem( ) } else { fhem("... </code>
 
Die oben erwähnten "if" sind "perl if"s. Die Verwendung des FHEM Modul DOIF ist deutlich langsamer.  Die Betrachtung betrifft sowieso nur langsame Host-Systeme mit gleichzeitig vielen defines. Bei Verwendung z.b. einen Raspberry Pi 4 oder schnellerem Host dürften die Unterschiede vernachlässigbar sein.
 
== Oktober 2020 ==
=== Entprellen ===
Will man ein notify innerhalb eines bestimmten Zeitraumes nur einmal auslösen lassen, auch wenn er in diesem Zeitraum mehrfach getriggered werden sollte, so bietet sich das [[Attribut]] '''disabledAfterTrigger''' an:
:<code>attr <notify_device> disabledAfterTrigger <Anzahl Sekunden></code>.
 
== Oktober 2019 ==
=== Funkstörungen durch leere Batterien ===
Unerklärliche Funkstörungen besonders im SlowRF Bereich (z.b. FS20) mit stark verminderter Reichweite von CULs, gestörter [[RFR CUL]] Kommunikation etc. gestörtem Empfang von Funktelegrammen aller Art können ihre Ursache darin haben, dass einige Geräte mit (fast) leeren Batterien unkontrolliert senden und dadurch den Kanal mit Störsignalen verschmutzen. Anfällig sind insbesondere ältere FHT Fenstersensoren wie der [[FHT80TF]], die mit fast leeren Batterien eine Art Rauschen aussenden und damit die '''komplette''' FS20 Kommunikation lahmlegen können, Störungen beeinflussen auch andere Funkprotokolle im selben Frequenzbereich, wie z.b. HM.
Also im Falle unerklärlicher und weitreicher Funkstörungen die Batterien aller Geräte überprüfen.
 
== Februar 2019 ==
=== Unterräume anlegen ===
[[Datei:Unterraeume.png|350px|thumb|right|Beispiel für einen gegliederten Raum "Steuerung"]]
In [[FHEMWEB]] besteht neben der Möglichkeit, Geräte dadurch übersichtlich anzuordnen, indem diese Gruppen und einfachen Räumen zugeordnet werden, auch die Möglichkeit, Räume weiter zu gliedern und Unterräume zu verwenden. Dazu wird nach der Angabe des Hauptraums der Unterraum, getrennt durch ein "->" angegeben. Beispiele:
attr <DEVICENAME> room Steuerung->Logik
attr <DEVICENAME> room Steuerung->Heizung
'''Hinweis''': Legt man zusätzlich einen Raum ''Steuerung'' an, erscheint dieser als zusätzlicher Eintrag in der Raumliste.
 
== Januar 2019 ==
=== HomeMatic IP ===
Das [[HomeMatic IP]]-Protokoll unterscheidet sich deutlich vom bisherigen HomeMatic Protokoll, im Grunde ist es ein anderes System, das nur dem Namen nach dem älteren HomeMatic gleicht. HM-IP Geräte können aktuell (Anfang 2019) nur über eine systemeigene Zentrale CCU2 (als physisch vorhandenes Interface) und die HomeMatic-Module in FHEM integriert werden, sind in FHEM jedoch '''nicht''' unmittelbar als Homematic-Geräte ansprechbar.
 
 
== Dezember 2018 ==
===HomeMatic Heizungsregler Uhrzeit einstellen===
HomeMatic Thermostate / Heizungsregler  wie der HM-CC-TC der der HM-TC-IT-WM-W-EU etc. synchronisieren ihre Uhrzeit täglich etwa gegen Mitternacht mit der Zentrale. Man kann dieses Update aber jederzeit erzingen durch den Befehl 
set <DEVICENAME> sysTime
 
== November 2018 ==
===HomeMatic Heizunggeräte gebraucht gekauft===
HomeMatic Heizunggeräte gebraucht gekauft und jetzt lassen sie sich nicht richtig peeren oder pairen?
Das Problem ist meistens, dass die Geräte noch mit der Zentrale des Verkäufers gepairt oder mit anderen Geräten gepeert sind.
Mit Thermostaten wie der [[HM-CC-TC Funk-Wandthermostat]] oder der Nachfolger [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP]] können mit Ventilantrieben wie dem [[HM-CC-VD Funk-Stellantrieb]] nur gepeert werden, wenn
* die Thermostaten nicht selbst schon mit einer Zentrale (im FHEM Umfeld also z.b. einer [[Virtueller Controller VCCU]] oder [[HM-[[HM-CFG-LAN LAN Konfigurations-Adapter]] oder ähnliches) gepairt wurden
* die Ventilantriebe nicht selbst mit einer Zentrale gepairt oder mit einem Thermostaten gepeert wurden.
 
Es ist daher sinnvoll zuerst alle Geräte zurückzusetzen, da viele Verkäufer dies vergessen. Wie das geht steht in der Anleitung.
Beispiele:
* HM-CC-TC -> MENU lange drücken, dann Sonderfunktion "RES" anwählen, mit OK-Taste bestätigen
* HM-CC-VD -> Anlernknopf 10 Sekunden lang drücken. Der Antrieb geht in Zustand A2, nachdem er das Ventil 1x auf- und zugefahren hat geht er in A3, Knopf nochmals drücken.
* HM-TC-IT-WM-W-EU -> Batterien entfernen, alle 3 Tasten gedrückt halten, Batterien einlegen, warten bis "rES" im Display erscheint, Tasten loslassen
 
== Januar 2018 ==
=== at absolutem Datum ===
Vielen ist nicht klar, dass man mit dem "define … at" auch einfach ein absolutes Datum definieren kann (obwohl es in der Commandref steht). Anstatt umfangreicher DOIF Konstrukte oder "define … at" die täglich ablaufen und testen ob der gewünschte Tag schon erreicht ist, geht auch ein einfaches:
 
define Licht_Neujahr_2019 at 2019-01-03T06:01:01 set Licht1 on
 
 
Allgemein:
define <name> at [<datespec>] <command>
wobei <datespec> =  (YYYY-MM-DDTHH:MM:SS) (also in ISO8601 Schreibweise).
Wichtig ist die Angabe mit Sekunden, die nicht weggelassen werden können.
 
== Dezember 2017 ==
=== perl Version ===
Gelegentlich taucht die Frage auf, welche perl Version zum Betrieb von FHEM minimal erforderlich ist. Bedauerlicherweise lässt sich das aber aktuell nicht definitiv bestimmen.
Rudolf König testet zur Zeit (Ende 2017) mit v5.16 (5 Jahre alt) und v5.24 (ca. 1 Jahr alt).
Sollte sich herausstellen, dass eines seiner Module (vor allem fhem.pl selbst) nicht mit der jeweils ''aktuellen'' perl Version funktioniert, so wird das Modul entsprechend kompatibel gemacht.
Andererseits verwendet Rudolf König nach eigener Aussage (bewusst) keine Features, die eine höhere Version als perl 5.8.3 (immerhin älter als 13 Jahre) voraussetzen. Tatsächlich zeigen aktuelle Installation auf relativ alten BuffaloLinkstation Systemen, dass FEHM mit perl 5.8.3 prinzipiell lauffähig ist.
 
Rudolf König prüft als Maintainer von fhem.pl aber nicht, welche Mindestversionen andere Entwickler in Ihren Modulen benötigen. Es ist daher möglich oder sogar wahrscheinlich, das einzelne Module höhere Versionen als 5.8.3 benötigen.
 
Es gibt aktuell keinen Weg, die Mindestanforderungen z.b. automatisiert zu ermitteln.
 
== November 2017 ==
=== Grundlastmodul ===
Mit einem Grundlastmodul ist es möglich, LED Leuchtmittel an einem Schaltaktor / Dimmer zu betreiben. Dies ist bei manchen nicht möglich, da einige LEDs nachglimmen oder flackern. Das Grundlastmodul, welches parallel zum Verbraucher angeschlossen wird, kann diesen Effekt aufheben, da ein Verbraucher mit ohmscher Last simuliert wird.
Das Modul ermöglicht eventuell auch den Betrieb eines [[RSL 2-Draht Einbauschalter]]s, der bei LED Leuchtmitteln ansonsten nicht eingesetzt werden kann, da zum Betrieb eine Restspannung über den Verbraucher benötigt wird, der bei LED Lampen mit Vorschaltgerät nicht vorhanden ist.
 
In Frage kommt z.b. ein Eltako ELTA Grundlastelement GLE / PTC, das ca. 5-8 Euro kostet.
Technisch handelt sich dabei um einen PTC, also einen Widerstand mit positivem Temperaturkoeffizient, d.h. der Widerstand sinkt deutlich, wenn das Element kälter wird.
 
 
 
Das genannte Grundlastelement hat folgende Daten:
Kaltwiderstand: 3500 Ω
Einschaltstrom bei 230 V: 65 mA (ca. 15 W)
Verlustleistung nach 60 Sekunden: 0,65 W
 
Im kalten Zustand lässt der PTC bei 230 Volt einen Strom von ca. 0,065 Ampere zu. 
Das reicht, um von Schaltaktoren, Freischaltern, Dimmern etc. als die erforderliche Grundlast erkannt zu werden.
Wird der Stromkreis eingeschaltet, fliesst auch tatsächlich Strom durch den PTC, der sich dadurch schnell erwärmt (das Element wird tatsächlich sogar relativ heiss). Dadurch steigt steigt der Widerstand auf ca 50000-60000 Ohm an und die Verlustleistung sinkt auf unter 1 Watt. Der PTC regelt sich jetzt selber auf eine bestimmte Temperatur und Widerstand ein.
 
Wird ausgeschaltet, so fliest über den PTC immer noch ein kleiner Reststrom von ca 0,005 Ampere, der als Grundlast reicht, um z.b. Spannungen abzubauen, die LEDs nachflackern lassen, dieser steigt mit Erkalten rasch an, dadurch werden auch Schalter wie die [[RSL 2-Draht Einbauschalter]] mit genug Strom versorgt.
 
Theoretisch kann also auch ein PTC mit diesen Werten und einer Leistung von ca. 20 Watt selbst gebaut werden, der Preis der Einzelteile liegt bei unter 2 Euro. Das Eltako Element ist bereits mit Isolierung und Anschlussleitungen versehen, mit eigner Arbeitszeit ist der Preisvorteil beim Selberbau also gering.
 
== Februar 2017 ==
=== at Zeiten ===
at 03:00      ->  1x um 3 Uhr (wann immer das nächste mal 3 Uhr ist, ggf. erst morgen)
at *03:00    ->  jeden Tag um 3 Uhr
at +03:00    ->  in 3 Stunden
at +*03:00    ->  in 3 Stunden und dann alle 3 Stunden erneut
at +*{4}03:00 ->  in 3 Stunden und dann alle 3 Stunden erneut, aber nur 4x ausführen.
 
== Oktober 2016 ==
=== Grundlagen der Heizungssteuerung ===
Der Artikel [[Grundlagen der Heizungssteuerung]] soll einen zentralen Einstiegspunkt und eine Übersicht der Möglichkeiten insb. für Neulinge in FHEM bieten.
 
=== Batterieüberwachung für Geräte ohne Batteriestatus ===
Es gibt Möglichkeiten um auch bei Geräten ohne Batteriestatus-Reading eine schwache Batterie erkennen zu können: [[Batterie%C3%BCberwachung#Ger.C3.A4te_ohne_Batteriestatus|Geräte ohne Batteriestatus]].
 
== Mai 2016 ==
=== DbLog reparieren ===
Sollte ein fhem mit DbLog Probleme machen, oder auf der SQL-Konsole Fehler werfen, so ist eine Reparatur der DB fällig. Das ist auf der Kommandozeile verhältnismäßig einfach möglich und wird im Kapitel [[DbLog#Datenbank reparieren]] beschrieben.
 
=== DbLog bearbeiten ===
Unerwünschte Einträge in den Loggings treten immer wieder mal auf. Wie man dies in einer Datenbank korrigiert, dazu gibt das Kapitel [[DbLog#Bearbeitung von Datenbank-Einträgen]] eine erste Einführung.
 
=== Pollenflug ===
In dieser schönen Jahreszeit werden manche durch Heuschnupfen geplagt. Auf der Seite [[Pollenflug]] wird beschrieben, wie man eine Pollenvorhersage in fhem einbinden kann - hilft zwar nicht gegen das Niesen, ist aber trotzdem ganz informativ... ;-)
 
== April 2016 ==
=== HomeMatic und VCCU ===
HomeMatic Nutzer sollten unbedingt eine [[Virtueller Controller VCCU|VCCU]] einrichten und nutzen.
Die Einrichtung ist unaufwändig und schafft jede Menge Vorteile, auch beim Einsetzen nur einer Schnittstelle wie z.B. einem [[HM-CFG-LAN LAN Konfigurations-Adapter]]. Auch die nachträglich Einrichtung ist problemlos, sofern vorher nur ein I/O Gerät ("Funkschnittstelle") verwendet wurde.
 
== Dezember 2015 ==
===defmod===
In vielen Fällen will man mit einer Aktion gleichzeitig eine andere Aktion bereits für später festlegen, z.b. nach Einschalten  einer Heizung durch einen Bewegungsmelder diese eine Stunde später wieder ausschalten.
 
Dies kann z.B. durch ein Konstrukt dieser Art erledigt werden:
:<code>define Heizung_an notify Bewegung set HZG_WZ desired-temp 22 ;; define reset_Heizung at +01:00:00 set HZG_WZ desired-temp 16</code>
 
Nachteilig ist, dass bei einer weiteren Auslösung des Bewegungsmelders die Heizzeit nicht verlängert wird, da eine Neudefinition von '''reset_Heizung''' mit der Fehlermeldung '''reset_Heizung already exists, delete it first''' quittiert wird. Die Lösung bisher war, das alte '''reset_Heizung''' zunächst zu löschen und dann erneut mit neuem Zeitstempel anzulegen:
:<code>define Heizung_an notify Bewegung set HZG_WZ desired-temp 22 ;; delete reset_Heizung ;; define reset_Heizung at +01:00:00 set HZG_WZ desired-temp 16</code>
Aber auch dieses umständliche Konstrukt hat noch einen Nachteil: Es erzeugt bei einer ersten Auslösung eine Fehlermeldung, weil '''reset_Heizung''' noch nicht exisitert und daher nicht gelöscht werden kann.  Dies liesse sich abfangen, was die Konstruktion weiter verkomplizieren würde.
 
Daher hat Rudolf König mit FHEM 5.6 den neuen Befehel "defmod" eingeführt, der ein noch nicht existieredendes define neu anlegt (wie "define"), eine bereits vorhandenes aber direkt ändert (wie "delete" und danach "define")
 
Dadurch lässt sich verkürzt schreiben:
:<code>define Heizung_an notify Bewegung set HZG_WZ desired-temp 22 ;; defmod reset_Heizung at +01:00:00 set HZG_WZ desired-temp 16</code>
 
 
 
== April 2015 ==
===FS20 Timer===
FS20 Aktoren beherrschen zwei verschiedene Timer-Methoden.
 
Angenommen ein FS20 Device heisse "Lampe" und sei z.B. ein [[FS20_SU_Unterputz-Funk-Schalter|FS20 SU]] (Unterputzschalter), dann kann man mit FHEM sowohl
:<code> set Lampe on-for-timer 30</code>
verwenden um die Lampe 30 Sekunden einzuschalten, aber auch zunächst in den FS20 SU die maximale Einschaltdauer einprogrammieren:
:<code> set Lampe timer 30</code>
Dannach wird jedes normale
:<code> set Lampe on</code>
die Lampe für nur 30 Sekunden einschalten.
 
Als Timerwerte kommen in beiden Fällen die bekannten [[Trick_der_Woche#FS20_Timerzeiten|128 Sekundenwerte]] von 0,25 Sekunden bis Etwa 4,5 Stunden in Frage.
 
Es ist offenbar nicht bei allen Aktoren möglich einen einmal eingestellten Timer zu löschen, neue Werte eingeben aber sehr wohl.
 
Mehr hier: [[FS20_Allgemein#Gerätetimer setzen / löschen|FS20 timer]].
 
== Februar 2015 ==
== Februar 2015 ==
=== 1-wire am GPIO4-Port des RaspberryPi funktioniert nicht mehr nach Systemupdate ===
Es kann passieren, dass nach einem Systemupdate (apt-get update oder apt-get dist-upgrade) die 1-wire-Geräte am GPIO4-Port plötzlich nicht mehr funktionieren. Eine Problemlösung dazu ist im Artikel "[[Raspberry Pi und 1-Wire#1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate]]" beschrieben.
=== Backup der Konfiguration (fhem.cfg und fhem.state) bei jedem "save" ===
=== Backup der Konfiguration (fhem.cfg und fhem.state) bei jedem "save" ===
Der nachfolgende Codeschnipsel erstellt bei jedem "save" eine Kopie der aktuellen [[Konfiguration]] (fhem.cfg und fhem.state) in ein Verzeichnis "backup_cfg-state" welches unter /opt/fhem/ zu finden ist. Somit kann bei einem Fehler jederzeit auf den letzten Stand zurückgegangen werden.
Der nachfolgende Codeschnipsel erstellt bei jedem "save" eine Kopie der aktuellen [[Konfiguration]] (fhem.cfg und fhem.state) in ein Verzeichnis "backup_cfg-state" welches unter /opt/fhem/ zu finden ist. Somit kann bei einem Fehler jederzeit auf den letzten Stand zurückgegangen werden.
Zeile 19: Zeile 214:
Bei mehreren USB-Geräten kann es vorkommen, dass sie vertauscht werden z.B. ''/dev/ttyUSB0'' zu'' /dev/ttyUSB1'' oder ''/dev/ttyACM0'' zu ''/dev/ttyACM1''.
Bei mehreren USB-Geräten kann es vorkommen, dass sie vertauscht werden z.B. ''/dev/ttyUSB0'' zu'' /dev/ttyUSB1'' oder ''/dev/ttyACM0'' zu ''/dev/ttyACM1''.


Um dies zu umgehen, kann man sie über ihre Serial-ID in Fhem einbinden.
Um dies zu umgehen, kann man sie über ihre Serial-ID in FHEM einbinden.


Dieser Befehl zeigt die Serial-ID:
Dieser Befehl zeigt die Serial-ID:
Zeile 50: Zeile 245:
Sinnvoll ist die Verlängerung auf 1/2 Lambda  (868MHz = 17,27 cm) oder gar 1 Lambda.
Sinnvoll ist die Verlängerung auf 1/2 Lambda  (868MHz = 17,27 cm) oder gar 1 Lambda.
1 Lambda Antennen haben starke Richtwirkung in Form eines gedachten Zylinders, dessen Mittelachse die Antenne ist.
1 Lambda Antennen haben starke Richtwirkung in Form eines gedachten Zylinders, dessen Mittelachse die Antenne ist.
D.h., Alles was sich in Richtung des Anfangs und des Endes vom Antennedraht befindet, hat schlechteren Empfang als mit einer kurzen Antenne. Daher muss man die Antenne ggf. genauer ausrichten.
D.h., Alles was sich in Richtung des Anfangs und des Endes des Antennedrahtes befindet, hat schlechteren Empfang als mit einer kurzen Antenne. Daher muss man die Antenne ggf. genauer ausrichten.


Anleitungen dazu werden an verschiedenen Stellen veröffentlicht, z.B. in  
Anleitungen dazu werden an verschiedenen Stellen veröffentlicht, z.B. in  
Zeile 72: Zeile 267:
== Oktober 2014 ==
== Oktober 2014 ==
=== Aktor für Wanddosen ohne Nulleiter  ===
=== Aktor für Wanddosen ohne Nulleiter  ===
Zwar gibt es viele Aktoren, die man in Wanddosen hinter Schaltern einbauen kann, oft scheitert deren Nutzung aber daran, dass in vielen Elektroinstalltionen in der Wanddose eines (Licht)schalters kein Nulleiter verlegt ist, den die meisten Aktoren zur eigenen Stromversorgung brauchen. Hier kann der [[RSL 2-Draht Einbauschalter]] helfen, der auch ohne Nulleiter funktioniert und kompatibel zu InterTechno ist. Er lässt sich z.B. mit einem CUL(433) schalten.
Es gibt viele Aktoren die man in Einbaudosen hinter Schaltern einbauen kann. Oft scheitert deren Nutzung aber daran, dass in vielen Elektroinstalltionen in der Einbaudose eines (Licht)schalters kein Neutralleiter (Nulleiter) verlegt ist, den die meisten Aktoren zur eigenen Stromversorgung brauchen. Hier kann der [[RSL 2-Draht Einbauschalter]] helfen, der auch ohne Neutraleiter funktioniert und kompatibel zu InterTechno ist. Er lässt sich z.B. mit einem CUL(433) schalten. Problematisch ist damit allerdings das Schalten von LED Lampen.
 
 


== August 2014 ==
== August 2014 ==
=== Perl-Skripte Online testen  ===
=== Perl-Skripte Online testen  ===
Im Internet existieren Webseiten auf denen man Perl-Code online testen kann. Beispielsweise auf [http://www.compileonline.com/execute_perl_online.php compileonline.com] kann man Code zum Testen eingeben und die Auswirkungen betrachten. Dies eignet sich zur schnellen Fehleranalyse oder um Perl zu lernen. Natürlich lassen sich keine Fhem-Besonderheiten nutzen.
Im Internet existieren Webseiten auf denen man Perl-Code online testen kann. Beispielsweise auf [http://www.tutorialspoint.com/execute_perl_online.php codingground] kann man Code zum Testen eingeben und die Auswirkungen betrachten. Dies eignet sich zur schnellen Fehleranalyse oder um Perl zu lernen. Natürlich lassen sich keine FHEM-Besonderheiten nutzen.


== Juli 2014 ==
== Juli 2014 ==
Zeile 93: Zeile 286:
Nachteilig ist aber, dass eine Auslösung innerhalb 256 Sekunden die Einschaltzeit nicht verlängert. Dies kann man umgehen, indem man nicht on-for-timer verwendet, sondern den Aktor selber verzögert auschaltet und bei weiteren Auslösungen nur die Verzögerung erneut anlegt:
Nachteilig ist aber, dass eine Auslösung innerhalb 256 Sekunden die Einschaltzeit nicht verlängert. Dies kann man umgehen, indem man nicht on-for-timer verwendet, sondern den Aktor selber verzögert auschaltet und bei weiteren Auslösungen nur die Verzögerung erneut anlegt:
:<code>define FlurLicht notify Bewegungsmelder_Flur:motion:.* { if (Value("Licht_Flur1") eq "off") { fhem ("set Licht_Flur on ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off") } else { fhem ("delete FlurLicht_aus ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off") }}</code>
:<code>define FlurLicht notify Bewegungsmelder_Flur:motion:.* { if (Value("Licht_Flur1") eq "off") { fhem ("set Licht_Flur on ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off") } else { fhem ("delete FlurLicht_aus ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off") }}</code>
Durch den relativ neuen Befehl "defmod" kann ausserdem das Löschen und neu Anlegen zusammengefasst werden, sieh Tipp Dezember 2015


== Juni 2014 ==
== Juni 2014 ==
Zeile 112: Zeile 306:
Der String in Dummy1 soll um den String in Dummy2 erweitert und nach Dummy3 kopiert werden:
Der String in Dummy1 soll um den String in Dummy2 erweitert und nach Dummy3 kopiert werden:
:<code>{ fhem("set Dummy3 ".(Value("Dummy1")+Value("Dummy2"))) } </code>
:<code>{ fhem("set Dummy3 ".(Value("Dummy1")+Value("Dummy2"))) } </code>
(Achtung: "+"  ist Zahlen addieren, "." ist String konkatenieren)  
(Achtung: "+"  ist Zahlen addieren, "." ist String konkatenieren / verketten)


== April 2014==
== April 2014==
Zeile 127: Zeile 321:


Was also ein Infrarot-Bewegungsmelder 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
Was also ein Infrarot-Bewegungsmelder 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
:<code>define act_on_TV_on notify TV:on set TV on</code>
:<code>define act_on_TV_on notify TVFB:on set TV on</code>
seltsamerweise nicht auslösen, obwohl die richtige Taste (und diese auch nicht zu lang) gedrückt wurde.
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
Auch wenn man sich sicher ist, das Richtige in die Fernbedienung/Sensoren einprogramiert zu haben, ist ein einfacher Test immer, dies mit
:<code>define act_on_TV notify TV set TV on</code>
:<code>define act_on_TV notify TVFB set TV on</code>
zu prüfen. Dieses notify löst immer aus, wenn "TV"  ''irgendetwas'' sendet, egal was. (Beachte: Man kann dann den Fernseher aber nicht mehr ausschalten, da auch die Austaste das notify auslöst und zum TV-Aktor nur "on" sendet). Geht die Schaltung jetzt (kann man den Fernseher also jetzt EINschalten), liegt der Verdacht nahe, dass die Konfiguration des Senders / Sensors anders ist, als man denkt. Das Logfile gibt Aufschluss, welcher Befehl tatsächlich empfangen wurde.
zu prüfen. Dieses notify löst immer aus, wenn "TVFB"  ''irgendetwas'' sendet, egal was. (Beachte: Man kann dann den Fernseher aber nicht mehr ausschalten, da auch die Austaste das notify auslöst und zum TV-Aktor nur "on" sendet).  
 
=== Alles in FHEM, nichts in der Fernbedienung ===
Versuche in deiner FHEM Umgebung nicht, das Verhalten von Aktoren durch entsprechende Befehle aus Sensoren oder Fernbedienungen zu steuern. An Besten senden die nur ON und OFF oder DIM, den Rest möglichst immer in FHEM erledigen.  


Wer eine Lampe immer für vier Minuten einschalten will, programmiert seinen Schalter (Fernbedienung) also so, das nur "on" gesendet wird und erledigt den Rest in FHEM:
Geht die Schaltung jetzt (kann man den Fernseher also jetzt EINschalten), liegt der Verdacht nahe, dass die Konfiguration des Senders / Sensors anders ist, als man denkt. Das Logfile, der EventMonitor oder ein Beobachtung von FHEM per Telnet mittels "inform" gibt Aufschluss, welcher Befehl tatsächlich empfangen wurde.
:<code>define act_on_Schalter notify Schalter set Lampe-on-for-timer 240</code>


== März 2014==
== März 2014==
=== Zuverlässigkeit von FS20 Schaltungen erhöhen ===
=== 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.
FS20 Fernbedienungen senden bei Tastendrücken von mehr als 0,4 Sekunden anstatt ON bzw. OFF DIMUP bzw DIMDOWN.(Auch einige FBs anderer Systeme verhalten sich ähnlich)


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.
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  
Eine Konfiguration wie  
:<code>define act_on_TV_on notify TV:on set TV on</code>
:<code>define act_on_TV_on notify TVFB:on set TV on</code>
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.
hat also dann den Nachteil, dass bei versehentlich zu langem Tastendruck auf die Fernbedienung 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:
Es kann daher speziell bei nicht dimmbaren Aktoren von Vorteil sein, auch dimmen abzufangen, z.B. durch eine zweite zusätzliche Definition:


:<code>define act_on_TV_dimup notify TV:dimup set TV on</code>
:<code>define act_on_TV_dimup notify TVFB:dimup set TV on</code>


Es ist in der Regel 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.
Es ist in der Regel 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.
Zeile 158: Zeile 348:
Alternativ kann man auch beide Befehle in einer Definition durch Perlbefehle {} abfangen:
Alternativ kann man auch beide Befehle in einer Definition durch Perlbefehle {} abfangen:


:<code>define act_on_TV_on notify TV { if ("$EVENT" eq "on" || "$EVENT" eq "dimup") { fhem("set TV on") }}</code>
:<code>define act_on_TV_on notify TVFB { if ("$EVENT" eq "on" || "$EVENT" eq "dimup") { fhem("set TV on") }}</code>
 
Allerdings hat dies den Nachteil, dass jedes Event dieses define durchläuft und erst später geprüft wird, ob das Event überhaupt irgendetwas auslöst.
Z.B. wird
:<code>define act_on_TV_on notify TVFB ...</code>
auch durch TVFB off ausgelöst (oder unter bestimmten Bedungen sogar duch alle Events), nur um dann nach dem Perl Test festzustellen, dass doch nichts getan werden soll.
 
Ressourcenschonender ist daher:
:<code>define act_on_TV_on notify TVFB:on|TVFB:dimup set TV on </code>


Andere Möglichkeiten vergleiche: [[Trick der Woche#notify durch mehrere Ereignisse auslösen lassen|Notify durch mehrere Ereignisse auslösen lassen]]
Andere Möglichkeiten vergleiche: [[Trick der Woche#notify durch mehrere Ereignisse auslösen lassen|Notify durch mehrere Ereignisse auslösen lassen]] und [[Trick der Woche#Performance_von_Notifys|Performance von Notifys]]


== Februar 2014==
== Februar 2014==
Zeile 186: Zeile 384:
== Januar 2014==
== Januar 2014==
===isday===
===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.
Bekanntlich kann man  mit "isday" leicht testen ob es draussen hell ist oder nicht. isday ist eine Funktion des (automatisch geladenen) Moduls [[SUNRISE_EL]], 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.
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 theoretisch sichtbar ist. Wenn örtliche Gegebenheiten (Bebauung, Bäume, Tal etc.) 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.:
Zuerst definiert man sich eine Variable ("dummy") der anstelle isday eingesetzt werden soll, z.B.:
Zeile 199: Zeile 397:
  define SetDummy2 at *{sunrise(+1800)} set Tageslicht dunkel  
  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.
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 nachdem was bei der Anwendung besser passt.


Für höhere Ansprüche könnte hingegen das Twiglight-Modul verwendet werden, das Dämmerungsstufen kennt.
Für höhere Ansprüche könnte hingegen das [[Twilight]]-Modul verwendet werden, das Dämmerungsstufen kennt.


===Struktur von "else if" Schleifen===
===Struktur von "else if" Verzweigungen===
  define ... notify ... {\
  define ... notify ... {\
   if ... {\
   if ... {\
   fhem ("... ;; ...")\
   fhem ("... ;; ...")\
   }\
   }\
   elsif {\
   elsif ... {\
  if ... {\
     fhem ("... ;; ...")\
     fhem ("... ;; ...")\
   }\
   }\
   elsif {\
   elsif ... {\
  if ... {\
     fhem ("... ;; ...")\
     fhem ("... ;; ...")\
   }\
   }\
Zeile 220: Zeile 416:
     fhem ("... ;; ...")\
     fhem ("... ;; ...")\
   }\
   }\
  }}}}
  }
 
Achtung: es muss tatsächlich "elsif" heissen und nicht "elseif" oder "else if".


Achtung: es muss tatsächlich "elsif" heissen und nicht "elseif" oder "else if"
Gilt für Perl Aufrufe.
Gilt für Perl Aufrufe.
Wer aktuell in FHEM neu einsteigt, kann auch den seit 2014 zur Verfügung stehenden FHEM Befehl [[DOIF]] verwenden, der komfortabler ist und zusätzliche Features aufweist.


== Dezember 2013==
== Dezember 2013==
Zeile 250: Zeile 448:
:<code>define irgendwas notify MeinSchalter:on|MeinAndererSchalter …</code>
:<code>define irgendwas notify MeinSchalter:on|MeinAndererSchalter …</code>


Hier wird ausgelöst wenn "MeinSchalter" das Ereignis "on" liefert oder "MeinAndererSchalter" irgendein Ereignis
Hier wird ausgelöst wenn "MeinSchalter" das Ereignis "on" liefert oder "MeinAndererSchalter" irgendein Ereignis. Beachte hierzu jedoch den Tipp vom Dezember 2020 "Performance von Notifys"


=== Aktoren über mehrere Funkschnittstellen ansprechen ===
=== 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.
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 ohne weiteres bei HomeMatic.


Problematisch ist aber, dass die Funkschnittstelle über IODev eindeutige je Aktor festgelegt werden muss, eine Zuordnung mehrerer IODevs ist nicht vorgesehen.
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)
(wenn man IODev nicht setzt, wird per default die LETZTE definiert passende 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:
Dieses 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
  define brenner_CUL1 FS20 11114244 11
  attr brenner_CUL1 IODev CUL1
  attr brenner_CUL1 IODev CUL1
  attr brenner_CUL2 room Keller
  attr brenner_CUL1 room Keller


  define brenner_CUL2 FS20 11114244 11
  define brenner_CUL2 FS20 11114244 11
Zeile 275: Zeile 473:
sendet den ON Befehl für den FS20 Aktor 11114244 11  jetzt tatsächlich über beide CULs aus!
sendet den ON Befehl für den FS20 Aktor 11114244 11  jetzt tatsächlich über beide CULs aus!


Achtung: Wenn die Schnittstellen gleichschnell 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.
Achtung: Wenn die Schnittstellen gleichschnell 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. Dieser Trick funktioniert ausserdem nur bei Befehlen, bei denen es im Zweifel egal ist, wenn sie beim Aktor 2x eintreffen.
 
Bei HomeMatic lässt sich ein ähnlicher Effekt durch einrichten einer [[Virtueller Controller VCCU|virtuellen CCU]] erreichen.


=== Retrycount bei FHTs ist überflüssig===
=== Retrycount bei FHTs ist überflüssig===
Zeile 303: Zeile 503:
Analog kann man mit off-for-timer arbeiten, wenn sich Aktoren nicht einschalten lassen, ausschalten aber geht.
Analog kann man mit off-for-timer arbeiten, wenn sich Aktoren nicht einschalten lassen, ausschalten aber geht.


Achtung: Dieser Trick funtioniert ausdrücklich nur, wenn der "on/off-for-timer" Befehl im Aktor selber abgebildet wird. Daher ist der Trick vermutlich nicht auf andere Funksysteme übertragbar.
Achtung: Dieser Trick funtioniert ausdrücklich nur, wenn der "on/off-for-timer" Befehl im Aktor selber abgebildet wird. Daher ist der Trick vermutlich nicht auf andere Funksysteme übertragbar. z.B. unterstützt HM nur on-for-timer und Intertechno kennt keinen Timer.


=== Mehrere Geräte zugleich schalten===
=== Mehrere Geräte zugleich schalten===
Zeile 339: Zeile 539:
== Oktober 2013 ==
== Oktober 2013 ==
=== Zuverlässigkeit von Wiedereinschalten erhöhen ===
=== 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.
Speziell bei FS20 Aktoren ist wegen des fehlenden Rückkanals nicht leicht erkennbar, ob ein Einschaltbefehl Wirkung gezeigt hat. Das bringt einen 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  
Hier empfiehlt es sich, das Ausschalten mittels  
:<code>set Heizungs_schalter off-for-timer 3584</code>  (= fast eine Stunde)
:<code>set Heizungs_schalter off-for-timer 3584</code>  (= 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.
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.
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 Timerzeiten ===
Zeile 360: Zeile 560:
(etwas übersichtlicher formatiert auch [[FS20 Allgemein#ON/OFF Befehle mit Time Parameter|hier]]).
(etwas übersichtlicher formatiert auch [[FS20 Allgemein#ON/OFF Befehle mit Time Parameter|hier]]).
   
   
Andere Zeiten werden von Fhem gerundet. Ein neues Setzen des Timer für FS20 löscht den alten Wert.
Andere Zeiten werden von FHEM gerundet. Ein neues Setzen des Timer für FS20 löscht den alten Wert.
 
Auch HomeMatic Aktoren beherrschen Time Parameter, im Gegensatz zu FS20 allerdings kein "off-for-timer". Details dazu im Artikel [[HomeMatic Timerwerte]]


===Butterflecken in Wollpullovern===
[[Kategorie:HOWTOS]]
Butterflecken in Wollpullovern können leicht durch grossflächiges Aufstreichen von Teer beseitigt werden.

Aktuelle Version vom 8. Januar 2024, 18:53 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.

August 2022

Update

Wenn der Befehl "Update" nicht funktioniert und insbesondere die Fehlermeldung Bad hostname 'fhem.de:80' zurück gibt, kann es sinnvoll sein, den Parameter -noSSL zu versuchen. Details dazu im Artikel Update


Januar 2022

günstiger Luftfeuchtesensor

Der HM-CC-TC Funk-Wandthermostat ist schon lange abgekündigt. Er wird derzeit oft recht günstig im Netz angeboten und eignet sich daher als billiger "StandAlone" Temperatur- und Luftfeuchtesensor, auch wenn er keinen Ventielantrieb steuern soll.

Dezember 2020

Performance von Notifys

Im Tipp vom Dezember 2013 notify durch mehrere Ereignisse auslösen lassen heisst es:

[…] Wenn man aber möchte, dass z.B. "on" und "off" auslöst (um etwa Dim-Befehle auszuschliessen), kann dies wie folgt erreicht werden:
define irgendwas notify MeinSchalter:(on|off) …

Performanter ist allerdings:

define irgendwas notify MeinSchalter:o[nf]+ …

wobei o[nf]+ eine "Regexp" für beliebige Zeichenketten ist, die mit o anfangen und n und/oder f enthalten, also (auch) on und off.

Alternativ kann auch:

define irgendwas notify MeinSchalter:on|MeinSchalter:off …

verwendet werden. Die letzten beiden Varianten sparen Ausführungszeit. Ganz allgemein ist es besser, im notify das Suchmuster mit einem regulären Ausdruck (Regexp) eng zu definieren.

define irgendwas notify MeinSchalter:on ...

ist performanter als

define irgendwas notify MeinSchalter { if ($EVENT eq "on" ...

auch wenn das Ergebnis gleich ist.

Allerdings ist

define irgendwas notify MeinSchalter:on ...
define irgendwas1 notify MeinSchalter:off ...

langsamer als

define irgendwas notify MeinSchaltero[nf]+ { if ($EVENT eq "on" ) { fhem( ) } else { fhem("...

Die oben erwähnten "if" sind "perl if"s. Die Verwendung des FHEM Modul DOIF ist deutlich langsamer. Die Betrachtung betrifft sowieso nur langsame Host-Systeme mit gleichzeitig vielen defines. Bei Verwendung z.b. einen Raspberry Pi 4 oder schnellerem Host dürften die Unterschiede vernachlässigbar sein.

Oktober 2020

Entprellen

Will man ein notify innerhalb eines bestimmten Zeitraumes nur einmal auslösen lassen, auch wenn er in diesem Zeitraum mehrfach getriggered werden sollte, so bietet sich das Attribut disabledAfterTrigger an:

attr <notify_device> disabledAfterTrigger <Anzahl Sekunden>.

Oktober 2019

Funkstörungen durch leere Batterien

Unerklärliche Funkstörungen besonders im SlowRF Bereich (z.b. FS20) mit stark verminderter Reichweite von CULs, gestörter RFR CUL Kommunikation etc. gestörtem Empfang von Funktelegrammen aller Art können ihre Ursache darin haben, dass einige Geräte mit (fast) leeren Batterien unkontrolliert senden und dadurch den Kanal mit Störsignalen verschmutzen. Anfällig sind insbesondere ältere FHT Fenstersensoren wie der FHT80TF, die mit fast leeren Batterien eine Art Rauschen aussenden und damit die komplette FS20 Kommunikation lahmlegen können, Störungen beeinflussen auch andere Funkprotokolle im selben Frequenzbereich, wie z.b. HM. Also im Falle unerklärlicher und weitreicher Funkstörungen die Batterien aller Geräte überprüfen.

Februar 2019

Unterräume anlegen

Beispiel für einen gegliederten Raum "Steuerung"

In FHEMWEB besteht neben der Möglichkeit, Geräte dadurch übersichtlich anzuordnen, indem diese Gruppen und einfachen Räumen zugeordnet werden, auch die Möglichkeit, Räume weiter zu gliedern und Unterräume zu verwenden. Dazu wird nach der Angabe des Hauptraums der Unterraum, getrennt durch ein "->" angegeben. Beispiele:

attr <DEVICENAME> room Steuerung->Logik
attr <DEVICENAME> room Steuerung->Heizung

Hinweis: Legt man zusätzlich einen Raum Steuerung an, erscheint dieser als zusätzlicher Eintrag in der Raumliste.

Januar 2019

HomeMatic IP

Das HomeMatic IP-Protokoll unterscheidet sich deutlich vom bisherigen HomeMatic Protokoll, im Grunde ist es ein anderes System, das nur dem Namen nach dem älteren HomeMatic gleicht. HM-IP Geräte können aktuell (Anfang 2019) nur über eine systemeigene Zentrale CCU2 (als physisch vorhandenes Interface) und die HomeMatic-Module in FHEM integriert werden, sind in FHEM jedoch nicht unmittelbar als Homematic-Geräte ansprechbar.


Dezember 2018

HomeMatic Heizungsregler Uhrzeit einstellen

HomeMatic Thermostate / Heizungsregler wie der HM-CC-TC der der HM-TC-IT-WM-W-EU etc. synchronisieren ihre Uhrzeit täglich etwa gegen Mitternacht mit der Zentrale. Man kann dieses Update aber jederzeit erzingen durch den Befehl

set <DEVICENAME> sysTime

November 2018

HomeMatic Heizunggeräte gebraucht gekauft

HomeMatic Heizunggeräte gebraucht gekauft und jetzt lassen sie sich nicht richtig peeren oder pairen? Das Problem ist meistens, dass die Geräte noch mit der Zentrale des Verkäufers gepairt oder mit anderen Geräten gepeert sind. Mit Thermostaten wie der HM-CC-TC Funk-Wandthermostat oder der Nachfolger HM-TC-IT-WM-W-EU Funk-Wandthermostat AP können mit Ventilantrieben wie dem HM-CC-VD Funk-Stellantrieb nur gepeert werden, wenn

Es ist daher sinnvoll zuerst alle Geräte zurückzusetzen, da viele Verkäufer dies vergessen. Wie das geht steht in der Anleitung. Beispiele:

  • HM-CC-TC -> MENU lange drücken, dann Sonderfunktion "RES" anwählen, mit OK-Taste bestätigen
  • HM-CC-VD -> Anlernknopf 10 Sekunden lang drücken. Der Antrieb geht in Zustand A2, nachdem er das Ventil 1x auf- und zugefahren hat geht er in A3, Knopf nochmals drücken.
  • HM-TC-IT-WM-W-EU -> Batterien entfernen, alle 3 Tasten gedrückt halten, Batterien einlegen, warten bis "rES" im Display erscheint, Tasten loslassen

Januar 2018

at absolutem Datum

Vielen ist nicht klar, dass man mit dem "define … at" auch einfach ein absolutes Datum definieren kann (obwohl es in der Commandref steht). Anstatt umfangreicher DOIF Konstrukte oder "define … at" die täglich ablaufen und testen ob der gewünschte Tag schon erreicht ist, geht auch ein einfaches:

define Licht_Neujahr_2019 at 2019-01-03T06:01:01 set Licht1 on


Allgemein:

define <name> at [<datespec>] <command> 

wobei <datespec> = (YYYY-MM-DDTHH:MM:SS) (also in ISO8601 Schreibweise). Wichtig ist die Angabe mit Sekunden, die nicht weggelassen werden können.

Dezember 2017

perl Version

Gelegentlich taucht die Frage auf, welche perl Version zum Betrieb von FHEM minimal erforderlich ist. Bedauerlicherweise lässt sich das aber aktuell nicht definitiv bestimmen. Rudolf König testet zur Zeit (Ende 2017) mit v5.16 (5 Jahre alt) und v5.24 (ca. 1 Jahr alt). Sollte sich herausstellen, dass eines seiner Module (vor allem fhem.pl selbst) nicht mit der jeweils aktuellen perl Version funktioniert, so wird das Modul entsprechend kompatibel gemacht. Andererseits verwendet Rudolf König nach eigener Aussage (bewusst) keine Features, die eine höhere Version als perl 5.8.3 (immerhin älter als 13 Jahre) voraussetzen. Tatsächlich zeigen aktuelle Installation auf relativ alten BuffaloLinkstation Systemen, dass FEHM mit perl 5.8.3 prinzipiell lauffähig ist.

Rudolf König prüft als Maintainer von fhem.pl aber nicht, welche Mindestversionen andere Entwickler in Ihren Modulen benötigen. Es ist daher möglich oder sogar wahrscheinlich, das einzelne Module höhere Versionen als 5.8.3 benötigen.

Es gibt aktuell keinen Weg, die Mindestanforderungen z.b. automatisiert zu ermitteln.

November 2017

Grundlastmodul

Mit einem Grundlastmodul ist es möglich, LED Leuchtmittel an einem Schaltaktor / Dimmer zu betreiben. Dies ist bei manchen nicht möglich, da einige LEDs nachglimmen oder flackern. Das Grundlastmodul, welches parallel zum Verbraucher angeschlossen wird, kann diesen Effekt aufheben, da ein Verbraucher mit ohmscher Last simuliert wird. Das Modul ermöglicht eventuell auch den Betrieb eines RSL 2-Draht Einbauschalters, der bei LED Leuchtmitteln ansonsten nicht eingesetzt werden kann, da zum Betrieb eine Restspannung über den Verbraucher benötigt wird, der bei LED Lampen mit Vorschaltgerät nicht vorhanden ist.

In Frage kommt z.b. ein Eltako ELTA Grundlastelement GLE / PTC, das ca. 5-8 Euro kostet. Technisch handelt sich dabei um einen PTC, also einen Widerstand mit positivem Temperaturkoeffizient, d.h. der Widerstand sinkt deutlich, wenn das Element kälter wird.


Das genannte Grundlastelement hat folgende Daten:

Kaltwiderstand: 3500 Ω
Einschaltstrom bei 230 V: 65 mA (ca. 15 W)
Verlustleistung nach 60 Sekunden: 0,65 W 

Im kalten Zustand lässt der PTC bei 230 Volt einen Strom von ca. 0,065 Ampere zu. Das reicht, um von Schaltaktoren, Freischaltern, Dimmern etc. als die erforderliche Grundlast erkannt zu werden. Wird der Stromkreis eingeschaltet, fliesst auch tatsächlich Strom durch den PTC, der sich dadurch schnell erwärmt (das Element wird tatsächlich sogar relativ heiss). Dadurch steigt steigt der Widerstand auf ca 50000-60000 Ohm an und die Verlustleistung sinkt auf unter 1 Watt. Der PTC regelt sich jetzt selber auf eine bestimmte Temperatur und Widerstand ein.

Wird ausgeschaltet, so fliest über den PTC immer noch ein kleiner Reststrom von ca 0,005 Ampere, der als Grundlast reicht, um z.b. Spannungen abzubauen, die LEDs nachflackern lassen, dieser steigt mit Erkalten rasch an, dadurch werden auch Schalter wie die RSL 2-Draht Einbauschalter mit genug Strom versorgt.

Theoretisch kann also auch ein PTC mit diesen Werten und einer Leistung von ca. 20 Watt selbst gebaut werden, der Preis der Einzelteile liegt bei unter 2 Euro. Das Eltako Element ist bereits mit Isolierung und Anschlussleitungen versehen, mit eigner Arbeitszeit ist der Preisvorteil beim Selberbau also gering.

Februar 2017

at Zeiten

at 03:00      ->  1x um 3 Uhr (wann immer das nächste mal 3 Uhr ist, ggf. erst morgen)
at *03:00     ->  jeden Tag um 3 Uhr
at +03:00     ->  in 3 Stunden
at +*03:00    ->  in 3 Stunden und dann alle 3 Stunden erneut
at +*{4}03:00 ->  in 3 Stunden und dann alle 3 Stunden erneut, aber nur 4x ausführen.

Oktober 2016

Grundlagen der Heizungssteuerung

Der Artikel Grundlagen der Heizungssteuerung soll einen zentralen Einstiegspunkt und eine Übersicht der Möglichkeiten insb. für Neulinge in FHEM bieten.

Batterieüberwachung für Geräte ohne Batteriestatus

Es gibt Möglichkeiten um auch bei Geräten ohne Batteriestatus-Reading eine schwache Batterie erkennen zu können: Geräte ohne Batteriestatus.

Mai 2016

DbLog reparieren

Sollte ein fhem mit DbLog Probleme machen, oder auf der SQL-Konsole Fehler werfen, so ist eine Reparatur der DB fällig. Das ist auf der Kommandozeile verhältnismäßig einfach möglich und wird im Kapitel DbLog#Datenbank reparieren beschrieben.

DbLog bearbeiten

Unerwünschte Einträge in den Loggings treten immer wieder mal auf. Wie man dies in einer Datenbank korrigiert, dazu gibt das Kapitel DbLog#Bearbeitung von Datenbank-Einträgen eine erste Einführung.

Pollenflug

In dieser schönen Jahreszeit werden manche durch Heuschnupfen geplagt. Auf der Seite Pollenflug wird beschrieben, wie man eine Pollenvorhersage in fhem einbinden kann - hilft zwar nicht gegen das Niesen, ist aber trotzdem ganz informativ... ;-)

April 2016

HomeMatic und VCCU

HomeMatic Nutzer sollten unbedingt eine VCCU einrichten und nutzen. Die Einrichtung ist unaufwändig und schafft jede Menge Vorteile, auch beim Einsetzen nur einer Schnittstelle wie z.B. einem HM-CFG-LAN LAN Konfigurations-Adapter. Auch die nachträglich Einrichtung ist problemlos, sofern vorher nur ein I/O Gerät ("Funkschnittstelle") verwendet wurde.

Dezember 2015

defmod

In vielen Fällen will man mit einer Aktion gleichzeitig eine andere Aktion bereits für später festlegen, z.b. nach Einschalten einer Heizung durch einen Bewegungsmelder diese eine Stunde später wieder ausschalten.

Dies kann z.B. durch ein Konstrukt dieser Art erledigt werden:

define Heizung_an notify Bewegung set HZG_WZ desired-temp 22 ;; define reset_Heizung at +01:00:00 set HZG_WZ desired-temp 16

Nachteilig ist, dass bei einer weiteren Auslösung des Bewegungsmelders die Heizzeit nicht verlängert wird, da eine Neudefinition von reset_Heizung mit der Fehlermeldung reset_Heizung already exists, delete it first quittiert wird. Die Lösung bisher war, das alte reset_Heizung zunächst zu löschen und dann erneut mit neuem Zeitstempel anzulegen:

define Heizung_an notify Bewegung set HZG_WZ desired-temp 22 ;; delete reset_Heizung ;; define reset_Heizung at +01:00:00 set HZG_WZ desired-temp 16

Aber auch dieses umständliche Konstrukt hat noch einen Nachteil: Es erzeugt bei einer ersten Auslösung eine Fehlermeldung, weil reset_Heizung noch nicht exisitert und daher nicht gelöscht werden kann. Dies liesse sich abfangen, was die Konstruktion weiter verkomplizieren würde.

Daher hat Rudolf König mit FHEM 5.6 den neuen Befehel "defmod" eingeführt, der ein noch nicht existieredendes define neu anlegt (wie "define"), eine bereits vorhandenes aber direkt ändert (wie "delete" und danach "define")

Dadurch lässt sich verkürzt schreiben:

define Heizung_an notify Bewegung set HZG_WZ desired-temp 22 ;; defmod reset_Heizung at +01:00:00 set HZG_WZ desired-temp 16


April 2015

FS20 Timer

FS20 Aktoren beherrschen zwei verschiedene Timer-Methoden.

Angenommen ein FS20 Device heisse "Lampe" und sei z.B. ein FS20 SU (Unterputzschalter), dann kann man mit FHEM sowohl

set Lampe on-for-timer 30

verwenden um die Lampe 30 Sekunden einzuschalten, aber auch zunächst in den FS20 SU die maximale Einschaltdauer einprogrammieren:

set Lampe timer 30

Dannach wird jedes normale

set Lampe on

die Lampe für nur 30 Sekunden einschalten.

Als Timerwerte kommen in beiden Fällen die bekannten 128 Sekundenwerte von 0,25 Sekunden bis Etwa 4,5 Stunden in Frage.

Es ist offenbar nicht bei allen Aktoren möglich einen einmal eingestellten Timer zu löschen, neue Werte eingeben aber sehr wohl.

Mehr hier: FS20 timer.

Februar 2015

1-wire am GPIO4-Port des RaspberryPi funktioniert nicht mehr nach Systemupdate

Es kann passieren, dass nach einem Systemupdate (apt-get update oder apt-get dist-upgrade) die 1-wire-Geräte am GPIO4-Port plötzlich nicht mehr funktionieren. Eine Problemlösung dazu ist im Artikel "Raspberry Pi und 1-Wire#1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate" beschrieben.

Backup der Konfiguration (fhem.cfg und fhem.state) bei jedem "save"

Der nachfolgende Codeschnipsel erstellt bei jedem "save" eine Kopie der aktuellen Konfiguration (fhem.cfg und fhem.state) in ein Verzeichnis "backup_cfg-state" welches unter /opt/fhem/ zu finden ist. Somit kann bei einem Fehler jederzeit auf den letzten Stand zurückgegangen werden. Zuerst ins FHEM Befehlsfeld den folgenden Befehl eingeben:

{ `mkdir backup_cfg-state` }

Danach folgendes notify anlegen:

define backupCfg notify global:SAVE {\
my $now = TimeNow();; $now =~ s/ /_/g;; \
`cp $attr{global}{configfile} ./backup_cfg-state/fhem.cfg.$now`;;\
`cp $attr{global}{statefile} ./backup_cfg-state/fhem.state.$now`;;\
} 

Quelle: FHEM-Forum

Januar 2015

CUL & CO über Serial ID-einbinden

Bei mehreren USB-Geräten kann es vorkommen, dass sie vertauscht werden z.B. /dev/ttyUSB0 zu /dev/ttyUSB1 oder /dev/ttyACM0 zu /dev/ttyACM1.

Um dies zu umgehen, kann man sie über ihre Serial-ID in FHEM einbinden.

Dieser Befehl zeigt die Serial-ID:

ls -l /dev/serial/by-id

Hier die Beispielausgabe eines CUL868, JeeLink, RFXtrx und eines CUL433

user@xxxx:~# ls -l /dev/serial/by-id
lrwxrwxrwx 1 root root 13 Jan  9 23:34 usb-busware.de_CUL868-if00 -> ../../ttyACM0
lrwxrwxrwx 1 root root 13 Jan  9 13:26 usb-FTDI_FT232R_USB_UART_A901RQ9F-if00-port0-> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 Jan  9 13:26 usb-RFXCOM_RFXtrx433_A1WZWL5Y-if00-port0-> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 Jan  9 21:29 usb-busware.de_CUL433-if00 -> ../../ttyACM1 

Damit lässt sich folgende Definition erstellen:

z.B. für einen CUL868

define CUL868 CUL /dev/serial/by-id/usb-busware.de_CUL868-if00@9600 1134

oder einen JeeLink

define Jeelink JeeLink /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A901RQ9F-if00-port0@57600

Einschränkung: Bei CULs von Busware lassen sich nur CUL433 und CUL868 unterscheiden. Zwei CUL868 haben z.B. immer die gleiche Serial-ID.

HM LAN Konfig-Adapter Antenne verbessern

Die Antenne des HM-CFG-LAN LAN Konfigurations-Adapter kann man mit etwas Bastelgeschick verlängern um den Empfang zu verbessern.

Sinnvoll ist die Verlängerung auf 1/2 Lambda (868MHz = 17,27 cm) oder gar 1 Lambda. 1 Lambda Antennen haben starke Richtwirkung in Form eines gedachten Zylinders, dessen Mittelachse die Antenne ist. D.h., Alles was sich in Richtung des Anfangs und des Endes des Antennedrahtes befindet, hat schlechteren Empfang als mit einer kurzen Antenne. Daher muss man die Antenne ggf. genauer ausrichten.

Anleitungen dazu werden an verschiedenen Stellen veröffentlicht, z.B. in diesem Beitrag im IP-Symcon Forum (anders als der Namen der Anleitung vermuten lässt, liegt hier kein Dipol vor, sondern eine "normale" 1 Lambda Antenne.)

Prinzipiell so dünnen Draht wie möglich verwenden.

Wer noch mehr rausholen will, kann auch zusätzlichen Aufwand betreiben und die Antenne etwas von der Elektronik entfernen, die nämlich Störstrahlung in die Antenne einkoppelt. Oder eine Groundplane bauen. Ein Anleitung für die CCU (analog auch für den HM LAN Konfig-Adapter einsetzbar) gibt es hier.

Dezember 2014

FHT80TF als "Prüfsender" einsetzen

Da der FHT80TF-2 günstig ist und seinen Zustand ca. alle zwei Minuten sendet, kann er gut zum Ermitteln der Funklage von SlowRF Komponenten genutzt werden, auch wenn diese nicht senden. Den RSSI einer FS20 Schaltsteckdose kann man z.B. nicht wissen, da die Dose nur ein Empfänger ist. Wenn eine Dose nicht gut funktioniert und man den Verdacht hat, dass sie funktechnisch ungünstig liegt, kann man einen FHT80TF-2 neben die Steckdose legen und man bekommt nach zwei Minuten einen Wert, der (trotz umgekehrter Funkrichtung) gut genug ist, um einem Hinweise zu geben.


November 2014

FS20 Adressschema und die Rolle des Hauscodes

FS20_Allgemein#FS20_Adressierungsschema_.28Vorschlag.29


Oktober 2014

Aktor für Wanddosen ohne Nulleiter

Es gibt viele Aktoren die man in Einbaudosen hinter Schaltern einbauen kann. Oft scheitert deren Nutzung aber daran, dass in vielen Elektroinstalltionen in der Einbaudose eines (Licht)schalters kein Neutralleiter (Nulleiter) verlegt ist, den die meisten Aktoren zur eigenen Stromversorgung brauchen. Hier kann der RSL 2-Draht Einbauschalter helfen, der auch ohne Neutraleiter funktioniert und kompatibel zu InterTechno ist. Er lässt sich z.B. mit einem CUL(433) schalten. Problematisch ist damit allerdings das Schalten von LED Lampen.

August 2014

Perl-Skripte Online testen

Im Internet existieren Webseiten auf denen man Perl-Code online testen kann. Beispielsweise auf codingground kann man Code zum Testen eingeben und die Auswirkungen betrachten. Dies eignet sich zur schnellen Fehleranalyse oder um Perl zu lernen. Natürlich lassen sich keine FHEM-Besonderheiten nutzen.

Juli 2014

Funklast reduzieren

Bewegungsmelder erzeugen in der Regel eine recht hohe Funklast, wenn sie oft ausgelöst werden, also z.B. Licht in einem Zimmer schalten sollen.

Konstruktionen der Art:

define FlurLicht notify Bewegungsmelder_Flur:motion:.* set Licht_Flur on-for-timer 256

haben daher den Nachteil bei viel Bewegung im Flur und je nach Einstellung des Sendeabstandes des Bewegungsmelders mindestens alle 120 Sekunde oder öfter ein

on-for-timer 256

zu senden. Das erzeugt eine hohe Funklast, speziell wenn der Aktor ein SlowRF Gerät ist (z.B. FS20 Unterputzschalter). In solchen Fällen kann es helfen, nur dann einen Befehl zu senden, wenn das Licht nicht schon an ist:

define FlurLicht notify Bewegungsmelder_Flur:motion:.* { if (Value("Licht_Flur") eq "off") { fhem ("set Licht_Flur1 on-for-timer 256") } }

Nachteilig ist aber, dass eine Auslösung innerhalb 256 Sekunden die Einschaltzeit nicht verlängert. Dies kann man umgehen, indem man nicht on-for-timer verwendet, sondern den Aktor selber verzögert auschaltet und bei weiteren Auslösungen nur die Verzögerung erneut anlegt:

define FlurLicht notify Bewegungsmelder_Flur:motion:.* { if (Value("Licht_Flur1") eq "off") { fhem ("set Licht_Flur on ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off") } else { fhem ("delete FlurLicht_aus ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off") }}

Durch den relativ neuen Befehl "defmod" kann ausserdem das Löschen und neu Anlegen zusammengefasst werden, sieh Tipp Dezember 2015

Juni 2014

Batteriestatus bei HomeMatic Devices aktivieren

Zumindest einige (wenn nicht alle) batteriegespeisten HM-Geräte können Batteriemeldungen senden, tun dies in der normalen Konfiguration aber nicht. Dazu muss das Register cyclicInfoMsg auf on gesetzt werden.

Wie man das macht steht z.B. hier HM-SEC-SC_Tür-Fensterkontakt#Batteriestatus_aktivieren und hier HomeMatic_Type_ThreeState

Mai 2014

Dummywert mit aktueller Uhrzeit versehen in anderen Dummy kopieren

Der Inhalt von Dummy1 soll erweitert um Uhrzeit und Datum in Dummy2 kopiert werden (z.B. um die Urzeit der letzten Auslösung einer Alarmanlage anzuzeigen)

{ fhem("set dummy2 " . (Value("Dummy1")." ".TimeNow()) ) }

Zwei Dummywerte in einen anderen Dummy kopieren

Der String in Dummy1 soll um den String in Dummy2 erweitert und nach Dummy3 kopiert werden:

{ fhem("set Dummy3 ".(Value("Dummy1")+Value("Dummy2"))) }

(Achtung: "+" ist Zahlen addieren, "." ist String konkatenieren / verketten)

April 2014

Code sparen

Wer Definitionen wie die aus dem März zum Abfangen von Fehlbedienungen verwendet, kann durch eine ELSE Erweiterung auch gleich das Auschalten erledigen.

define act_on_TV_on notify TV { if ("$EVENT" eq "on" || "$EVENT" 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-Zeitdauer-dannach-alter-Zustand und vieles mehr.

Was also ein Infrarot-Bewegungsmelder 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 TVFB: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 TVFB set TV on

zu prüfen. Dieses notify löst immer aus, wenn "TVFB" irgendetwas sendet, egal was. (Beachte: Man kann dann den Fernseher aber nicht mehr ausschalten, da auch die Austaste das notify auslöst und zum TV-Aktor nur "on" sendet).

Geht die Schaltung jetzt (kann man den Fernseher also jetzt EINschalten), liegt der Verdacht nahe, dass die Konfiguration des Senders / Sensors anders ist, als man denkt. Das Logfile, der EventMonitor oder ein Beobachtung von FHEM per Telnet mittels "inform" gibt Aufschluss, welcher Befehl tatsächlich empfangen wurde.

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.(Auch einige FBs anderer Systeme verhalten sich ähnlich)

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 TVFB:on set TV on

hat also dann den Nachteil, dass bei versehentlich zu langem Tastendruck auf die Fernbedienung 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 TVFB:dimup set TV on

Es ist in der Regel 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 TVFB { if ("$EVENT" eq "on" || "$EVENT" eq "dimup") { fhem("set TV on") }}

Allerdings hat dies den Nachteil, dass jedes Event dieses define durchläuft und erst später geprüft wird, ob das Event überhaupt irgendetwas auslöst. Z.B. wird

define act_on_TV_on notify TVFB ...

auch durch TVFB off ausgelöst (oder unter bestimmten Bedungen sogar duch alle Events), nur um dann nach dem Perl Test festzustellen, dass doch nichts getan werden soll.

Ressourcenschonender ist daher:

define act_on_TV_on notify TVFB:on|TVFB:dimup set TV on

Andere Möglichkeiten vergleiche: Notify durch mehrere Ereignisse auslösen lassen und Performance von Notifys

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 Funktsignale 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) Moduls SUNRISE_EL, 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 theoretisch sichtbar ist. Wenn örtliche Gegebenheiten (Bebauung, Bäume, Tal etc.) 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 nachdem was bei der Anwendung besser passt.

Für höhere Ansprüche könnte hingegen das Twilight-Modul verwendet werden, das Dämmerungsstufen kennt.

Struktur von "else if" Verzweigungen

define ... notify ... {\
 if ... {\
  fhem ("... ;; ...")\
 }\
 elsif ... {\
   fhem ("... ;; ...")\
 }\
 elsif ... {\
   fhem ("... ;; ...")\
 }\
 else {\
  if ... {\
   fhem ("... ;; ...")\
 }\
}

Achtung: es muss tatsächlich "elsif" heissen und nicht "elseif" oder "else if".

Gilt für Perl Aufrufe. Wer aktuell in FHEM neu einsteigt, kann auch den seit 2014 zur Verfügung stehenden FHEM Befehl DOIF verwenden, der komfortabler ist und zusätzliche Features aufweist.

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. Beachte hierzu jedoch den Tipp vom Dezember 2020 "Performance von Notifys"

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 ohne weiteres 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 passende Schnittstelle verwendet)

Dieses 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_CUL1 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 gleichschnell 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. Dieser Trick funktioniert ausserdem nur bei Befehlen, bei denen es im Zweifel egal ist, wenn sie beim Aktor 2x eintreffen.

Bei HomeMatic lässt sich ein ähnlicher Effekt durch einrichten einer virtuellen CCU erreichen.

Retrycount bei FHTs ist überflüssig

Das von der Funktion autocreate älterer FHEM Versionen 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.

Analog kann man mit off-for-timer arbeiten, wenn sich Aktoren nicht einschalten lassen, ausschalten aber geht.

Achtung: Dieser Trick funtioniert ausdrücklich nur, wenn der "on/off-for-timer" Befehl im Aktor selber abgebildet wird. Daher ist der Trick vermutlich nicht auf andere Funksysteme übertragbar. z.B. unterstützt HM nur on-for-timer und Intertechno kennt keinen Timer.

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, dass 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 bringt einen 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 (etwas übersichtlicher formatiert auch hier).

Andere Zeiten werden von FHEM gerundet. Ein neues Setzen des Timer für FS20 löscht den alten Wert.

Auch HomeMatic Aktoren beherrschen Time Parameter, im Gegensatz zu FS20 allerdings kein "off-for-timer". Details dazu im Artikel HomeMatic Timerwerte