Autor Thema: return-Wert einer Funktion aus der 99_myUtils.pm mit Pushover versenden?  (Gelesen 1136 mal)

Offline eckonator

  • Jr. Member
  • **
  • Beiträge: 77
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
FHEM 5.9 | PiHole | MagicMirror2 | Fritz!Box 7590 (Basis) + 2x Fritz!Box 4040 (IP-Client) | Amazon DOT | HomeBridge | Max!Cube (geflasht) + Max Komponenten | Harmony Hub | YeeLight Bulbs | G-Homa und Fritz!DECT Steckdosen

Offline Gidiano

  • Jr. Member
  • **
  • Beiträge: 65
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
Grüße,
Christian

Offline eckonator

  • Jr. Member
  • **
  • Beiträge: 77
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.
FHEM 5.9 | PiHole | MagicMirror2 | Fritz!Box 7590 (Basis) + 2x Fritz!Box 4040 (IP-Client) | Amazon DOT | HomeBridge | Max!Cube (geflasht) + Max Komponenten | Harmony Hub | YeeLight Bulbs | G-Homa und Fritz!DECT Steckdosen

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 21472
  • schon mal restore trainiert?
    • Otto's Technik Blog
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
« Letzte Änderung: 27 August 2019, 00:45:00 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Offline supernova1963

  • Sr. Member
  • ****
  • Beiträge: 534
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'!
Zustimmung Zustimmung x 1 Liste anzeigen

Offline eckonator

  • Jr. Member
  • **
  • Beiträge: 77
Danke @supernova1963 - so klappt es. Danke für diese elegante Lösung das Problem zu umfahren  :D
FHEM 5.9 | PiHole | MagicMirror2 | Fritz!Box 7590 (Basis) + 2x Fritz!Box 4040 (IP-Client) | Amazon DOT | HomeBridge | Max!Cube (geflasht) + Max Komponenten | Harmony Hub | YeeLight Bulbs | G-Homa und Fritz!DECT Steckdosen

Offline Naked Snake

  • New Member
  • *
  • Beiträge: 7
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!

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 12737
  • NIVEAu ist keine Creme...
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
« Letzte Änderung: 17 August 2022, 18:56:42 von MadMax-FHEM »
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline DetlefR

  • Full Member
  • ***
  • Beiträge: 297
@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.

Offline Naked Snake

  • New Member
  • *
  • Beiträge: 7
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.