Neues Modul: Lambda - Eine Scriptsprache zur Steuerung von FHEM

Begonnen von dieter56, 05 November 2017, 19:32:20

Vorheriges Thema - Nächstes Thema

dieter56

Hallo liebe fhem-Gemeinde.
Ich hatte in meiner fhem-Installation ca. 60 DOIFs, 30 NOTIFYSs und ATs. Dazu sind im laufe der Jahre etliche Perl-Scripts gekommen. Dazu ganze System wurde im Laufe der Jahre immer unübersichtlicher.
Parallel dazu wuchs der Wunsch, die gesamte Steuerung mit einer eigenen Scriptsprache möglich zu machen.
Ich habe eine derartige Scriptsprache konzipiert und einen Interpreter dafür geschrieben. (Modul 98_lambda.pm)
Mit diesem Modul habe ich bis jetzt bereits mehr als die Hälfte alle DOIFs, NOTIFYS und ATs ersetzt. Eigene Perl-Scripte brauche ich nicht mehr. Meine gesamte Steuerung ist wesentlich übersichtlicher und damit einfacher geworden.
Das Modul ist noch im Entwicklungsstadium und hat sicher noch einige Bugs.
Vielleicht hat der eine oder andere Lust damit etwas auszprobieren und mir mit ein paar Anregungen bei der Weiterentwicklung zu helfen.

Für einen ersten Uberblick findet ihr hier die in den Modul integrierte Beschreibung: http://www.lambda-script.org/98_lambda.html

KölnSolar

Respekt für die Arbeit !!!

aber DOIF nutze ich nicht, weil zu kompliziert, at u. notify nur in einfacher Form und alles andere in Perl. Das
ZitatEigene Perl-Scripte brauche ich nicht mehr.
kann ich mir gerade mal für Deine mir unbekannte Installation vorstellen. Für mich unvorstellbar...

Hab mir den Link angeguckt: Klingt wirklich professionell, aber ganz ehrlich: ähnlich wie bei DOIF: wieder ne neue Syntax lernen ? Jetzt, wo ich mich mühsam mit Perl angefreundet habe: No way
Grüße Markus
(Vielleicht ist es was f. Einsteiger bevor sie at, notify kennenlernen oder gar nicht mit Perl klar kommen)
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

Jupdidu

#2
Hallo,
ich habe auch so meine Probleme mit Perl und DOIF. Irgendwo im Forum gibt es auch einen Perlhasser Thread :)....

Lambda ist aber auf den ersten Blick nicht einfacher.

Trotzdem werde ich es in den nächsten Tagen testen und hier berichten.

Jupp

Benni

Na ja, wer schon Probleme mit DOIF hat, wird damit wahrscheinlich auch nicht glücklich.

Aber wenn schon was neues lernen, warum nicht gleich Perl lernen, das ist doch die Skriptsprache von/für FHEM

LuBeDa

Mein erster Test:

(
(set WZLed (fhemDevice "WZLedTV"))
(set WZLed "RGB FF0000")
(wait (seconds 30))
(set WZLed "RGB 00FF00")
(wait (seconds 30))
(set WZLed "RGB 0000FF")
(wait (seconds 30))
(set WZLed "off")
')


Ich finde die Idee des Moduls vielversprechend. Schön finde ich auch dass die "wait"-Befehle da stehen wo sie stattfinden und nicht versteckt in einem Attribut. ;-)

Werde in den nächsten Tagen weiter mit dem Modul beschäftigen.

Ludger


schnitzelbrain

Ui ui, sieht richtig gut aus.
Kudos dafür.

Schau ich mir auch mal an, vielleicht liegt es mir besser als DOIF.

Grüße

Gesendet von meinem SM-G930F mit Tapatalk


LuBeDa

Ich spiele gerade mit Lambda.

Doch diesen Fehler verstehe ich nicht...

Mein Programm:
(
(set 'startevent "HarmonyWZ:currentActivity: starting")
(set 'stopevent "HarmonyWZ:currentActivity: stopping")
(set 'offevent "HarmonyWZ:currentActivity: PowerOff")
(set WZLed (fhemDevice "WZLedTV"))

(repeat '(
(wait startevent)
(set WZLed "RGB 00FF00")
(wait (seconds 3))
(set WZLed "off")
(set return (wait stopevent offevent))
(doif (= return 1) '(out "Stopevent") (= return 2) '(out "Stopevent"))
'))
')


Die Waits funktionieren und reagieren auf die entsprechenden Events. Am Ende des Blocks möchte ich abfragen was das letzte Event war (ähnlich wie in der Doku)

Dann bekomme ich aber den Fehler:

2017-11-06_20:47:08 LA_WZLicht error: Funktion doif (boolean,list,boolean,list) nicht definiert! (1 1 (doif true '(out "Stopevent") false '(out "Stopevent"))')
2017-11-06_20:47:08 LA_WZLicht running: no
2017-11-06_20:47:08 LA_WZLicht aborted

chris1284

Zitat von: dieter56 am 05 November 2017, 19:32:20Dazu ganze System wurde im Laufe der Jahre immer unübersichtlicher.
Wobei hier die Schuld sicher nicht bei Perl oder FHEM zu suchen ist  ;)

Zitat von: dieter56 am 05 November 2017, 19:32:20
Eigene Perl-Scripte brauche ich nicht mehr.
weil du sie durch eigene Lambda Scripte ersetzt hast... Ich sehe da auf den ersten Blick keinen Vorteil Scripte in perl mit Scripten in eigener Sprache zu ersetzen (zumindest nicht für andere da perl sicher besser dokumentiert und verbreitet ist im Netz als lambda ;-) )  wo  man erst noch die Sprache erfinden muss um dann darin die Scripte zu fertigen

Dennoch viel arbeit die du da hattest und sicher haben wirst und ich werde es mir ansehen. Evtl. vereinfacht es ja für den ein oder anderen einiges

Jupdidu

Beim lesen dieses Themas kam mir folgendes in den Sinn:

[Ironie Anfang]
Die Bild-Zeitung würde titeln:

Ersatz für DOIF! Lambda, Blasphemie oder Bereicherung?
[Ironie Ende]

@dieter56: Es wäre schön wenn Du ein paar DOIF,at,watchdog Beispiele aus dem FHEM-Wiki nach Lambda ersetzen könntest.

Jupp

marvin78

Ich habe wirklich nicht verstanden, warum FHEM hierdurch in irgendeiner Weise "übersichtlicher" werden sollte (das hat nichts mit der eingesetzten Skriptsprache zu tun) aber Respekt für den Ehrgeiz. Ich bin gespannt, wie sich das entwickelt.

schnitzelbrain

Zitat von: dieter56 am 05 November 2017, 19:32:20
Hallo liebe fhem-Gemeinde.
Ich hatte in meiner fhem-Installation ca. 60 DOIFs, 30 NOTIFYSs und ATs. Dazu sind im laufe der Jahre etliche Perl-Scripts gekommen. Dazu ganze System wurde im Laufe der Jahre immer unübersichtlicher.
Parallel dazu wuchs der Wunsch, die gesamte Steuerung mit einer eigenen Scriptsprache möglich zu machen.
Ich habe eine derartige Scriptsprache konzipiert und einen Interpreter dafür geschrieben. (Modul 98_lambda.pm)
Mit diesem Modul habe ich bis jetzt bereits mehr als die Hälfte alle DOIFs, NOTIFYS und ATs ersetzt. Eigene Perl-Scripte brauche ich nicht mehr. Meine gesamte Steuerung ist wesentlich übersichtlicher und damit einfacher geworden.
Das Modul ist noch im Entwicklungsstadium und hat sicher noch einige Bugs.
Vielleicht hat der eine oder andere Lust damit etwas auszprobieren und mir mit ein paar Anregungen bei der Weiterentwicklung zu helfen.

Für einen ersten Uberblick findet ihr hier die in den Modul integrierte Beschreibung: http://www.lambda-script.org/98_lambda.html

Ich bekomme bei doIf und auch bei getReading -> Funktion nicht definiert!
Die zwei Funktionen hatte ich jetzt gerade mal getestet.

Fehlt für die Funktionen noch etwas ?

Get/set gehen ohne Probleme

Grüße