Funktion mit Übergabeparameter (Nachricht an alle Geräte senden)

Begonnen von solidphili, 08 Juli 2015, 17:49:50

Vorheriges Thema - Nächstes Thema

solidphili

Hallo zusammen,

ich habe eine Frage zur Verwendung eines eigenen Skriptes in der 99_myUtils mit Übergabeparameter eines notifys.


Erstmal der Hintergrund: Ich wohne in einer WG und ich möchte gerne eine Funktion bauen mit der ich Benachrichtigungen an alle meine Mitbewohner senden kann. Ich arbeite bisher mit jeweils einem structure für Kodi und Pushover.
Ich nutze dann:

Zitat
fhem ("set Kodi_structure msg 'Das ist eine Testnachricht' FHEM 15000 1")
fhem ("set Pushover_structure msg 'FHEM' 'Test\nDas ist eine Testnachricht' '' 0 ''")

Ich würde jetzt gerne eine Funktion bauen, bei der ich einen String als Nachricht mitgeben kann, der dann an beide structures gesendet wird.

Ich habe jetzt in die 99_myUtils.pm folgende Zeilen eingefügt:

Zitat
sub SCR_Benachrichtigung
{
my ($obj) = @_;
fhem ("set Kodi_structure msg $obj FHEM 15000 1");
fhem ("set Pushover_structure msg 'FHEM' $obj '' 0 ''");
}

In meiner fhem.cfg habe ich folgenden Notify und TestTrigger:

Zitat
define Nachricht dummy
attr Nachricht room Test

define Benachrichtung notify Nachricht {SCR_Benachrichtung("$EVENT")}
attr Benachrichtung room Test
attr Benachrichtung verbose 5

Wenn ich jetzt "set Nachricht Test" setze, sollte doch eigentlich der String "Test" als $EVENT an die Funktion SCR_Benachrichtigung mitgegeben werden oder verstehe ich das falsch?

Das Log zeigt mir folgende Fehlermeldung

Zitat2015.07.08 17:37:24 5: Triggering Benachrichtung
2015.07.08 17:37:24 4: Benachrichtung exec {SCR_Benachrichtung("$EVENT")}
2015.07.08 17:37:24 3: Benachrichtung return value: Undefined subroutine &main::SCR_Benachrichtung called at (eval 207469) line 1.


Vielen Dank für Eure Hilfe.

JoWiemann

Hallo,

irgendwie sieht der Code nicht vollständig bzw. Syntaxkonform aus.

Es fehlen ; und die schließende Klammer }

Und, hast du auch ein reload 99_myUtils.pm gemacht.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

solidphili

Hi,

ich hab einfach nur beim copy-pasten gefailt. Natürlich waren die Semikolons und die schließende Klammer schon im Code drin. (Habs auch mal oben editiert)

Vielleicht trotzdem ne Idee, woran es liegen könnte? Ich kann halt kein perl und mir nur mit der commandref und nen paar google Anleitungen das Nötigste beigebracht...

Markus64

Zitat von: solidphili am 08 Juli 2015, 22:50:46
Hi,

ich hab einfach nur beim copy-pasten gefailt. Natürlich waren die Semikolons und die schließende Klammer schon im Code drin. (Habs auch mal oben editiert)

Vielleicht trotzdem ne Idee, woran es liegen könnte? Ich kann halt kein perl und mir nur mit der commandref und nen paar google Anleitungen das Nötigste beigebracht...
Fehlt da nicht ein ($) hinter der Funktionsdeklaration?

Markus

solidphili

Zitat von: Markus64 am 09 Juli 2015, 02:53:20
Fehlt da nicht ein ($) hinter der Funktionsdeklaration?

Markus
Hi,

das hatte ich auch schon probiert. Dann sieht der Code so aus:

sub SCR_Benachrichtigung($)
{
my ($obj) = @_;
fhem ("set Kodi_structure msg $obj FHEM 15000 1");
fhem ("set Pushover_structure msg 'FHEM' $obj '' 0 ''");
}


Und die Fehlermeldung nach dem "reload" und dem Triggern des Notifys so:

Zitat
2015.07.09 08:32:41 1: PERL WARNING: Prototype mismatch: sub main::SCR_Benachrichtigung: none vs ($) at ./FHEM/99_myUtils.pm line 62.
2015.07.09 08:32:41 1: PERL WARNING: Subroutine SCR_Benachrichtigung redefined at ./FHEM/99_myUtils.pm line 58.
2015.07.09 08:33:13 5: Triggering Benachrichtung
2015.07.09 08:33:13 4: Benachrichtung exec {SCR_Benachrichtung("$EVENT")}
2015.07.09 08:33:13 3: Benachrichtung return value: Undefined subroutine &main::SCR_Benachrichtung called at (eval 11970) line 1.

Markus64

Zitat von: solidphili am 09 Juli 2015, 08:43:05
Hi,

das hatte ich auch schon probiert. Dann sieht der Code so aus:

sub SCR_Benachrichtigung($)
{
my ($obj) = @_;
fhem ("set Kodi_structure msg $obj FHEM 15000 1");
fhem ("set Pushover_structure msg 'FHEM' $obj '' 0 ''");
}


Und die Fehlermeldung nach dem "reload" und dem Triggern des Notifys so:
Soweit ich sehe ein Schreibfehler:  benachricht i gung <> benachricht ung

Prüf mal

Markus

Hollo

Probier es doch erstmal ganz einfach.


define Nachricht dummy
attr Nachricht room Test



define Benachrichtung notify Nachricht {SCR_Benachrichtigung}
attr Benachrichtung room Test
attr Benachrichtung verbose 5



sub
SCR_Benachrichtigung()
    {
     my $text = Value("Nachricht");
    fhem ("set Kodi_structure msg $text FHEM 15000 1");
    fhem ("set Pushover_structure msg 'FHEM' $text '' 0 ''");
    }


Sobald Du Deinem Dummy Nachricht einen Inhalt gibst, reagiert das notify.
Dieses ruft einfach nur Deine Funktion auf.
In der Funktion wird der Inhalt des Dummy ausgelesen und als Text Deinen Aufrufen gegeben.
Ungetestet, aber sollte so funktionieren.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

solidphili

Hi Hollo,

genauso hab ichs im Endeffekt gemacht :-)


myUtils.pm

...
sub
SCR_Benachrichtigung
{
my $obj=ReadingsVal("Benachrichtigung","state","");
fhem ("set Kodi_structure msg '${obj}' FHEM 15000 1");
fhem ("set Pushover_structure msg 'FHEM' '${obj}' '' 0 ''");
}
...


fhem.cfg

define Benachrichtigung dummy
attr Benachrichtigung event-on-change-reading state
attr Benachrichtigung group Ereignisse
attr Benachrichtigung room Ereignisse,Haus
define Message.Notify notify Benachrichtigung {SCR_Benachrichtigung}
attr Message.Notify room Test



Nachrichten versende ich jetzt mit "set Benachrichtigung Test Nachricht"

Trotzdem würde mich schon noch interessieren, warum ich die Funktion nicht hinbekommen habe ;-)

Hollo

Zitat von: solidphili am 11 Juli 2015, 09:07:09
Hi Hollo,
genauso hab ichs im Endeffekt gemacht :-)
Freut mich das es klappt und danke für die Rückmeldung.

ZitatTrotzdem würde mich schon noch interessieren, warum ich die Funktion nicht hinbekommen habe ;-)
Ich gehe davon aus, dass es an Deinem Funktionsaufruf im notify lag.
{SCR_Benachrichtung("$EVENT")}
Entweder hattest Du da wirklich den Tippfehler bei Benachrichtigung drin; oder es lag am "$EVENT" .
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"