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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Bild vom Telegram Empfangen

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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
                        • F
                          fastfoot @piForscher last edited by

                          @piForscher sagte in Bild vom Telegram Empfangen:

                          Hat jemand eine Idee, was ich noch falsch habe ?

                          Das dürfte an dem hier beschriebenen Fehler liegen, der ist auch auf Github noch nicht gefixt, es gibt aber ein issue dazu

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

                            @MCU sagte in Bild vom Telegram Empfangen:

                            Ich habe diese Einstell-Möglichkeit nicht!

                            Die GitHub-Version hat diese Einstellung, siehe hier

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

                              @fastfoot Dann braucht man das Script nicht mehr, wenn die Instanz das schon drin hat!
                              Script sollte unabhängig davon funktionieren! Notwendig sind dafür die RAW-Daten!

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

                                @MCU sagte in Bild vom Telegram Empfangen:

                                @fastfoot Dann braucht man das Script nicht mehr, wenn die Instanz das schon drin hat!
                                Script sollte unabhängig davon funktionieren! Notwendig sind dafür die RAW-Daten!

                                Genau richtig! Da wegen des beschriebenen (Noch-)Fehlers Fummelei am Source notwendig ist, sollte man momentan aber Dein Skript verwenden, das funktioniert ja gut und die Save media Files Einstellung ist dafür eben auch nicht notwendig, so dass man mit der latest/stable hinkommt

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

                                  @MCU
                                  OK, habs verstanden und auch jetzt gelöst:
                                  In der Adapterkonfiguration muss im Reiter 'Nachrichten' die Option 'Speichere Original-Requests...' angewählt sein (Hatte den Punkt von dir übersehen).

                                  Dann sehe ich das auch im Datenpunkt 'telegram.0.communicate.requestRaw' (der war nämlich vorher leer).

                                  Danke!
                                  Jetzt geht's weiter...

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  814
                                  Online

                                  31.9k
                                  Users

                                  80.2k
                                  Topics

                                  1.3m
                                  Posts

                                  8
                                  25
                                  2579
                                  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