neuer FHEM-Befehl IF

Begonnen von Damian, 25 Dezember 2013, 23:50:06

Vorheriges Thema - Nächstes Thema

Damian

Liebe FHEMer,

ich habe mich immer schon daran gestört, dass FHEM keinen if-Befehl hat. Stattdessen werden umständliche Klimmzüge mit Funktionsaufrufen getätigt, die den Code unnötig verkomplizieren.

Ich habe einen FHEM-IF programmiert, der sich im Prinzip, wie Perl-if verhält, allerdings das häufig benötigte Auslesen der Readings unterstützt.

Edit:

IF ist nun ein Bestandteil von FHEM und kommt per FHEM-Update ins Haus.

Doku zu IF: http://fhem.de/commandref_DE.html#IF

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

det.

Hallo Damian,
Das klingt nach einem sehr willkommenen Baustein in der FHEM Welt, zu dem mir spontan jede Menge Einsatzplätze in meiner FHEM.cfg einfallen.
LG
det.

der-Lolo

Hallo Damian,
Ja das klingt sehr gut - würden bestimmt viele gerne nutzen...
Aber hatte André nicht kürzlich so etwas umgesetzt?

Blockmove

Sehr gute Idee  :)

Als Einsteiger hat mich das fehlende IF schon sehr gestört.
Der Umweg über Funktionen ist natürlich gangbar, aber ein IF...THEN...ELSE ist einfach "freundlicher"

Gruß
Dieter

fh168

ich bin auch dafür, IF / ELSE hat mir auch schon einige Nerven gekostet.
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

arnoL

und wo kann man das nu downloaden?

Gruß
Arno

Damian

Zitat von: arnoL am 26 Dezember 2013, 22:59:40
und wo kann man das nu downloaden?
noch nirgends  ;)

Ich bin noch dabei den else-Fall einzubauen.

Da offenbar ein reges Interesse besteht, werde ich den Patch hier zum Testen posten.

Da es sich um einen "echten" FHEM-Befehl handelt, lässt sich dafür kein neues Modul schreiben, stattdessen muss fhem.pl angepasst werden.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

#7
Zitatstattdessen muss fhem.pl angepasst werden.

Falsch, siehe jsonlist, xmllist, update, backup, usw.

P.S.: ich weiss nicht genau, ob ich mich ueber dieses Modul freuen oder aergern soll.
- freuen: es vereinfacht manches fuer Anfaenger, und es ermoeglich per Frontend einfache Programme zusammenzuclicken.
- aergern: es verwirrt Anfaenger (perl if oder FHEM if, und damit noch abstrusere "Anfaenger-Erfindungen" als bisher), und faengt an eine zweite Programmiersprache zu definieren (die Forderung nach Schleife usw kommt bestimmt noch), was sicher nie an die Flexibilitaet/Maechtigkeit von perl rankommt, von Doku ganz zu schweigen. Der Benutzer lernt etwas, was er sonst nicht verwenden kann.

Wie gesagt, ich bin unentschlossen, und beobachte das erstmal.

Blockmove

@Rudolf:

Die "Gefahr" einer 2. Programiersprache besteht natürlich.
Allerdings sind teils einfache logische Verknüpfungen mit Perl für einen Anfänger nicht gerade leicht.
Wenn man das Forum liest, dann stösst man täglich darauf.
Vielleicht wäre es nicht die schlechteste Idee wirklich eine fhem Programmiersprache einzuführen.
Vom Aufbau ähnlich vielleicht wie SCL oder ST aus der SPS-Welt...

Gruß
Dieter

Damian

Zitat von: rudolfkoenig am 27 Dezember 2013, 00:22:50
Falsch, siehe jsonlist, xmllist, update, backup, usw.

um so besser, dann kann man den Code auslagern.

Zitat
P.S.: ich weiss nicht genau, ob ich mich ueber dieses Modul freuen oder aergern soll.
- freuen: es vereinfacht manches fuer Anfaenger, und es ermoeglich per Frontend einfache Programme zusammenzuclicken.
- aergern: es verwirrt Anfaenger (perl if oder FHEM if, und damit noch abstrusere "Anfaenger-Erfindungen" als bisher), und faengt an eine zweite Programmiersprache zu definieren (die Forderung nach Schleife usw kommt bestimmt noch), was sicher nie an die Flexibilitaet/Maechtigkeit von perl rankommt, von Doku ganz zu schweigen. Der Benutzer lernt etwas, was er sonst nicht verwenden kann.

Wie gesagt, ich bin unentschlossen, und beobachte das erstmal.

Man könnte es auch anders nennen, um es von perl if zu unterscheiden. if - else ist jedoch den meisten eingängig, da es in den meisten Programmiersprachen vorkommt und es ist keineswegs eine Erfindung von Perl. Deine Bedenken sind dennoch berechtigt.

Ich bin noch nicht fertig, aber wenn du die ca. 70 Zeilen Code siehst (du wirst wahrscheinlich mit deinen Perlkenntnissen mit 30 auskommen  :) ) , dann wirst du sehen, dass es nichts anderes als ein Aufruf von perl-if selbst ist, mit kompletter Mächtigkeit von Perl (inklusive Rekursion) - nur etwas FHEM-freundlicher.

Und ob es die Welt braucht oder nicht - will ich nicht entscheiden, deswegen habe ich diesen Thread angefangen, um die allgemeine Meinung einzufangen und da bin ich mit meiner Meinung offenbar nicht alleine.

Gruß

Damian




Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Invers

Mich begeistert die Möglichkeit. Ich würde es lieber heute nutzen, als erst morgen. Ich kann natürlich in keiner Weise beurteilen, ob es klug oder unklug ist, eine Art zweite Programmiermöglichkeit einzuführen, aber im Interesse der weiteren Verbreitung von FHEM denke ich, dass solche Konstrukte die Handhabbarkeit und somit die Akzeptanz bei Anfängern deutlich erhöhen könnten.
Natürlich kann man sich in jede Programmiersprache einarbeiten, wenn man einigermassen begabt ist. Aber dafür braucht man Zeit und Engagement. Nicht jeder will das investieren, um einige Steckdosen in Abhängigkeit irgendwelcher Bedingungen zu schalten. Ich habe mit drei Steckdosen angefangen und das fiel mir mit meinen Visual-Basic-Kenntnissen nicht leicht.
Und ich denke es stimmt: Über kurz oder lang werden sicher Rufe nach Schleifen und anderen VB-Befehlen folgen. Perl werde ich wohl nicht so bald so gut verstehen, wie vb und vba, welches die breite Masse mit Programmierkenntnissen eher beherrscht.
Aber, wie gesagt, ist das nur meine derzeitige, persönliche Ansicht. Für mich gesehen ist das eine Tolle Idee, die ich sehr gerne nutzen würde.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

hexenmeister

Die Möglichkeit, eine Bedingungen in Form "wenn dies ... mache das ..." zu formulieren, ist sehr verlockend. Sie entspricht wohl viel eher der 'natürlichen Denkweise'. Allerdings verstehe ich auch die Bedenken dagegen.
Ein Vergleich mit einer Programmiersprache wie VB ist nicht wirklich zutreffend. Dort wird die Anweisung gelesen und auch gleich ausgeführt. In FHEM muss diese quasi für die Zukunft 'gemerkt' werden, denn es ist ja nicht bekannt, wann und ob die angegebene Bedingung erfüllt sein wird. Also muss immer wieder überprüft werden, ob dies gerade jetzt der Fall ist. Das kann entweder alle X Minuten (Sekunden?) stattfinden, oder als Reaktion auf bestimmte Ereignisse. Da die Bedingung scheinbar sehr frei formulierbar ist, müssen wohl alle möglichen Ereignisse überprüft werden. Und hier stellt sich mir die Frage: wie sieht es dann mit der Performance aus? Denn (im Unterschied z.B. zu notify) muss die if-Bedingung sehr oft umsonst ausgeführt werden. Vor allem für die Anfänger sehe ich hier die Gefahr, durch eine unglücklich formulierte Anweisung den ganzen Server 'lahm' zu legen (wahrscheinlich ohne sich dann der Ursache überhaupt bewusst zu sein). Bei einer schmalbrüstiger Hardware (FritzBox) ist das ein wichtiger Punkt.

Wenn ich mit dieser Überlegung falsch liege und hier gar kein Performanceproblem besteht, würde ich mich auf diese Möglichkeit sehr freuen.

Grüße,

Alexander

Rince

Ich würde mich darüber freuen.

Gerade das Rudolf, was du mit "zusammenklicken" bezeichnest, empfinde ich als Schlüsselfähigkeit.
In (ferner) Zukunft vielleicht sogar grafisch.

Ich vergleiche es jetzt einfach mit dem ISO/OSI 7 Schichtenmodell.

Wenn für das Wunschziel Layer 7 (grafisches Programmieren) eine Layer vor der Perl-Layer praktisch oder gar nötig ist, warum nicht?

Letztlich ist eine Programmiersprache,  und ich denke mit dieser Aussage trage ich Eulen nach Athen, ja lediglich ein Werkzeug zum Lösen von Aufgaben, oder?
Wenn also anders (durch eine Erweiterung) ein Problem besser gelöst werden kann, warum nicht?


Gerade gelesen: Performance
Verstehe die Bedenken, würde darauf vertrauen, dass dies die Zukunft zeigen wird.
Vielleicht gibt es ja mal nen FHEM internen Taskmanager zur Performance Messung ;)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Damian

Um Performance würde ich mir hier keine Sorgen machen. Es wird genauso oft aufgerufen oder nicht aufgerufen, als wenn man die gleiche Sache mit perl-if programmiert.

Der Unterschied ist das Parsen des fhem Befehls und da sind nur wenige Durchläufe nötig, daher dürfte sich die Verzögerung in wenigen Millisekunden halten (je nach System mehr oder weniger).

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Invers

Hier mal zur Auslastung der Fritzbox ein Bild.
Ich glaube, da besteht kein Anlass zur Sorge.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2