[gelöst] FHEM - PERL es wird $var geschickt aber ich verstehe nicht warum

Begonnen von Kohle77, 19 November 2021, 12:58:20

Vorheriges Thema - Nächstes Thema

Kohle77

Hallo Leute,
ich brauch mal wieder eure Hilfe. Ich blick da nicht durch mit fhem und perl in fehm. Hab folgendes DOIF gebaut:
([11:11] and [Geburtstagsliste:t_001_daysleft] == 1)
( {my $val= ReadingsVal ('Geburtstagsliste','t_001_summary','');;
my $t= ReadingsVal ('Geburtstagsliste','t_001_description','');;
my $rec= substr("$t",0,1);;
if (($rec eq "m") || ($rec eq "M")) {fhem ("set SigBot send \@+4917xxxxxxxx Morgen hat $val Geburtstag") }
elsif (($rec eq "c") || ($rec eq "C")) {fhem ("set SigBot send \@+4916xxxxxxx Morgen hat $val Geburtstag") }
else {fhem ("set SigBot send \#Gruppe Morgen hat  $val Geburtstag") }
})
DOELSEIF ([06:00])


Bei dem letzten else bekomme ich den text "Morgen hat $val Geburtstag" aber stat $val sollte dort der Name stehen. Sicher habe ich mal wieder irgenwo eine Klammer, Semikolon oder sowas übersehen.

Kann mir jemand da weiterhelfen?

Gruß

Christian

alanblack

Ist zwar nicht Perl-like, sollte aber funktionieren, wenn Du statt
Zitat von: Kohle77 am 19 November 2021, 12:58:20
{fhem ("set SigBot send \@+4917xxxxxxxx Morgen hat $val Geburtstag") }

{fhem ("set SigBot send \@+4917xxxxxxxx Morgen hat ".$val." Geburtstag") }
schreibst.

Grüße
FHEM 6.0 auf raspi3&ODROID XU4 mit HMLAN und HM-MOD-RPI-PCB, LaCrosse via JeeLink, COC868 und CUL433, Xiaomi Aqara+div. Zigbee via deCONZ, Dooya via SIGNALDuino, ZWave mit Danalock
Jeder Witz kann ein Einzeiler sein mit genügend Semikolons

Kohle77

Hallo,
hatte ich auch schon dran gedacht aber ich bekomme im Log (mit verbose 5):
Not enough arguments. Specify a Recipient, a GroupId or set the defaultPeer attribute
im log.
Gruß
Christian

bartman121

#3
Ich bin mir nicht sicher... Aber muss man # wirklich escapen? Ich denke eher nicht....

@ und $ sind normal, da das Zeichen sind die bei Arrays und Variablennamen zum Einsatz kommen. Aber #?

Ansonsten mach bitte Mal das Leerzeichen zwischen fhem und ( raus... Funktionen ruft man eigentlich immer so auf fhem($foo)....

Kohle77

Hi,
ich denke das # ist hier das Problem.
Hatte auch schonmal an sowas gedacht:
set SigBot send #Gruppe Morgen hat ['Geburtstagsliste','t_001_summary'] Geburtstag") }
aber da stimmt auch wieder etwas nicht mit den Klammern.

Kann ich nach dem Else einfach ein fhem command machen d.h. else } (set knx_0003000) on z.B.?

Dachte an sowas wie perl und normale FHEM commands mischen.

Gruß
Christian

Kohle77

Hallo,
das Problem ist gefunden.

Ich habe in der Geburtstagsliste in der Variable t_001_summary stehen "Vorname Nachname 'xx" wobei das xx das Jahr ist.
Somit steht in $var eben auch das ' zeichen. Problem ist wohl das eben nur ein ' Zeichen im Text vorkommt und somit das schließende ' fehlt (soweit ich es verstanden habe ist es immer ein ' zum öffnen und ein weiteres ' zum schließen.
Ich habe einfach "Vorname Nachname 19xx" in den Kalender geschrieben und damit entfällt das ' Zeichen und siehe da es geht.

Gruß
Christian