fhem-Variablen mit Perl setzen

Begonnen von Elektrolurch, 26 Juni 2013, 11:25:03

Vorheriges Thema - Nächstes Thema

Dietmar63

Das Problem besteht meiner Meinung nach darin, dass du gleichzeitig Perl an sich und Perl inherhalb von fhem lernst.
In fhem wird der Perlcode als Sting abgelegt und dynamisch mit der Funktion eval() zur Ausführung gebracht.

Damit der PerlCode in FHEM verwaltet werden kann wird er in Metazeichen "eingepackt": ;;\ ...
Es gibt im Netz Handbücher für Perl, die vieles sehr gut erklären.

Wenn du auf oneliner in fhem.cfg umstellst und nur noch Funktionen der 99_util aufrufst musst du in 99_util mit echtem Perlcode kämpfen und die Beschreibungen im Internet sind ohne zusätzliche Ebene nutzbar. Die 99_util editiert man am Besten über einen externen Editor von Linux oder Windows aus. Der bietet dann sogar Syntaxhighligthing. Dazu benötigt man halt Fernzugriff auf die FB oder den Pi. Man muss dann allerdings mit reload 99_util das Modul in die Laufzeitumgebung von fhem/Perl nachladen.

in fhem.cfg
define blablabla at *05:00:00  { tueDies() }
in 99_util:

sub tueDies($) {
  <Percode>
}

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Puschel74

Hallo,

was Elektrolurch aber nur bedingt hilfreich sein wird.
Lies dir mal seine Signatur durch.
Von Syntaxhighligthing wird er nicht viel haben und auch diverse Perlbücher werden nur bedingt hilfreich sein.

Ich weiß ja nicht ob sein Reader zwischen Groß- und Kleinschreibung unterscheidet.

Das wär jetzt mal eine Anforderung an eine morderne GUI.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Elektrolurch

Hallo Dietmar,

danke für den Hinweis. Der Screenreader liest standardmäßig keine Großschreibung vor, es sei denn, ich gehe mit der Pfeiltaste die Buchstaben einzeln ab. Deshalb ist es am Anfang für mich etwas schwerer... daher bin ich ganz froh, wenn mich jemand direkt auf einen Fehler hinweist, als auf andere threads zu verweisen. Danke nochmals.
Das Konzept ist mir grundsätzlich schon klar, habe ja auch mal vor 20 Jahren Shellskripts, C und C++ nur so runter programmiert. Jetzt wollte ich mal da wieder mit anfangen. Perl-Code ist ja schon grausig zu lesen. Für das Projekt, was ich vor habe, geht wohl das meiste direkt mit fhem.
Elektrolurch
configDB und Windows befreite Zone!

Puschel74

Hallo,

Zitatdaher bin ich ganz froh, wenn mich jemand direkt auf einen Fehler hinweist, als auf andere threads zu verweisen.

Wenn du deine Signatur von Anfang an so ausgefüllt hättest hätte ich dich auch nicht auf den anderen Beitrag verwiesen.
Ich könnte nämlich fast schwören das heute morgen nur der erste Teil in deiner Signatur stand ;-)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Elektrolurch

Hallo,

das stimmt. Ich bin auch erst heute morgen auf die Idee gekommen, dass in die Signatur hineinzuschreiben. Ist schon klar, dass es auch viele nervige Frager gibt.. und dann gerne auf bestehende Beiträge verwiesen wird. Ich hatte mir schon eine Liste von Fragen erstellt und hatte schon eine Reihe von Beiträgen dazu angesehen. Manches ist aber einfach nicht ganz schlüssig.
Beispiel:
log 3, ("Text');;
Warum muss das jetzt in runde Klammern?
Ich habe da auch Aufrufe ohne die () gesehen. Ja, aller Anfang ist schwer.
configDB und Windows befreite Zone!

Puschel74

Hallo,

Zitatlog 3, ("Text');;

Hier hast du
a) wieder das Problem das log klein geschrieben ist. Das L muss aber groß geschrieben werden.
b) Du solltest nicht " und ' mischen - das gibt Fehlermeldungen.
Ich denke aber mal das war jetzt nur in diesem Beispiel von dir.

Warum das jetzt in ( ) kommt kann ich dir leider nicht beantworten - ich vermute mal wegen der { am Anfang.
Diese kennzeichnet ja den Perl-Teil.
Ich schreib meine Logeinträge immer so

Log(3,"Hier das was ich lesen will");;

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Dietmar63

ZitatPerl-Code ist ja schon grausig zu lesen
Anfangs ja - später nein. Es ist halt gewöhnungsbedürftig!

Wer von Perl nach c++ wechselt hat auch so seine Schwierigkeiten.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

Log(3,"Hier das was ich lesen will");
bzw.
Log 3,"Hier das was ich lesen will";

sind gleichwertige Scheibweisen in Perl.
In Perl gibt es den Grundsatz: "Du kannst Dinge immer auf vielerlei Art machen". - na ja!

Merkwürdig ist zum Beispiel die Variante das if (<Bedingung>) hinter die Anweisung zu schreiben.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

rudolfkoenig

Kommt daher, dass Larry Wall Linguistik studiert hat, und mit perl versucht hat die natuerliche Sprache nachzubauen, da gibt es auch mehrere Moeglichkeiten fuer den Satzbau.