ist es noch FHEM oder schon PERL?

Begonnen von ernst1024, 01 März 2016, 20:27:05

Vorheriges Thema - Nächstes Thema

ernst1024

Irgendwie bekomme ich die FHEM Ebene nicht so sauber von der PERL Ebene getrennt und ich habe den Eindruck als ob ich da nicht ganz alleine dastehe.

Letztens war ich total perplex als in einer Diskussion jemand meinte (sinngemäß): ja, du vermischst ja auch das FHEM 'IF' mit dem PERL 'IF' ??%4§

Habe ich bis dahin auch noch nicht gewusst, also das mit den verschiedenen IF's. Und dann gib's ja auch noch DOIF (oder ob er das damit gemeint hat??)

Fragen über Fragen. Wie kommt ihr damit klar? Kann man das irgendwo dran festmachen, das ist FHEM und das ist PERL?
Gruß Ernst

Damian

Zitat von: ernst1024 am 01 März 2016, 20:27:05
Irgendwie bekomme ich die FHEM Ebene nicht so sauber von der PERL Ebene getrennt und ich habe den Eindruck als ob ich da nicht ganz alleine dastehe.

Letztens war ich total perplex als in einer Diskussion jemand meinte (sinngemäß): ja, du vermischst ja auch das FHEM 'IF' mit dem PERL 'IF' ??%4§

Habe ich bis dahin auch noch nicht gewusst, also das mit den verschiedenen IF's. Und dann gib's ja auch noch DOIF (oder ob er das damit gemeint hat??)

Fragen über Fragen. Wie kommt ihr damit klar? Kann man das irgendwo dran festmachen, das ist FHEM und das ist PERL?

Alle FHEM-Befehle findest du auf der ersten Seite der Commandref: http://fhem.de/commandref_DE.html
Dort findest du auch einen FHEM-Befehl IF. In der deutschen Version der Commandref wird beispielhaft der Unterschied zwischen dem FHEM-IF-Befehl und dem Perl-if-Befehl erklärt: siehe http://fhem.de/commandref_DE.html#IF

Auszug:

ZitatDer IF-Befehl dient in erster Linie zur Vereinfachung der Schreibweise in Kombination mit anderen FHEM-Modulen wie at, notify oder DOIF. Intern wird der IF-Befehl zur Ausführung in einen Perl if-Befehl umgesetzt. Das soll anhand von Beispielen verdeutlicht werden:

IF ([switch] eq "off") (set lamp on)

entspricht:

{if (Value('switch') eq "off"){fhem('set lamp on')}}


IF ([living_room:temperature] > 12) (set lamp on, set lamp2 off)

entspricht:

{if (ReadingVal('living_room','temperature','') > 12) {fhem('set lamp on');;fhem('set lamp2 off')}}


IF ([bathroom:humidity] > 70) (set led red) ELSE (set led green)

entspricht:

{if (ReadingsVal('bathroom','humidity','') > 70) {fhem('set led red')} else {fhem('set led green')}}

Gruß

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

ernst1024

Naja, es geht nicht unbedingt nur um den IF Befehl. Aber ich entnehme deiner Antwort dass das FHEM IF groß, das PERL if hingegen klein geschrieben wird?

Gruß Ernst

Damian

Zitat von: ernst1024 am 01 März 2016, 20:53:11
Naja, es geht nicht unbedingt nur um den IF Befehl. Aber ich entnehme deiner Antwort dass das FHEM IF groß, das PERL if hingegen klein geschrieben wird?

ja und ob es sich um einen FHEM-Befehl handelt oder ein FHEM-Modul siehst du eben auf der ersten Seite der Commandref.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ernst1024

ja sicher, irgendwie und wo kann ich alles nachlesen. Aber wenn ich mir dies hier anschaue:

Die folgenden drei Befehle bewirken z.B. dasselbe Ergebnis, wenn sie am telnet-Prompt eingegeben werden:
set lamp off
"fhem.pl 7072 "set lamp off""
{fhem("set lamp off")}

und dann noch berücksichtige dass Befehle ja auch gemischt werden können, dann behalte mal als Einsteiger den Überblick über Klammern, Gänsefüsschen oben, doppelte Semikolon, wenn es an komplexere Strukturen geht.
Gruß Ernst

Damian

#5
Zitat von: ernst1024 am 01 März 2016, 21:59:26
ja sicher, irgendwie und wo kann ich alles nachlesen. Aber wenn ich mir dies hier anschaue:

Die folgenden drei Befehle bewirken z.B. dasselbe Ergebnis, wenn sie am telnet-Prompt eingegeben werden:
set lamp off
"fhem.pl 7072 "set lamp off""
{fhem("set lamp off")}

und dann noch berücksichtige dass Befehle ja auch gemischt werden können, dann behalte mal als Einsteiger den Überblick über Klammern, Gänsefüsschen oben, doppelte Semikolon, wenn es an komplexere Strukturen geht.

ja, damit wirst du wohl leben müssen. FHEM ist eine Symbiose aus Perl und eben FHEM-spezifischen Befehlen. Perl-Welt wird aus FHEM-Welt meistens mit geschweiften Klammern eingeleitet. FHEM-Welt wird oft aus der Perl-Welt mit dem fhem-Befehl wie oben eingeleitet.

Und weil mir das zu umständlich war, habe ich IF und DOIF erfunden, da bleibt man meistens in der FHEM-Welt. Dennoch sollte man das Wissen zu Perl haben, denn sowohl der IF-Befehl als auch das DOIF-Modul sind sehr eng mit Perl verknüpft und die Perl-Welt in der FHEM-Welt oft nur verbergen.

Gruß

Damian

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

ernst1024

Zitat von: Damian am 01 März 2016, 22:14:38

Und weil mir das zu umständlich war, habe ich IF und DOIF erfunden, da bleibt man meistens in der FHEM-Welt. Dennoch sollte man das Wissen zu Perl haben, denn sowohl der IF-Befehl als auch das DOIF-Modul sind sehr eng mit Perl verknüpft und die Perl-Welt in der FHEM-Welt oft nur verbergen.


Ach, du warst das  ;D. DOIF finde ich ja auch sehr verständlich, das nutze ich öfters. Ich hoffe auch dass sich meine Verwirrung mit der Zeit etwas legt.
Gruß Ernst

marvin78

FHEM war und wird nie ein System sein, dass der Einsteiger ohne einiges an Einarbeitung versteht. Wer das Gegenteil sucht, ist tatsächlich bei FHEM falsch. Wenn man sich allerdings ein wenig damit beschäftigt hat, lernt man sehr schnell zu schätzen, dass FHEM durch die mögliche Vermischung von Perl mit FHEM Bordmitteln deutlich flexibler ist, als eine Klickbunti Lösung von der Stange. FHEM erfordert viel "Lernzeit". Viele gehen das "Projekt" falsch an und versuchen mit komplizierten Automatisierungen das Pferd von hinten auf zu zäumen. Das wird bei FHEM nur den wenigsten sofort gelingen und man gibt dann evtl. schnell frustriert auf.

sto

Vielleicht ist ja mein Hirn einfach etwas anders rum gewickelt...
Aber ist es nicht so, dass FHEM ein in Perl geschriebener Interpreter für FHEM-Befehle (wie define, attr etc.) ist? Und mit {} kann ich einfach Code an Perl durchreichen?

Mag sein, dass dies Wortklauberei ist. Aber ein solches mentales Modell würde mir jedenfalls wesentlich besser einleuchten, als "Symbiose" und dergleichen:-)

marvin78

Naja. Fast. Das ist aber etwas, das ein Anfänger vom Konzept her möglicherweise am wenigsten versteht. Und ganz so einfach ist es auch nicht. Man muss sich beim "durchreichen" an Regeln und Strukturen halten. Die Doku hilft dabei jedoch.

Prof. Dr. Peter Henning

Ich würde ebenfalls vorschlagen, sich erst einmal etwas tiefer einzuarbeiten, und dann über "mentale Modelle" nachzudenken. Mag ja sein, dass dann eine fantastische neue Einsteigerdoku herauskommt - aber bitte nicht schon nach dem ersten Versuch aufgeben.

LG

pah