Warum will jeder DOIF verwenden?

Begonnen von Thorsten Pferdekaemper, 10 Februar 2017, 14:37:15

Vorheriges Thema - Nächstes Thema

Hellspawn

Dann möchte ich auch mal meinen Senf dazugeben...

ich bin ein "Anfänger"...

Heimautomatisierung ist für mich ein Hobby direkt neben "zig" anderen Dingen neben meinen Beruf als Systemadministrator.
Programmieren ist für mich persönlich nur ein... wie soll ich sagen... mittel zum Zweck und ich versuche es möglichst zu vermeiden.

FHEM mache ich nicht, weil ich PERL toll finde, sondern weil ich die Community mag.
Aber am Anfang war... (Fhem mach ich jetzt seit gut 2 Jahren) für mich nur at notify dummy und co machbar. Die Lust an Fhem sank stetig und ich experimentierte mit ioBroker, Openhab und Co rum...
Nichts davon war wirklich etwas für mich... bei dem einem war es die Community, bei dem anderen Java... und und und...

durch Zufall stolperte ich dann über DOIF...

und ich Danke Damian sehr dafür... denn ich kann mal eben schnell ein paar Bedingungen basteln die auch funktionierten... und die ich auch nachvollziehen kann...

Damit kam auch endlich wieder der Spass an FHEM zurück und auch wenn es komisch klingt... mittlerweile interessiere ich mich sogar für PERL.
Also genau der umgekehrte Fall...

Um es mal kurz zu machen :
DOIF ist für mich als Programmierhasser und FHEM-Neuling genau das richtige... Die Doku ist klasse und ich konnte damit fast 90% meiner Fälle abdecken... der Rest kommt wie immer aus diesem wirklich erstklassigem Forum...

Und wieder einmal ziehe ich meinen Hut vor all den Entwicklern und Hilfsbereiten Usern hier.

Gruß
Carsten

KölnSolar

ZitatUnd wenn ich eine Lampe einschalte, dann will ich sie meistens auch wieder ausschalten, warum sollte man das nicht in einem Modul tun. Den Fall, dass man eine Lampe einschaltet und nicht wieder ausschaltet wird es wohl kaum geben.
stimmt vermutlich für die meisten Fälle. Das kann man dann aber auch mit at,notify und den set extensions lösen  ;)
ZitatViele Wege führen zur Lösung (allgemeingültig für die Informatik, gerade in FHEM besonders gültig) und Eleganz oder Effizienz liegen manchmal halt im Auge des Betrachters.

Ist aber eigentlich auch an der  ursprüngliche Fragestellung vorbei. Ich habe das mal versucht aus den unterschiedlichen konstruktiven Beiträgen so zusammenzufassen:

Eine automatisierte Aktion, ausgelöst durch ein Ereignis oder einen Zeitpunkt, ist durch ein notify bzw. at für Anfänger einfach umzusetzen/verstehen. Kann/Will man in Perl programmieren, dann können auch komplexere Aufgabenstellungen problemlos gelöst werden. Für Anwender, die die Programmierung scheuen, ist DOIF trotz dessen Komplexität besser/einfacher(der einzige Weg ?), weil intuitiver einsetzbar bei komplexen Aufgabenstellungen.

Ich hoffe auf konstruktive und nicht ideologische Kritik.....und schließe mich dem Schlusssatz von Carsten uneingeschränkt an.
Schönen Abend Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Damian

#62
Zitat von: KölnSolar am 12 Februar 2017, 20:46:24
stimmt vermutlich für die meisten Fälle. Das kann man dann aber auch mit at,notify und den set extensions lösen  ;)

Ein einfaches Beispiel: Lampe einschalten um 8:00 und ausschalten um 10:00, wie machst du das mit set extensions?
Zitat
Eine automatisierte Aktion, ausgelöst durch ein Ereignis oder einen Zeitpunkt, ist durch ein notify bzw. at für Anfänger einfach umzusetzen/verstehen.

notify device:.on.* set bla on   gegenüber  DOIF ([device:"on"]) (set bla on)

wenn du die Anzahl der Klammern meinst, dann gebe ich dir Recht. Allerdings stolpern gerade Anfänger bereits am Punkt vor on beim notify. Jetzt wird bereits Zeit sich mit Regex zu beschäftigen.

at *08:00 set bla on   gegenüber DOIF ([08:00]) (set bla on)

hier muss ich gegenüber einem notify eine neue Syntax beim at lernen. Zusätzlich gibt es hier eine Stolperfalle: Stern, den die Anfänger gerne weglassen, zumindest sollte man in der Commandref nachlesen wozu dieser überhaupt gut ist.

DOIF Syntax haben sie inzwischen beim ersten Beispiel gelernt, jetzt müssen sie nur noch lernen, dass man Ereignisse durch Zeiten tauschen kann.

Ich habe schon viele komplexe Sachen gesehen, hier kann ich aber keine erkennen. Nur weil etwas mächtig ist, muss es nicht kompliziert sein, das wird hier oft in einen Topf geworfen.

Welche Syntax nun intuitiver ist, sollen an der Stelle Anfänger beurteilen. Und dass man mit DOIF genauso gut ausgelagerte Funktionen in myUtils aufrufen kann, brauche ich wohl nicht zu erwähnen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sidey

Hallöchen,

ich versuche mal auf die Eingangsfrage zu antworten.

Vorweg:
Ich hatte einige dummy, at und notify Definitionen. If  Anweisungen in Perl waren mir zu umständlich.

Dummys hatte ich am Anfang recht schnell verstanden, aber als jemand der programmieren kann war mir ein notify immer sehr suspekt. Gut, irgendwann kam ich dann dahinter, dass es in Fhem Events gibt, auf die man ein notify auslöst.
at verstand ich als Anwender recht schnell, einfach eine Uhrzeit eingeben und los geht es.


Gesucht hatte ich Eingangs eigentlich nur eine Option eine IF Abfrage in FHEM einzubauen, aber keine einfache gefunden.  :(
Mittlerweile habe ich meine notify, at und dummy Definitionen in DOIF Definitionen überführt. Die liefen zwar auch nicht immer auf Anhieb, da die Syntax und das Thema mit den Attributen durchaus etwas verzwickt ist. Komplexer als mehrere dummys und notifys zu erzeugen ist das in meinen Augen auch nicht.


Für mich ist DOIF halt am ehesten verständlich, was passiert. Alle Bedingungen sind in der Definition enthalten. Die Readings finden sich gute Hinweise, welche Werte vorliegen und welche Bedingung wahr ist. Neue Anwender wollen vermutlich so vorgehen, wenn Temperatur hoch und Rolladen unten, dann Rolladen runter fahren.
Oder, wenn die Sonne aufgeht, dann fahre mal die Rolläden nacheinander hoch. 

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

KölnSolar

ZitatEin einfaches Beispiel: Lampe einschalten um 8:00 und ausschalten um 10:00, wie machst du das mit set extensions?
at 08:00:00 set Lampe on-for-timer 7200
ZitatAllerdings stolpern gerade Anfänger bereits am Punkt vor on beim notify. Jetzt wird bereits Zeit sich mit Regex zu beschäftigen.
Da geb ich Dir Recht. Aber muss ich mich damit nicht wohl oder übel sowieso wegen FileLog etc. auseinandersetzen ?
Zitathier muss ich gegenüber einem notify eine neue Syntax beim at lernen.
Jetzt übertreibst Du. hh:mm ist doch auch beim DOIF "neu" :-\ und der * ist für Wiederholungen. Das sind im DOIF die eckigen Klammern ? Dann auch neu.
ZitatIch habe schon viele komplexe Sachen gesehen, hier kann ich aber keine erkennen. Nur weil etwas mächtig ist, muss es nicht kompliziert sein, das wird hier oft in einen Topf geworfen.
Bin mir nicht sicher, ob ich Dich richtig verstanden hab. Du meinst Deine Beispiele ? Die sind natürlich nicht komplex. Aber der Anfänger wird erst einmal von der mächtigen Doku/Funktionsumfang  des DOIF "erschlagen". Und darin sehen ich und andere eben den Nachteil für den Anfänger.
ZitatWelche Syntax nun intuitiver ist, sollen an der Stelle Anfänger beurteilen.
Eben nicht. Genau darum ging es Thorsten doch. Wir haben quasi 2 (gute) Wege im Funktionsumfang. Und nun kommen die Anfänger mit einer Aufgabenstellung. Dem 1. antworte ich mit einem simplen at. Du dem 2. mit einem simplen DOIF. Und dann liest der 3. die beiden Lösungen und stellt uns die Frage, was er nun machen soll und was Lösung 1. u. 2. jeweils für Vor- u. Nachteile haben. Da wär es ja schöner, wenn wir zu DER einheitlichen Vorgehensweise, was die Hilfestellung anbelangt, kämen. Ist aber vielleicht zu idealistisch gedacht :-\
ZitatUnd dass man mit DOIF genauso gut ausgelagerte Funktionen in myUtils aufrufen kann, brauche ich wohl nicht zu erwähnen.
Da Du es aber machst, interpretier ich das mal als Reaktion auf mein "programmieren können/wollen". Das sollte aber nur die Meinungsäußerungen der DOIF-Befürworter wiederspiegeln, die ich so verstanden hatte. Nicht, dass das mit DOIF nicht ginge.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

rudolfkoenig

ZitatEin einfaches Beispiel: Lampe einschalten um 8:00 und ausschalten um 10:00, wie machst du das mit set extensions?
at 08:00 set Lampe on-till 10:00
So kryptisch finde ich das auch nicht. Und man hat 6 mal Klammer gespart.




KölnSolar

@Rudolf: Sorry für meine nur zweitklassige Lösung  ;)

@ Sydey: Mir ging es in den Anfängen ähnlich.  ;D Hab dann auch kurz DOIF für mich entdeckt. Mittlerweile hatte ich mich aber so in Perl mit { ; " ' . * :D eingearbeitet, dass ich komplexere Aufgabenstellungen schnell umsetzen konnte und der Aufwand mich in DOIF einzulesen höher schien.

Du erwähnst, dass Dir events bzw. notify suspekt erschienen. Aus der betriebswirtschaftlichen IT kannte ich das auch nicht und tat mich entsprechend schwer. Nur, wie ich oben schon zu Regexp schrieb: Unser geliebtes FHEM baut auf Perl, RegExp, events... auf. Und das betrifft ja nicht nur den kleinen Teil der Automatisierung. Empfehlen wir Anfängern die Basis(zumindest Regexp,events) zu lernen oder die Basis mit Tools wie DOIF zu umgehen, weil intuitiver, einfacher, was auch immer. Früher oder später fällt uns das doch wieder auf die Füße  :'( Oder kommt man ohne dieses Wissen/Verständnis aus und ich hab da nur ne Denkblockade  :-[
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Sidey

Leider kommt man ohne regexp nicht aus. Anwenderfreundlich ist das aber leider nicht. Für mich ist es einfacher nur DOIF zu erlernen und nicht noch sequence, dummy, notify usw.

Letztendlich sollten wir den Anfängern nicht vorschreiben, was sie verwenden müssen.
Es gibt vermutlich Menschen, denen ist die grobe Funktionsweise eines DOIF verständlicher und anderen halt notify, sequency, dummy, at usw.

Dass es überhaupt so viele Wege und unterschiedliche Syntaxe in FHEM gibt, liegt ja daran, dass uns Entwicklern die Syntax nicht streng vorgegeben wird, was natürlich auch Freiheiten zulässt.
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Damian

Zitat von: rudolfkoenig am 12 Februar 2017, 23:10:41
at 08:00 set Lampe on-till 10:00
So kryptisch finde ich das auch nicht. Und man hat 6 mal Klammer gespart.

natürlich nicht. Unterstützt denn jedes Device on-till ?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

Alle die SetExtensions verwenden, und ueber ein on und ein off verfuegen.
Meine Module tun das. Auch dummy :)

KölnSolar

#70
auch TRX_LIGHT und IT
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Damian

Zitat von: rudolfkoenig am 12 Februar 2017, 23:35:02
Alle die SetExtensions verwenden, und ueber ein on und ein off verfuegen.
Meine Module tun das. Auch dummy :)

immerhin, zwei verschiedene Funktionsaufrufe wären dann aber schon problematischer oder irre ich mich?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

KölnSolar

Meinst Du zu einer anderen Uhrzeit schalten ? Das wäre dann ein neues at. Aus Sicht der Zeit betrachtet ja auch etwas anderes, also z.B. morgens und abends.
Oder meinst Du zur selben Zeit verschiedene Aktionen ? Die müssen ja nur durch ; getrennt aufgelistet werden.

Oder Du meinst etwas komplexeres. Dafür nimmt man dann Perl.  ;D Und da komme ich zurück zum Thema: Welche komplexen Szenarien haben Anfänger, die über zuvor Beschriebenes hinausgehen ? Ich war Stolz wie Oskar als mein CUL meine Rolläden zu unterschiedlichen Zeiten in Abhängigkeit von Sonnenauf und -untergang steuerte, meine Fritte mir bei Anruf den Tv stumm schaltete und den Anrufer auf dem TV anzeigte..... Alles einfache notifys und ats.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Damian

Ich glaube man will mich nicht verstehen.

Gut, dass ich nicht eine Lampe hell und dunkel schalten wollte, gut dass ich nicht mehr als zwei Zeitschaltpunkte schalten wollte ...

aber ich weiß: man kann immer ein komplexes Problem auslagern oder in mehrere Definitionen aufteilen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Thorsten Pferdekaemper

Zitat von: KölnSolar am 12 Februar 2017, 23:26:56Du erwähnst, dass Dir events bzw. notify suspekt erschienen. Aus der betriebswirtschaftlichen IT kannte ich das auch nicht und tat mich entsprechend schwer.
Was ist mit Workflow? ...auch BTEs, BAdIs und andere Enhancement-Techniken kann man als Event betrachten. Im Workflow gibt's das sogar als Begriff.
Gruß,
   Thorsten
FUIP