Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

Begonnen von viegener, 20 Juni 2015, 18:59:41

Vorheriges Thema - Nächstes Thema

co010

ja Ok,

eingefügt in Putty:           /home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -C -d -P 12350 -L /home/pi/telegram.log -l 10 -N -R &

das ist der Inhalt der Telegram.log

Telegram-cli version 1.3.3, Copyright (C) 2013-2015 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
Telegram-cli uses libtgl version 2.0.3
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
Telegram-cli uses libpython version 2.7.3
I: config dir=[/home/pi/.telegram-cli]
[warn] Epoll ADD(1) on fd 0 failed.  Old events were 0; read change was 1 (add); write change was 0 (none): Operation not permitted

eingefügt in FHEM:       define Telegram Telegram raspberrypi:12350

aber immer noch STATE disconnected

co010

viegener

Zitat von: co010 am 01 August 2015, 21:43:51
ja Ok,

eingefügt in Putty:           /home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -C -d -P 12350 -L /home/pi/telegram.log -l 10 -N -R &

das ist der Inhalt der Telegram.log

Telegram-cli version 1.3.3, Copyright (C) 2013-2015 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
Telegram-cli uses libtgl version 2.0.3
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
Telegram-cli uses libpython version 2.7.3
I: config dir=[/home/pi/.telegram-cli]
[warn] Epoll ADD(1) on fd 0 failed.  Old events were 0; read change was 1 (add); write change was 0 (none): Operation not permitted

eingefügt in FHEM:       define Telegram Telegram raspberrypi:12350

aber immer noch STATE disconnected

co010

Der logfile sieht an sich ok aus, die Warnung habe ich auch in meinem logfile gefunden. Vielleicht hat es einfach etwas gedauert bis sich fhem verbindet, mach doch im Browser nochmals einen Refresh der Seite?

Ansonsten:

Wenn telegram-cli und fhem auf demselben Rechner laufen, dann versuche mal
define Telegram Telegram localhost:12350

Wenn das nicht geht versuche mal zu überprüfen, ob telegram läuf. in Putty:
ps aux | grep tele
Alles in einer Zeile!
Dann müssten 2 Prozesse auf gelistet werden, einer ist das obige Kommando und einer telegram-cli. Wenn nur ein Prozess kommt, läuft telegram-cli nicht.

Sollte es laufen, kannst Du versuchen Dich über putty statt mit port 12350 auf dem raspberrypi zu verbinden (also in putty host raspberrypi port 12350 type telnet). Dann müsstest Du in der Lage sein z.B. mit help oder anderen Kommandos Antowrten von dem laufenden telegram-cli zu erhalten.

Ausserdem kannst Du natürlich Deinem telegram account auf dem pi mal eine Nachricht schicken und sehen ob der Logfile wächst...



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

co010

Hallo,

ich habe es hinbekommen es geht ,eingetragen hab ich jetzt   -localhost:1230  (port nur 4 Stellen) nicht 5stellig wie in der Doku.

Ich habe mal noch die Telegram Redame.md Übersetzt im Anhang

Danke Johannes für deine Hilfe.

mfg co010

Telegram Redame.md

Telegramm

Das Telegramm-Modul ermöglicht die Nutzung des Instant Messaging-Dienst Telegramm von FHEM in beide Richtungen (Senden und Empfangen). So können FHEM Telegramm für Mitteilungen von Staaten oder Warnungen verwenden, können allgemeine Informationen und Aktionen ausgelöst werden.

Voraussetzung ist die Installation des Telegramm-cli (für UNIX) finden Sie hier https://github.com/vysheng/tg Telegramm-cli Bedürfnisse konfiguriert und für die Verwendung mit Telegramm registriert werden. Am besten ist die Verwendung eines dedizierten Telefonnummer für Telegramm, so dass Nachrichten an und von einem Account verschickt und lesen Status der Nachrichten verwaltet werden wird. Telegramm-cli muss als Daemon auf einen TCP-Port für die Kommunikation mit FHEM aktivieren ausführen.

    Telegramm-cli -k <Pfad zur Schlüsseldatei z.B. tg-server.pub> -W -C -d -P <Portnummer> [--accept-any-tcp] -L <logfile> -l 20 -N -R &

    -C
        ERFORDERLICH: Farbausgabe zu deaktivieren, um Terminal Farbe Escape-Sequenzen in Reaktionen zu vermeiden. Ansonsten Parser auf diese versagt
    -d
        ERFORDERLICH: Laufen Telegramm-CLI als Daemon (von Klemme Hintergrundprozess entkoppelt)
    -k <Pfad zur Schlüsseldatei z.B. tg-server.pub>
        Pfad zur Schlüsseldatei für Telegramm-cli, in der Regel etwas wie tg-server.pub
    -L <Logfile>
        Geben Sie den Pfad zu der Protokolldatei für die Telegramm-cli. Dies ist besonders hilfreich für Debugging-Zwecken und in Verbindung mit dem specifed Protokollebene zB verwendet (L 20)
    -l <Protokollstufe>
        numerischen Protokollebene für die Ausgabe in Protokolldatei
    -N
        ERFORDERLICH: in der Lage sein mit msgids umzugehen
    -P <Portnummer>
        ERFORDERLICH: Portnummer auf dem der Dämon sein sollte hören zB 12345
    -R
        Readline deaktivieren, um zu vermeiden Logfile mit Bearbeitungssequenzen gefüllt
    -v
        Ausführlichere Nachrichten Nachrichten
    -W
        REQUIRED ?: erscheint notwendig, um sicherzustellen, die Kommunikation mit Telegramm-Server korrekt eingerichtet
    --accept-any-tcp
        Ermöglicht den Zugriff auf den Daemon auch von entfernten Maschinen. Dies ist nur der Telegramm-cli nicht auf demselben Host als FHEM laufenden Bedarf.
        ACHTUNG: Es gibt in der Regel keine zusätzlichen Sicherheitsanforderung zu Telegramm-CLI-Zugriff, also benutzen Sie dies mit Vorsicht!



Mehr Details zu den Befehlszeilenparameter von Telegramm-cli finden Sie hier: Laufen Telegramm CLI als Daemon, sondern starten Sie es noch manuell als Hintergrund-Daemon-Prozess. Telegramm-cli -k tg-server.pub -W -C -d -P 12345 --accept-any-tcp -L telegram.log -l 20 -N -R -vvv &

Das Telegramm Modul ermöglicht Empfang von (Text-) Nachrichten an jeden Peer (Telegramm user) und sendet Textnachrichten an die als Attribut festgelegten Standard Peer.



Einschränkungen und mögliche Erweiterungen
        Message-ID Handhabung ist derzeit noch nicht implementiert
        Dies bedeutet insbesondere, dass Nachrichten während der Ausfallzeit von Telegramm-cli und / oder FHEM empfangen werden nicht behandelt, wenn FHEM   und Telegramm-cli sind wieder online bekommen.
        Laufende Telegramm-cli als Daemon mit Unix-Sockets wird derzeit nicht unterstützt


    Definieren
        definieren <name> Telegramm [<Hostname>:] <port>

Definiert ein Telegramm Gerät entweder über die Angabe nur eine Portnummer oder remote auf einem anderen Host durch Angabe von Host und Portnummer durch Doppelpunkt getrennt lokal auf dem Server-Host ausgeführt FHEM. Beispiele:
            definieren user1 Telegramm 12345
            definieren Admin Telegramm myserver: 22222



    Einstellen
        set <name> <, was> [<value>]

        wobei <, was> ist eine der

        Nachricht <text>
        Sendet die angegebene Nachricht an den aktuell definierten Standard Peer-Benutzer
        messageTo <Peer> <text>
        Sendet die angegebene Nachricht zum gegebenen Peer. Peer muss ohne Leerzeichen oder andere Trennzeichen angegeben werden, sollte also Räume, die durch Unterstrich ersetzt werden (zB First_Last)
        raw <raw command>
        Sendet die angegebenen rohen Befehl an den Client
        sendPhoto <file> [<caption>]
        Sendet ein Foto auf den Standard Peer. Datei ist die Angabe eines Dateiname und Pfad, die lokal auf dem Verzeichnis, in dem Telegramm-cli Prozess gestartet ist. So könnte dies ein Weg auf dem Remote-Host, auf dem Telegramm-cli läuft und daher nicht lokal auf FHEM sein.


    Erhalten
        erhalten <name> <, was> [<value>]

        wobei <, was> ist eine der

        msgById <Nachrichten-ID>
        Ruft die Nachricht von der entsprechenden Meldung id identifed


    Attribute

        defaultPeer <name>
        Geben Sie Vorname Name des Standard-Peer für das Senden von Nachrichten verwendet werden. Der Peer sollte in Form eines firstname_lastname gegeben. Für scret Kommunikation wird das! _ Automatisch als Präfix setzen.
        defaultSecret
        Verwenden Sie geheime Chat für die Kommunikation mit defaultPeer. Einschränkung: Wenn kein Geheimnis, Chat mit dem entsprechenden Peer gestartet wurde, könnte Nachrichtens scheitern. (Siehe Satz secretChat)
        cmdKeyword <keyword>
        Geben Sie einen bestimmten Text, der gesendet werden soll, damit der Rest der Nachricht als ein Befehl ausgeführt braucht. Wenn also beispielsweise zu cmdKeyword ok FHEM Sie dann wird eine Nachricht mit dieser Zeichenfolge wird als FHEM Befehl ausgeführt werden (siehe auch cmdTriggerOnly).
        Beispielsweise eine Nachricht von ok FHEM attr Telegramm Raum IM würde den Befehl attr Telegramm Raum IM ausführen und stellen ein Gerät namens Telegramm in das Zimmer IM. Das Ergebnis der cmd wird immer als Nachricht an das defaultPeer geschickt
        cmdRestrictedPeer <Peername>
        Die Ausführung von Befehlen zu beschränken nur auf Nachrichten von der der angegebenen Peername (in Form von firstname_lastname angegeben) gesendet. Eine Meldung mit der cmd und Absender wird auf die Standard Peer bei einem anderen Benutzer gesendet versuchen, gesendeten Nachrichten
        cmdTriggerOnly <0 oder 1>
        Die Ausführung von Befehlen zu beschränken nur Auslösebefehl. Wenn dies attr ist (Wert 1) gesetzt, wird nur der Name des Auslösers hat sogar angegeben werden (dh ohne vorhergehenden Statement Trigger). Wenn also beispielsweise zu cmdKeyword ok FHEM gesetzt und cmdTriggerOnly gesetzt ist, wird eine Meldung von ok FHEM someMacro würde die FHEM Befehl Trigger someMacro auszuführen.
        lastMsgId <Nummer>
        Geben Sie die letzte Meldung von Telegramm bearbeitet.
        HINWEIS: Noch nicht behandelt
        wortreich


    Messwerte

        MsgID <text>
        Die ID der zuletzt empfangenen Nachricht wird in dieser Lese gespeichert. Für geheime Chats ein Wert von -1 wird gegeben werden, da die msgids von geheimen Botschaften sind nicht Teil der fortlaufenden Nummerierung
        msgPeer <text>
        Der Absender der zuletzt empfangenen Nachricht.
        msgText <text>
        Der zuletzt empfangene Nachrichtentext wird in diesem Lese gespeichert.
        prevMsgId <text>
        Die ID der vorletzte empfangene Nachricht wird in dieser Lese gespeichert.
        prevMsgPeer <text>
        Der Absender der vorletzten empfangenen Nachricht.
        prevMsgText <text>
        Der vorletzte empfangene Nachrichtentext wird in diesem Lese gespeichert.

viegener

Zitat von: co010 am 02 August 2015, 11:26:25
Hallo,

ich habe es hinbekommen es geht ,eingetragen hab ich jetzt   -localhost:1230  (port nur 4 Stellen) nicht 5stellig wie in der Doku.

Ich habe mal noch die Telegram Redame.md Übersetzt im Anhang

Danke Johannes für deine Hilfe.


Gern geschehen.

Ja, grundsätzlich muss der Port nicht 5-stellig sein, Port 1230 sollte auch kein Problem ergeben.
Wenn es bei Dir mit port 1230 läuft heisst das, dass auch in dem Kommando zum Start von telegram-cli -P 1230 als Parameter steht. Diese beiden Werte müssen identisch sein (Also Kommandozeile für Start von telegram-cli und define in fhem).

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

co010

Hallo ,

ich hätte da mal noch 2 Fragen da jetzt das Modul-Telegram so gut läuft kann man ja so einiges damit machen,
1. wie müsste man in FHEM definieren wenn man eine Nachricht zum Pi schickt z.B. "Hoflicht an " das der entsprechende Aktor in FHEM eingeschaltet wird ?
2. gibt es auch eine Möglichkeit die Telegramm-CLI als Daemon automatisch zu Starten nach einen Stromausfall am Pi,also beim Neustart ?

mfg  co010

hexenmeister

Zitat von: co010 am 02 August 2015, 19:27:42
2. gibt es auch eine Möglichkeit die Telegramm-CLI als Daemon automatisch zu Starten nach einen Stromausfall am Pi,also beim Neustart ?
Sicher ;)

Zitat aus https://wiki.ubuntuusers.de/Dienste

ZitatEigenes Start-/Stop-Skript erstellen

Man kann natürlich eigene Start/Stop-Skripte erstellen. Dazu sollte man sich die bereits in /etc/init.d/ liegenden Skripte als Vorbild nehmen oder die offizielle Vorlage /etc/init.d/skeleton als Ausgangsbasis nutzen.

Wem die Start-/Stop-Skripte und die offizielle Vorlage zu komplex sind, der kann sich ein relativ einfaches Start-/Stop-Skript für fast jeden Zweck selbst schreiben. Man benötigt lediglich eine Datei, die auf folgendem Beispiel basiert:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          Was macht das Skript?
# Required-Start:   
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Kurze Beschreibung
# Description:       Längere Bechreibung
### END INIT INFO
# Author: Name <email@domain.tld>

# Aktionen
case "$1" in
    start)
        /opt/beispiel start
        ;;
    stop)
        /opt/beispiel stop
        ;;
    restart)
        /opt/beispiel restart
        ;;
esac

exit 0


Der Kommentar-Text im Kopfteil der Datei ist sehr wichtig und wird vom Befehl update-rc.d ausgewertet. Dieser Kommentar sollte angepasst, aber nicht gelöscht werden! Mehr zu korrekten LSB-InitSkripten findet man im Debian Wiki. Die Datei speichert man z. B. in /etc/init.d/beispiel und macht sie danach per

sudo chmod 755 /etc/init.d/beispiel

ausführbar. Anschließend fügt man das Skript mit dem Befehl update-rc.d in die entsprechenden Runlevel ein.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Sunless

Hallihallo ...

(co010) zu 1:
Ich habe das über cmdalias (http://fhem.de/commandref.html#cmdalias) gelöst.
define Alias_Hoflicht cmdalias Hoflicht .* AS {fhem("set Hoflicht $EVENT")}

Bei der Telegram-Config im FHEM musst Du dann noch cmdKeyword (das Kommando, woraus FHEM schließt, dass es einen eingetroffenen Text als Befehl ausführen soll) und defaultPeer (i.d.R. Dein Telegram-Name im Format Vorname_Nachname) setzen.

Wenn cmdKeyword = "FHEM", würde der Text zum Senden dann lauten: "FHEM Hoflicht an".


Ergänzung zum vorherigen Post - zu 2:
Beispiele für case "$1" usw ...

# Aktionen
case "$1" in
    start)
        echo "Telegram daemon start ..."
        su telegramd -c '/opt/tg/bin/telegram-cli -k /opt/tg/server.pub -W -C -d -P 2391 --accept-any-tcp -L /var/log/telegram.log -l 20 -N -R -vvv &'
        echo "... done"
        ;;
    stop)
        echo "Telegram daemon stop ..."
        sudo pkill telegram-cli
        echo "... done"
        ;;
    restart)
        echo "stopping telegram daemon..."
        sudo pkill telegram-cli
        echo "... done --- restarting ..."
        su telegramd -c '/opt/tg/bin/telegram-cli -k /opt/tg/server.pub -W -C -d -P 2391 --accept-any-tcp -L /var/log/telegram.log -l 20 -N -R -vvv &'
        echo "... done"
        ;;
esac

exit 0


Pfade und Port (Parameter -P) natürlich an Deine Konfiguration anpassen ;)

hth ...
Gruß
Sebastian
FHEM-Master@Raspi2B (CUL433,etliche CUL_TCM97001-Sensoren, zig IT-Steckdosenschalter, Squeezelite)
FHEM-Slave@Raspi (via RFHEM,wired Bewegungsmelder, Sqeezelite)
DS212+ (LMS für Squeezelite-Clients, Surveillance, Mediaserver und Datengrab)
Billig-Tablets zum Steuern (TabletUI)

Sunless

Was mir gerade noch so zum Thema generell einfällt:

Erstmal Dank dem Autor - Telegram läuft bisher sehr stabil. Hatte vorher mit yowsup experimentiert, was allerdings leider zu sehr vielen Abstürzen und somit zum Ausfall der kompletten Steuerung führte.

Hätte noch einen kleinen Verbesserungsvorschlag:
Wäre es möglich, ein Reading mit korrekt formatiertem msgPeer (mit Unterstrich) einzufügen? Ist praktisch, wenn man in einem externen Script "messageTo" benutzen möchte. Bisher behelfe ich mir mit einem Userreading
msgPeerUR {my $mpur=ReadingsVal("Telegram","msgPeer","defaultPeer"); $mpur =~ s/ /_/g ; return $mpur;}
um den Unterstrich hinzuzufügen.
Hintergrund: bei Mehrbenutzerbetrieb soll derjenige, der einen Befehl per Telegram absetzt auch die Antwort des Scriptes (z.B. den Wetterbericht) erhalten.

Gruß
Sebastian
FHEM-Master@Raspi2B (CUL433,etliche CUL_TCM97001-Sensoren, zig IT-Steckdosenschalter, Squeezelite)
FHEM-Slave@Raspi (via RFHEM,wired Bewegungsmelder, Sqeezelite)
DS212+ (LMS für Squeezelite-Clients, Surveillance, Mediaserver und Datengrab)
Billig-Tablets zum Steuern (TabletUI)

viegener

Von mir noch ein Ergönzung zur Antwort von Sebastian zu 1)

Das Attribut cmdKeyword <keyword> erlaubt es fhem mit telegram so einzurichten, dass beliebige Kommandos geschickt werden können. Der Weg über cmdalias erlaubt es elegant auch komplexe oder lange Kommandos über relativ kurze telegram messages zu senden.


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

viegener

Zitat von: Sunless am 02 August 2015, 22:00:11
Was mir gerade noch so zum Thema generell einfällt:

Erstmal Dank dem Autor - Telegram läuft bisher sehr stabil. Hatte vorher mit yowsup experimentiert, was allerdings leider zu sehr vielen Abstürzen und somit zum Ausfall der kompletten Steuerung führte.

Hätte noch einen kleinen Verbesserungsvorschlag:
Wäre es möglich, ein Reading mit korrekt formatiertem msgPeer (mit Unterstrich) einzufügen? Ist praktisch, wenn man in einem externen Script "messageTo" benutzen möchte. Bisher behelfe ich mir mit einem Userreading
msgPeerUR {my $mpur=ReadingsVal("Telegram","msgPeer","defaultPeer"); $mpur =~ s/ /_/g ; return $mpur;}
um den Unterstrich hinzuzufügen.
Hintergrund: bei Mehrbenutzerbetrieb soll derjenige, der einen Befehl per Telegram absetzt auch die Antwort des Scriptes (z.B. den Wetterbericht) erhalten.

Gruß
Sebastian

Hallo Sebastian,

ja gerne, das macht absolut Sinn, denn dann sind die peer-Namen entsprechend normalisiert.
Ist schon eingebaut und bereit zum Testen, siehe angehängte neue Version.

Gruss,
Johannes

Anmerkung: Ich untersuche gerade eine Möglichkeit mit numerischen user ids und chat ids umzugehen, dadurch wäre es möglich sicherzustellen, dass peer namen eindeutig sind, unabhängig von Vorname und Nachname.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Sunless

Supi, ging ja schnell ;)

Im Reading ist der Unterstrich nun drin und MessageTo an $msgPeer klappt .
Testen werd ich den aktiven Multiuserbetrieb allerdings erst können, wenn meine Frau mal ihr Handy für solch Spielereien herausrückt  :o

Zum Teil reagiert das Modul nach einem Restart des PI nicht auf eingehende Befehle.
Dies habe ich per DOIF gelöst, indem nach erfolgreichem FHEM-Start eine Nachricht ans Handy geschickt wird
define FHEM.init.doif DOIF ([global:?INITIALIZED])(set FHEM.init online,set Telegram message FHEM INITIALIZED)
Hilft u. U. bei berlineraxel's Problem mit der Initialisierung eines Chats? (http://forum.fhem.de/index.php/topic,38328.msg316748.html#msg316748) -> wait auf 60 gesetzt, damit FHEM genug Zeit hat, richtig durchzustarten ...

Wie und ob das auch beim Multiuserbetrieb so klappt, werde ich dann bei Gelegenheit testen.

Gruß
Sebastian
FHEM-Master@Raspi2B (CUL433,etliche CUL_TCM97001-Sensoren, zig IT-Steckdosenschalter, Squeezelite)
FHEM-Slave@Raspi (via RFHEM,wired Bewegungsmelder, Sqeezelite)
DS212+ (LMS für Squeezelite-Clients, Surveillance, Mediaserver und Datengrab)
Billig-Tablets zum Steuern (TabletUI)

viegener

Zitat von: Sunless am 03 August 2015, 00:07:53
Zum Teil reagiert das Modul nach einem Restart des PI nicht auf eingehende Befehle.

Hallo Sebastian,
tritt das Problem nur nach Neustart des PI auf oder lässt es sich auch nach Neustart von telegram-cli und/oder fhem beobachten?

Wenn ich  das richtig verstehe sendest eine Message über telegram nach fhem restart (initialized). Kommt diese Message dann auch an, oder musst Du die erwähnten 60s warten?

Ich kann das leider nur schwer nachstellen, da ich mein Produktivsystem ungerne neustarte.

Gruss,
Johannes

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

viegener

Zitat von: HolyMoly am 29 Juli 2015, 12:50:12
Hallo Johannes,

kann irgendwie nicht an non-defaultPeers versenden.

set telegram messageTo xxx_xxx Hallo Welt
FAIL: 38: can not parse arg #1

aber in der cli ist der Kontakt angelegt und versenden geht mit
msg xxx_xxx Hallo Welt

geht wunderbar. Woran könnte das liegen?

Hallo HolyMoly,
ich habe bei mir jetzt nochmals weitere Versuche gemacht und kann Dein Problem leider bei mir nicht nachstellen.

Bei mir funktioniert messageTo z.B. in folgenden Szenarien:


  • An Kontakte die bei mir angelegt sind mit
Vorname_Nachname ABER telegram erfordert exakte Wiedergabe auch der klein und Grossschreibung [/li]
[li]An gruppen chats einfach durch Angabe des chat namens[/li]
[li]User und chat in form von ids also z.B. in der Form [/li][/list]user#12345678
    [/li]

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

Sunless

Guten Morgen,
Zitat von: viegener am 03 August 2015, 01:32:32
...
tritt das Problem nur nach Neustart des PI auf oder lässt es sich auch nach Neustart von telegram-cli und/oder fhem beobachten?
Wenn ich  das richtig verstehe sendest eine Message über telegram nach fhem restart (initialized). Kommt diese Message dann auch an, oder musst Du die erwähnten 60s warten?
...

CLI und FHEM starten automatisch bei Reboot des PI. Die CLI habe ich bisher noch nicht separat neu gestartet.
Der Funktionsablauf ist genau wie Du beschrieben hast. Restart PI -> Start FHEM OK (initialized) @06:37:39 Uhr -> Nachricht auf Handy @06:38:39 Uhr
Nach Eintritt des Ereignisses (global:?INITIALIZED) wartet das DOIF 60 Sekunden und schickt dann die Nachricht/initialisiert gleichzeitig den Chat. Ohne den Waittimer kam es vor, dass Telegram noch nicht korrekt initialisiert war, die Info unterging und der Chat nicht eingerichtet wurde (CLI im FHEM offline, bis ich manuell eine Nachricht absetzte). Die 60 Sekunden sind imho ein guter Wert - sollte auch mit weniger gehen, aber hatte keine Lust ständig herumzurechnen, wann ein Restart erfolgte; mit 1 Minute Differenz lässt sich einfacher umgehen ;)
Das DOIF-INITIALIZED (ohne message via Telegram) war ursprünglich dazu gedacht festzuhalten, wann ein Reboot aufgrund eines Absturzes/Fehlers erfolgte um die entsprechende Stelle im Log leichter aufzufinden. 

Für mich eine gute Lösung :)

Möglicherweise könnte man das fest einbauen und per Attribut wählbar gestalten (message to <(default?)peer> after FHEMRestart <0-60sek> - 0 = aus)

Grüße ...
Sebastian
FHEM-Master@Raspi2B (CUL433,etliche CUL_TCM97001-Sensoren, zig IT-Steckdosenschalter, Squeezelite)
FHEM-Slave@Raspi (via RFHEM,wired Bewegungsmelder, Sqeezelite)
DS212+ (LMS für Squeezelite-Clients, Surveillance, Mediaserver und Datengrab)
Billig-Tablets zum Steuern (TabletUI)

co010

Hallo Experten,

ich habe nun mal ein Start Skript nach Anleitung von Sebastian erstellt,und auf etc/init.d hochgeladen
mein Skript:
#!/bin/sh
### BEGIN INIT INFO
# Provides:          Was macht das Skript?
# Required-Start:   
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Kurze Beschreibung
# Description:       Längere Bechreibung
### END INIT INFO
# Author: Name <email@domain.tld>

# Aktionen
case "$1" in
    start)
        echo "Telegram daemon start ..."
        su telegramd -c '/home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -d -P 1230 --accept-any-tcp -L /home/pi/telegram.log -l 20 -N -R -vvv &'
        echo "... done"
        ;;
    stop)
        echo "Telegram daemon stop ..."
        sudo pkill telegram-cli
        echo "... done"
        ;;
    restart)
        echo "stopping telegram daemon..."
        sudo pkill telegram-cli
        echo "... done --- restarting ..."
        su telegramd -c '/home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -d -P 1230 --accept-any-tcp -L /home/pi/telegram.log -l 20 -N -R -vvv &'
        echo "... done"
        ;;
esac

exit 0
-------------------------------
dann mit  sudo chmod 755 /etc/init.d/telegramstart      -damit noch die Rechte meiner erstellten Datei "telegramstart" erteilt und noch
sudo update-rc.d telegramstart enable                         -die Datei ausführbar gemacht,wie in der Anleitung.
Den Pi neu gestartet und es funktioniert nicht so... warum ???
wenn ich die Zeile in Putty einfüge,
su telegramd -c '/home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -d -P 1230 --accept-any-tcp -L /home/pi/telegram.log -l 20 -N -R -vvv &'
schreibt Putty: No passwd entry for user 'telegramd'.
also ist ein Fehler in der bez."su telegramd"
wenn ich in Putty die Zeile "/home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -d -P 1230 --accept-any-tcp -L /home/pi/telegram.log -l 20 -N -R -vvv &"
einfüge funktioniert alles Perfekt.

mfg co010