DOIF: Unterschied zwischen den Versionen

Aus FHEMWiki
(Anwendungsbeispiel (+ Link auf Forum) eingefügt.)
(→‎Perl-Modus: Link ins Wiki statt Commandref)
 
(94 dazwischenliegende Versionen von 10 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Infobox Modul
{{Infobox Modul
|ModPurpose=Do ... if ...  
|ModPurpose=Do ... if ...  
|ModType=d
|ModType=h
|ModForumArea=Automatisierung
|ModForumArea=Automatisierung/DOIF
|ModTechName=98_DOIF.pm
|ModTechName=98_DOIF.pm
|ModOwner=Damian}}
|ModOwner=Damian}}


[[DOIF]] ermöglicht, Aktionen ("do") unter bestimmten Bedingungen ("if") auszuführen. Bedingungen umfasst auch Konstrukte wie "wenn Zustand x ([[watchdog]]) für y Minuten... (Zeitsteuerung)".
[[Datei:Helper doif.png|50px]] (ausgesprochen: du if, übersetzt: tue wenn) ist ein universelles Modul, welches [[Event|ereignis]]- und zeitgesteuert in Abhängigkeit definierter Bedingungen Anweisungen ausführt.
 
Im '''FHEM-Modus''' stellt das Modul [[DOIF]] eine eigene Benutzer-Schnittstelle zur Verfügung ohne Programmierkenntnisse in [https://de.wikipedia.org/wiki/Perl_(Programmiersprache) Perl] unmittelbar vorauszusetzen. Mit diesem Modul ist es möglich, sowohl Ereignis- als auch Zeitsteuerung mit Hilfe logischer Abfragen miteinander zu kombinieren. Damit können komplexere Problemstellungen innerhalb eines [[DOIF]]-Moduls gelöst werden, ohne Perlcode in Kombination mit anderen Modulen programmieren zu müssen.
 
Im '''Perl-Modus''' bietet das Modul [[DOIF]] die Möglichkeit Perl-Blöcke zeit- und ereignisgesteuert auszuführen. Zur Beschreibung der [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erläuterungen#Ausl.C3.B6ser|'''Auslöser''']] kann die DOIF-Syntax, die Angaben in eckigen Klammern direkt in einem Perl-Ausdruck verwendet werden.
 
Das DOIF-Modul verfügt inzwischen über ein [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg '''eigenes WEB-Interface'''], mit dessen Hilfe sich in tabellarischer Darstellung jegliche Informationen visualisieren sowie FHEM-Geräte über Widgets steuern lassen.


Details zu diesem Modul finden sich derzeit nur in {{Link2Forum|Topic=23833|LinkText=diesem Forenthread}}.


== Voraussetzungen ==
== Voraussetzungen ==
Siehe Forum.
keine


== Anwendung ==
== Anwendung ==
=== Define ===
=== Define ===
Siehe Forum.
==== FHEM-Modus ====
Siehe {{Link2CmdRef|Lang=de|Anker=DOIF_}}
==== Perl-Modus ====
Siehe [[DOIF/Perl-Modus]]


=== Attribute ===
=== Attribute ===
Siehe Forum.
==== FHEM-Modus ====
Siehe {{Link2CmdRef|Lang=de|Anker=DOIF_Attribute}}
==== Perl-Modus ====
Siehe [[DOIF/Perl-Modus#Nutzbare_Attribute_im_Perl-Modus]]
 
===Kurzreferenz===
Siehe {{Link2CmdRef|Lang=de|Anker=DOIF_Kurzreferenz|Label=Kurzreferenz}}


== Anwendungsbeispiele ==
== Anwendungsbeispiele ==
Siehe Forum.
Der Modulautor hat '''im deutschen Teil''' der {{Link2CmdRef|Lang=de|Anker=DOIF}}  eine Vielzahl von einfachen und auch komplexeren Beispielen zur Nutzung von DOIF aufgenommen. Darum wird hier auf weitere Beispiele zu DOIF verzichtet. Ausführliche Code-Beispiele zu DOIF bitte gegebenenfalls als eigene Wiki-Seite unter [[:Kategorie:Code Snippets|Code Snippets]] aufnehmen.


=== On-for-timer simulieren ===
== Links ==
Die on-for-timer Funktion kann für Geräte, die das nicht von Haus aus unterstützen mit folgenden Definitionen simuliert werden:
* [[DOIF/Einsteigerleitfaden, Grundfunktionen und Erläuterungen]]
 
* [[DOIF/Tools und Fehlersuche]]
<pre>
* [[DOIF/Tipps zur leichteren Bedienung]] Erstellung, Bearbeitung, Syntaxhervorhebung, Klammerprüfung, Suchen&Ersetzen, Zeilennummerierung, uvm. (nicht nur) von DOIF
define schalter_d dummy
* [[DOIFtools]] Tools für DOIF, Eventanalyse für Alle
 
* [[DOIF/uiTable_Schnelleinstieg]]
define di_Schalter DOIF ([Bewegungsmelder] eq "motion" )  (set schalter_d on, set schalter_d off)
* [[DOIF/uiTable]]
attr di_Schalter do always
* [[Import von Code Snippets]] oder [[Raw definition]]


define di_Licht DOIF ([schalter_d] eq "on")  (set Licht on) DOELSE  (set Licht off)
=== FHEM-Modus: Weiterführende Themen und Beispiele ===
attr di_Licht wait 0:300
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren]]
</pre>
* [[DOIF/Operatorenrangfolge]]
* [[DOIF/Ein- und Ausgabe in FHEMWEB und Tablet-UI am Beispiel einer Schaltuhr]]
* [[DOIF/Mehrfachnutzung eines Tasters]]
* [[DOIF/Zeitgeber]] Wecker, Kurzzeitwecker, Tageszeitgeber
* [[DOIF/Zeitspanne zwischen zwei Terminen schalten]]
* [[DOIF/do always Alternative am Beispiel einer Rollladenautomatik]]
* [[DOIF/do_always_Alternative_am_Beispiel_einer_Batteriewarnung_via_Telegram]]
* [[DOIF/Zeitspanne im DOIF und disabledForIntervals im Vergleich]]
* [[DOIF/partielle Deaktivierung der Befehlsausführung, Zurücksetzen eines Wait-Timers mit $SELF oder IsDisabled verhindern, im Vergleich]]
* DOIF/Verwenden von sunrise / sunset in Zeitintervall im {{Link2Forum|Topic=58884|LinkText=Forenthread}}


Details dazu finden sich in {{Link2Forum|Topic=23833|Message=193660|LinkText=diesem Forenbeitrag}}.
=== Perl-Modus: Weiterführende Themen und Beispiele ===
* DOIF/Logeinträge als Trigger (Auslöser) verwenden {{Link2Forum|Topic=99203|Message=926068|LinkText=Forenthread}}
* BOTVAC (Neato, Vorwerk) und DOIF: [[BOTVAC#Alle_Maps_in_einem_Reading_anzeigen|Alle Maps in einem Reading anzeigen]] und {{Link2Forum|Topic=51713|Message=933448|LinkText=Forenthread}}


== Links ==
===Entwicklungshistorie===
121004
* {{Link2Forum|Topic=121004|LinkText=Forenthread}} neues Attribut: uiState
* {{Link2Forum|Topic=114252|LinkText=Forenthread}} neue Feature: wiederholende Ausführungstimer mit Bedingung
* {{Link2Forum|Topic=111266|LinkText=Forenthread}} neue Features: Generalisierung mit Templates
* {{Link2Forum|Topic=103401|LinkText=Forenthread}} Umstellung auf NOTIFYDEV-Filter
* {{Link2Forum|Topic=97320|LinkText=Forenthread}} Neues Feature: event_Readings
* {{Link2Forum|Topic=95759|LinkText=Forenthread}} Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
* {{Link2Forum|Topic=94728|LinkText=Forenthread}} Wochentagsteuerung
* {{Link2Forum|Topic=88291|LinkText=Forenthread}} memory leak in perl 5.24
* {{Link2Forum|Topic=87183|LinkText=Forenthread}} Intervalltimer
* {{Link2Forum|Topic=82523|LinkText=Forenthread}} checkReadingEvent per Default intern gesetzt.
* {{Link2Forum|Topic=86579|LinkText=Forenthread}} keine Timer-Wiederholungen am gleichen Tag, betrifft  Mehrfachtriggerung bei sunset, sunrise, berechnete Timer, z.B. rand() u.ä.
* {{Link2Forum|Topic=84969|LinkText=Forenthread}} neue Features: ereignisgesteuertes Perl
* {{Link2Forum|Topic=81576|LinkText=Forenthread}} neues Attribut: startup, neuer set-Befehl: checkall, neuer get-Befehl: html
* {{Link2Forum|Topic=77690|LinkText=Forenthread}} neues Attribut: uiTable - DOIF User Interface, neues Attribut: DOIF_Readings
* {{Link2Forum|Topic=71000|LinkText=Forenthread}} neue Features: Attribut myReadings
* {{Link2Forum|Topic=70624|LinkText=Forenthread}} Neue Features: Aggregationsfunktion, Filtern nach Zahl mit Nachkommastellen
* {{Link2Forum|Topic=69392|LinkText=Forenthread}} neue Features: Wochentage mit Namen, Überarbeitung für indirekte Timer
* {{Link2Forum|Topic=68705|LinkText=Forenthread}} DOIF für Perlprogrammierer (Anm.: an dieser Stelle nicht eingeführt)
* {{Link2Forum|Topic=68000|LinkText=Forenthread}} neue Features: Perlcode ohne runde Klammern und ohne Semikolon-Dopplung
* {{Link2Forum|Topic=66153|LinkText=Forenthread}} neue Features: set <DOIF_Modul> cmd_<NR>, Zeitvariablen $md $ymd
* {{Link2Forum|Topic=63375|LinkText=Forenthread}} neue Features: checkall: timer|event|all, timertrigger, timerintervall
* {{Link2Forum|Topic=58556|LinkText=Forenthread}} neue Features: Ereignisfilter, Attribut checkall, setList, readingList
* {{Link2Forum|Topic=56851|LinkText=Forenthread}} Stati, Readings in Zeitfunktionen, set enable
* {{Link2Forum|Topic=55785|LinkText=Forenthread}} neue Features: disablecondition, Stati bei Zeitfunktionen (Anm.: disablecondition nicht eingeführt)
* {{Link2Forum|Topic=51117|LinkText=Forenthread}} Möglichkeit auf passende Events zu beschränken
* {{Link2Forum|Topic=51060|LinkText=Forenthread}} Neue Features - $SELF, $self, cmd-Reading, timerevent, selftrigger ...
* {{Link2Forum|Topic=49109|LinkText=Forenthread}} DOIF als endlicher Automat (finite state maschine)
* {{Link2Forum|Topic=48925|LinkText=Forenthread}} serialisierte Timer
* {{Link2Forum|Topic=46327|LinkText=Forenthread}} neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist
* {{Link2Forum|Topic=43638|LinkText=Forenthread}} Attribut repeatcmd
* {{Link2Forum|Topic=41859|LinkText=Forenthread}} unabsichtliche Loops unterbunden
* {{Link2Forum|Topic=39070|LinkText=Forenthread}} wait als sleep Alternative
* {{Link2Forum|Topic=36889|LinkText=Forenthread}} mehrere DOIF-Zweige (Anm.: nicht eingeführt)
* {{Link2Forum|Topic=35638|LinkText=Forenthread}} neue Zeit-Features
* {{Link2Forum|Topic=35045|LinkText=Forenthread}} Zeitraster
* {{Link2Forum|Topic=34767|LinkText=Forenthread}} indirekte Zeitangaben, readingFnAttributes
* {{Link2Forum|Topic=34365|LinkText=Forenthread}} indirekte Zeitangaben
* {{Link2Forum|Topic=30847|LinkText=Forenthread}} relative Zeitangaben, Attribute: do resetwait, cmdpause, repeatsame, uvm.
* {{Link2Forum|Topic=23833|LinkText=Forenthread}} zur Entstehung dieses Moduls
* {{Link2Forum|Topic=23833|LinkText=Forenthread}} zur Entstehung dieses Moduls


<!-- (Modulkategorie wird automatisch gesetzt) -->
<!-- (Modulkategorie wird automatisch gesetzt) -->

Aktuelle Version vom 31. Dezember 2021, 17:51 Uhr

DOIF
Zweck / Funktion
Do ... if ...
Allgemein
Typ Hilfsmodul
Details
Dokumentation EN / DE
Support (Forum) Automatisierung/DOIF
Modulname 98_DOIF.pm
Ersteller Damian
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Helper doif.png (ausgesprochen: du if, übersetzt: tue wenn) ist ein universelles Modul, welches ereignis- und zeitgesteuert in Abhängigkeit definierter Bedingungen Anweisungen ausführt.

Im FHEM-Modus stellt das Modul DOIF eine eigene Benutzer-Schnittstelle zur Verfügung ohne Programmierkenntnisse in Perl unmittelbar vorauszusetzen. Mit diesem Modul ist es möglich, sowohl Ereignis- als auch Zeitsteuerung mit Hilfe logischer Abfragen miteinander zu kombinieren. Damit können komplexere Problemstellungen innerhalb eines DOIF-Moduls gelöst werden, ohne Perlcode in Kombination mit anderen Modulen programmieren zu müssen.

Im Perl-Modus bietet das Modul DOIF die Möglichkeit Perl-Blöcke zeit- und ereignisgesteuert auszuführen. Zur Beschreibung der Auslöser kann die DOIF-Syntax, die Angaben in eckigen Klammern direkt in einem Perl-Ausdruck verwendet werden.

Das DOIF-Modul verfügt inzwischen über ein eigenes WEB-Interface, mit dessen Hilfe sich in tabellarischer Darstellung jegliche Informationen visualisieren sowie FHEM-Geräte über Widgets steuern lassen.


Voraussetzungen

keine

Anwendung

Define

FHEM-Modus

Siehe commandref/DOIF_

Perl-Modus

Siehe DOIF/Perl-Modus

Attribute

FHEM-Modus

Siehe commandref/DOIF_Attribute

Perl-Modus

Siehe DOIF/Perl-Modus#Nutzbare_Attribute_im_Perl-Modus

Kurzreferenz

Siehe Kurzreferenz

Anwendungsbeispiele

Der Modulautor hat im deutschen Teil der commandref/DOIF eine Vielzahl von einfachen und auch komplexeren Beispielen zur Nutzung von DOIF aufgenommen. Darum wird hier auf weitere Beispiele zu DOIF verzichtet. Ausführliche Code-Beispiele zu DOIF bitte gegebenenfalls als eigene Wiki-Seite unter Code Snippets aufnehmen.

Links

FHEM-Modus: Weiterführende Themen und Beispiele

Perl-Modus: Weiterführende Themen und Beispiele

Entwicklungshistorie

121004

  • Forenthread neues Attribut: uiState
  • Forenthread neue Feature: wiederholende Ausführungstimer mit Bedingung
  • Forenthread neue Features: Generalisierung mit Templates
  • Forenthread Umstellung auf NOTIFYDEV-Filter
  • Forenthread Neues Feature: event_Readings
  • Forenthread Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
  • Forenthread Wochentagsteuerung
  • Forenthread memory leak in perl 5.24
  • Forenthread Intervalltimer
  • Forenthread checkReadingEvent per Default intern gesetzt.
  • Forenthread keine Timer-Wiederholungen am gleichen Tag, betrifft Mehrfachtriggerung bei sunset, sunrise, berechnete Timer, z.B. rand() u.ä.
  • Forenthread neue Features: ereignisgesteuertes Perl
  • Forenthread neues Attribut: startup, neuer set-Befehl: checkall, neuer get-Befehl: html
  • Forenthread neues Attribut: uiTable - DOIF User Interface, neues Attribut: DOIF_Readings
  • Forenthread neue Features: Attribut myReadings
  • Forenthread Neue Features: Aggregationsfunktion, Filtern nach Zahl mit Nachkommastellen
  • Forenthread neue Features: Wochentage mit Namen, Überarbeitung für indirekte Timer
  • Forenthread DOIF für Perlprogrammierer (Anm.: an dieser Stelle nicht eingeführt)
  • Forenthread neue Features: Perlcode ohne runde Klammern und ohne Semikolon-Dopplung
  • Forenthread neue Features: set <DOIF_Modul> cmd_<NR>, Zeitvariablen $md $ymd
  • Forenthread neue Features: checkall: timer|event|all, timertrigger, timerintervall
  • Forenthread neue Features: Ereignisfilter, Attribut checkall, setList, readingList
  • Forenthread Stati, Readings in Zeitfunktionen, set enable
  • Forenthread neue Features: disablecondition, Stati bei Zeitfunktionen (Anm.: disablecondition nicht eingeführt)
  • Forenthread Möglichkeit auf passende Events zu beschränken
  • Forenthread Neue Features - $SELF, $self, cmd-Reading, timerevent, selftrigger ...
  • Forenthread DOIF als endlicher Automat (finite state maschine)
  • Forenthread serialisierte Timer
  • Forenthread neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist
  • Forenthread Attribut repeatcmd
  • Forenthread unabsichtliche Loops unterbunden
  • Forenthread wait als sleep Alternative
  • Forenthread mehrere DOIF-Zweige (Anm.: nicht eingeführt)
  • Forenthread neue Zeit-Features
  • Forenthread Zeitraster
  • Forenthread indirekte Zeitangaben, readingFnAttributes
  • Forenthread indirekte Zeitangaben
  • Forenthread relative Zeitangaben, Attribute: do resetwait, cmdpause, repeatsame, uvm.
  • Forenthread zur Entstehung dieses Moduls