NEWS
Pushover + Command = Telegram
-
@dtp:PS.: Falls jemand das ioBroker-Logo für seinen Bot nutzen möchte. Ich hab's mal angefügt. Die Hintergrundfarbe habe ich mit Gimp auf transparent gesetzt. `
Ich hoffe da bekommst du keinerlei Ärger mit den Urheber
:lol:
Spaß bei Seite, wo kann man das Profilbild ändern? Ich finde den Punkt in Telegram nicht.
-
Einfach in den BotFather gehen und dort /setuserpic eingeben. Danach fragt Dich der BotFather, für welchen Bot Du das User-Bild ändern möchtest. Den gewünschten Bot anklicken und dann das Bild (Auflösung 512 x 512 Pixel) hochladen. Fertig.
Gruß,
Thorsten
-
Ich hoffe da bekommst du keinerlei Ärger mit den Urheber
:lol: `
Vielleicht mag Bluefox es ja auch für die ioBroker.vis App verwenden.
-
Hab gestern Abend noch mal ein wenig mit dem text2command-Adapter herum gespielt. Ist schon ein schönes Tool, auch wenn ich noch ein paar Dinge vermisse, wie z.B. das Anfordern von Bildern oder Soundfiles oder das Steuern mehrerer Aktoren ohne die Notwendigkeit des Szene-Adapters. Das lässt sich zwar - wie weiter vorne gezeigt - auch über den JS-Adapter mit entsprechenden Javaskripten lösen, aber schöner fände ich es, wenn es gleich im text2command-Adapter integriert wäre.
Gruß,
Thorsten
PS.: Ich war überrascht, wie schnell Telegram eine Antwort auf einen Request schickt. Das geht ja binnen einer Zehntelsekunde. Ich nutze Telegram ja schon länger als Push-Dienst auf meiner CCU und für den https://www.doorpi.org/forum/. Zudem gab es auch im http://homematic-forum.de/forum/viewtopic.php?f=31&t=29611 schon sehr intensive Bemühungen und Erfolge hinsichtlich der Steuerung der CCU per Telegram. Aber hier über den ioBroker macht es besonders viel Spaß, da es wirklich einfach einzurichten ist.
-
@dtp:auch wenn ich noch ein paar Dinge vermisse, wie z.B. das Anfordern von Bildern `
Gibt es doch:!
var source_url = getState('javascript.0.Xeoma.Kamera.01.Snapshot').val, // URL Kamerabild dest_path = '/Users/pix/Documents/iobroker/iobroker-data/webcam/'; ! var request = require('request'); var fs = require('fs'); ! // Bild an telegram schicken (immer Dienst 3) function sendImage (pfad) { setTimeout(function() { sendTo('telegram.1', pfad); log('Webcam Bild per telegram verschickt'); }, 2 * 1000); } ! // Bild speichern function saveImage() { request.get({url: source_url, encoding: 'binary'}, function (err, response, body) { fs.writeFile(dest_path + 'image1.jpg', body, 'binary', function(err) { ! if (err) { log('Fehler beim Bild speichern: ' + err, 'warn'); } else { log('Webcam Bild gespeichert'); sendImage(dest_path + 'image1.jpg'); } }); }); } ! // bei Skriptstart ausführen saveImage(); !
Gruß
Pix
-
Schon klar, pix, aber nicht direkt aus dem text2command-Adapter heraus, oder?
In dem Adapter würde ich übrigens auch noch gerne eine Option zum Starten von Programmen per "dom.GetObject("…").ProgramExecute()" sehen.
Gruß,
Thorsten
-
naja, schon aus telegram. Brauchst ja nur die Funktion saveImage() aufrufen. in meinem Fall mache ich das über scriptEnabled. Und scriptEnabled setze ich per telegram Befehl am Smartphone auf true. Dann kommt das Webcam-Foto in den Chat.
Gruß
Pix
-
Das habe ich jetzt noch nicht so ganz durchdrungen. Ist das die gleiche Lösung, wie http://forum.iobroker.net/viewtopic.php?f=23&t=2285&start=20#p25263 von Solear?
Übrigens würde ich mir noch wünschen, dass es für Telegram unter iOS die Option gibt, auf einzelne Bots nur über TouchID zugreifen zu können. Immerhin ist der Bot ja nach einmaliger Eingabe des Passworts völlig frei zugänglich, so dass jeder, der mein freigeschaltetes iPhone hat, meine HomeMatic beeinflussen kann. Vielleicht frag ich mal die Telegram-Macher, ob sie das implementieren können.
Gruß,
Thorsten
-
Hi,
ich nochmal.
Gibt es eigentlich eine Möglichkeit, einen Zahlenwert zu erfassen, um ihn dann als Parameter an einen Aktor weiterzugeben? Also z.B. in der Art:
"Dimme das Licht auf 10 Prozent!"
oder
"Fahre die Jalousien auf 30 Prozent!"
Oder müsste man hierfür im Adapter z.B. elf verschiedene Abfragen mit den Werten 0, 10, 20,…, 100 erstellen?
Gruß,
Thorsten
-
Auf git liegt die neue Telegram version:
` > ### 0.4.0 (2016-07-21)
-
(bluefox) allow send messages to chats via chat-ID
-
(bluefox) support of video(mp4), audio, document, location, sticker, action `
-
-
Cool. Bluefox, ich ziehe meinen virtuellen Hut.
Gruß,
Thorsten
-
Übrigens, ich habe mal den Telegram-Support kontaktiert und gefragt, ob man nicht für einzelne Bots bzw. Chats einen Pincode bzw. TouchID einrichten könne. Für die Telegram-App als solche gibt es ja bereits die Möglichkeit. Wenn aber ein Pincode vergeben ist, werden die Inhalte sämtlicher Push-Nachrichten nicht mehr in der Mitteilungszentrale von iOS angezeigt. Stattdessen erhält man lediglich die Meldung, dass eine neue Nachricht eingegangen sei. Die Anfrage wurde vom Support an die Entwicklungsabteilung von Telegram weitergeleitet.
Als Workaround wurde mir die Verwendung von /code im ioBroker-Bot empfohlen. Diesen kann man über den BotFather definieren und muss ihn dann an jede gesendete Nachricht anhängen. Finde ich aber nicht so hilfreich, da ja jeder, der mein entsperrtes iPhone in der Hand hat, diesen Code aus den vorherigen Nachrichten ablesen kann. Außerdem wird damit die Funktionalität der Sprachsteuerung beeinträchtigt.
Nur mal zur Info.
Gruß,
Thorsten
-
@dtp:Hi,
ich nochmal.
Gibt es eigentlich eine Möglichkeit, einen Zahlenwert zu erfassen, um ihn dann als Parameter an einen Aktor weiterzugeben? Also z.B. in der Art:
"Dimme das Licht auf 10 Prozent!"
oder
"Fahre die Jalousien auf 30 Prozent!"
Oder müsste man hierfür im Adapter z.B. elf verschiedene Abfragen mit den Werten 0, 10, 20,…, 100 erstellen?
Gruß,
Thorsten `
Wird in der nächsten Version möglich sein. Aber aktuelle Version versteht schon "Dimme das Licht auf 10.0 Prozent!" (Schalte irgendwas an oder aus)` > You can use float values in the control commands. If some numeric value will be in the text it will be used as control value and the predefined value will be ignored.
E.G. for rule for rule:
- Set light level, Object ID: hm-rpc.0.light.STATE, Value: 10, Answer: Level set to %s%.
If command is like Set light level to 50%, so into the hm-rpc.0.light.STATE will be written 50 and answer will be Level set to 50%.
If command is like Set light level, so into the hm-rpc.0.light.STATE will be written 10 and answer will be Level set to 10%. `
-
So, dank http://forum.iobroker.net/viewtopic.php?f=20&t=1998&start=20#p30994, bin ich nun auch fündig geworden, wie ich die aktuelle Version des Telegram-Adapters installiert bekomme, auch wenn er mir im admin-Adapter noch nicht angeboten wird.
Gruß,
Thorsten
-
Hallo Bluefox,
ich erhalte mit der Version 0.4.0 nun nach jedem Kommando an den Bot eine Anfrage nach dem Passwort.
Zudem wird mir im log folgender Fehler angezeigt:
WARNING: 2016-07-23 17:21:56.580 error cannot find message with id = xxxxxxxxx
Wo müsste ich denn überhaupt die chat_id eingeben? Hätte erwartet, dass man die direkt in ein entsprechendes Feld des Telegram-Adapters eingeben kann. Da war aber nichts zu finden.
Gruß,
Thorsten
-
@dtp:Hallo Bluefox,
ich erhalte mit der Version 0.4.0 nun nach jedem Kommando an den Bot eine Anfrage nach dem Passwort.
Zudem wird mir im log folgender Fehler angezeigt:
WARNING: 2016-07-23 17:21:56.580 error cannot find message with id = xxxxxxxxx
Wo müsste ich denn überhaupt die chat_id eingeben? Hätte erwartet, dass man die direkt in ein entsprechendes Feld des Telegram-Adapters eingeben kann. Da war aber nichts zu finden.
Gruß,
Thorsten `
Ist hier beschrieben:https://github.com/ioBroker/ioBroker.telegram#chat-id
was machst du, wenn du mit 2 Chats kommunizieren willst?
Und an dieser Stelle verstehe ich nicht ganz wie ein Chat funktioniert.
Falls ich ChatID auf der Einstellungsseite einbaue, wie werde ich dann die Meldungen an User schicken?
-
Hallo Bluefox!
Macht Sinn. Das Setzen von Prozentwerten klappt auch wunderbar.
Hast Du schon heraus gefunden, warum es bei der 0.4.0 die Passwort-Probleme gibt?
-
Und schon wieder ich.
Wie werden Push-Nachrichten mit Umlauten und Sonderzeichen beim ioBroker konvertiert?
Ich habe mir dafür auf der CCU2 ein eigenes WebUI-Skript erstellt, dass die UTF-8-Konvertierung folgendermaßen durchführt:
!
! +++++ Umwandlung von Sonderzeichen gem. UTF-8 +++++ foreach(message_index, message.Split("%")){message_tmp = message_tmp + message_index + "%25";} if(message.Substr(message.Length()-1, message.Length()-1) != "%"){message = message_tmp.Substr(0, message_tmp.Length()-3);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split(" ")){message_tmp = message_tmp + message_index + "%20";}; if(message.Substr(message.Length()-1, message.Length()-1) != " "){message = message_tmp.Substr(0, message_tmp.Length()-3);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("Ä")){message_tmp = message_tmp + message_index + "%C3%84";} if(message.Substr(message.Length()-1, message.Length()-1) != "Ä"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("Ö")){message_tmp = message_tmp + message_index + "%C3%96";} if(message.Substr(message.Length()-1, message.Length()-1) != "Ö"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("Ü")){message_tmp = message_tmp + message_index + "%C3%9C";} if(message.Substr(message.Length()-1, message.Length()-1) != "Ü"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("ä")){message_tmp = message_tmp + message_index + "%C3%A4";} if(message.Substr(message.Length()-1, message.Length()-1) != "ä"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("ö")){message_tmp = message_tmp + message_index + "%C3%B6";} if(message.Substr(message.Length()-1, message.Length()-1) != "ö"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("ü")){message_tmp = message_tmp + message_index + "%C3%BC";} if(message.Substr(message.Length()-1, message.Length()-1) != "ü"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("ß")){message_tmp = message_tmp + message_index + "%C3%9F";} if(message.Substr(message.Length()-1, message.Length()-1) != "ß"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("°")){message_tmp = message_tmp + message_index + "%C2%B0";} if(message.Substr(message.Length()-1, message.Length()-1) != "°"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("²")){message_tmp = message_tmp + message_index + "%C2%B2";} if(message.Substr(message.Length()-1, message.Length()-1) != "²"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("³")){message_tmp = message_tmp + message_index + "%C2%B3";} if(message.Substr(message.Length()-1, message.Length()-1) != "³"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; !
Näheres dazu findet sich http://homematic-forum.de/forum/viewtopic.php?f=31&t=26282.
Damit erhalte ich dann z.B. ein Mal in der Woche die folgende Push-Nachricht per Telegram:
filename="2016-07-26_11h22_30.png" index="1">~~
Wenn ich mir nun aber den Inhalt der entsprechenden CCU2-Systemvariablen für den Gasverbrauch mit dem Telegram-Adapter für ioBroker hole, dann sieht das Resultat etwas anders aus:
filename="2016-07-26_11h22_48.png" index="0">~~
Wie man sieht, werden insb. "%0A" für den Zeilenumbruch und "%B3" für die Kubikmeter nicht umgewandelt. Wäre schön, wenn das noch implementiert werden könnte.
Gruß,
Thorsten
-
@dtp:Und schon wieder ich.
Wie werden Push-Nachrichten mit Umlauten und Sonderzeichen beim ioBroker konvertiert?
Ich habe mir dafür auf der CCU2 ein eigenes WebUI-Skript erstellt, dass die UTF-8-Konvertierung folgendermaßen durchführt:
!
! +++++ Umwandlung von Sonderzeichen gem. UTF-8 +++++ foreach(message_index, message.Split("%")){message_tmp = message_tmp + message_index + "%25";} if(message.Substr(message.Length()-1, message.Length()-1) != "%"){message = message_tmp.Substr(0, message_tmp.Length()-3);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split(" ")){message_tmp = message_tmp + message_index + "%20";}; if(message.Substr(message.Length()-1, message.Length()-1) != " "){message = message_tmp.Substr(0, message_tmp.Length()-3);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("Ä")){message_tmp = message_tmp + message_index + "%C3%84";} if(message.Substr(message.Length()-1, message.Length()-1) != "Ä"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("Ö")){message_tmp = message_tmp + message_index + "%C3%96";} if(message.Substr(message.Length()-1, message.Length()-1) != "Ö"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("Ü")){message_tmp = message_tmp + message_index + "%C3%9C";} if(message.Substr(message.Length()-1, message.Length()-1) != "Ü"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("ä")){message_tmp = message_tmp + message_index + "%C3%A4";} if(message.Substr(message.Length()-1, message.Length()-1) != "ä"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("ö")){message_tmp = message_tmp + message_index + "%C3%B6";} if(message.Substr(message.Length()-1, message.Length()-1) != "ö"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("ü")){message_tmp = message_tmp + message_index + "%C3%BC";} if(message.Substr(message.Length()-1, message.Length()-1) != "ü"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("ß")){message_tmp = message_tmp + message_index + "%C3%9F";} if(message.Substr(message.Length()-1, message.Length()-1) != "ß"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("°")){message_tmp = message_tmp + message_index + "%C2%B0";} if(message.Substr(message.Length()-1, message.Length()-1) != "°"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("²")){message_tmp = message_tmp + message_index + "%C2%B2";} if(message.Substr(message.Length()-1, message.Length()-1) != "²"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; foreach(message_index, message.Split("³")){message_tmp = message_tmp + message_index + "%C2%B3";} if(message.Substr(message.Length()-1, message.Length()-1) != "³"){message = message_tmp.Substr(0, message_tmp.Length()-6);} else{message = message_tmp;} message_tmp = ""; !
Näheres dazu findet sich http://homematic-forum.de/forum/viewtopic.php?f=31&t=26282.
Damit erhalte ich dann z.B. ein Mal in der Woche die folgende Push-Nachricht per Telegram:
filename="2016-07-26_11h22_30.png" index="1">~~
Wenn ich mir nun aber den Inhalt der entsprechenden CCU2-Systemvariablen für den Gasverbrauch mit dem Telegram-Adapter für ioBroker hole, dann sieht das Resultat etwas anders aus:
filename="2016-07-26_11h22_48.png" index="0">~~
Wie man sieht, werden insb. "%0A" für den Zeilenumbruch und "%B3" für die Kubikmeter nicht umgewandelt. Wäre schön, wenn das noch implementiert werden könnte.
Gruß,
Thorsten `
Also Kode:sendTo('telegram', 'test\ntest1 ㎥');
geht nicht?
-
Hallo Bluefox,
Telegram 0.4.1 funktioniert nun soweit schon mal sehr gut bei mir. Hätte da aber noch ein paar Wünsche:
1. Gäbe es eine Möglichkeit, Javaskripte und den text2command-Adapter parallel zu nutzen? Im Grunde genommen funktioniert das ja bereits, aber wenn ich einen im Skript definierten Befehl aufrufe, der logischerweise im text2command-Adapter nicht definiert ist, dann meldet mir text2command jedes Mal "Ich verstehe … nicht". Besser wäre es, wenn zunächst das mit dem Telegram-Adpater verknüpfte Javaskript nach dem Befehl durchsucht wird, und erst, wenn dieser Befehl auch im text2command-Adapter nicht bekannt ist, eine entsprechende Meldung kommt. Sprich, ein vorhandenes Javaskript hat immer Vorrang vor dem text2command-Adapter.
2. Über
sendTo('telegram.0', { text: '/tmp/snap.jpg', caption: 'Snapshot', disable_notification: true });
kann man ja bereits sehr viele Reaktionen steuern. Dabei wird bereits automatisch je nach Inhalt von "text" zwischen Photo, Video, Audio, Dokument, Sticker, Aktion und Ort unterschieden. Was aber wohl im Moment noch nicht geht, sind https://core.telegram.org/bots/api/#replykeyboardmarkup. Wie wär's daher mit folgender Ergänzung?
sendTo('telegram.0', { keybaord: [[Taste 1],[Taste 2],[Taste 3]], resize_keyboard: true, one_time_keyboard: true, selective: no });
Oder habe ich da was übersehen und das geht schon?
3. Die Meldungen "Restarting" und "Restarted" des Telegram-Adapters beim Neustart von ioBroker finde ich etwas wenig aussagend, wenn man in Chats arbeitet. Würde es daher besser finden, wenn man das auf "ioBroker restartung" und "ioBroker restarted" präzisieren könnte. Noch schöner fände ich eine zusätzliche deutsche Version "ioBroker startet neu." und "ioBroker neu gestartet.".
4. Selbst, wenn man mit einer ChatID arbeitet, so kann man Befehle an den ioBroker nicht aus dem Chat heraus absenden. Das funktioniert aktuell nur für den Empfang von Nachrichten. Ein Senden von Befehlen geht dagegen immer nur aus dem jeweiligen Bot heraus. Könnte man ggf. auch eine Option einfügen, die ChatID für den Empfang von Befehlen durch den ioBroker abzufragen?
5. Schließlich fände ich es noch schön, wenn man auch für den text2command-Adapter eine ChatID angeben könnte.
Gruß,
Thorsten