FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Marcel_R am 12 April 2019, 16:36:51

Titel: [Gelöst]substr(‘$DEVICE’, 5, 6), Punktoperator, lc()
Beitrag von: Marcel_R am 12 April 2019, 16:36:51
Grüezi,

Ich möchte in einem doif als Befehl ein DebianMail versenden. Das klappt.

Nun möchte ich aus dem $DEVICE-Wert einzelne Teile extrahieren - im Sinne von:

(["^FK:open"]) ({$geraet = substr('$DEVICE', 4, 6); $stwrk = substr('$DEVICE', 2, 2); DebianMail('fhem@123.com','FHEM:$geraet -Fenster offen','<Das Fenster $geraet ist seit mehr als 7 Minuten offen <a href="http://w.x.y.z:8083/fhem/floorplan/$stwrk">floorplan/$stwrk</a></html>','')})

Bitte gebt mir einen Hinweis, in welcher Richtung ich suchen muss, um das hin zu kriegen.



Danke!
Marcel
Titel: Antw:substr(‘$DEVICE’, 5, 6)
Beitrag von: Beta-User am 12 April 2019, 16:46:38
Vermutlich hilft das lesen hier https://www.tutorialspoint.com/perl/perl_data_types.htm (https://www.tutorialspoint.com/perl/perl_data_types.htm) ab "Example" (oder die Seite vorher ab "Single and Double Quotes in Perl").

Ergänzend würde ich einen eher spartanischen Editor empfehlen, der nicht auch noch seltsame Quotationmarks erzeugt.
Titel: Antw:substr(‘$DEVICE’, 5, 6)
Beitrag von: Marcel_R am 12 April 2019, 20:15:47
Danke Beta-User für die beiden Hinweise.

Ich musste zwar noch schwitzen, bis es soweit war* -  aber jetzt klappt es mit:
(["^FK:open"]) ({DebianMail('fhem@123.com',"FHEM:
" . substr("$DEVICE", 4, 6) . "-Fenster offen","Das Fenster " . substr("$DEVICE", 4, 6) . " ist seit mehr als 7 Minuten offen <a href=\"http://w.x.y.z:8083/fhem/floorplan/" . substr("$DEVICE", 2, 2) . "\">floorplan/" .  substr("$DEVICE", 2, 2) . "</a></html>\"",'')})


* musste herausfinden, dass Strings mit dem Punktoperator verbunden werden.

Danke nochmals!
Marcel

P.S. Folgefrage: das erste Zeichen von substr("$DEVICE", 2, 2) hätte eigenlich in lowercase haben müssen - um dies zu erreichen, habe ich \l  gefunden, jedoch nicht, wie diese beiden Befehle kombiniert werden. Für den Moment habe ich das Problem umgangen - wenn mir jemand einen weiteren Tip geben könnte....
Titel: Antw:substr(‘$DEVICE’, 5, 6)
Beitrag von: betateilchen am 12 April 2019, 20:23:43
lass doch die Anführungszeichen um $DEVICE einfach weg, das ist doch schon ein perl Element

Zitat von: Marcel_R am 12 April 2019, 20:15:47
Folgefrage: das erste Zeichen von substr("$DEVICE", 2, 2) hätte eigenlich zu lowercase umgewandelt werden müssen

keine Ahnung, wie Du darauf kommst, ich verwende in solchen Fällen immer


lc(substr($DEVICE, 2, 2))

Titel: Antw:[Gelöst]substr(‘$DEVICE’, 5, 6), Punktoperator, lc()
Beitrag von: Marcel_R am 12 April 2019, 22:26:56
Danke für den Tip, betateilchen.

Basierend darauf versuchte ich die Anführungszeichen um $DEVICE im Ausdruck einfach weg zu lassen
lc(substr($DEVICE, 4, 6)) - dies ergibt für mich jedoch:
ZitatBareword "FKO1Gangxxy" not allowed while "strict subs" in use at (eval 3847) line 1.

Wenn ich ohne Anpassung (d.h. nur  $DEVICE) verwende, dann klappt es.

Gruss
Marcel
Titel: Antw:[Gelöst]substr(‘$DEVICE’, 5, 6), Punktoperator, lc()
Beitrag von: Damian am 13 April 2019, 10:24:50
Nur zur Klärung.

$DEVICE ist keine Perlvariable, sondern nur ein Platzhalter, der gegen den Devicenamen ausgetauscht wird, damit es auch im FHEM-Ausführungsteil funktioniert.

Im DOIF-Perlmodus kann man im Ausführungsteil sinnvoll eine echte Perlvariable nutzen, namens $device.
Titel: Antw:[Gelöst]substr(‘$DEVICE’, 5, 6), Punktoperator, lc()
Beitrag von: Marcel_R am 13 April 2019, 17:09:25
Danke für diese zusätzliche Infos.

Als Anfäger suche ich im Forum nach Beispielen, die ich dann für meine Bedürfnisse anpasse. Dabei stosse ich immer wieder auf Informationen, die bei mir nicht funktionnieren. Was frustrierend ist und auch nicht hilft. War es meine Anpassung. War es eine prinzipiell falsche Angabe. Wurde die Code-Baisis in der Zwischenzeit geändert, etc.

Bedingt durch mein Niveau kann nicht viel Hilfe weiter geben. Dafür versuche ich am Schluss meine Treads so weit auf zu bereiten, dass derjenige, der darüber stolpert wenigstens weiss, woran er ist.

Aber das hält mich nicht davon ab, Leute wie Dich, die so viel wissen und den Durchblick haben zu bewundern und ja, ein bisschen zu beneiden.

Gruss
Marcel