Telegram - Message wiederholen falls das Senden nicht erfolgreich war

Begonnen von Joachim2112, 27 Mai 2020, 10:43:19

Vorheriges Thema - Nächstes Thema

Joachim2112

Hallo,
ich habe FHEM auf meinem Raspberry (per WLAN angekoppelt) laufen und kann wunderbar Telegram Nachrichten senden und empfangen. Soweit - so gut.
Nun habe ich folgendes Problem:
Wenn der Raspi "offline" ist kann er die Nachricht nicht versenden - klar.
Aber  - gibt es eine Möglichkeit, die Meldung zu "speichern" und zu wiederholen, wenn das WLAN wieder verfügbar ist?

miot

Hallo,

Gegenfrage: Wie oft ist Dein Raspi denn 'offline'?
Vielleicht solltest Du darueber nachdenken die Ursache zu beseitigen anstatt an den Folgen herumzubasteln.

Gruss
Michael

Joachim2112

Mein WLAN ist über Nacht absichtlich aus! Hoffentlich startet das nicht eine Flut warum und wieso  8) :o
Und er verbindet sich sobald WLAN wieder zur Verfügung steht auch brav

Joachim2112

Noch ein Versuch der Anfrage...
Niemand da der bereits das Problem hat und kennt bzw. einen Lösungsansatz bietet?
Evtl. könnte man natürlich über Precense arbeiten und dann selber "queuen" ...

MadMax-FHEM

Soweit mir bekannt gibt es keinen Automatismus (außer vielleicht ein kurzes mal noch mal versuchen)...

Evtl. macht das "Modul" msg sowas!?
Kenne ich nur dem "Namen nach", verwende es aber nicht.

Ansonsten wirst du es selber "programmieren" müssen...

Und da ist halt die Frage was dir vorschwebt!?

Also: einfach z.B. alle 10min immer wieder schicken bis ein Client ein "Stopp" geschickt hat!? Oder bis beim Senden kein Fehler kommt (wobei ich jetzt nicht weiß, ob man einen Sendefehler mitbekommt) oder einfach "sammeln" und dann alle auf einmal raus, wenn man weiß, dass das WLAN wieder an ist (z.B. durch ein Presence auf "Internet")...

Es gibt also viele Möglichkeiten.
Vielleicht wie geschrieben erst mal msg anschauen und wenn das nicht hilft/reicht überlegen WIE du es am liebsten haben möchtest und dann "hier" erneut nachfragen und zwar mit einer konkreten "Idee"...

Ansonsten bzgl. WLAN aus bzw. KEIN Internet für fhem: das Attribut dnsServer beim "global Device" ist gesetzt!? Oder hast du keine Module (außer Telegram) die Internet brauchen!?

Gruß, Joachim
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)

viegener

Im Prinzip enthält das Telegram-Modul bereits einen Queuing mechanismus der auch Sendeversuche wiederholt (maxRetries ist das dazugehörige Attribut). Also könntest Du diesen Wert erhöhen, denn die Retries finden mit wachsender Wartezeit statt.

Wenn ich das richtig erinnere wird das erste Resend nach 10 Sekunden, dann nach 100 Sekunden, dann nach 1000 Sekunden usw. ausgelöst.

Ich verstehe zwar nicht wirklich wie eine Hausautomaisierung funktioniert, die nachts nicht aktiv sein kann funktioniert, aber das ist ein anderes Problem.

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

moskito

ZitatIch verstehe zwar nicht wirklich wie eine Hausautomaisierung funktioniert, die nachts nicht aktiv sein kann funktioniert, aber das ist ein anderes Problem.
Na aktiv ist sie doch noch, hat halt nur kein Internet.  ;D
Und wenn da nix zeitkritisches gemeldet wird, dann hat´s auch Zeit bis zum Aufstehen oder Frühstück...
FHEM auf Intel NUC/Proxmox & Debian 12 + HM-CFG-USB + zigbee2mqtt + Zwave + Enocean

viegener

Zitat von: moskito am 28 Mai 2020, 20:24:29
Na aktiv ist sie doch noch, hat halt nur kein Internet.  ;D
Und wenn da nix zeitkritisches gemeldet wird, dann hat´s auch Zeit bis zum Aufstehen oder Frühstück...

Naja nicht nur ohne Internet - denn auch im heimischen Netz läuft ja nichts mehr, also auch keine Infos über alles was nicht direkt an FHEM empfangen werden kann und kein UI und damit nur eingeschränkter Zugriff. Aber das ist wirklich offtopic jetzt
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

flummy1978

Moinsen,

Zitat von: moskito am 28 Mai 2020, 20:24:29
Na aktiv ist sie doch noch, hat halt nur kein Internet.  ;D
Und wenn da nix zeitkritisches gemeldet wird, dann hat´s auch Zeit bis zum Aufstehen oder Frühstück...
Ich würde ja (nur für den RasPi) das Netz nicht kappen. Wenn der Rest aus Familiengründen oder sonstiges aus ist, (Was ich ehrlich gesagt sogar genial finde)ist es ja ok. Der Raspi soll ja nur die Möglichkeit haben.... Man kann ja Nachrichten aus Telegram eben dann MUTE verschicken (mache ich auch ab 22 Uhr) OT - Ende ....  ;) WENN NICHT:

Ich weiss nicht wie fit Du mit Perl ansich bist, bzw mit etwas komplizierterem Umgang mit den eigenen Funktionen. Ich nutze selbst auch nicht die MSG Funktion und habe mir für manche Sachen ein eigenes Benachrichtigungssystem aufgebaut. Sortiert nach kritisch, nicht kritisch, home / away, wir vor der Nachricht jeweils die Richtung geprüft. Lange Rede kurzer Sinn Nachrichten wie z.B. dass das Kellerlicht abgeschaltet wurde als wir nicht da waren, oder die Pumpe aus dem Standby in ganz aus - interessieren mich nicht wenn ich untwergs bin also werden diese "gespeichert".
Der Erste der nach Hause kommt, bekommt diese dann als "Abwesenheitsnachricht":

Kleine Code Auszüge mit entsprechender Erklärung. Wenn Du Dich mit Perl GAR nicht auskennst, ist das wohl eher nichts für Dich. Mit reinen Boardmitteln, weiß ich leider nicht ob sowas möglich wäre und wenn ja wie.

Abfragen welche Nachricht, ob jemand zu Hause ist, die Nachricht ggf auf einem der TVs / Receiver angezeigt werden kann usw usf.... WENN NICHT ......



sub addabsentmsg ($$$) {
my ($device, $timereading, $message) = @_;
my $count = ReadingsVal("dum_sys_absentmsg",'count',0);
$count++;
my $zeit=strftime("%d.%m.%Y, %H:%M:%S",localtime());
fhem "setreading dum_sys_absentmsg message_".$count." $zeit: $message"; # ==> In den Dummy dum_sys_absentmsg  werden Nachrichten nummerriert und eingetragen
fhem "setreading dum_sys_absentmsg count $count"; # ==> Der Zähler wird erhöht
return();
}



Wenn jemand nach Hausekommt, hat der erste der im Netz angekommen ist gewonnen und wird zugespamt:



sub getabsentmsg ($) {

my ($name) =@_;
my $lastActivityresident = ReadingsVal("RESIDENT_ALL",'lastActivityBy',0); # ==> Wer ist aktuell rein gekommen

my $count = ReadingsVal("dum_sys_absentmsg",'count',0);
# Abbrechen wenn es keine Nachrichten gibt
return undef if (!$count);

## ====> Nachrichten und Menueknopf senden:

my $mainbutton = " ( 99. ⬆️ ...XXXXX...  ⬆️) ";
fhem "set dev_SYS_MSG_Bot queryInline \@$lastActivityresident $mainbutton FHEM Bot Abwesenheitsnachrichten:";

for my $i (1..$count)
{
my $message = my $count = ReadingsVal("dum_sys_absentmsg","message_".$i,0);
#Log(1, "$lastActivityresident $message");
fhem "set dev_SYS_MSG_Bot message \@$lastActivityresident $message";
}

# Nachrichten und Zähler löschen (Damit diese nicht doppelt versandt werden, wenn man kurze Zeit später wieder "rein kommt")
fhem "setreading dum_sys_absentmsg count 0";
fhem "deletereading dum_sys_absentmsg message_.*";
}


Wenn Du was mit Perl anfangen kannst, kannst Du das ganz sicher leicht für Dich umbauen. In dem Fall wäre nicht die abfrage ob jemand zu hause ist, sondern ob das Telegram MSG Device online ist.

Vielleicht hilft das ja weiter :)

Viele Grüße
Andreas

Guybrush

sowas bei einem raspberry zu machen, halte ich für Nonsense. Der verbraucht im idle 3 Watt. Bei 8h Schlafenszeit sind das 0,024 kWh / Tag. Aufs Jahr gerechnet wären es keine 9 kWh. Für die Stromersparnis bekommst du nicht mal einen Döner...

Ich bräuchte das Queuing allerdings grundsätzlich auch. Ich hab bei meinem Automower Rasenmäher das Wlan Modul von Robonect verbaut. (Leider) habe ich einen größeren Garten und daher ein paar Bereiche, die vom WLan nicht abgedeckt sind. Wenn ich also in dem Moment dem Rasenmäher einen Befehl schicke, in dem er nicht im WLan ist, funktioniert die Automation entsprechend nicht mehr. Ich hatte mir jetzt insoweit überlegt, dass ich das über eine Funktion / AT löse. Also erst abfragen, ob der connceted ist und dann erst dann den Befehl schicken und wenn nicht, dann über AT mit 00:01:00 es nochmal triggern. Wüßte jetzt jedenfalls keine andere Lösung, aber hab FHEM auch noch nicht solang im Einsatz...

viegener

Zitat von: Guybrush am 30 Mai 2020, 16:30:00
sowas bei einem raspberry zu machen, halte ich für Nonsense. Der verbraucht im idle 3 Watt. Bei 8h Schlafenszeit sind das 0,024 kWh / Tag. Aufs Jahr gerechnet wären es keine 9 kWh. Für die Stromersparnis bekommst du nicht mal einen Döner...

Ich bräuchte das Queuing allerdings grundsätzlich auch. Ich hab bei meinem Automower Rasenmäher das Wlan Modul von Robonect verbaut. (Leider) habe ich einen größeren Garten und daher ein paar Bereiche, die vom WLan nicht abgedeckt sind. Wenn ich also in dem Moment dem Rasenmäher einen Befehl schicke, in dem er nicht im WLan ist, funktioniert die Automation entsprechend nicht mehr. Ich hatte mir jetzt insoweit überlegt, dass ich das über eine Funktion / AT löse. Also erst abfragen, ob der connceted ist und dann erst dann den Befehl schicken und wenn nicht, dann über AT mit 00:01:00 es nochmal triggern. Wüßte jetzt jedenfalls keine andere Lösung, aber hab FHEM auch noch nicht solang im Einsatz...

ich vermute mal Dein Rasenmäher reagiert nicht auf Telegram-Kommandos?  ;) Dann ist das hier etwas off topic...

Aber zu Deiner Frage - generell ist das mit dem Queuing so eine Sache. Manchmal möchte man Befehle, die bei Nichterreichbarkeit versendet wurden nachholen. Manchmal ist das aber auch kontraproduktiv. Denn der Zustand des Gerätes könnte nicht mehr zum ursprünglichen Wunsch passen.

Generell kommt der Ansatz zum Queuing darauf an, welche Geräte und damit welches Modul Du verwendest für Deinen Rasenmäher. Grundsätzlich ist aber Dein Ansatz richtig. Man kann das nur komfortabler (aber auch aufwändiger gestalten).
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können