Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

HolyMoly

@co010
probiers mal mit
su deinusername -c '~/tg/bin/telegram-cli -vvvvRC -k tg-server.pub -W -dL tg.log -P 2391 &'
FHEM auf Raspi2 & Radxa Rock

viegener

Zitat von: co010 am 04 August 2015, 11:28:38
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'.

2 Dinge fallen mir direkt auf:

In Deinem skript steht hinter provides kein Name, dort sollte eigentlich der Namen Deines Skriptes stehen
Die Fehlermeldung deutet daraufhin, dass kein Benutzer telegramd existiert. Vermutlich möchtest Du es aber doch unter Deinem/dem Benutzer von fhem laufen lassen (denn damit hast Du vermutlich auch die Konfiguration für Telegram angelegt)

Weitere Anmerkungen:
- Auch die anderen Einträge im Skript sollten sinnvollerweise angegeben werden, damit man später nicht verwirrt werden kann, sondern noch weiss was gemacht wurde
- --accept-any-tcp würde ich nur angeben, wenn wirklich telegram auf einem anderen Rechner als fhem läuft, oder Du anderweitig remote zugreifen willst (wg. Sicherheit)
- Ich würde normalerweise mal mit den Fehlermeldungen "googlen", denn dann findest Du vermutlich massenhaft Erklärungen zu No passwd entry for user
- Achso: Ich hoffe Dir ist schon klar, dass putty nur den Zugang zum eigentlichen Rechner macht (terminal) und dass was Du lokal tippst versendet und alle Meldungen vom entfernten Rechner empfängt. In diesem Sinne ist anzunehmen, dass Dein putty mit einer Shell auf dem fhem-Server verbunden ist, es könnte aber auch direkt mit telegram-cli (oder einem anderen Programm oder einem anderen Rechner) reden...


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

co010

Hallo,
ich habe den Namen in # Provides:Start telegram-cli# angegeben und --accept-any-tcp auch entfernt,es klappt auch damit nicht.
/home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -d -P 1230 -L /home/pi/telegram.log -l 20 -N -R -vvv &  (das funktioniert auch)
Hat jemand von euch so ein Skript auf den pi mit FHEM laufen ?

Danke co010


viegener

Wie von HolyMoly und mir beschrieben, wenn der Benutzer, den Du bei "su" angibst, nicht existiert kann es nicht funktionieren.

Ironie: Wenn 2 Fehler vorhanden sind und einer davon beseitigt ist, bleibt nachwievor ein Fehler vorhanden  :D

Ansonsten nehme ich an, dass zumindest das Kommando sudo update-rc.d telegramstart enable Fehlermeldungen/Warnungen produziert hat und möglicherweise nochmals ausgeführt werden sollte nach Änderungen am Skript.

Es wäre vermutlich hilfreich zu erfahren, WAS nicht funktioniert, da mir nicht klar ist, ob telegram-cli nicht startet, fhem nicht verbinden kann, fhem nicht mehr startet oder etwas anderes hier nicht funktioniert?

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

HolyMoly

FHEM auf Raspi2 & Radxa Rock

co010

Hallo,
Anmelden am Pi:      user: pi;    Password: raspberry
habe jetzt nochmal ein neues Skript erstellt nach link,so (Datei:starttelegram)

#! /bin/sh
### BEGIN INIT INFO
# Provides:          telegram-daemon
# Required-Start:   
# Required-Stop:     
# Default-Start:     S 2 3 4 5
# Default-Stop:      0 6
# Short-Description: telegram daemon
# Description:       telegram daemon
### END INIT INFO
# Author: fizzzel

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

exit 0
----------------------------------------
Datei starttelegram kopiert in etc/init.d und rechte vergeben
und bei sudo update-rc.d starttelegram enable  wird ausgegeben

update-rc.d: using dependency based boot sequencing
update-rc.d: error: starttelegram Default-Start contains no runlevels, aborting.

-der Pi mit FHEM wird korrekt gestartet.
also ein Fehler bei sudo update-rc.d starttelegram enable .

m

HolyMoly

FHEM auf Raspi2 & Radxa Rock

Sunless

Aloha ...

Hatte ganz vergessen zu erwähnen, dass der CLI bei mir unter dem User "telegramd" läuft - in irgendeiner der zig Anleitungen betreffend Autostart war das zu lesen (wenn ich nur noch wüsste, in welcher?). Logisch, dass dies so bei Dir (co010) nicht funktionieren kann.
Wegen der Runlevel hat update-rc bei mir auch gemault, aber trotzdem läuft es ... (update-rc.d telegram-daemon defaults)

Evtl. legst Du einen User "telegramd" (adduser telegramd) an, änderst die Pfade im Script "telegram-daemon" auf Deine Bedürfnisse und versuchst es nochmal ...
#! /bin/sh
### BEGIN INIT INFO
# Provides:          telegram-daemon
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: telegram daemon
# Description:       telegram daemon
### END INIT INFO
# Author: anonymous

# actions
case "$1" in
    start)
        echo "Telegram daemon is starting..."
        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 "stopping telegram daemon..."
        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

Port bei mir: 2391
telegram-cli liegt bei mir unter /opt/tg/bin/
server.pub unter /opt/tg/
log geht nach /var/log/telegram.log
Rechte auf alle Verzeichnisse unterhalb "tg" -> 755 root:root - ebenso alle dateien außer server.pub (644 root:root)

Grüße ...

PS:

Habe auch noch ein paar Perl-Warnings im Log (bei FHEM-Restart) entdeckt:
* Use of uninitialized value $ret in concatenation (.) or string at ./FHEM/70_Telegram.pm line 662.
* Use of uninitialized value $ret in numeric eq (==) at ./FHEM/70_Telegram.pm line 664.
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

Ich habe heute nochmal eine aufgefrischte Version (0,6) im ersten Post hochgeladen. Es sind noch keine grossen Änderungen erfolgt, insbesondere habe ich noch nichts am Startverhalten verändert.

Im wesentlichen sind darin Stabilisierungen enthalten und es werden mehrere peers bei cmdRestrictedPeer unterstützt.
Natürlich ist die Version auch in github verfügbar.

Fehlermeldungen, Anmerkungen und Wünsche Wie immer hier im Thread

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

Sunless

Hallo in die Runde ...
Eine kurze Rückmeldung betreffend Multiuser (bin endlich mal zum testen gekommen):

Eine Abfrage von "msgPeer" ist nicht nötig, da Ausgaben von eingehende Kommandos automatisch an den Sender zurückgesandt werden - Super Sache, erspart das Auslesen des Readings und Definieren des Absenders als Empfänger  :D
Allerdings bekommt immer der "defaultPeer" die Rückmeldung "cmd: result OK", auch wenn ein anderer User ein Kommando sendet.

Weiter getestet -> Attribut Defaultpeer gelöscht -> Rückmeldung wird nicht mehr gesendet.
Problem an der Geschichte: Bildversand (IP-Cam vor der Tür, welche beim Klingeln ein Photo sendet) geht ins Leere, da kein Befehl "sendPhotoTo" oder ähnliches verfügbar ist und Bilder nur an den Defaultpeer gesendet werden können.
Eventuell könnte man diese Option noch im­ple­men­tie­ren?

Wäre es auch noch möglich, alternativ oder zusätzlich zur "result OK"-Meldung ein "mark_read" auszuführen, damit das 2. Häkchen im Messenger gesetzt und der Befehl quasi als "empfangen" markiert wird?

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)

viegener

Zitat von: Sunless am 10 August 2015, 15:45:07
Hallo in die Runde ...
Eine kurze Rückmeldung betreffend Multiuser (bin endlich mal zum testen gekommen):

Eine Abfrage von "msgPeer" ist nicht nötig, da Ausgaben von eingehende Kommandos automatisch an den Sender zurückgesandt werden - Super Sache, erspart das Auslesen des Readings und Definieren des Absenders als Empfänger  :D
Allerdings bekommt immer der "defaultPeer" die Rückmeldung "cmd: result OK", auch wenn ein anderer User ein Kommando sendet.

Weiter getestet -> Attribut Defaultpeer gelöscht -> Rückmeldung wird nicht mehr gesendet.
Problem an der Geschichte: Bildversand (IP-Cam vor der Tür, welche beim Klingeln ein Photo sendet) geht ins Leere, da kein Befehl "sendPhotoTo" oder ähnliches verfügbar ist und Bilder nur an den Defaultpeer gesendet werden können.
Eventuell könnte man diese Option noch im­ple­men­tie­ren?

Wäre es auch noch möglich, alternativ oder zusätzlich zur "result OK"-Meldung ein "mark_read" auszuführen, damit das 2. Häkchen im Messenger gesetzt und der Befehl quasi als "empfangen" markiert wird?

Grüße ... Sebastian

Klasse, das passt gut zu einigen meiner Erfahrungen und Überlegungen:

- Ich habe die Antwort auf Kommandos so umgebaut, dass der defaultPeer UND der absendende die Meldung bekommen, wenn nicht identisch (unauthorized nur an Defaultpeer)
=> Diese Version findet sich bisher nur im github, weil ich sie bei mir nur kurz getestet habe und erst seit Samstag im System am laufen
- SendPhotoTo hatte ich auch schon angedacht, kann man vermutlich mit wenig Aufwand machen
- mark_read setzen hatte ich bisher bewusst gelassen, da es ein weiteres Kommando an telegram-cli erfordert und damit fhem noch länger blockiert. Eigentlich müsste ich das in einen eigenen subprozess auslagern, das ist aber wiederum nicht machbar, wenn wiederum Kommandos direkt ausgeführt werden...

Weitere Gedanken:
- telegram-cli liefert etwas kryptische peernamen aus den Gruppen chats, denn da werden Gruppenname und peer hintereinandergehängt. Benutzt jemand Gruppenchats mit telegram und fhem?
- Gibt es Interesse daran, dass telegram auch Nachrichten, die während einer eventuellen Downtime angefallen sind nachher verarbeitet? Ich hatte das bisher geplant, es ist aber wohl sehr aufwändig...


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

Sunless

Noch ein Nachtrag zu meinem vorherigen Posting nach Brainstorming:

Abfrage von "msgPeer" ist in einigen Fällen doch sinnvoll - wenn Nachrichten von FHEM initiiert gesendet werden sollen (Beispiel Klingel oder die DOIF-global:?INITIALIZED-Funktion, da hierbei ja kein aktueller Absender existiert ...

mark_read: kenne mich mit der Funktionsweise noch nicht so genau aus (2 Kommandos), ist aber verständlich, dass nicht unnötig lange geblockt werden sollte ... wäre auch nur für die Optik im Messenger gewesen ;)

SendPhotoTo: wäre Klasse, eilt aber nicht  ;)

Werde dann gleich mal die neue Version einspielen und testen ...

Danke für Deine Arbeit ...
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

Wenn Du schon ausprobieren willst, sendPhotoTo ist in github, funktioniert genauso wie sendPhoto (aber zusätzliche Angabe des peers natürlich).
Ich habe dazu auch angepasst, dass jetzt auch msgPeer/msgText etc bei sendPhoto und sendPhotoTo gesetzt werden.

Interessanterweise werden bei mir seit heute sogar emoticons in fhemweb angezeigt...
Ich habe dazu aber keine Änderung vorgenommen, sondern nur telegram-cli neu gestartet und das .telegram-cli neu aufgebaut (Also neu den client registriert)

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

co010

Hallo,
da ja nun das versenden von Nachrichten richtig gut funktioniert,möchte ich Fotos von meiner IpCam aus dem Ordner "/opt/fem/www" ein Bild IPCam_Hof_snapshot.jpg mit Telegram auf mein Handy senden,was muß ich da eingeben ?

mfg co010

fh168

Ich wollte nur ein kurzes Feedback geben, Telegram klappt seit einigen Wochen tadellos.

Genial finde ich, das man das auch zum Informationsaustausch mit einem Tablet (Stichwort InfoPanel) nutzen kann.
Ich habe da mal ein paar Zeilen darüber verbloggt.

http://blog.moneybag.de/fhem-fernsteuern-von-fhem-mit-telegram/

LG
/robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-