FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Grimmschak am 16 Juli 2019, 13:16:15

Titel: AT mit Perlanteil
Beitrag von: Grimmschak am 16 Juli 2019, 13:16:15
Hallo liebe Community,

ein denke Mal echte FHEM/Perl Anfängerfrage an der ich leider im Moment verzweifle.

define rolladen_zu AT *{sunset(-390,"16:00:00","21:54:00")}  {if(value("Rolladen.main") ne "manu" && value("rolladen.pause") eq "off"){ fhem("set buero.rolladen down")}}

Was ist hier in dem Perl Anteil falsch ? Leider geht das überhaupt nicht. Ich bin halt kein Perl-Programmierer, anderes schon, aber Perl schaft mich im Moment.

Danke schon Mal im Voraus für eure Hilfe.

Grimm
Titel: Antw:AT mit Perlanteil
Beitrag von: t1me2die am 16 Juli 2019, 13:30:04
Moin Grimm,

ohne es ausprobiert zu haben, probiere es mal so:


define rolladen_zu at *{sunset(-390,"16:00:00","21:54:00")}
{  if(Value('Rolladen.main') ne 'manu' and Value('rolladen.pause') eq 'off')
   {   fhem('set buero.rolladen down')
   }
}


Ansonsten bräuchten wir wohl auch mal die Fehlermeldung, die du ausgespuckt bekommst.
Evtl. wäre auch ein list von den jeweiligen Devices hilfreich.

Gruß
Mathze
Titel: Antw:AT mit Perlanteil
Beitrag von: Otto123 am 16 Juli 2019, 13:42:46
Hi,

da Mathze nicht dazugeschrieben hat warum:
https://commandref.fhem.de/#perl
Value ist nicht value! Und Fehlermeldungen stehen ziemlich konkret im Log! ;D

Gruß Otto
Titel: Antw:AT mit Perlanteil
Beitrag von: Beta-User am 16 Juli 2019, 13:44:23
Weitere Anmerkungen:
Vermutlich (mehr kann man ohne die lists nicht sagen...) liegt es "nur" an den goßen "V".

Die Umstellung auf einfache Anführungszeichen ist hier ok, aber an sich nicht notwendig. (Lest euch mal in die Bedeutung beider Varianten ein...).

Grundsätzlich würde ich aber zwischenzeitlich Value() möglichst nicht mehr verwenden, und stattdessen immer ReadingsVal() mit dem Reading "state" verwenden. Ist zwar in Teilen eine Geschmacksfrage, aber m.E. einfach eindeutiger...
Titel: Antw:AT mit Perlanteil
Beitrag von: Otto123 am 16 Juli 2019, 13:56:23
Zitat von: Beta-User am 16 Juli 2019, 13:44:23
Grundsätzlich würde ich aber zwischenzeitlich Value() möglichst nicht mehr verwenden, und stattdessen immer ReadingsVal() mit dem Reading "state" verwenden. Ist zwar in Teilen eine Geschmacksfrage, aber m.E. einfach eindeutiger...
Sind aber zwei Schuhe Value fragt STATE ab !? :)
btw. steht das in der verlinkten Commandref eigentlich falsch. Da steht state :( sollte STATE heißen. Manchmal steht Status in der Commandref, was ich etwas hasse. Da konnte sich der Schreiber aus meiner Sicht nicht zwischen state und STATE entscheiden. Meist bedeutet Status STATE, aber kann man sich immer sicher sein? :-[
Titel: Antw:AT mit Perlanteil
Beitrag von: Grimmschak am 16 Juli 2019, 14:03:48
Danke probiere es Mal,

PS Error war nicht sehr sprechend aus meiner Sicht:
Undefined subroutine &main::value called at (eval 3959157) line 1.

Werde Mal mit großem V oder mit ReadingsVal() versuchen.

Melde mich dann ob es das war...
Titel: Antw:AT mit Perlanteil
Beitrag von: Otto123 am 16 Juli 2019, 14:09:31
Naja die Welt ist schlecht  ;D
Aber perl Fehlermeldungen sind so ;)
Da steht übertragen "Undefined subroutine &main::value" = die Routine value, die Du aufgerufen hast kennt er nicht!
Viel besser geht es nicht  ;)
Titel: Antw:AT mit Perlanteil
Beitrag von: t1me2die am 16 Juli 2019, 14:19:23
Zitat von: Beta-User am 16 Juli 2019, 13:44:23
Weitere Anmerkungen:
Vermutlich (mehr kann man ohne die lists nicht sagen...) liegt es "nur" an den goßen "V".

Die Umstellung auf einfache Anführungszeichen ist hier ok, aber an sich nicht notwendig. (Lest euch mal in die Bedeutung beider Varianten ein...).

Grundsätzlich würde ich aber zwischenzeitlich Value() möglichst nicht mehr verwenden, und stattdessen immer ReadingsVal() mit dem Reading "state" verwenden. Ist zwar in Teilen eine Geschmacksfrage, aber m.E. einfach eindeutiger...

Irgendwann durfte ich mir hier im Forum mal eine Lektion bzgl. einfachen und doppelten Anführungszeichen abholen.
Irgendwie ist das nun hängen geblieben und ich verwende, wenn möglich nur die einfachen.
Wenn es richtig in meinen Gedanken gespeichert ist, versucht Perl bei doppelten Anführungszeichen den Text innerhalb der Anführungszeichen umzusetzen, was in diesem Falle nicht notwendig war, wenn ich das Statement richtig gedeutet habe.

@Otto: Mathze war sich auch nicht sicher, ob es tatsächlich an "value" oder "Value" lag, da ich es nicht ausprobiert habe und bevor man mich hier zerpflückt wie eine Weihnachtsgans bin ich mit meinen Aussagen immer vorsichtig  :P

Gruß
Mathze
Titel: Antw:AT mit Perlanteil
Beitrag von: Beta-User am 16 Juli 2019, 14:35:56
Zitat von: t1me2die am 16 Juli 2019, 14:19:23
Irgendwann durfte ich mir hier im Forum mal eine Lektion bzgl. einfachen und doppelten Anführungszeichen abholen.
Irgendwie ist das nun hängen geblieben und ich verwende, wenn möglich nur die einfachen.
Wenn es richtig in meinen Gedanken gespeichert ist, versucht Perl bei doppelten Anführungszeichen den Text innerhalb der Anführungszeichen umzusetzen, was in diesem Falle nicht notwendig war, wenn ich das Statement richtig gedeutet habe.
:)
Ist schon ok, das "sicherheitshalber" so zu machen.

Mir ging's aber nicht nur um diesen Punkt, aber da ich schon dabei war, wollte ich den TE als Perl-Novizen dann schon sensibilisieren, dass es zwar einen gravierenden Unterschied macht, aber eben hier nichts zur Sache tut, weil grad keine Variablen im Spiel sind usw..
(Keine Ahnung, ob das jetzt die beste Doku ist, die man kriegen kann, aber hier ist es gut und prägnant erläutert: https://de.wikibooks.org/wiki/Perl-Programmierung:_Variablen#Zeichenketten_(Strings)).
Titel: Antw:AT mit Perlanteil
Beitrag von: Otto123 am 16 Juli 2019, 14:38:51
Zitat von: t1me2die am 16 Juli 2019, 14:19:23
@Otto: Mathze war sich auch nicht sicher, ob es tatsächlich an "value" oder "Value" lag, da ich es nicht ausprobiert habe und bevor man mich hier zerpflückt wie eine Weihnachtsgans bin ich mit meinen Aussagen immer vorsichtig  :P

Gruß
Mathze
Du hast alles richtig gemacht  ;)

@Beta-User Ich leg nochmal nach: anstatt Value() wäre InternalVal(<devicename>,"STATE",<defaultvalue>)  verwendbar :) aber in 98% der Fälle geht per default auch dein Ansatz :)
Titel: Antw:AT mit Perlanteil
Beitrag von: Beta-User am 16 Juli 2019, 14:54:21
Zitat von: Otto123 am 16 Juli 2019, 14:38:51
@Beta-User Ich leg nochmal nach: anstatt Value() wäre InternalVal(<devicename>,"STATE",<defaultvalue>)  verwendbar :) aber in 98% der Fälle geht per default auch dein Ansatz :)
;D ;D ;D
Lustige Diskussion...

Bin nicht ganz sicher und habe mir den Quelltext der fhem.pl auch nicht wieder angesehen, würde aber annehmen, dass die "korrekte" Übersetzung zu mehr Irritationen führt wie die "unsaubere" :P . Hängt aber zugegebenermaßen auch davon ab, wie man die diversen Optionen in FHEM nutzt.

Aber wir sind uns vermutlich sehr einig, dass der TE spätestens jetzt verstanden hat, dass diese beiden Varianten "genauer" sind wie "Value()" ;D . (Zur Klarstellung: auch Value() IST eindeutig, nur evtl. anders als man vermuten würde...)

[komplett OT]
Würde mich interessieren, wie die Urgesteine (Rudi & Co) das sehen, also ob die auch eher davon abraten würden, in neuerem Code Value() zu verwenden?
Mir kommt es so vor, als wäre die klarere Unterscheidung in AttrVal(), ReadingsVal() und InternalVal() erst im Lauf der Zeit in FHEM immer wichtiger geworden, und in grauer Vorzeit war halt viel mehr "Value()". Und warum manche Module manche Infos in Attributen doppeln, läßt sich m.E. nur aus der jeweiligen Entstehungsgeschichte erklären...
Aber damit können wir das auch auf sich beruhen lassen.
[OT]