MSwitch
MSwitch ist ein Hilfsmodul, welches das Event- und/oder zeitgesteuerte Schalten von mehreren Devices oder das Ausführen von benutzerdefinierten Befehlssequenzen erlaubt. Hauptmerkmal ist die fast vollständige Konfigurierbarkeit über das Webinterface.
MSwitch | |
---|---|
Zweck / Funktion | |
MSwitch | |
Allgemein | |
Typ | Hilfsmodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Automatisierung |
Modulname | 98_MSwitch.pm |
Ersteller | Byte09 |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Grundsätzliche Überlegungen
1. Welches Gerät soll auslösen oder zu welcher Zeit soll eine Auslösung erfolgen?
Im oberen Rahmen des Webinterfaces lässt sich der Trigger (Auslöser) bzw. eine Zeitabhängigkeit konfigurieren:
- jedes Event aus dem Eventmonitor,
- triggerunabhängige Zeiten,
- triggerunabhängige Zufallszeiten,
- triggerunabhängige Intervalle,
- Kombinationen aus Triggern und Zeiten.
2. Welche Bedingungen sollen bei Auslösung erfüllt sein?
- Zweiter Rahmen: Wenn diese Bedingungen erfüllt sind, werden Kommandos ausgelöst. Die Bedingungen werden im zweiten Teil des Webinterfaces eingegeben. Dabei unterscheidet das Modul zwischen zwei Kommando-Kanälen (cmd1 und cmd2) und den dazugehörigen Geräten.
3. Welche Kommandos sollen ausgelöst werden?
- Im dritten Rahmen des Webinterfaces werden dann die konkreten Kommandos eingegeben. Man wählt dabei aus einer Liste wie auf der Geräteseite Kommandos aus. FreeCmd erlaubt geräteunabhängige Kommandos, beispielsweise reinen Perl-Code.
4. Welche weiteren Bedingungen sollen noch gelten?
- Zusätzlich pro Gerät im dritten Rahmen:
- ereignisgesteuerte Bedingungen,
- zeitgesteuerte Bedingungen,
- Verzögerungen,
- Wiederholungen etc.
==Definition und Einrichtung ==
Das define eines MSwitch Devices generiert lediglich eine 'leere Hülle':
define <name> MSwitch
Es wird ein leeres Device angelegt, das dann komplett über das Webinterface konfigurierbar ist.
Webinterface
MSwitch wird über das Webinterface eingerichtet. Es besteht aus vier Teilen. Änderungen in einem Abschnitt müssen auch dort gespeichert werden, bevor ein weiterer Teil bearbeitet wird, sonst gehen Änderungen verloren.
attr <name> MSwitch_Help 1
führt dazu, dass im Modul selber eine sehr umfangreiche kontextsensitive Hilfe in Form von Fragezeichensymbolen angezeigt wird.Rahmen 1: Trigger Device und Trigger Time
Trigger Device
Trigger Device Global Whitelist
Damit kann die Liste eingehender Events weiter eingeschränkt werden. Sobald mindestens ein Eintrag vorhanden sind, werden nur noch Events der hier benannten Devices verarbeitet. Zulässig ind Devicenamen und DeviceTypen (z.B. TYPE=FS20). Mehrere Angaben sind durch Komma zu trennen.
Im unten gezeigten Beispiel wurde GLOBAL gewählt, weil nicht ein einzelnes Device, sondern eine Kombination aus zwei Geräten auslösen soll. Es werden alle Ereignisse betrachtet, wobei die Whitelist dann auf die Devices Schlafzimmer (ein Temperaturmessgerät) und Schlafzimmerfenster (ein optischer Kontakt) einschränkt.In diesem Feld wird das Device per Dropdownfeld gewählt, dessen Events eine Aktion auslösen sollen.
Trigger Time
Trigger time bietet die Möglichkeit einer zeitabhängigen Steuerung. Dazu wird in die "at"-Zeile ein Termin in der Form [STUNDEN:MINUTEN|TAGE] eingetragen. Die Tage werden ab Montag von 1-7 gezählt. Mehrere Zeitvorgaben können direkt hintereinander geschrieben werden. Beispiele:
- [17:00|1][18:30|23] löst montags um 17 Uhr und dienstags sowie mittwochs um 18:30 Uhr aus.
- [00:10*20:00-21:00] führt den Schaltbefehl von 20 Uhr bis 21 Uhr alle 10 Minuten aus.
- [?20:00-21:00] schaltet zu einem zufälligen Zeitpunkt zwischen 20 und 21 Uhr einmalig.
- [20:00|$we] nur am Wochenende um 20:00 wird geschaltet.
Trigger Conditions
Optionale zusätzliche Bedingungen in diesem Feld gelten nur für auslösende Device Trigger. Trigger Times haben keinen Einfluss, es sei denn, das Attribut MSwitch_Condition_Time ist gesetzt. Man kann mit AND / OR verknüpfte Bedingungen für die Auslösung in an DOIF angelehnter Syntax angeben. Leere Felder werden ignoriert. Werden Readings mit Strings wie 'on' oder 'off' abgefragt, ist statt des Gleichheitszeichens "=" der Operator "eq" zu nutzen, der String muss in Anführungszeichen "" gesetzt werden. Beispiele:
- [19:10-23:00] AND [Devicename:Reading] = 10 - beide Bedingungen müssen erfüllt sein.
- [19:10-23:00] OR [Devicename:Reading] eq "on" - eine der Bedingungen muss erfüllt sein.
- [10:00-11:00|13] - schaltet Montag und Mittwoch zwischen 10 Uhr und 11 Uhr.
- [{ sunset() }-23:00] - von Sonnenuntergang bis 23:00 Uhr.
- { !$we } löst den Schaltvorgang nur Werktagen an aus.
- { $we } löst den Schaltvorgang nur an Wochenenden, Feiertagen aus.
Es ist auf korrekte Eingabe der Leerzeichen zu achten.
Rahmen 2: Trigger Details
Der Inhalt des zweiten Rahmens wird mit dem gewählten Trigger aus dem ersten Rahmen initialisiert. Events können zugeordnet werden. Im Beispiel wird cmd1 ausgelöst, wenn das Fenster offen ist. Cmd2 wird bei Temperaturunterschreitung ausgelöst.
execute
Diese vier Zeilen legen fest, welches ankommende Event welchen Befehlszweig auslösen soll. Die Event-Drop-Down-Liste enthält alle empfangenen Events dieses Devices. Fehlende Events können manuell hinzugefügt werden.
- switch <MSwitch> on + execute 'cmd1' - MSwitch Statusänderung auf 'on'; cmd1 soll ausgeführt werden
- switch <MSwitch> off + execute 'cmd2' - MSwitch Statusänderung auf 'off'; cmd2 soll ausgeführt werden;
- execute 'cmd1' only - keine Statusänderung; cmd1 soll ausgeführt werden
- execute 'cmd2' only - keine Statusänderung; cmd2 soll ausgeführt werden
Save incomming events
Alle ankommenden Events der konfigurierten Geräte werden für die Dropdownlisten gespeichert. Nach erfolgreicher Konfiguration sollte diese Option entfernt werden, um die Datenmenge zu reduzieren. Falls das Device Events während der Konfiguration nicht liefert, können sie manuell als kommagetrennte Liste hinzugefügt werden.
add event
- * - alle auftretende Events des entsprechenden Device - device:reading:wert (z.B. device:state:on ) - nur für das Event "device:state:on" - device:reading:* (z.B. device:state:* ) - Events "device:state:(on,off,etc.) - device:reading:(wert1/wert2/wert3) (z.b. device:state:(left/right) - Events "device:state:left" oder "devicestate:right" etc.
Das Device kann auch hier gegen "*" ersetzt werden (*:state:on). In diesem Fall erfolgt eine Aktion auf alle Events die z.B. "state:on" enthalten, egal welches Device triggert.- * - alle auftretende Events des entsprechenden Device
- reading:wert (z.B. state:on ) - nur auf das Event "state:on"
- reading:* (z.B. state:* ) - Events "state:(on,off,etc.)
- reading:(wert1/wert2/wert3) (z.b. state:(left/right) - Events "state:left" oder "state:right" etc.
test event
Stehen Events zur Auswahl, kann die Konfiguration getestet werden. Durch Klick wird das Event simuliert und die dafür definierte Aktion ausgelöst.
apply filter to saved events
Beschreibung folgt???
clear saved event
Es werden die nicht als Trigger eingestellten Events aus der Liste gelöscht.
Rahmen 3: Affected devices
- Die Abfrage "set Device ?" liefert einen Befehlssatz
- Das Attribut 'webcmd' des Devices enthält Einträge
- Das Attribut 'MSwitch_Activate_MSwitchcmds' ist aktiviert und das Attribut 'MSwitchcmds' des betreffenden Devices enthält einen Befehlssatz
Auswahl der Devices, die auf die oben konfigurierten Events reagieren sollen. Um unbeabsichtigte Änderungen zu vermeiden ist die direkte Mehrfachauswahl gesperrt.
Rahmen 4: Device Actions
Die auszuführenden Aktionen der im dritten Rahmen gewählten Geräte. Leere Felder werden ignoriert.
MSwitch cmd1/cmd2:
Man wählt den gewünschten Befehl aus den gespeicherten verfügbaren Möglichkeiten des betreffenden Device aus.
- Im Sonderfall FreeCmd wird der Befehl als String eingegeben.
- Das Attribut MSwitch_Extensions ergänzt die Schaltoption 'MSwitchToggle' in der Liste, um die Toggle-Funktion bei Geräten die sie nicht von Haus aus anbieten nachzurüsten.
cmd1/cmd2 condition
Achtung: Bei Anwendung der geschweiften Klammern zur Einleitung eines Perl Ausdrucks ist unbedingt auf die Leerzeichen hinter und vor der Klammer zu achten.
Überschreitet die Zeitangabe die Tagesgrenze (24:00 Uhr), so gelten die angegebenen Tage noch bis zum Ende der angegebenen Schaltzeit (zum Beispiel würde auch am Mittwoch noch der Schaltvorgang erfolgen, wenn als Tagesvorgabe Dienstag gesetzt wurde).Die Ausführung der Befehle kann pro gewählten Gerät analog Rahmen 1 von weiteren Bedingungen abhängig gemacht werden. Es gelten die gleichen Regeln und Beispiele wie im 'Rahmen 1 Trigger Conditions'. Sie können sinngemäß übernommen werden.
Die Variable $EVENT enthält den auslösenden Trigger. Wenn unter 'Rahmen 1 Trigger Conditions' ein Wildcard verwendet wurde, kann nun feingefiltert werden, indem das konkrete Ereignis angegeben wird.
Beispiel: [$EVENT] eq "state:on" würde den Kommandozweig nur dann ausführen, wenn der auslösende Trigger "state:on" war.
cmd1/cmd2 delay
Ein Eintrag in diesem Feld führt zur verzögerten Ausführung des Befehls nach Eintreffen des Events. Dabei kann der Befehl ohne weitere Prüfung der Bedingung ausgelöst werden. Es ist aber auch möglich, dass die Bedingung bei Ausführung erneut geprüft wird. Die Zeitangabe muss im Format hh:mm:ss vorliegen. Einzelheiten enthält auch das Funktions-Struktogramm.
Statt einer direkten Zeitangabe kann hier auch auf eine verwiesen werden, indem in der Form [NAME.reading] ein Reading eines Devices wie z.B. [dummy.state] angegeben wird.
add action
Mit diesem Button kann ein weiterer Rahmen 4 als Rahmen 4.1 für das gleiche Device angelegt werden, um z.B. einen weiteren Befehl gegebenenfalls zeitverzögert auszuführen.
delete this action
Mit diesem Button wird der entsprechende Rahmen 4 für das Device gelöscht.
check condition
Die angegebenen 'conditions' werden in Zusammenhang mit ggf. ausgewählten Devices auf Syntax und Ergebnis geprüft. Es erfolgt eine Ausgabe des Prüfungsergebnisses.
Repeat und Repeatdelay
Die Felder 'Repeats', 'Repeatdelay in s' und 'priority' stehen zur Verfügung, wenn das Attribut MSwitch_Expert gesetzt wurde. Diese bewirken eine n-fache Wiederholung des gesetzten Befehls mit m Sekunden Verzögerung. Das Auswahlfeld 'priority' erscheint bei jedem 'affectes device'. So kann die Reihenfolge der Befehlsabarbeitung beeinflusst werden.
Erweiterte Konfiguration
Das MSwitch-Modul ist ohne weitere Voraussetzungen nutzbar und wird in der aktuellen Version über FHEM Update verteilt. MSwitch kann mehrere Devices gleichzeitig schalten. Diese Schaltungen befinden sich in den zwei möglichen Zweigen entsprechend der Kommandos cmd1 und cmd2. Die einzelnen Devices jedes Zweiges können mit weiteren Schaltbedingungen versehen werden (zeit- oder ereignisgesteuert).
Set-Befehle
Name | Beschreibung |
---|---|
set active | Setzt das MSwitch-Device in den Status 'active'. |
set inactive | Setzt das Device in den Status 'inactive'. Es werden keine Befehle mehr ausgeführt. Dieser Status entspricht dem Attribut 'disable', ist aber nicht mit dem roten Fragezeichen (fhem save) verbunden. |
set on|off [<parameter>] | Setzt das Device in den Status 'on' oder 'off'. Alle Befehle der 'on/off-Zweige' werden ausgeführt. Optional kann den Befehlen 'on' und 'off' ein weiterer Parameter mit übergeben werden. Dieser wird im Reading 'Parameter' hinterlegt und es kann sofort in 'Freecmds' oder 'Conditions' darauf zugegriffen werden. |
set reload_timer | Alle gesetzten Timer werden gelöscht und neu berechnet. |
set change_renamed <oldname> <newname> | Sollten sich Devicenammen im ausführenden Teil geändert habe (affected Devices, Conditions, etc.) so kann das MSwitch mit diesem Befehl angepasst werden, ohne alle Einstellungen neu einstellen zu müssen. |
set exec_cmd1 | set exec_cmd1 ID [<ID>] | Bewirkt das sofortige Ausführen des entsprechenden Befehlszweiges. Bei Angabe einer ID werden nur die Befehle mit der entsprechenden ID ausgeführt. |
set MSwitch_backup | Erstellt eine Backup-Datei aller MSwitch Devices unter ./fhem/MSwitch_backup.cfg. Daten dieser Datei können im Bedarfsfall für einzelne oder gleichzeitig alle MSwitch Devices wieder zurückgespielt (hergestellt) werden. |
set del_delays | set exec_cmd1 ID [<ID>] | Löscht alle anstehenden, verzögerten Befehle (delays). |
set reset_cmd_count: 1|2 | Löscht das entsprechende EVT_CMD_COUNT - Reading; entspricht damit einer Rückstellung auf '0'. |
set fakeevent [<device>]:<reading>:<arg> | Beispiel: <device> fakeevent state:on Das MSwitch Device reagiert so, als wäre statt des internen "fakes-Befehls" ohne FHEM-Systembeeinflussung dieses Event tatsächlich vom triggernden Gerät generiert worden. Der Name (<device>) muss bei GLOBALEN Triggern mit angegeben werden, sonst wird das Device automatisch gesetzt. Um z.B. einen Watchdog zu realisieren ist es eventuell nötig, dass sich das MSwitch Device mit einem bestimmten Event selber neu triggert - ggf. mit einem entsprechenden Delay Affected Device. Bei dem Einsatz dieser Möglichkeit sollte das Attribut 'MSwitch_Safemode' UNBEDINGT aktiviert sein, da 'Experimente' hier schnell in einer Endlosschleife enden können, die nur durch ein Reboot unterbrochen werden kann. Möglicherweise steht dieser Befehl zukünftig nur noch zur Verfügung, wenn Safemode aktiviert ist. |
Get-Befehle
Name | Beschreibung |
---|---|
get show_timer [<show><delete>] |
|
get restore_MSwitch_data [<this_device>|<all_devices>] |
Die Devices sind nach einem Restore funktionsfähig. Empfohlen wird ein Neustart von FHEM.. |
get_config | Zeigt die Konfigurationsdatei des MSwitchdevices an; diese kann in dem Fenster editiert werden. Das sollte nur von erfahrenen Usern getan werden! Im Normalfall sollte das Device nur über die Weboberfläche konfiguriert werden und eine falsche Konfiguration kann hier zu einem FHEM Absturz führen. |
get_support_info | Öffnet ein Fenster mit einer formatierten Ansicht aller Einstellungen des Devices. Bei Supportanfragen sollte dieses immer mit geposted werden. |
get_MSwitch_preconf | Lädt vorkonfigurierte MSwitch-Devices. Diese Option ist nur dann vorhanden, wenn das Aktualisieren dieser vorkonfigurierten Devices im FHEM Update aktiviert ist.
Diese kann durch ein einmaliges Update erfolgen mit: |
Attribute
Name | Beschreibung |
---|---|
MSwitch_Debug <0|1|2|3|4> |
0 - Abgeschaltet |
MSwitch_Expert <0|1> |
|
MSwitch_Sequenz <Suchmuster> ??? |
Eine Schaltsequenz kann durch ein oder mehrere durch '/' getrennte Suchmuster angegeben werden. Die Angabe muss folgende Syntax haben:
Beispiel: Erkennt das Device dieses Suchmuster in den Schaltvorgängen des Devices (Dummy), wird das Reading "SEQUENCE" auf "match" gesetzt, das Reading "SEQUENCE_NUMBER" auf die Nummer der gefundenen Sequenz, wenn es mehrere Suchmuster gibt. Beide Readings können in den "Conditions" eines Schaltbefehles abgefragt werden. Eine Angabe muss in folgendem Format gemacht werden:
Funktion: Bei Ausführung des Befehls wird das Gerät 'on' oder 'off' geschaltet (on/off), Voraussetzung ist, dass der 'state' dieses Gerätes auch den 'state on' oder 'off' annimmt. Sollte dieses nicht der Fall sein, so kann mit dem Feld 'state' angegeben werden, in welchem Reading der aktuelle Status vorkommt und wie dieser lautet (suchmuster1/suchmuster2). Dieses 'state' kann mehrere Angaben enthalten, das Vorkommen der Suchmuster ist aber Voraussetzung. |
MSwitch_Sequence_time <Zeit in Sekunden> | Maximalzeit in Sekunden, um eine Sequenz vollständig auszuführen. (Was wenn diese Zeit überschritten wird???) |
MSwitch_Extensions <0|1> | Es wird zusätzlich zu 'on' und 'off' die Schaltoption 'MSwitchToggle' in der Liste angeboten, um die Toggle-Funktion bei Geräten die sie nicht von Haus aus anbieten nachzurüsten. |
MSwitch_Delete_Delays <0|1> | Eins bewirkt das Löschen aller anstehende Delays bei dem Auftreten eines erneuten passenden Events. Bei der Option '0' bleiben bereits gesetzte Delays aus einem vorher getriggerten Event erhalten und werden ausgeführt. Empfohlene Einstellung: 1 |
MSwitch_Include_Devicecmds <0|1> | Bewirkt die Aufnahme aller Devices die bei Abfrage mit 'set DEVICE ?' einen eigenen Befehlssatz liefern in die Auswahlliste 'Affected Devices'. Bei Option '0' werden diese Devices in der Liste nicht mehr angeboten. Empfohlene Einstellung: 1 |
MSwitch_Include_Webcmds <0|1> | Bewirkt die Aufnahme aller Devices in die Auswahlliste 'Affected Devices', die einen eigenen Befehlssatz in dem Attribut Webcmd hinterlegt haben. Die in Webcmd hinterlegten 'Befehle' werden in den Auswahlfeldern angeboten. Bei gesetzter Option '0' werden diese Devices nicht mehr angeboten, es sei denn, sie liefern mit 'set DEVICE ?' einen eigenen Befehlssatz. Empfohlene Einstellung: 0, Einsatz nach Bedarf. |
MSwitch_Activate_MSwitchcmds <0|1> | Fügt jedem vorhandenen Device das Attribut 'MSwitchcmd' hinzu. |
MSwitch_Include_MSwitchcmds <0|1> | Bewirkt die Aufnahme aller Devices in die Auswahlliste 'Affected Devices', die einen eigenen Befehlssatz in dem Attribut MSwitchcmds hinterlegt haben. Die in MSwitchcmds hinterlegten 'Befehle' werden in den Auswahlfeldern angeboten. Bei gesetzter Option '0' werden diese Devices nicht mehr angeboten, wenn sie nicht zusätzlich einen eigenen Befehlssatz mit 'set DEVICE ?' liefern. Empfohlene Einstellung: 0, Einsatz nach Bedarf. |
MSwitch_Lock_Quickedit <0|1> | Voreinstellung für die Auswahlliste 'Affected Devices'. Bei der Option '1' ist diese voreingestellt gesperrt und kann nur über einen zusätzlichen Button geändert werden, um versehentliche Änderungen zu vermeiden. Die Auswahl einer Option ohne betätigte <Strg>-Taste bewirkt das Löschen aller bereits gesetzten Optionen. Empfohlene Einstellung: 1 |
MSwitch_Startdelay <0|10|20|30|60> | MSwitch ignoriert nach einem FHEM-Neustart für die angegebene Zeit in Sekunden alle eingehenden Events um u.a. Startverzögerungen zu vermeiden. Bei nicht gesetztem Attribut gilt hier eine Zeit von 30 Sekunden. Diese sollte auch nur in Ausnahmefällen geändert werden. Empfohlene Einstellung: 30 |
MSwitch_Ignore_Types | Beinhaltet eine durch Leerzeichen getrennte Liste von Device-Typen welche nicht geschaltet werden oder nicht geschaltet werden können. Sie werden dann in den Auswahllisten nicht dargestellt, um die Auswahllisten übersichtlich zu halten.Voreinstellung: notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul.
???Wenn statt des Devicetyps ein devspec z.B. "TYPE=watchdog" angegeben wird, ist zu beachten, dass alle Geräte in die Ignoreliste einbezogen werden, die NICHT der devspec entsprechen. Weiterhin muss die devspec in Anführungszeichen gesetzt werden!??? |
MSwitch_Trigger_Filter | Beinhaltet eine kommagetrennte Liste von Events, die im Falle ihres Eingangs unberücksichtigt und ungespeichert bleiben. Wildcards wie '*' können angegeben werden. Empfohlene Einstellung: - |
MSwitch_Wait <n in Sekunden> | Bei gesetztem Attribut nimmt das MSwitch Device für den eingestellten Zeitraum keine Befehle mehr entgegen und ignoriert eingehende Events. |
MSwitch_Event_Id_Distributor | off)) so werden für beide Events jeweils der Zweig 'cmd1' - alle Aktionen ohne ID - ausgeführt. Durch entsprechende Einträge kann für entsprechende Events auf eine Aktion umgeleitet werden, für die eine ID definiert ist. Die Syntax lautet: state:on=>cmd1 ID 1,2 Entsprechend werden bei auslösendem Event 'state:on' nur die Aktionen aus cmd1 mit den IDs 1 und 2 ausgeführt. Mehrere Angaben sind durch new Line zu trennen. ???
|
MSwitch_Selftrigger_always <0|1> | (dieses Attribut steht ab Modulversion 2.5 zur Verfügung)
Die Aktivierung dieses Attributes '1' bewirkt, dass alle SET Aktionen des Devices einen internen Event ohne Auswirkungen auf das FHEM-System auslösen, auf die das Device selber reagiert. Diese Option kann zusätzlich zu einem vorhandenen Trigger aktiviert werden. Auftretende auswertbare interne Events haben immer folgendes Format: MSwitch_Self:aktion:wert MSwitch_Self:pct:100 Es werden nur interne Events für set-Aktionen ausgelöst, die im Attribut setlist hinterlegt sind. Der 'wait' Befehl/Attribut hat keine wirkung. |
MSwitch_Mode <Notify|Full|Toggle|Dummy> | Schaltet das Modul zwischen angepassten Weboberflächen-Modi um.
Notify Das Device kann nicht manuell umgeschaltet werden. Es gibt nur die zwei ausführbaren Zweige "execute 'cmd1' commands" und "execute 'cmd2' commands". Der Status des Devices wird nicht als 'on' oder 'off' angezeigt, sondern lediglich als 'active' Dieser Mode ist ähnlich zu einem FHEM-Notify. Full Es stehen alle Funktionen zur Verfügung. Toggle Sehr vereinfachter Mode. Es stehen keine verschiedenen Zweige zur Verfügung. Hier ist das Device manuell schaltbar und wird bei jedem definierten Event 'umgeschaltet', ??? entsprechend definierte Befehle für 'cmd1' oder 'cmd2' werden ausgeführt. ??? Dummy ACHTUNG: Funktionsänderung mit V2.61 Der Mode 'Dummy' ist ein eingeschränkter Modus. Dieser bietet die Funktionalität eines Dummys kombiniert mit der Funktionalität eines Notifys und kann somit die gerne genutzte Kombination Dummy-Notify gegen ein Device ersetzen. Der Dummy-Mode kann nur in einem neu angelegten leeren MSwitch aktiviert und auch nicht wieder verlassen werden! Sobald ein angelegtes MSwitch einmal verändert wurde (modify trigger etc.) sind Umschalt-Optionen nicht mehr verfügbar. |
MSwitch_Condition_Time <0|1> | In der Grundeinstellung '0' werden für das zeitgesteuerte Schalten keine definierten Conditionen im Feld 'Trigger condition' überprüft, sondern die Schaltbefehle werden in jedem Fall ausgeführt. Mit der Einstellung '1' wird diese Überprüfung wie für Events zugeschaltet. |
MSwitch_Random_Time <HH:MM:SS-HH:MM:SS> | Bei Aktivierung wird vor jedem Ausführen eines verzögerten Befehls (Delay) eine Zufallszeit generiert, die im Rahmen der hier angegebenen Zeitspanne liegt. Auf diese Zufallszahl kann in den Delays zugegriffen werden, durch die Angabe '[random]' statt einer direkten Zeitangabe. Bei nicht gesetztem Attribut ergibt die Angabe von '[random]' immer '00:00:00' |
MMSwitch_Random_Number <n> | Bei Aktivierung dieses Attributes mit einer beliebigen ganzen Zahl, werden vom Device die zwei Readings 'RandomNr' und 'RandomNr1' und mit Werten zwischen null und n angelegt. RandomNr wird vor jedem Ausführen eines Befehls, auch für unterschiedliche Geräte in einem Durchgang, neu generiert. RandomNr1 bleibt nach der Initialisierung konstant. Wenn auf dieses Readings in einer Condition mit z.B. '[$NAME:ReadingNr1] = 1' zugegriffen wird, wird der Befehl nur ausgeführt, wenn ReadingNr1 gerade = 1 ist. Der Befehl wird somit nur mit einer Wahrscheinlichkeit von eins zu n ausgeführt. |
MSwitch_Reset_EVT_CMD1(2)_COUNT | Bei Aktivierung dieses Attributes steht in den Readings das Reading 'EVT_CMD1_COUNT' bzw. 'EVT_CMD2_COUNT' zur Verfügung. Dieses kann in den Conditions genutzt werden, um z.B. nur bei jedem x-ten Eintreffen eines auslösenden Events einen Befehl auszuführen. Bei jedem Eintreffen eines gültigen Events werden die Zähler um 1 erhöht (für den jeweiligen Zweig). Ist hier der Wert '0' eingetragen, wird der Zähler fortlaufend (endlos) erhöht. Wird ein Wert größer 0 eingetragen, wird der Zähler mit Erreichen dieses Wertes automatisch wieder auf Null gesetzt. Mit Löschen dieses Attributes werden die entsprechenden Readings ebenfalls gelöscht. |
MSwitch_Safemode <0|1> | Bietet einen gewissen Schutz vor falschen Konfigurationen und dadurch entstehenden Endlosschleifen. Bei aktiviertem Attribut '1' beendet das Modul Endlosschleifen eines Devices. In diesem Fall erfolgt ein Logeintrag und das Device wird per Attribut auf 'Disabled' gesetzt. Es wird ein letztes Event generiert, auf das reagiert werden kann 2018-05-31 09:39:21 MSwitch <NAME> Safemode: on Im Webinterface erfolgt bei betroffenem Device ein entsprechender Hinweis. In der Grundkonfiguration ist dieses Attribut nicht gesetzt. Es empfiehlt sich aber, bei neuen bzw. komplizierten Devices, dieses zumindest anfänglich zu aktivieren.
|
MSwitch_Read_Log<0|1> | Ermöglicht den Zugriff auf das Logfile als Trigger.
|
MSwitch_Help<0|1> | Schaltet Hilfebuttons zu den einzelnen Eingabefeldern an oder aus. |
MSwitch_Comments<0|1> | Schaltet Kommentarfelder zu den einzelnen 'affected_devices an. |
MSwitch_generate_Events<0|1> | Reduziert bei Einstellung '1' die vom MSwitch-Devices erzeugten Events auf ein Minimum. Insbesondere bei Verwendung von 'MSwitch_Read_Log' zu empfehlen. |
MSwitch_Startdelay | ???Bestimmt die Verzögerungszeit des MSwitches nach FHEM-Start in Sekunden. In diesem Zeitraum reagiert das Device nicht auf Events. Die Vorgabe ist hier zehn Sekunden. Diese wird auch dann angenommen, wenn das Attribut nicht gesetzt ist.??? (Hatten wir das nicht schon?) |
MSwitch_Inforoom | Mit diesem Attribut wird die Raumansicht eines mit dem Attribut bestimmten Raumes verändert. Dadurch sollen die wichtigsten Informationen aller MSwitch-Devices auf eine Seite dargestellt werden. Zur Nutzung sollten alle MSwitch-Devices (zusätzlich) in einen Raum sortiert werden und dieser Raum im Attribut eingestellt werden.
Wichtig: Eine Änderung dieses Attributes bewirkt immer eine Änderung dieses Attributes in allen MSwitch devices: Es muss nur in einem Device gesetzt oder gelöscht werden um alle Devices zu erfassen. Es werden folgende Informationen bereitgestellt:
|
Integrierte Funktionen
Name | Beschreibung |
---|---|
Average | ??? |
Difference |
Folgende Readings werden zur Verfügung gestellt:
|
Increase | ??? |
Tendency |
Rechenzeichen (><): Dieses ist hier nicht als Rechenzeichen zu werten, sonder als Tendenz-Anzeige. ( < es wird nach fallender Tendenz gesucht / > sucht nach steigender Tendenz). Schaltung erfolgt einmalig bei Erkennung der gesuchten Tendenz. Danach erfolgt keine Schaltung mehr, solange bis eine Tendenz-Umkehr erfolgt ist. Erst dann erfolgt wieder eine Schaltung bei erneuter Tendenz-Umkehr in gesuchte Richtung. |
Tipps, Tricks, Kurzbeispiele
Wird stetig ergänzt.
Funktions-Struktogramm
Blinken - Falls nicht im Device vorhanden
Lässt ein beliebiges Device 5 mal togglen, mit einem Intervall von 0.5 Sekunden (Blinkzeit somit 2,5 Sekunden)
Die MSwitchtoggle-Funktion muss per ATTR aktiviert werden.
Die Repeatfunktion ist nur im Expertmode verfügbar, auch per ATTR einstellbar.
Linearschalter
Umsetzung eines Linearschalters mit MSwitch.
Eingang: Beliebiges Reading als numerischer Wert.
Ausgang: Wird entsprechend Linear / oder umgekehrt Linear zum Eingang geschaltet.
Folgend die Rawdefinition des MSwitchdevices und zweier Dummys (selbsterklärend)
Alle Devices werden im Raum Lineartest angelegt, die Dummy müssen zuerst angelegt werden.
defmod linearausgang dummy attr linearausgang room Lineartest attr linearausgang setList state:slider,0,1,100 attr linearausgang webCmd state setstate linearausgang state 57 setstate linearausgang 2018-06-06 18:06:12 state state 57
defmod lineareingang dummy attr lineareingang room Lineartest attr lineareingang setList state:slider,0,1,15000 attr lineareingang webCmd state setstate lineareingang 6422 setstate lineareingang 2018-06-06 18:06:12 state 6422
defmod Linearschalter MSwitch lineareingang # linearausgang FreeCmd attr Linearschalter MSwitch_Debug 0 attr Linearschalter MSwitch_Delete_Delays 1 attr Linearschalter MSwitch_Expert 0 attr Linearschalter MSwitch_Extensions 0 attr Linearschalter MSwitch_Help 0 attr Linearschalter MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul attr Linearschalter MSwitch_Include_Devicecmds 1 attr Linearschalter MSwitch_Include_MSwitchcmds 0 attr Linearschalter MSwitch_Include_Webcmds 0 attr Linearschalter MSwitch_Inforoom MSwitch attr Linearschalter MSwitch_Lock_Quickedit 1 attr Linearschalter MSwitch_Mode Notify attr Linearschalter room Lineartest setstate Linearschalter active setstate Linearschalter 2018-06-06 18:03:50 .Device_Affected FreeCmd-AbsCmd1,FreeCmd-AbsCmd2,linearausgang-AbsCmd1 setstate Linearschalter 2018-06-06 18:04:35 .Device_Affected_Details FreeCmd-AbsCmd1,cmd,cmd,{my $eingang =ReadingsVal( "lineareingang"## "state"## 0 );;my $emin=0;;my $emax=15000;;my $amin=100;;my $amax=0;;$eingang = $emin if $eingang < $emin;;$eingang = $emax if $eingang > $emax;;my $y= (($amax-$amin)/($emax-$emin)*($eingang-$emin))+$amin;;readingsSingleUpdate( $hash## "to_set"## int ($y)## 1 );;},,delay1,delay1,000000,000000,,,0,0|FreeCmd-AbsCmd2,cmd,cmd,,,delay1,delay1,000000,000000,,,0,0|linearausgang-AbsCmd1,state,no_action,[Linearschalter:to_set],,delay1,delay1,000000,000000,,,0,0 setstate Linearschalter 2018-06-06 18:06:12 .Device_Events no_trigger setstate Linearschalter 2018-06-04 18:24:21 .First_init done setstate Linearschalter 2018-06-06 18:00:47 .Trigger_cmd_off no_trigger setstate Linearschalter 2018-06-06 18:00:47 .Trigger_cmd_on * setstate Linearschalter 2018-06-06 17:58:56 .Trigger_condition setstate Linearschalter 2018-06-06 18:00:47 .Trigger_off no_trigger setstate Linearschalter 2018-06-06 18:00:47 .Trigger_on no_trigger setstate Linearschalter 2018-06-06 17:58:56 .Trigger_time setstate Linearschalter 2018-06-04 18:24:21 .V_Check V 0.3 setstate Linearschalter 2018-06-06 18:06:12 EVENT state: 6422 setstate Linearschalter 2018-06-06 18:06:12 EVTFULL lineareingang:state: 6422 setstate Linearschalter 2018-06-06 18:06:12 EVTPART1 lineareingang setstate Linearschalter 2018-06-06 18:06:12 EVTPART2 state setstate Linearschalter 2018-06-06 18:06:12 EVTPART3 6422 setstate Linearschalter 2018-06-06 18:06:12 Exec_cmd set linearausgang state [Linearschalter:to_set] setstate Linearschalter 2018-06-06 17:58:56 Trigger_device lineareingang setstate Linearschalter 2018-06-06 18:00:47 Trigger_log off setstate Linearschalter 2018-06-06 18:06:12 last_event state: 6422 setstate Linearschalter 2018-06-04 18:39:56 state active setstate Linearschalter 2018-06-06 18:06:12 to_set 57
MSwitch -Configfile (bei Bedarf)
#V V1.54 #S .Device_Affected -> FreeCmd-AbsCmd1,FreeCmd-AbsCmd2,linearausgang-AbsCmd1 #S .Device_Affected_Details -> FreeCmd-AbsCmd1,cmd,cmd,{my $eingang =ReadingsVal( "lineareingang"## "state"## 0 )[S]my $emin=0[S]my $emax=15000[S]my $amin=100[S]my $amax=0[S]$eingang = $emin if $eingang < $emin[S]$eingang = $emax if $eingang > $emax[S]my $y= (($amax-$amin)/($emax-$emin)*($eingang-$emin))+$amin[S]readingsSingleUpdate( $hash## "to_set"## int ($y)## 1 )[S]},,delay1,delay1,000000,000000,,,0,0|FreeCmd-AbsCmd2,cmd,cmd,,,delay1,delay1,000000,000000,,,0,0|linearausgang-AbsCmd1,state,no_action,[Linearschalter.to_set],,delay1,delay1,000000,000000,,,0,0 #S .Device_Events -> no_trigger #S .First_init -> done #S .Trigger_Whitelist -> undef #S .Trigger_cmd_off -> no_trigger #S .Trigger_cmd_on -> * #S .Trigger_condition -> #S .Trigger_off -> no_trigger #S .Trigger_on -> no_trigger #S .Trigger_time -> #S .V_Check -> V 0.3 #S Trigger_device -> lineareingang #S Trigger_log -> off #S last_event -> state: 6422 #S state -> active #A MSwitch_Ignore_Types -> notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul #A MSwitch_Include_MSwitchcmds -> 0 #A MSwitch_Debug -> 0 #A MSwitch_Help -> 0 #A MSwitch_Include_Devicecmds -> 1 #A MSwitch_Extensions -> 0 #A MSwitch_Include_Webcmds -> 0 #A room -> Lineartest #A MSwitch_Inforoom -> MSwitch #A MSwitch_Expert -> 0 #A MSwitch_Lock_Quickedit -
Links
- Thread über das Modul im FHEM Forum
- Gäste-WLAN der Fritzbox auswerten und Login per Telegram senden
- Schalten von vier Kanälen mit einem MSwitch-Device
- Batterie-Überwachung. 1xTäglich per Telegram senden
- Licht (Alarm) in einem bestimmten Zeitraum schalten
- Über Dummy-Schalter ein Timer (EIN/AUS) aktivieren
- Ladezeit von Akku ermitteln u. Steckdose entsprechend schalten