Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Bild vom Telegram Empfangen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Bild vom Telegram Empfangen

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      ccc.ggg73 last edited by

      Hallo zusammen,

      gibt es die Möglichkeit mit telegram adapter auch Bilder zu empfangen?

      An ioBroker kommen nur Texte an. Wenn ich ein Bild aus mein handy verschicke dann kommt nix an.

      Vielen dank für eure hilfe

      LG

      Giovanni

      P 1 Reply Last reply Reply Quote 0
      • P
        piForscher @ccc.ggg73 last edited by

        @ccc-ggg73 Hi,
        hast du mitlerweile einen Weg gefunden, Bilder in Telegram zu empfangen ?
        Würde ich auch gerne nutzen, aber ich bin auf dem Stand, wie du es beschrieben hast...

        Danke!

        htrecksler 1 Reply Last reply Reply Quote 0
        • htrecksler
          htrecksler Forum Testing @piForscher last edited by

          @piForscher nur aus Interesse...was macht man in ioBroker dann mit den Bildern?

          bahnuhr P 2 Replies Last reply Reply Quote 0
          • bahnuhr
            bahnuhr Forum Testing Most Active @htrecksler last edited by

            @htrecksler sagte in Bild vom Telegram Empfangen:

            @piForscher nur aus Interesse...was macht man in ioBroker dann mit den Bildern?

            Würde mich auch interessieren.

            Bild von iob an telegram Handy funktioniert ja.

            Anders rum ist mir keine Lösung bekannt.
            Geht m.E. nur Text

            C N 2 Replies Last reply Reply Quote 0
            • C
              cruunnerr @bahnuhr last edited by

              So ganz prinzipiell könnte man auch einfach ein Bild an den ioBroker Server (oder auch einen anderen im Netzwerk erreichbaren Server) schicken. Dazu gibt es ja genug andere Protokolle außer Telegramm... WebDAV, FTP(s), email etc...

              Den Ordner wo das Bild landet kann man alle 5 Sek. auf ein neues Bild oder Änderungsdatum kontrollieren lassen....

              1 Reply Last reply Reply Quote 0
              • N
                Nahasapee @bahnuhr last edited by

                @bahnuhr sagte in Bild vom Telegram Empfangen:

                Geht m.E. nur Text

                ich glaub das stimmt nicht im Code vom TelegramAdapter werden die anderen Typen scheinbar auch unterstützt (voice,photo,video,audio,document ), getestet hab ich es jetzt aber nicht. diese Dateien versucht der Adapter scheinbar in einem tmpDirName zu speichern (/iobroker-data/tmp)
                30f2d0e5-d379-4ef4-8662-9bde0ac57710-image.png

                1 Reply Last reply Reply Quote 0
                • N
                  Nahasapee last edited by

                  unter admin vom adapter, in der index_m.html gibts auch dieses saveFiles flag welches wohl aktiviert sein muss, allerdings erschließt sich mir gerade nicht wie man dieses aktivieren kann?!

                  1 Reply Last reply Reply Quote 0
                  • P
                    piForscher @htrecksler last edited by

                    @htrecksler Hi,
                    die Idee war:
                    Ich mache ein Bild z.B. von einem Kassenbon, schicke es mit einem Tag per Telegram an iobroker und dort wird das Bild dann sinnvoll eingeordnet abgelegt...
                    Kann man bestimmt auch anders machen, aber ich finde die Telegram-Anbindung an iobroker eigentlich so praktisch, dass ich auf diesen verwegenen Gedanken kam... 🙂

                    M 1 Reply Last reply Reply Quote 0
                    • F
                      fastfoot last edited by fastfoot

                      @Nahasapee sagte in Bild vom Telegram Empfangen:

                      unter admin vom adapter, in der index_m.html gibts auch dieses saveFiles flag welches wohl aktiviert sein muss, allerdings erschließt sich mir gerade nicht wie man dieses aktivieren kann?!

                      Diese Einstellung ist nur in index.html verfügbar, allerdings wird immer die index_m.html benutzt. Workaround: Das Setting im Objekt vornehmen, allerdings bringt das Senden eines Bildes einen Fehler, es funktioniert nur das Senden als Datei. Video funktioniert, siehe LOG
                      Telegram.PNG
                      Telegram2.PNG

                      Edit: Da alles im Adapter schon fertig ist und lediglich die Option zum Aktivieren fehlt, habe ich mal noch ein issue auf GitHub aufgemacht, mal sehen was wird

                      N 2 Replies Last reply Reply Quote 1
                      • M
                        MCU @piForscher last edited by MCU

                        @piForscher
                        Ich hab mal ein wenig probiert:

                        1. Adapter- Telegram für den User umstellen, an den man ein Bild schicken möchte, insbesondere, wenn man mehrere Telegram-Instanzen laufen hat! Man muß es nur bei der Instanz ändern, zu der man auch ein Bild schicken möchte!

                        iobroker-telegram-Bild-holen.PNG

                        1. Man bekommt jetzt die RAW Daten: (in denen steht dann auch die file_id)

                        iobroker-telegram-Bild-holen-Request_RAW.PNG

                        1. Verarbeiten der RAW Daten:
                          Hinter dem Wort"bot" kommt direkt der "Token" (steht in den Haupteinstellungen!)
                          !!Die file_id wird ohne "" hinter der Variablen geschrieben!!!
                          -> Beispiel: https://api.telegram.org/bot1234kjhgasdf73425jhdfgoiuzfgdlkjh2345i/getFile?file_id=aJHGSDmndasafjh

                        getFile mit dem file_id (String) als Request ----> .........."file_path":"photos/file_0.jpg"

                        Danach aus result den file_path lesen und verarbeiten:
                        (!!!! den 2. request im Bild nicht machen sondern den macht man im Javascript)

                        iobroker-telegram-Bild-holen-Request_RAW-verarbeiten.PNG

                        1. Dann das File mittels Javascript direkt in eine Datei lesen:

                        iobroker-telegram-Bild-holen-Request_RAW-Bild-schreiben.PNG

                        Pogrammierung von der Javascript-Funktion:
                        !!! Wichtig!! hier ist Gesamtpfad anders, bzw zwischen "...telegram.org" und "bot<token>" muß /file/ stehen. !!!!

                        iobroker-telegram-Bild-holen-Request_RAW-Bild-schreiben-Prog.PNG

                        Und schon hat man das Bild in dem entsprechenden Verzeichnis.
                        Kann ja jemand, der sich besser mit Javascript auskennt, vielleicht mal in eine komplette Funktion umwandeln?
                        P.S.: Gerade nochmal ausprobiert
                        Funktioniert auch mit voice-Nachrichten usw. Man kann damit anscheinend alle Dateien, die man in Telegram erzeugt oder gespeichert hat abrufen.

                        Ich hoffe es hilft ein wenig.

                        M 1 Reply Last reply Reply Quote 0
                        • N
                          Nahasapee @fastfoot last edited by

                          @fastfoot
                          hi, scheint bug im adapter zu sein,
                          wenn ich die zeile ändere und aufs erste element zugreife speichert er die bilder im temp ordner automatisch
                          860acb2b-3cb2-426b-a65f-8c743f13cce3-image.png

                          warum der Ersteller aufs dritte Element zugreift weiß ich nicht,
                          könnte natürlich sein dass man , wenn man mehrere Dateien sendet das Array anders aufgebaut ist/war?!

                          Wenn man Bilder in Telegram als Album schickt, speichert die saveFiles() auch nur das erste Bild, das scheint auch noch nen bug zu sein
                          da zwar mehrere Dateien im Vector sind , die haben aber immer die gleiche file_id.

                          F 1 Reply Last reply Reply Quote 0
                          • F
                            fastfoot @Nahasapee last edited by

                            @Nahasapee ich nehme an, dass der Autor da die 3 Einträge im Kopf hatte. Diese ergeben verschiedene Größen der Bilder, 2 ist das Beste davon, wobei senden als Datei wohl das Original ergibt. Habe das im issue auch benannt.

                            1 Reply Last reply Reply Quote 0
                            • N
                              Nahasapee @fastfoot last edited by

                              @fastfoot kurze frage hast du das saveFiles flag über den "raw" tab hinzugefügt? hatte ich so gemacht leider war das flag dann trotzdem nicht in der adapter.config vorhanden. irgendwas fehlt mir da noch!

                              F 1 Reply Last reply Reply Quote 0
                              • F
                                fastfoot @Nahasapee last edited by

                                @Nahasapee sagte in Bild vom Telegram Empfangen:

                                @fastfoot kurze frage hast du das saveFiles flag über den "raw" tab hinzugefügt? hatte ich so gemacht leider war das flag dann trotzdem nicht in der adapter.config vorhanden. irgendwas fehlt mir da noch!

                                Ja, über Raw. In der Adapterconfig wird es 'nie' erscheinen, da hierzu ja die index_m.html geändert werden müsste. Du kannst das Setting auch so erzeugen/verändern

                                let o = getObject('system.adapter.telegram.0');
                                o.native.saveFiles = true;
                                setObject('system.adapter.telegram.0', o);
                                
                                
                                N 1 Reply Last reply Reply Quote 1
                                • N
                                  Nahasapee @fastfoot last edited by

                                  @fastfoot

                                  ja so ein ähnlichen workaround hatte ich mir auch reingebastelt.
                                  was müsste man den tun, damit es im sourcecode ansprechbar ist?
                                  in deinem Screenshot sieht man die checkbox ja schon, und in der index_m.html scheint ja auch schon was eingetragen zu sein

                                  94990103-008b-4bb4-b9ef-7ff6c2b07d65-image.png

                                  F 2 Replies Last reply Reply Quote 0
                                  • F
                                    fastfoot @Nahasapee last edited by

                                    @Nahasapee sagte in Bild vom Telegram Empfangen:

                                    @fastfoot

                                    ja so ein ähnlichen workaround hatte ich mir auch reingebastelt.
                                    was müsste man den tun, damit es im sourcecode ansprechbar ist?
                                    in deinem Screenshot sieht man die checkbox ja schon, und in der index_m.html scheint ja auch schon was eingetragen zu sein

                                    94990103-008b-4bb4-b9ef-7ff6c2b07d65-image.png

                                    ich denke du verwechselst die Dateien. Bei mir steht in der index_m.html gar nix von diesem Setting. Du kannst folgendes darin (index_m.html) einfügen

                                                    <div class="row">
                                                        <div class="input-field col s12 m12 l12">
                                                            <input id="useUsername" class="value" type="checkbox" />
                                                            <label class="translate" for="useUsername">Store username instead of firstname of remembered users</label>
                                                        </div>
                                                    </div>
                                                    <div class="row">
                                                        <div class="input-field col s12 m12 l12">
                                                            <input id="saveFiles" class="value" type="checkbox" />
                                                            <label class="translate" for="saveFiles">Save media files</label>
                                                        </div>
                                                    </div>
                                    
                                    

                                    Sieht dann so aus und funktioniert auf Anhieb(Upload nicht vergessen!)
                                    Telegram3.PNG

                                    Es bleibt die Krux dass msg.photo[3] zu msg.photo[2] verändert werden muss, ist also alles nix für den Normalanwender. Ich scheue mich den Einzeiler zum Ändern des Sourcecodes zu posten, unbedarfte Anwender könnten unnötigen Support erzeugen. Man sollte warten bis das gefixt ist

                                    1 Reply Last reply Reply Quote 0
                                    • F
                                      fastfoot @Nahasapee last edited by

                                      @Nahasapee
                                      Gerade gesehen: Hast du deine Version von Github installiert? Dort ist die index_m.html nämlich bereits geändert. Das bedeutet aber dass das Setting bereits aktiviert ist und auch funktioniert. Der Fehler mit msg.photo[3] ist immer noch da, ich werde das issue entsprechend abändern

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        MCU @MCU last edited by MCU

                                        @piForscher
                                        So hab jetzt eine Funktion geschrieben, mit der man also automatisch alle Dateien, die man zum User_BOT in Telegram einfügt, herunterlädt:

                                        var fs = require('fs');
                                        var DATEN,FILE_ID_STR,FILE_PATH_GES, FILE_PATH;
                                        
                                        const token = 'DEIN_TOKEN_EINTRAGEN'; //!!!!!! ÄNDERN
                                        
                                        const url_telegram_file = 'https://api.telegram.org/file/bot' + token +'/';
                                        const url_telegram = 'https://api.telegram.org/bot' + token +'/';
                                        const Speicher_Verzeichnis = '/media/shares/bilder/';
                                        // Eintrag in Objekt lesen
                                        //console.log(FILE_ID_STR);
                                        STR_1 = RAW_DATEN.indexOf('file_id') + 1;
                                        STR_2 = RAW_DATEN.slice(((RAW_DATEN.indexOf('file_id') + 1) - 1), RAW_DATEN.length).indexOf(',') + 1;
                                        STR_3 = (STR_1 + STR_2) - 3;
                                        FILE_ID_STR = (RAW_DATEN.slice(((STR_1 + 10) - 1), STR_3));
                                        try {
                                          require("request")(([url_telegram,'getFile?file_id=',FILE_ID_STR].join('')), function (error, response, result) {
                                            console.log("Result " + result);
                                            FILE_PATH_GES = result;
                                            //console.log("FILE" + FILE_PATH_GES);
                                          }).on("error", function (e) {console.error(e);});
                                        } catch (e) { console.error("Error" + e); }
                                        
                                        timeout3 = setTimeout(function () {
                                            
                                            //console.log("FILE " + FILE_PATH_GES);
                                            //FILE_PATH besorgen
                                            STR_1 = FILE_PATH_GES.indexOf('file_path') + 1;
                                            //STR_3 = FILE_PATH_GES.length;
                                            STR_2 = FILE_PATH_GES.slice(STR_1+11, FILE_PATH_GES.length).indexOf('"');
                                            FILE_PATH = FILE_PATH_GES.slice(STR_1+11 , STR_1 + 11 + STR_2);
                                            //console.log (FILE_PATH);
                                            //FILE_SCHREIBEN
                                            const url = url_telegram_file + "/" + FILE_PATH ;
                                            //console.log(url);
                                            console.log(Speicher_Verzeichnis + FILE_PATH);
                                            //FILE_PATH untersuchen und Typ ermitteln evtl Verzeichnis anlegen
                                            STR_1 = FILE_PATH.indexOf('/');
                                            STR_2 = FILE_PATH.slice(0,STR_1);
                                            //console.log(STR_2);
                                            //Verzeichnis ermittelt
                                            //Prüfen ist Verzeichnis vorhanden
                                            
                                            if(!fs.existsSync(Speicher_Verzeichnis + STR_2)){
                                            fs.mkdirSync(Speicher_Verzeichnis + STR_2, 0777, function(err){
                                                if(err){
                                                    console.log(err);
                                                    // echo the result back
                                                    response.send("ERROR! Konnte Verzeichnis nicht erstellen! \n");
                                                }
                                            });
                                        }
                                            
                                            request(url, {encoding:'binary'}, function(error, response, body) {
                                                fs.writeFile(Speicher_Verzeichnis  +FILE_PATH, body, 'binary', function (err) {
                                                    if(err) log('Fehler!');
                                                });                
                                            });
                                            
                                        }, 1000);
                                        
                                        

                                        Dann entsprechend das TOKEN eintragen bei token = " ";

                                        Und dann das Verzeichnis Speicher_Verzeichnis = '/media/shares/bilder/'; anpassen. (Wichtig: Volle Zugriffsrechte für iobroker)

                                        Diese Funktion in den Javascript Baustein einbauen
                                        iobroker-telegram-Bild-holen-automatisch.PNG

                                        Also die drei Punkte klicken und dort das gesamte Script einfügen!
                                        Den Trigger anlegen für das RAW Objekt für den entsprechenden User (telegram.0 oder telegram.1) usw.

                                        Da ich leider nicht weiß wie man in dem entsprechenden Verzeichnis ein Ordner mit den richtigen Berechtigungen anlegt, kann es vorkommen, daß man bei ersten Mal pro Typ von Datei (Voice,document,photos) als Ausgabe "Fehler" bekommt.
                                        ioBroker muß halt alle Rechte dort haben als User und muß Verzeichnisse anlegen dürfen.

                                        Also einmal alle Typen in Telegram schicken, bzw zu dem User einstellen. -> Es kommt jedesmal ein Fehler. Aber die Verzeichnisse werden angelegt.

                                        Danach hab ich mir geholfen mit der Konsole:
                                        Einmal für Das Verzeichnis in das die Daten geschrieben werden
                                        sudo chmod -R 777 /media/shares/bilder
                                        !!muß für Dein Verzeichnis angepasst werden!!!

                                        Wenn man das einmal für alle Typen gemacht hat, werden alle Dateien die man jetzt in Telegram einstellt in das Verzeichnis geschrieben mit dem richtigen Unterverzeichnis (/documents, /photos, /voice).```

                                        1 Reply Last reply Reply Quote 0
                                        • P
                                          piForscher last edited by

                                          Hi,
                                          jetzt habe ich die guten Ideen endlich mal umgesetzt.
                                          Ich habe den Telegram-Adapter auf den aktuellen Stand von Github aktualisiert und das Blockly incl. Script erstellt.
                                          Mein Token aheb ich angepasst, ebenso wie den Speicherpfad für /media/shares/bilder/ und die Berechtigung.

                                          Wenn ich ein Bild per Telegram an meinen Bot schicke, bekomme ich in iobroker die Fehlermeldung: polling_error:undefined, Cannot read property 'file_id' of undefined

                                          Das ist wohl eine Meldung vom Adapter, das Blockly-Script ist da noch gar nicht aktiv geworden.
                                          Adapter-Einstellungen: Polling, save media files...

                                          Hat jemand eine Idee, was ich noch falsch habe ?

                                          Danke!

                                          M F 2 Replies Last reply Reply Quote 0
                                          • M
                                            MCU @piForscher last edited by

                                            @piForscher Schick mal die Bilder von der Telegram-Instanz. Ich habe diese Einstell-Möglichkeit nicht!

                                            F 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            788
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            8
                                            25
                                            2473
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo