Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. telegram

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    816

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

telegram

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
20 Beiträge 3 Kommentatoren 1.2k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • OliverIOO OliverIO

    @michihorn

    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.

    M Offline
    M Offline
    michihorn
    schrieb am zuletzt editiert von
    #11

    @oliverio Ja stimmt, zumindest machmal, aber jetzt weiß ich ja woran es gelegen hat. Danke

    1 Antwort Letzte Antwort
    0
    • haus-automatisierungH haus-automatisierung

      @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 Funktion createTempFile 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);
                }
            });
          }
      });
      
      M Offline
      M Offline
      michihorn
      schrieb am zuletzt editiert von
      #12

      @haus-automatisierung Danke für die Überarbeitung des Scriptes, ich habe jetzt mal die Variante eingebaut. Danke

      1 Antwort Letzte Antwort
      0
      • haus-automatisierungH haus-automatisierung

        @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 Funktion createTempFile 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);
                  }
              });
            }
        });
        
        M Offline
        M Offline
        michihorn
        schrieb am zuletzt editiert von
        #13

        @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)
        
        OliverIOO 1 Antwort Letzte Antwort
        0
        • M michihorn

          @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)
          
          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von OliverIO
          #14

          @michihorn

          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.

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          M 1 Antwort Letzte Antwort
          0
          • OliverIOO OliverIO

            @michihorn

            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.

            M Offline
            M Offline
            michihorn
            schrieb am zuletzt editiert von michihorn
            #15

            @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

            OliverIOO 1 Antwort Letzte Antwort
            0
            • M michihorn

              @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

              OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von
              #16

              @michihorn

              Trage da einfach mal anstatt dessen

              createTempFile('telegram-image.png', response.data)

              Ein.

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              M 1 Antwort Letzte Antwort
              0
              • OliverIOO OliverIO

                @michihorn

                Trage da einfach mal anstatt dessen

                createTempFile('telegram-image.png', response.data)

                Ein.

                M Offline
                M Offline
                michihorn
                schrieb am zuletzt editiert von michihorn
                #17

                @oliverio sagte in telegram:

                createTempFile('telegram-image.png', response.data)

                und wo wird telegram-image.png "gefüllt"? Mit response.data?

                haus-automatisierungH OliverIOO 2 Antworten Letzte Antwort
                0
                • M michihorn

                  @oliverio sagte in telegram:

                  createTempFile('telegram-image.png', response.data)

                  und wo wird telegram-image.png "gefüllt"? Mit response.data?

                  haus-automatisierungH Online
                  haus-automatisierungH Online
                  haus-automatisierung
                  Developer Most Active
                  schrieb am zuletzt editiert von
                  #18

                  @michihorn Ist die Doku der Funktion unvollständig?

                  🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                  🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                  📚 Meine inoffizielle ioBroker Dokumentation

                  M 1 Antwort Letzte Antwort
                  0
                  • haus-automatisierungH haus-automatisierung

                    @michihorn Ist die Doku der Funktion unvollständig?

                    M Offline
                    M Offline
                    michihorn
                    schrieb am zuletzt editiert von
                    #19

                    @haus-automatisierung Aus meiner Sicht schon, ich werde mich am Montag mal in Ruhe damit beschäftigen.
                    Viele Grüße ;-)

                    1 Antwort Letzte Antwort
                    0
                    • M michihorn

                      @oliverio sagte in telegram:

                      createTempFile('telegram-image.png', response.data)

                      und wo wird telegram-image.png "gefüllt"? Mit response.data?

                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      schrieb am zuletzt editiert von
                      #20

                      @michihorn

                      Das ist nur der temporäre Dateiname.
                      Gefüllt wird das durch diese Funktion.
                      Der Inhalt kommt von response.data

                      Meine Adapter und Widgets
                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                      Links im Profil

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate
                      FAQ Cloud / IOT
                      HowTo: Node.js-Update
                      HowTo: Backup/Restore
                      Downloads
                      BLOG

                      401

                      Online

                      32.6k

                      Benutzer

                      82.0k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe