DOIF: Unterschied zwischen den Versionen

Aus FHEMWiki
(→‎Perl-Modus: Link ins Wiki statt Commandref)
 
(73 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 6: Zeile 6:
|ModOwner=Damian}}
|ModOwner=Damian}}


[[DOIF]] ist ein universelles Modul, welches sowohl ereignis- als auch zeitgesteuert arbeitet. Es vereinigt die Funktionalität eines [[notify]]-, [[at]]-, [[watchdog]]-Befehls in Kombination mit logischen Abfragen unter einem Dach. Damit können insb. komplexere Problemstellungen innerhalb eines DOIF-Moduls gelöst werden, die sonst nur mit Hilfe einzelner Module an mehreren Stellen in FHEM vorgenommen werden müssten. Es ermöglicht, Aktionen ("do") unter bestimmten Bedingungen ("if") auszuführen. Bedingungen umfasst auch Konstrukte wie "wenn Zustand x 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.
 


== Voraussetzungen ==
== Voraussetzungen ==
Zeile 13: Zeile 20:
== Anwendung ==
== Anwendung ==
=== Define ===
=== Define ===
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF Define]
==== FHEM-Modus ====
Siehe {{Link2CmdRef|Lang=de|Anker=DOIF_}}
==== Perl-Modus ====
Siehe [[DOIF/Perl-Modus]]


=== Attribute ===
=== Attribute ===
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Attribute Attribute]
==== FHEM-Modus ====
Siehe {{Link2CmdRef|Lang=de|Anker=DOIF_Attribute}}
==== Perl-Modus ====
Siehe [[DOIF/Perl-Modus#Nutzbare_Attribute_im_Perl-Modus]]


===Kurzreferenz===
===Kurzreferenz===
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Kurzreferenz Kurzreferenz]
Siehe {{Link2CmdRef|Lang=de|Anker=DOIF_Kurzreferenz|Label=Kurzreferenz}}
 


== Anwendungsbeispiele ==
== Anwendungsbeispiele ==
Der Modulautor hat im deutschen Teil der [http://fhem.de/commandref_DE.html#DOIF Commandref] 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.
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.


== Links ==
== Links ==
* [[DOIF/Einsteigerleitfaden, Grundfunktionen und Erläuterungen]]
* [[DOIF/Tools und Fehlersuche]]
* [[DOIF/Tools und Fehlersuche]]
* [[DOIF/Tipps zur leichteren Bedienung]] Erstellung, Bearbeitung, Syntaxhervorhebung, Klammerprüfung, Suchen&Ersetzen, uvm. (nicht nur) von DOIF
* [[DOIF/Tipps zur leichteren Bedienung]] Erstellung, Bearbeitung, Syntaxhervorhebung, Klammerprüfung, Suchen&Ersetzen, Zeilennummerierung, uvm. (nicht nur) von DOIF
* [[DOIF/Import von Code Snippets]]
* [[DOIFtools]] Tools für DOIF, Eventanalyse für Alle
* [[DOIF/uiTable_Schnelleinstieg]]
* [[DOIF/uiTable]]
* [[Import von Code Snippets]] oder [[Raw definition]]
 
=== FHEM-Modus: Weiterführende Themen und Beispiele ===
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren]]
* [[DOIF/Operatorenrangfolge]]
* [[DOIF/Operatorenrangfolge]]
* [[DOIF/Ein- und Ausgabe in FHEMWEB und Tablet-UI am Beispiel einer Schaltuhr]]
* [[DOIF/Ein- und Ausgabe in FHEMWEB und Tablet-UI am Beispiel einer Schaltuhr]]
* [[DOIF/Mehrfachnutzung eines Tasters]]
* [[DOIF/Mehrfachnutzung eines Tasters]]
* [[DOIF/Zeitgeber]]
* [[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}}
 
=== 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}}


===Entwicklungshistorie===
===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=58556|LinkText=Forenthread}} neue Features: Ereignisfilter, Attribut checkall, setList, readingList
* {{Link2Forum|Topic=56851|LinkText=Forenthread}} Stati, Readings in Zeitfunktionen, set enable
* {{Link2Forum|Topic=56851|LinkText=Forenthread}} Stati, Readings in Zeitfunktionen, set enable
* {{Link2Forum|Topic=55785|LinkText=Forenthread}} neue Features: disablecondition, Stati bei Zeitfunktionen
* {{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=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=51060|LinkText=Forenthread}} Neue Features - $SELF, $self, cmd-Reading, timerevent, selftrigger ...
Zeile 46: Zeile 97:
* {{Link2Forum|Topic=41859|LinkText=Forenthread}} unabsichtliche Loops unterbunden
* {{Link2Forum|Topic=41859|LinkText=Forenthread}} unabsichtliche Loops unterbunden
* {{Link2Forum|Topic=39070|LinkText=Forenthread}} wait als sleep Alternative
* {{Link2Forum|Topic=39070|LinkText=Forenthread}} wait als sleep Alternative
* {{Link2Forum|Topic=36889|LinkText=Forenthread}} mehrere DOIF-Zweige (Anm. nicht eingeführt)
* {{Link2Forum|Topic=36889|LinkText=Forenthread}} mehrere DOIF-Zweige (Anm.: nicht eingeführt)
* {{Link2Forum|Topic=35638|LinkText=Forenthread}} neue Zeit-Features
* {{Link2Forum|Topic=35638|LinkText=Forenthread}} neue Zeit-Features
* {{Link2Forum|Topic=35045|LinkText=Forenthread}} Zeitraster
* {{Link2Forum|Topic=35045|LinkText=Forenthread}} Zeitraster
* {{Link2Forum|Topic=34767|LinkText=Forenthread}} indirekten Zeitangaben, readingFnAttributes
* {{Link2Forum|Topic=34767|LinkText=Forenthread}} indirekte Zeitangaben, readingFnAttributes
* {{Link2Forum|Topic=34365|LinkText=Forenthread}} indirekten Zeitangaben
* {{Link2Forum|Topic=34365|LinkText=Forenthread}} indirekte Zeitangaben
* {{Link2Forum|Topic=30847|LinkText=Forenthread}} relative Zeitangaben, Attribute: do resetwait, cmdpause, repeatsame, uvm.
* {{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