FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: eckonator am 26 August 2019, 22:54:01

Titel: return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: eckonator am 26 August 2019, 22:54:01
Hi zusammen,
wie kann ich den return-Wert einer Routine aus meiner 99_myUtils.pm in einer Push Message ausgeben?

Zunächst hier meine Routine:


package main;
use strict;
use warnings;
use DateTime::Format::Strptime;
use Date::Language;

sub formatDateTime($$$) {

    # {formatDateTime("DWD_Unwetterwarnung", "a_0_onset", "%A, %d. %B %Y ab %k Uhr")}
    # {formatDateTime("DWD_Unwetterwarnung", "a_0_expires", "%A, %d. %B %Y um %k Uhr")}
    # https://metacpan.org/pod/Date::Format

    my ($Device, $DeviceReading, $formatedDatePattern) = @_;
    my $datetime = ReadingsVal($Device, $DeviceReading,""); # 2019-08-27 19:00:00
    my $pattern = "%Y-%m-%d %H:%M:%S";
    my $strp = DateTime::Format::Strptime->new( pattern => $pattern );
    my $dt = $strp->parse_datetime( $datetime );
    my $timestamp = $dt->epoch; # 1292360775

    my $lang = Date::Language->new('German');
    my $formatedDatetime = $lang->time2str($formatedDatePattern, $timestamp);
    return $formatedDatetime;
}


Wenn ich diese nun versuche wie folgt zu pushen, wird der Funktionsname wie normaler Text behandelt und 1zu1 angezeigt. Ich will aber, dass der Return-Wert der Funktion an der Stelle angezeigt wird. Was muß ich tun?



# DWD Unwetterwarnung 1
define Meldung_Unwetter_Warnung1 DOIF ([DWD_Unwetterwarnung:a_count] eq "1") \
  set pushmsg msg '[DWD_Unwetterwarnung:a_0_headline]: ' 'Im Zeitraum von {formatDateTime("DWD_Unwetterwarnung", "a_0_onset", "%A, %d. %B %Y ab %k Uhr")} bis {formatDateTime("DWD_Unwetterwarnung", "a_0_expires", "%A, %d. %B %Y um %k Uhr")}'



Freue mich über eure Hilfe  :D
Titel: Antw:return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: Gidiano am 26 August 2019, 23:16:11
Willkommen im Club, ich habe gerade was ähnliches gepostet.
Ich bin zwar nur direkt im fhem unterwegs, aber musst Du die String-Fragemente und Variablen nicht mit einem "&" (oder dgl.) verheiraten? Mit den Anführungszeichen machst Du aus den Variablen doch selbst den Text.
Also mit meinem laienhaften Verständnis müsste es doch z. B. sein:
%A &","& %d &"."& %B %Y & " ab " & %k & " Uhr"
statt
"%A, %d. %B %Y ab %k Uhr"

Also immer eine Variable, dann den String drankleben usw.

Viel Erfolg von einem Einäugigen unter den Blinden
Christian
Titel: Antw:return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: eckonator am 26 August 2019, 23:28:35
Hi Christian,
die Funktion selbst tut was sie soll, das habe ich getestet, nur wird der Funktionsaufruf als Text interpretiert
und genauso ausgegeben. In PHP wüsste ich, wie ich Text und Funktion mit einander verkette, aber Perl ist mein KnowHow leider bescheiden.

Ich hoffe jemand kann hier aufklären wie es geht.
Titel: Antw:return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: Otto123 am 27 August 2019, 00:41:51
Hi,

zu dem Code weiß ich eigentlich nicht was ich sagen soll.
Der DOIF Syntax ist so:
define name DOIF (Bedingung) (Ausführung)
Bei Dir fehlen da schon mal die Klammern.

für das eigentliche Problem hilft set magic (findet man in der Doku beim set Befehl) damit kann man überall in FHEM so  etwas machen:
set name Jetzt kommt irgendein Text {(Hier steht ein Perlaufruf)} und hier geht der Text weiter.
Der Teil {()} wird durch den Rückgabewert des Perlausdruckes ersetzt.

Sowas geht auch, aber ohne ' '
set pushmsg msg [DWD_Unwetterwarnung:a_0_headline]: ...
BTW: ich hoffe, dass was da gepostet ist, ist nicht der komplette Inhalt der 99_myUtils.pm? ::)

Ich habe kein pushmsg im Einsatz und weiß daher nicht ob die Stringzeichen ' ' dort gebraucht werden ;)

Gruß Otto
Titel: Antw:return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: supernova1963 am 27 August 2019, 06:48:23
Vielleicht,
da ich nicht weiß, ob der 'set pushest msg' Befehl überhaupt Perl zuläßt, alternativ, dem DWD_Unwetter_Warnung1 device die beiden gewünschten Aufbereitungen als userReadings hinzufügen, und, in der msg nur die Readings abrufen?


attr DWD_Unwetter_Warnung1 userReadings von {formatDateTime("DWD_Unwetterwarnung", "a_0_onset", "%A, %d. %B %Y ab %k Uhr")}, bis {formatDateTime("DWD_Unwetterwarnung", "a_0_expires", "%A, %d. %B %Y um %k Uhr")}

Völlig ungetestet, nur als möglicher 'workarround'!
Titel: Antw:return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: eckonator am 23 September 2019, 20:43:56
Danke @supernova1963 - so klappt es. Danke für diese elegante Lösung das Problem zu umfahren  :D
Titel: Antw:return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: Naked Snake am 17 August 2022, 17:28:29
Hallo Allerseits,

ich beschäftige mich auch seit einigen Tagen mit dem Thema und möchte, um in die Materie zu kommen bei meinem Müllplan immer einen Tag vorher Pushnachrichten auf dem Smartphone erhalten. Ich habe soweit in Fhem alles integriert nur klappt das mit den Pushnachrichten noch nicht so ganz. Ich weiß nicht genau wo ich meinen User-Token und API-Token von pushover.net einsetzen soll.
Ich habe dabei das Tutorial von Haus-Automatisierung.com befolgt und auch den passenden Programmtext, nur kenne ich mich nicht wirklich mit Perl aus und noch ich nicht in der Lage die Token so in den Quellcode einzubinden, dass es funktioniert. Würde mich um Hilfe bzw. einen Ratschlag eines Erfahreneren freuen!

Tutorial : https://www.youtube.com/watch?v=HpZ2m0C3vb0

# Enter you functions below _this_ line.

define doif_Abfall DOIF ([19:30] and [Muelltonnen:next_days] == 1)\
(set WEB_Pushover msg 'Müll' 'Morgen wird [Muelltonnen:next_text] abgeholt')\
DOELSEIF ([07:00] and [Muelltonnen:now_text] ne "")\
(set WEB_Pushover msg 'Müll' 'Heute wird [Muelltonnen:now_text] abgeholt')
attr doif_Abfall do always
attr doif_Abfall checkReadingEvent 1

system("curl -s -F 'token=a9rwh6js4kv4bwqr91detmsg' -F 'user=uxpyw9nvvscxibogbbg9stpuo' -F 'message=Morgen wird [Muelltonnen:next_text] abgeholt' https://api.pushover.net/1/messages.json");

1;



Vielen Dank vorab!
Titel: Antw:return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: MadMax-FHEM am 17 August 2022, 18:53:02
Zitat
Ich habe dabei das Tutorial von Haus-Automatisierung.com befolgt...

Wenn du es von DORT hast, warum dann nicht auch DORT nachfragen? ;)

Was du gepostet hast, hast du (so wie es aussieht) in eine myUtls gesteckt ABER: es ist KEIN Perl!

Es ist die Definition eines DOIF!
Das gehört in die fhem.cfg respektive Config-DB...
...UND: das bitte über die fhem-üblichen Möglichkeiten, wie:

FhemWeb-cmd oder RawDef usw.

Der system-Aufruf muss dann ja wohl (verm.) irgendwo ins DOIF?

Dieser Aufruf ist aber BLOCKIEREND!
Es gibt bessere Möglichkeiten und für Pushover sogar ein Modul?
(ich nutze Telegram)
EDIT: ja, gibt es Module: 70_Pushover.pm Maintainer: loredo Forum: Unterstützende Dienste

D.h. erst mal (noch mal) fhem Basics!
Dann, wenn es tatsächlich ein DOIF in fhem ist u.U. einen NEUEN Thread im Unterforum DOIF aufmachen und dort dann entsprechend weiter fragen (falls es dann noch Fragen gibt)...

Unterforum finden: "help DOIF" in fhem-Web... ;)
Zitat von: help DOIF
Module: 98_DOIF.pm Maintainer: damian-s Forum: Automatisierung/DOIF

EDIT: die fhem-Infoquellen kennst du?
https://wiki.fhem.de/wiki/99_myUtils_anlegen
usw.

Gruß, Joachim
Titel: Antw:return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: DetlefR am 17 August 2022, 19:50:41
@Naked Snake

Es ist zwar sinnvoll, die Credentials auf dem Bild auszugrauen.
Aber solange sie im Text noch sichtbar sind ist das sinnlos.
Editiere mal deinen letzten Beitrag und nimm das raus.
Titel: Antw:return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?
Beitrag von: Naked Snake am 17 August 2022, 19:55:26
Hätte ich vorher erwähnen sollen, die Keys, sind geändert worden, habe dort alle paar Zeichen ein Symbol gelöscht, also keine bange. Die Keys sind fürs bessere Veranschaulichen im Code geblieben, aber stimmen mit meinen nicht überein.