[Gelöst]substr(‘$DEVICE’, 5, 6), Punktoperator, lc()

Begonnen von Marcel_R, 12 April 2019, 16:36:51

Vorheriges Thema - Nächstes Thema

Marcel_R

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
FHEM / Fritz!Box 7490 / CULv3 / Raspi / COC / MAX! / HomeMatic /

Beta-User

#1
Vermutlich hilft das lesen hier 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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Marcel_R

#2
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....
FHEM / Fritz!Box 7490 / CULv3 / Raspi / COC / MAX! / HomeMatic /

betateilchen

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))

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Marcel_R

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
FHEM / Fritz!Box 7490 / CULv3 / Raspi / COC / MAX! / HomeMatic /

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Marcel_R

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
FHEM / Fritz!Box 7490 / CULv3 / Raspi / COC / MAX! / HomeMatic /