Hi Leute,
ich versuche im Moment ein notify zu erstellen mit dem ich mir per Signalbot ein Nachricht schicken.
Es soll aber mir aber auch mehrere Nachrichten schicken wenn morgen z.B. zwei Geburtstage sind.
Mein Device Geburtstagsliste vom Type CALVIEW liefert mir dazu ja ein Reading c-tomorrow was bei zwei Geburtstagseinträgen, morgen eben den Wert 2 hat.
Ich dachte ich starte mein notify eben mit Geburtstagsliste:c-tomorrow:.*
Somit habe ich mir dann folgenden Perl Code überlegt:
Geburtstagsliste:c-tomorrow:.*
{
my $GebCount = ReadingsVal($NAME,'c-tomorrow',0);
if(($GebCount ne 0))
{
for(my $i = 0; $i < $GebCount; $i++)
{
my $GebText = ReadingsVal($NAME,'t_00'.$i.'_summary',0);
fhem("set SignalBot send \@Chris $GebText");
}
}
}
Hab dann Angefangen das ganze über das Kommandofeld in FHEM zu testen (dabei muss man ebven ;; anstatt ; schreiben).
Das funktioniert:
{ my $GebText = ReadingsVal('Geburtstagsliste,'t_001_summary',0);; fhem("set SignalBot send \@Chris $GebText") }
auch das geht:
{ my $i = 1;; { my $GebText = ReadingsVal('Geburtstagsliste,'t_00'.$i.'_summary',0);; fhem("set SignalBot send \@Chris $GebText") }
aber ich habe keinen Plan wie ich das for aus dem Kommandofeld testen könnte/sollte.
Kann mir da jemand helfen?
Gruß
Christian
Um Eventhandler zu testen, gibt es das "trigger" Kommando ;) .
Zum Code würde mir noch folgendes einfallen (ungetestet):
{
my $GebCount = ReadingsVal($NAME,'c-tomorrow',0);
return if !$GebCount;
my $GebText = 'Geburtstage morgen: ';
my $plural;
for my $i ( 0..$GebCount-1)
{
$GebText .= ', ' if $plural;
$GebText .= ReadingsVal($NAME,'t_00'.$i.'_summary',0);
$plural++;
}
fhem("set SignalBot send \@Chris $GebText");
}
Wobei du dir ggf. auch mal den "msg" Command ansehen könntest ;) .
im Kommandofeld würde ich so testen:
Edit: korrigiert
{my @arr;; my $NAME='Geburtstagsliste';;
for(my $i = 0;; $i < $GebCount;; $i++)
{ push @arr , ReadingsVal($NAME,'t_00'.$i.'_summary','error') }
return join "\n", @arr
}
Vielleicht auch besser als den Text in Fragmenten zu "ballern"?
Dein Code unten dürfte nicht gehen da fehlt mindestens ein '
Hi,
ah so kann ich das triggern trigger Geburtstagsliste c-tomorrow: 2
Das habe ich nicht verstanden https://fhem.de/commandref.html#trigger (https://fhem.de/commandref.html#trigger) aber das hab ich dan auch gefunden https://wiki.fhem.de/wiki/Trigger (https://wiki.fhem.de/wiki/Trigger)
Somit kann ich das notify auslösen. Bastel mal weiter.
Danke erstmal.
By the way, das mit dem Kommandofeld funktioniert überhaupt nicht. Fehler
Unknown command {my, try help.
Unknown command $i, try help.
Unknown command $i++), try help.
Genau wegen diesen Fehlern wollte ich ja wissen wie man das aus dem Kommandofeld testen kann.
Gruß
Christian
...der Code ohne "escapte" Zeilenenden (\) ist für die Eingabe innerhalb der DEF gedacht, das von Otto123 müsstes du am Ende jeweils noch ergänzen (außer bei der letzten).
nein mein Code war für die Kommandozeile gedacht - aber ich hatte in der Schleife die einzelnen ; gesehen. Die Zeilenumbrüche werden dabei ignoriert! Nur in der Raw Def müsste man was machen.
hab es oben geändert
Das hatte Christian aber schon herausgefunden und hätte es selbst korrigieren können:
Zitat von: Kohle77 am 08 Februar 2022, 11:21:25
über das Kommandofeld in FHEM zu testen (dabei muss man ebven ;; anstatt ; schreiben).
Hi,
ich verstehe den code nicht. Hab aber mal noch eine Frage.
my $GebCount = ReadingsVal($NAME,'c-tomorrow',0);
Damit lese ich den Wert von dem reading c-tomorrow in die Variabl $GebCount.
Wie kann ich diese variable im nächsten step in der GUI von FHEM ausgeben?
Dachte da an print "Anzahl Geburtstage: $GebCount";
aber das scheint nicht zu gehen.
Andere Frage ist was macht den for my $i ( 0..$GebCount-1)
Ich denke es ist eine FOR Schleife die von null bis GebCount-1 läuft (-1 weil ja von null aus gezählt wird).
Soweit so gut aber was macht die variable $plural?
Die variable wird angelegt und ist leer (gehe ich mal davon aus).
Mit dem .= wird dem bestehenden variablen Wert GebText etwas angehängt aber warum später $plural++;?
Ist das ein Zähler und was zählt dieser?
Sorry wenn ich so blöde und viel Frage.
Gruß
Christian
Zitat von: Kohle77 am 10 Februar 2022, 10:27:08
Wie kann ich diese variable im nächsten step in der GUI von FHEM ausgeben?
Dachte da an print "Anzahl Geburtstage: $GebCount";
aber das scheint nicht zu gehen.
Im Kontext von FHEMWEB wird zurückgegeben, was der return-Wert ist. Das müßtest du halt zwischenspeichern (oder zum testen besser: loggen).
Zitat
Andere Frage ist was macht den for my $i ( 0..$GebCount-1)
Ja. Numerische Schleife, $i ist der Zähler. Finde ich eleganter wie die "C-style"-Variante.
Zitat
Soweit so gut aber was macht die variable $plural?
Die variable wird angelegt und ist leer (gehe ich mal davon aus).
Mit dem .= wird dem bestehenden variablen Wert GebText etwas angehängt aber warum später $plural++;?
Ja. Aber nur, wenn $plural einen Wert hat.
Zitat
Ist das ein Zähler und was zählt dieser?
Der Zähler wird einfach nach jedem Durchlauf erhöht, so dass jeder weitere Jubilar halt mit einem Komma angehängt wird (nach dem ersten Durchlauf ist die Bedingung erfüllt) und du am Ende alle auf einmal bekommst ;) . Schön Komma-getrennt.
ZitatWie kann ich diese variable im nächsten step in der GUI von FHEM ausgeben?
Dachte da an
Code: [Auswählen]
print "Anzahl Geburtstage: $GebCount";
aber das scheint nicht zu gehen.
mach ich immer mit return anstatt print
return "Anzahl Geburtstage: $GebCount";
print schreibt Dir so wie es da steht wahrscheinlich ins FHEM Log.