Warum will jeder DOIF verwenden?

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

Vorheriges Thema - Nächstes Thema

CoolTux

Zitat von: maci am 20 November 2017, 07:25:46
Notify ist eigentlich auch eine IF Abfrage, nur denkt selten jemand darauf.
Das notify macht ja auch nur etwas, wenn eine Bedingung erfüllt ist.

Entschuldige, aber das kann ich unmöglich in einem Anfängerforum so stehen lassen denn es ist schlicht falsch.
Ein notify reagiert auf ein Ereignis (Event). Der Auslöser (Trigger) dafür wird als RegEx festgelegt. Es erfolgt also keinerlei Bedingungsabfrage. Passt das Event mit der festgelegten Trigger RegEx über ein wird es aus geführt. Es werden dann entsprechende Befehle verarbeitet. Im normal Fall FHEM Befehle. set Lampe1 on, oder set Klima off.
Es besteht die Möglichkeit Notifys durch Perlanweisungen komplexer zu machen. Dazu geht man innerhalb eines Notify von FHEM in die Perlebene. Danach kann man mittels Perlcode zum Beispiel einfache Abfragen machen.

define testNotifyLampe1 notify Lampe1.(on|off) { fhem("set Lampe2 " ($EVENT eq 'on' ? 'on' : 'off')) }

Und so weiter


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

maci

Habe meinen Beitrag überarbeitet!
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

rudolfkoenig

ZitatWenn es in FHEM in der Benutzeroberfläche eine Möglichkeit gäbe durch wenige Klicks Eventänderungen mit Aktionen zu verknüpfen und dafür Notifiy verwendet werden würdem diese wahrscheinlich auch viele in der Zukunft weiterhin nutzen. 

Event Monitor, Event markieren, erst Create/Modify device, dann OK druecken. Man landet in der Detailansicht der gerade angelegten notify, hier unter "Change the executed command" Ziel und Befehl aussuchen, und modify klicken.

maci

Zitat von: Wernieman am 20 November 2017, 07:55:21

Es verleitet dazu, alles in einem Statement zu erledigen, was bekanntermaßen schlechter Programmierstiel ist. Leider "fallen" vor allem Anfänger darauf rein, genau so zu arbeiten. Wer weiß denn nach 1 Monat noch, was ein 10 Zeilen-Statement zu macht?

Genau das gleiche kann man mit notify erledigen. Man brauicht eventuell dazu mehrere und Dummys, dafür ist es aber einfacher zu lesen und vor allem zu debuggen.

Das ist ganz richtig. Ich habe diesen Fehler am Anfang auch gemacht.
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

amenomade

Zitat von: Wernieman am 20 November 2017, 07:55:21Wer weiß denn nach 1 Monat noch, was ein 10 Zeilen-Statement zu macht?
Antwort: Derjeniger, der genauso wie beim Perl Code sein Ding ein bisschen kommentiert/dokumentiert! ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

ZitatFür Einsteiger wäre es doch deutlich leichter wenn man praxisnahe Beispiele nehmen würde. Philips Hue oder ähnliches was heute fast jeder Einsteiger verwendet. Auch das finde ich bei Home Assistant wieder etwas besser gelöst. Dort worden schon direkt nach der Installation "gängige" Geräte wie die Hue Bridge erkannt und man hat direkt etwas zum "ausprobieren" während man hier an Dinge herangeführt wird die für viele überhaupt nicht praxisnah sind.

Da gibt es in der Installation ein schönes "fhem.cfg.demo". Wer zuerst damit fhem startet, kann schon rumspielen, und einige Sachen probieren / verstehen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Thyraz

Zitat von: CoolTux am 20 November 2017, 08:52:55
Entschuldige, aber das kann ich unmöglich in einem Anfängerforum so stehen lassen denn es ist schlicht falsch.
Ein notify reagiert auf ein Ereignis (Event). Der Auslöser (Trigger) dafür wird als RegEx festgelegt. Es erfolgt also keinerlei Bedingungsabfrage.

Naja, was ist denn das Matchen auf eine Regex, wenn es keine Bedingungsabfrage ist? ;)

In Pesudo-Code würde man das ja wohl so schreiben:


if (EventString matches Regex) {
<execute code>
}


Events sind ja nichts anders als Device, Reading, Value Strings.
Und im Event Loop wird nun unter anderem für jedes Notify geprüft ob für eine Ausführung des Codes die Bedingung erfüllt ist, oder nicht (Regex matched, oder matched nicht).
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

CoolTux

Zitat von: Thyraz am 20 November 2017, 10:31:16
Events sind ja nichts anders als Device, Reading, Value Strings.
Und im Event Loop wird nun unter anderem für jedes Notify geprüft ob für eine Ausführung des Codes die Bedingung erfüllt ist, oder nicht (Regex matched, oder matched nicht).

Das hier nun aus zu diskutieren würde etwas weit gehen.
Ich kann Dir aber auch einen Event erzeugen der einfach nur "Im Himmel ist Jahrmarkt" in Deinem Eventmonitor zaubert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thyraz

Was nichts daran ändert, dass ein Notify welches darauf Triggern würde ebenfalls eine Bedingungsabfrage macht. ;)
Selbst Regex an sich ist ja eine Art if: If string starts with xyz oder if string contains only numbers usw.
Aber ja, diese Diskussion ist noch Unsinniger als das Thema an sich. :P

Ich konnte nur diesen "das kann ich unmöglich in einem Anfängerforum so stehen" Satz unmöglich in einem Anfängerforum stehen lassen. ;D

Jetzt hab ich aber genug getrollt und bin wieder raus.  :)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

marvin78

Du kannst es drehen und wenden, wie du möchtest aber ein notify ist nicht einfach eine Bedingung. Bitte beschäftige dich damit, was Event im Kontext von FHEM bedeutet.

Ich verstehe die Diskussion ohnehin nicht. Wer meint DOIF könnte notify auch nur Ansatzweise ersetzen, hat es schlicht nicht verstanden. Es hat beides auf gewisse Art seine Daseinsberechtigung. Ich brauche in meinem System kein einziges DOIF um viele Dinge auf sehr hohem Niveau zu automatisieren und behaupte, dass es auch noch wesentlich leichter zu debuggen ist und mit viel weniger Code auskommt. Wenn aber jemand bestimmte Dinge mit DOIF machen möchte, soll er. Es ist ja nun mal da. [/size][size=78%] [/size]

eisman

Zitat von: marvin78 am 20 November 2017, 11:24:29
Du kannst es drehen und wenden, wie du möchtest aber ein notify ist nicht einfach eine Bedingung. Bitte beschäftige dich damit, was Event im Kontext von FHEM bedeutet.

Ich verstehe die Diskussion ohnehin nicht. Wer meint DOIF könnte notify auch nur Ansatzweise ersetzen, hat es schlicht nicht verstanden. Es hat beides auf gewisse Art seine Daseinsberechtigung. Ich brauche in meinem System kein einziges DOIF um viele Dinge auf sehr hohem Niveau zu automatisieren und behaupte, dass es auch noch wesentlich leichter zu debuggen ist und mit viel weniger Code auskommt. Wenn aber jemand bestimmte Dinge mit DOIF machen möchte, soll er. Es ist ja nun mal da. [/size][size=78%] [/size]

muss ich sagen "stimmt", warum man überhaupt solche Diskussionen führt, Ich muss auch sagen, beides hilft und man kann mit beiden zum erfolg kommen. Ich nutze auch beides in meiner Installation,große abfragen mach ich lieber nicht mit DOIF, weil mir hier die Übersicht fehlt,
aber Windrichtung oder abfrage mit Eingabe oder Zeit mache ich schon in DOIF.

vielleicht sollte man die Energie für andere Sachen nutzen.

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

rudolfkoenig

ZitatIch verstehe die Diskussion ohnehin nicht.
Das haben hier viele nicht. Es geht nicht darum, was besser ist, sondern wieso ploetzlich so viele Leute auf die Idee gekommen sind, DOIF zu verwenden, obwohl es fuer uns (die mit laenger mit FHEM arbeiten) nicht sichtbar, z.Bsp. im Einsteigerhandbuch, beworben wurde. Meine Theorie: die Leute suchen im Netz nach Rezepten, und man findet welche mit DOIF.

marvin78

Ich meinte die zuletzt entstandene Diskussion, die sich darum drehte, ob notify überflüssig ist. Die Ausgangsfrage hat damit ja nichts zu tun. Die wurde selbst von mir verstanden.

Wernieman

Viele verwenden DOIF, weil im Anfängerbereich bei jeder Frage eine Lösung per DOIF präsentiert wird. Auch wenn es nicht immer sinnvoll ist (Keine Kritik an DOIF!)

Und zu dem Argument: "Dann ist alles in einem"
Genau das ist der Nachteil: Habe hier schon DOIF mit 10 ELSEIF gesehen, ob das jemand nach 1 Monat noch 100% versteht  ist fraglich. Debuggen dann praktisch unmöglich.

Leider wird solcher Code (nicht nur DOIF und fhem) gerne produziert. Habe es schon in jeder (mir bekannten) Programmiersprache gesehen.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Pfriemler

Zitat von: Wernieman am 20 November 2017, 12:17:59
Genau das ist der Nachteil: Habe hier schon DOIF mit 10 ELSEIF gesehen, ob das jemand nach 1 Monat noch 100% versteht  ist fraglich. Debuggen dann
Du wiederholst Dich (heute früh erst). Hast Du mein Posting gelesen? Und amenomades Tipp bezüglich der Dokumentation? Genau so mache ich das nämlich, und seither habe ich überhaupt keine Probleme mehr zu verstehen, was ich vor einem Jahr warum und wie gelöst habe. Und ich habe sogar ein DOIF mit fast 20 DOELSEIF: nämlich jenes, welches die IR-Codes für meine Unterhaltungselektronik von "YamahaPowerOn" u.ä. ans Interface schickt. Alle Befehle auf einen Blick, mit direkter Vegleichsmöglichkeit, copy&paste für Erweiterungen usw. Was da an 16 notifys übersichtlicher sein soll ... ?

ZitatViele verwenden DOIF, weil im Anfängerbereich bei jeder Frage eine Lösung per DOIF präsentiert wird
Letzteres mag sein, aber dafür gibt es bestimmt Gründe, und das liegt vermutlich nicht daran, dass die Helfer DOIF bevorzugen, sondern vielleicht daran dass DOIF vom Fleck weg verständlicher wirkt auf Laien. Es ist nicht immer sinnvoll, das unterschreibe ich.

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."