Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Hilfestellung Rückgabewert einer Funktion

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

Hilfestellung Rückgabewert einer Funktion

Geplant Angeheftet Gesperrt Verschoben JavaScript
3 Beiträge 2 Kommentatoren 412 Aufrufe 1 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.
  • klausMK Offline
    klausMK Offline
    klausM
    schrieb am zuletzt editiert von
    #1

    Hallo,

    aktuell wird ein von der IP-Kamera ein Bild abgerufen, danach der benötigte Ausschnitt herausgeschnitten und über Pushover verschickt.
    Zur Vorbeugung von Zeitkonflikten sind zwischen den Schritten 2 bzw. 4 Sekunden Wartezeit eingebaut. Funktioniert so mit einem kleinen Blocky.

    Das ganze wollte ich nun eleganter lösen, scheitere aber an meiner zu geringen Spript-Kenntnis.

    1. Bild abrufen –> 2. periodisch prüfen ob Bild vorliegt -> 3. danach Ausschnitt erzeugen –> 4. periodisch prüfen ob Ausschnitt fertig –> zum Schluss Bild versenden,
      Wurde kein Bild erzeugt dann nur Textnachricht ohne Bild pushen.

    Nun habe ich diese Funktion soweit zusammen gelesen bzw. mittels per trial and error erzeugt.
    Leider bin ich zu blöd der Funktion beizubringen, einen Rückgabewert, in dem Fall true oder falsch zu liefern und benötige hierbei Hilfe !

    image = '/opt/iobroker/tmp/cam/klingelalarm.jpg';

    Ein log(ImageExist (image,500,10)); erzeugt undefined.

    /**
     * prüft "tries" mal in "t_interval" Zeitabständen auf vorhandensein der Datei "path"
     */
    function ImageExist(path,t_interval,tries){
    var fs = require('fs');
    var counter = 0;
    var exist;
    
        const o_interval = setInterval(function () { 
            if (fs.existsSync(path)) {
                exist = true;  // nur zum Test
                clearInterval(o_interval);
            } else {
                counter = counter + 1;
                if (counter > tries-1) {
                  exist = false; // nur zum Test
                clearInterval(o_interval);        
                }
            }
        }, t_interval); // setInterval
       // return o_interval.vorhanden; // nur zum Test
        return exist; // geht nicht ich gebe auf ;-(
    } //ImageExist
    

    Gruß Klaus

    MicM 1 Antwort Letzte Antwort
    0
    • klausMK klausM

      Hallo,

      aktuell wird ein von der IP-Kamera ein Bild abgerufen, danach der benötigte Ausschnitt herausgeschnitten und über Pushover verschickt.
      Zur Vorbeugung von Zeitkonflikten sind zwischen den Schritten 2 bzw. 4 Sekunden Wartezeit eingebaut. Funktioniert so mit einem kleinen Blocky.

      Das ganze wollte ich nun eleganter lösen, scheitere aber an meiner zu geringen Spript-Kenntnis.

      1. Bild abrufen –> 2. periodisch prüfen ob Bild vorliegt -> 3. danach Ausschnitt erzeugen –> 4. periodisch prüfen ob Ausschnitt fertig –> zum Schluss Bild versenden,
        Wurde kein Bild erzeugt dann nur Textnachricht ohne Bild pushen.

      Nun habe ich diese Funktion soweit zusammen gelesen bzw. mittels per trial and error erzeugt.
      Leider bin ich zu blöd der Funktion beizubringen, einen Rückgabewert, in dem Fall true oder falsch zu liefern und benötige hierbei Hilfe !

      image = '/opt/iobroker/tmp/cam/klingelalarm.jpg';

      Ein log(ImageExist (image,500,10)); erzeugt undefined.

      /**
       * prüft "tries" mal in "t_interval" Zeitabständen auf vorhandensein der Datei "path"
       */
      function ImageExist(path,t_interval,tries){
      var fs = require('fs');
      var counter = 0;
      var exist;
      
          const o_interval = setInterval(function () { 
              if (fs.existsSync(path)) {
                  exist = true;  // nur zum Test
                  clearInterval(o_interval);
              } else {
                  counter = counter + 1;
                  if (counter > tries-1) {
                    exist = false; // nur zum Test
                  clearInterval(o_interval);        
                  }
              }
          }, t_interval); // setInterval
         // return o_interval.vorhanden; // nur zum Test
          return exist; // geht nicht ich gebe auf ;-(
      } //ImageExist
      

      Gruß Klaus

      MicM Offline
      MicM Offline
      Mic
      Developer
      schrieb am zuletzt editiert von
      #2

      @klausM
      fs.existsSync() ist asynchron, d.h. dein "return exist" wird normalerweise vorher schon zurückgegeben, bevor überhaupt die Variable exist gefüllt ist. Daher das "undefined".
      D.h. während fs.existsSync() immer noch im Filesystem prüft, ob das File existiert, ist längst das Script durchlaufen.
      Ich bin wahrlich kein async/await-Experte, aber mittels async/await kannst du das sicherlich lösen. Die Experten diesbezüglich hier im Forum können sicherlich besser helfen.

      klausMK 1 Antwort Letzte Antwort
      0
      • MicM Mic

        @klausM
        fs.existsSync() ist asynchron, d.h. dein "return exist" wird normalerweise vorher schon zurückgegeben, bevor überhaupt die Variable exist gefüllt ist. Daher das "undefined".
        D.h. während fs.existsSync() immer noch im Filesystem prüft, ob das File existiert, ist längst das Script durchlaufen.
        Ich bin wahrlich kein async/await-Experte, aber mittels async/await kannst du das sicherlich lösen. Die Experten diesbezüglich hier im Forum können sicherlich besser helfen.

        klausMK Offline
        klausMK Offline
        klausM
        schrieb am zuletzt editiert von
        #3

        @Mic
        vielen Dank für Rückmeldung. Ähnliches hatte ich vermutet. Habe das nun hier nachgelesen, aber ob ich das jemals umsetzten kann ? ;-).
        LG Klaus

        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

        329

        Online

        32.4k

        Benutzer

        81.4k

        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
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe