Autor Thema: AT mit Perlanteil  (Gelesen 175 mal)

Online Grimmschak

  • Jr. Member
  • **
  • Beiträge: 65
AT mit Perlanteil
« 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

Offline t1me2die

  • Full Member
  • ***
  • Beiträge: 411
Antw:AT mit Perlanteil
« Antwort #1 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

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 13266
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:AT mit Perlanteil
« Antwort #2 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
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7592
  • eigentlich eher user wie "developer"
Antw:AT mit Perlanteil
« Antwort #3 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...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN
svn:MySensors, WeekdayTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 13266
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:AT mit Perlanteil
« Antwort #4 am: 16 Juli 2019, 13:56: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? :-[
« Letzte Änderung: 16 Juli 2019, 14:01:05 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266
Zustimmung Zustimmung x 1 Liste anzeigen

Online Grimmschak

  • Jr. Member
  • **
  • Beiträge: 65
Antw:AT mit Perlanteil
« Antwort #5 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...

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 13266
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:AT mit Perlanteil
« Antwort #6 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  ;)
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline t1me2die

  • Full Member
  • ***
  • Beiträge: 411
Antw:AT mit Perlanteil
« Antwort #7 am: 16 Juli 2019, 14:19: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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7592
  • eigentlich eher user wie "developer"
Antw:AT mit Perlanteil
« Antwort #8 am: 16 Juli 2019, 14:35:56 »
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)).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN
svn:MySensors, WeekdayTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 13266
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:AT mit Perlanteil
« Antwort #9 am: 16 Juli 2019, 14:38:51 »
@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 :)
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7592
  • eigentlich eher user wie "developer"
Antw:AT mit Perlanteil
« Antwort #10 am: 16 Juli 2019, 14:54:21 »
@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]
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN
svn:MySensors, WeekdayTimer, AttrTemplate => {mqtt2, mysensors, httpmod}
Gefällt mir Gefällt mir x 1 Liste anzeigen