NEWS
telegram
-
Hallöchen
ich habe den Telegram Adapter 4.0.1 am laufen, leider verliert der Adapter immer mal wieder den Token.
Aktuell läuft der Adapter, produziert aber viele Fehler, vielleicht hat jemand einen Tip für mich.elegram.0 2025-05-09 10:45:05.822 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 10:45:05.786 debug Send message to [Michael]: "undefined" telegram.0 2025-05-09 10:45:05.785 debug Received command "send": {"caption":"Boot Bewegung 10:45:05","type":"photo"} telegram.0 2025-05-09 10:45:05.783 silly States system redis pmessage io.messagebox.system.adapter.telegram.0/io.messagebox.system.adapter.telegram.0:{"command":"send","message":{"caption":"Boot Bewegung 10:45:05","type":"photo"},"from":"system.adapter.javascript.0","_id":47698352} telegram.0 2025-05-09 10:45:02.644 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 10:45:02.616 debug Send message to [Michael]: "undefined" telegram.0 2025-05-09 10:45:02.616 debug Received command "send": {"caption":"Doorbell Bewegung 10:45:02","type":"photo"} telegram.0 2025-05-09 10:45:02.615 silly States system redis pmessage io.messagebox.system.adapter.telegram.0/io.messagebox.system.adapter.telegram.0:{"command":"send","message":{"caption":"Doorbell Bewegung 10:45:02","type":"photo"},"from":"system.adapter.javascript.0","_id":47698351} telegram.0 2025-05-09 10:44:55.837 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 10:44:55.793 debug Send message to [Michael]: "undefined" telegram.0 2025-05-09 10:44:55.792 debug Received command "send": {"caption":"Boot Bewegung 10:44:55","type":"photo"} telegram.0 2025-05-09 10:44:55.790 silly States system redis pmessage io.messagebox.system.adapter.telegram.0/io.messagebox.system.adapter.telegram.0:{"command":"send","message":{"caption":"Boot Bewegung 10:44:55","type":"photo"},"from":"system.adapter.javascript.0","_id":47698350} telegram.0 2025-05-09 10:44:52.870 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 10:44:52.766 debug Send message to [Michael]: "undefined" telegram.0 2025-05-09 10:44:52.765 debug Received command "send": {"caption":"Doorbell Bewegung 10:44:52","type":"photo"} telegram.0 2025-05-09 10:44:52.756 silly States system redis pmessage io.messagebox.system.adapter.telegram.0/io.messagebox.system.adapter.telegram.0:{"command":"send","message":{"caption":"Doorbell Bewegung 10:44:52","type":"photo"},"from":"system.adapter.javascript.0","_id":47698349} telegram.0 2025-05-09 10:44:45.814 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 10:44:45.788 debug Send message to [Michael]: "undefined" telegram.0 2025-05-09 10:44:45.787 debug Received command "send": {"caption":"Boot Bewegung 10:44:45","type":"photo"} telegram.0 2025-05-09 10:44:45.780 silly States system redis pmessage io.messagebox.system.adapter.telegram.0/io.messagebox.system.adapter.telegram.0:{"command":"send","message":{"caption":"Boot Bewegung 10:44:45","type":"photo"},"from":"system.adapter.javascript.0","_id":47698348} telegram.0 2025-05-09 10:44:42.626 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 10:44:42.598 debug Send message to [Michael]: "undefined" telegram.0 2025-05-09 10:44:42.597 debug Received command "send": {"caption":"Doorbell Bewegung 10:44:42","type":"photo"} telegram.0 2025-05-09 10:44:42.596 silly States system redis pmessage io.messagebox.system.adapter.telegram.0/io.messagebox.system.adapter.telegram.0:{"command":"send","message":{"caption":"Doorbell Bewegung 10:44:42","type":"photo"},"from":"system.adapter.javascript.0","_id":47698347} telegram.0 2025-05-09 10:44:35.810 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 10:44:35.772 debug Send message to [Michael]: "undefined" telegram.0 2025-05-09 10:44:35.771 debug Received command "send": {"caption":"Boot Bewegung 10:44:35","type":"photo"} telegram.0 2025-05-09 10:44:35.770 silly States system redis pmessage io.messagebox.system.adapter.telegram.0/io.messagebox.system.adapter.telegram.0:{"command":"send","message":{"caption":"Boot Bewegung 10:44:35","type":"photo"},"from":"system.adapter.javascript.0","_id":47698346} telegram.0 2025-05-09 10:44:32.767 silly Objects user redis pmessage */cfg.o.script.js.SYSTEM.Motion_Doorbell:{"_id":"script.js.SYSTEM.Motion_Doorbell","type":"script","common":{"name":"Motion_Doorbell","expert":true,"engineType":"Javascript/js","enabled":true,"engine":"system.adapter.javascript.0","source":"/*****Bewegung Doorbell ****************************************************\r\n* Mai 2025\r\n* Adapter: \r\n* geä:\r\n*************************************************************************/\r\n\r\nconst idmotion = \"reolink.1.sensor.motion\"\r\nconst camurl = 'http://192.168.188.122/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=admin&password=roadking04&width=800&height=600'\r\n\r\non({ id: idmotion, change:\"any\" }, function (obj) {\r\n if (obj.state.val == true) {\r\n log(\"Motion Doorbell\")\r\n\r\n httpGet(camurl, { responseType: 'arraybuffer' }, async (err, response) => {\r\n if (!err) {\r\n writeFile('vis.0', '/Doorbell/Doorbell.jpg', response.data, (err) => {\r\n if (err) {\r\n console.error(err);\r\n }\r\n });\r\n } else {\r\n console.error(err);\r\n }\r\n });\r\n }\r\n readFile('vis.0', '/Doorbell/Doorbell.jpg', function (err, img) {\r\n var ereignis_text = formatDate(new Date(obj.state.ts), \"hh:mm:ss\");\r\n sendTo(\"telegram.0\", {\r\n text: img,\r\n caption: \"Doorbell Bewegung \" + ereignis_text,\r\n type: \"photo\"\r\n });\r\n delFileAsync('vis.0', '/Doorbell/Doorbell.jpg')\r\n });\r\n \r\n});","debug":false,"verbose":false},"native":{},"from":"system.adapter.admin.0","user":"system.user.admin","ts":1746780272756,"acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
Ich möchte erwähnen, das bis gersten, diese Fehlermeldung nicht vorhanden war. Zwischendurch habe ich nun den Adapter mal neu installiert.
Gruß
Michael -
@michihorn sagte in telegram:
leider verliert der Adapter immer mal wieder den Token.
Das passiert eigentlich nur, wenn man die Instanz per
setObject
z.B. aus Scripts heraus regelmäßig neustartet. Was man nie tun sollte, ... -
@haus-automatisierung Das tue ich bewusst nicht, bislang hatte ich die Fehlermeldung nicht. Ich habe einen zweiten IOB für mein privates Haus laufen, mit der selben Installation, dort habe ich den fehler nicht
-
@michihorn sagte in telegram:
Ich habe einen zweiten IOB für mein privates Haus laufen
Aber nicht mit dem gleichen Token, sondern einem zusätzlichen Bot, oder? Das gleiche Token für mehrere Instanzen nutzen funktioniert nicht.
-
@michihorn sagte in telegram:
ETELEGRAM: 400 Bad Request: message text is empty
Zeig am besten mal, wie genau Du die Nachricht zusammenbaust und sendest.
-
@haus-automatisierung Nee, das ist klar es war ein eigener Token
-
/*****Bewegung Doorbell **************************************************** * Mai 2025 * Adapter: * geä: *************************************************************************/ const idmotion = "reolink.1.sensor.motion" const camurl = 'http://192.168.188.122/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=admin&password=rxxxxxg04&width=800&height=600' on({ id: idmotion, change:"any" }, function (obj) { if (obj.state.val == true) { log("Motion Doorbell") httpGet(camurl, { responseType: 'arraybuffer' }, async (err, response) => { if (!err) { writeFile('vis.0', '/Doorbell/Doorbell.jpg', response.data, (err) => { if (err) { console.error(err); } }); } else { console.error(err); } }); } readFile('vis.0', '/Doorbell/Doorbell.jpg', function (err, img) { var ereignis_text = formatDate(new Date(obj.state.ts), "hh:mm:ss"); sendTo("telegram.0", { text: img, caption: "Doorbell Bewegung " + ereignis_text, type: "photo" }); delFileAsync('vis.0', '/Doorbell/Doorbell.jpg') }); });
Aktuell ist das jetzt die Fehlermeldung
elegram.0 2025-05-09 12:12:09.035 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:12:03.582 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:59.114 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:53.525 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:49.124 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:48.590 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:40.331 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:36.294 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:30.005 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:23.893 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:19.774 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:13.677 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:10.434 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:11:04.927 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:10:59.677 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:10:53.561 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:10:49.077 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:10:44.206 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty telegram.0 2025-05-09 12:10:42.514 error Failed sending [chatId - 6105180270]: Error: ETELEGRAM: 400 Bad Request: message text is empty
-
Da ist ein Zeitfehler drin.
Httpget
Und Readfile wird relativ zeitnah hintereinander ändernaufgerufen.
Es ist nicht gesichert, das die callbacks genau auch so in der Reihenfolge fertig sind.D.h. Das Bild das du mit HTTPget abrufst ist wahrscheinlich noch nicht vorhanden, wenn du den readfile/telegram Befehl aufrufst.
Daher auch die Meldung mit undefined oder message empty.Wenn du auf die Verwendung der callback Versionen der Funktionen verzichtest und mit await arbeitest, wird es viel logischer von der Abarbeitung her.
-
@michihorn Das geht so nicht, Du übergibst die Daten aus
readFile
direkt an Telegam. Also Binärdaten. Der Telegram-Adapter kann damit aber nicht umgehen und hätte gerne einen Pfad. Dafür habe ich die FunktioncreateTempFile
eingebaut.Und @OliverIO hat auch Recht - am besten mit einem weiteren Trigger auf geändert Bild-Dateien reagieren (oder sich den Umweg über das Datei-Management von ioBroker komplett sparen, wenn Du die Datei eh direkt wieder löschen willst).
Vorschlag 1)
const idmotion = 'reolink.1.sensor.motion'; const camurl = 'http://192.168.188.122/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=admin&password=rxxxxxg04&width=800&height=600'; on({ id: idmotion, change: 'any' }, (obj) => { if (obj.state.val == true) { log('Motion Doorbell'): httpGet(camurl, { responseType: 'arraybuffer' }, async (err, response) => { if (!err) { writeFile('vis.0', '/Doorbell/Doorbell.jpg', response.data, (err) => { if (err) { console.error(err); } }); } else { console.error(err); } }); } }); onFile('vis.0', '/Doorbell/*.jpg', true, async (id, fileName, size, data, mimeType) => { const ereignis_text = formatDate(new Date(), 'hh:mm:ss'); sendToAsync('telegram.0', { text: createTempFile(fileName, data), caption: `Doorbell Bewegung ${ereignis_text}`, type: 'photo' }); });
Vorschlag 2:
const idmotion = 'reolink.1.sensor.motion'; const camurl = 'http://192.168.188.122/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=admin&password=rxxxxxg04&width=800&height=600'; on({ id: idmotion, change: 'any' }, (obj) => { if (obj.state.val == true) { log('Motion Doorbell'): httpGet(camurl, { responseType: 'arraybuffer' }, async (err, response) => { if (!err) { const ereignis_text = formatDate(new Date(obj.state.ts), 'hh:mm:ss'); sendToAsync('telegram.0', { text: createTempFile(fileName, response.data), caption: `Doorbell Bewegung ${ereignis_text}`, type: 'photo' }); } else { console.error(err); } }); } });
-
Ein File handle sollte gemäß Doku auch gehen.
Vgl. Beispiel
https://github.com/iobroker-community-adapters/ioBroker.telegram/blob/master/docs/en/README.md#explicit-types-of-messagessendTo('telegram.0', 'send', { text: fs.readFileSync('/opt/path/picture.png'), type: 'photo' });
-
@oliverio Ja stimmt, zumindest machmal, aber jetzt weiß ich ja woran es gelegen hat. Danke
-
@haus-automatisierung Danke für die Überarbeitung des Scriptes, ich habe jetzt mal die Variante eingebaut. Danke
-
@haus-automatisierung sagte in telegram:
Dafür habe ich die Funktion createTempFile eingebaut.
Das Script moniert den fileName
text: createTempFile(fileName, response.data),javascript.0 15:04:31.098 error ReferenceError: fileName is not defined javascript.0 15:04:31.099 error at Object.<anonymous> (script.js.SYSTEM.Motion_Doorbell:26:40)
-
Ok, Du hast überhaupt keine Ahnung von JavaScript?
Filename ist eine variable in der der Dateiname zu deinem Bild steht.
Also entweder die Daten die aus dem httprequest kommen als Datei speichern oder besser doch wieder das file handle wie in deinem ursprünglichen Beispiel übergeben.Kann es leider nicht selbst nachstellen.
-
@oliverio Ich lerne jeden Tag dazu. Es ist noch kein Meister vom Himmel gefallen.
Die Variante2 von Hausautomatik habe ich so übernommen. Die Variable fileName war nicht in der Definition angegeben und es ist nicht klar wo wird die Variable "gefüllt", ergo moppert das Script. Leider gibt es auch keine Sendung per Telegram. Ich schaue mir das später nochmal an. Danke erstmal -
Trage da einfach mal anstatt dessen
createTempFile('telegram-image.png', response.data)
Ein.
-
-
@michihorn Ist die Doku der Funktion unvollständig?
-
@haus-automatisierung Aus meiner Sicht schon, ich werde mich am Montag mal in Ruhe damit beschäftigen.
Viele Grüße -
Das ist nur der temporäre Dateiname.
Gefüllt wird das durch diese Funktion.
Der Inhalt kommt von response.data