Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Doorbird PlaySound

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Doorbird PlaySound

Scheduled Pinned Locked Moved Skripten / Logik
7 Posts 4 Posters 2.8k Views 6 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    Basti189
    wrote on last edited by Basti189
    #1

    Hallo zusammen,

    nach zwei Tagen des Testens und der Verzweiflung, kann ich euch nun ein Javascript-Skript anbieten, welches eine vorher konvertierte WAV auf eurer Doorbird abspielt.
    Die abzuspielende Sounddatei habe ich vorher auf der Seite https://g711.org/ mit den Parameter "u-law WAV (8Khz, Mono, CCITT u-law)" konvertiert.
    Anschließens muss die Datei nur unter "/opt/iobroker/iobroker-data/files/0_userdata.0/doorbird/" abgelegt werden. Sollte der Ordner doorbird nicht existieren, so kann er per Hand erstellt werden oder das Skript einmal laufen lassen, dann ist er auch da.
    Im JavaScript Order sollte nun auch das Verzeichnis Doorbird aufgetaucht sein, sowie zwei Datenpunkte PlaySound und StopSound.
    PlaySound einfach den Name der Datei ohne Endung übergeben, also heißt die Datei Ansage.wav, so schreibt ihr Ansage hinein.
    StopSound ist ein Button, der das Abspielen abbricht.
    Falls sich jemand dem Doorbird Adapter widmet, den Code gerne dort mit aufnehmen :D
    Hat jemand Verbesserungsvorschläge, immer her damit.
    Vielleicht kann man sich auch nochmal Gedanken machen, Dateien on the fly in das ulaw format zu konvertieren, für TTs zum Beispiel...

    Liebe Grüße
    Basti

    Version: 1.0.1, update erfolgte am 20.11.2022

    /*
     * @Copyright 2022 Sebastian Wolf <wolfsline@googlemail.com>
     *
     * Skript Name:     Doorbird PlaySound
     * Skript Version:  1.0.1
     * Erstell-Datum:   19. November 2022
     *
     */
    
    // ------------ CHANGE HERE -------------
    const USERNAME = "xxxxxxxx0001";
    const PASSWORD = "xxxxxxxxxxxx";
    const IP_ADDRESS = "IP-ADRESSE";
    // --------------------------------------
    
    const AUTH = 'Basic ' + Buffer.from(USERNAME + ':' + PASSWORD).toString('base64');
    const PATH = "/opt/iobroker/iobroker-data/files/0_userdata.0/doorbird/";
    const VERSION = "v1.0.1";
    const API_VERSION = "v0.31"
    
    var fs = require("fs");
    var http = require("http");
    
    var credentialsValid = false;
    var isPlaying = false;
    var stopSound = false;
    
    function init() {
        console.log("Starting...");
        console.log("Script: " + VERSION + ", API: " + API_VERSION);
        if (!fs.existsSync(PATH)) {
            fs.mkdirSync(PATH);
        }
    
        // Create Datapoint
        createState("Doorbird.PlaySound", "", false, {
                name: "PlaySound",
                desc: "Sound auf deiner Doorbird abspielen",
                type: "string",
                role: "value"
            });
    
        createState("Doorbird.StopSound", false, {
            name: "StopSound",
            desc: "Beendet das Abspielen",
            type: "boolean",
            role: "button"
        });
    
        // Check credentials
        getInfo();
    }
    
    function scriptIsReadyForPlaying() {
        // playSound("Ansage");
        on({id: "javascript.0.Doorbird.PlaySound", change: "any"}, async function (obj) {
            var name = getState("javascript.0.Doorbird.PlaySound").val;
            await playSound(name)
        });
    
        on({id: "javascript.0.Doorbird.StopSound", val: true}, async function (obj) {
            setState("javascript.0.Doorbird.StopSound", false);
            if (isPlaying) {
                stopSound = true;
            }
        });
    }
    
    function buildURL(endpoint, params) {
        return "http://" + IP_ADDRESS + "/bha-api/" + endpoint + ".cgi?" + params;
    }
    
    function buildURL(endpoint) {
        return "http://" + IP_ADDRESS + "/bha-api/" + endpoint + ".cgi";
    }
    
    async function playSound(name) {
        if (isPlaying || !credentialsValid) {
            return;
        }
        if (name == null || name == "") {
            return;
        }
        isPlaying = true;
        const options = {
            method: "POST",
            headers: {
                "Authorization": AUTH,
                "Content-Type": "audio/basic",
                "Content-Length": "9999999",
                "Connection": "Keep-Alive",
                "Cache-Control": "no-cache"
            }
        };
        var req = http.request(buildURL("audio-transmit"), options);
        var file_stream = fs.createReadStream(PATH + name + ".wav", {highWaterMark: 128});
        
        var timeout = 750;
        file_stream.on("data", (data) => {
            if (stopSound) {
                stopSound = false;
                isPlaying = false;
                file_stream.destroy();
                return;
            }
            req.write(data);
            file_stream.pause();
            setTimeout(() => {
                file_stream.resume();
                timeout = 15;
            }, timeout);
        });
        file_stream.on('error', () => {
            isPlaying = false;
        });
         file_stream.on("close", () => {
            isPlaying = false;
        });
        req.on("error", () => {
            isPlaying = false;
        });
    }
    
    function getInfo() {
        const options = {
            headers: {
            "Authorization": AUTH
            }
        };
        let rawData = '';
        http.get(buildURL("info"), options, (res) => {
            res.on("data", (chunk) => { 
                rawData += chunk; 
            });
            res.on("end", () => {
                if (res.statusCode == 200) {
                    console.log("Authentication success");
                    credentialsValid = true;
                    scriptIsReadyForPlaying();
                } else {
                    console.error("Error! Check ip, username and password");
                    console.error("Please restart script");
                }
            });
            res.on("error", (e) => {    
                console.error(`Got error: ${e.message}`);
            });
        });
    }
    init();
    
    M 1 Reply Last reply
    1
    • G Offline
      G Offline
      GreySkoda91
      wrote on last edited by
      #2

      Kann man dann auch mehrere Sounds abspielen ? :D
      oder nur die eine ?

      1 Reply Last reply
      0
      • B Basti189

        Hallo zusammen,

        nach zwei Tagen des Testens und der Verzweiflung, kann ich euch nun ein Javascript-Skript anbieten, welches eine vorher konvertierte WAV auf eurer Doorbird abspielt.
        Die abzuspielende Sounddatei habe ich vorher auf der Seite https://g711.org/ mit den Parameter "u-law WAV (8Khz, Mono, CCITT u-law)" konvertiert.
        Anschließens muss die Datei nur unter "/opt/iobroker/iobroker-data/files/0_userdata.0/doorbird/" abgelegt werden. Sollte der Ordner doorbird nicht existieren, so kann er per Hand erstellt werden oder das Skript einmal laufen lassen, dann ist er auch da.
        Im JavaScript Order sollte nun auch das Verzeichnis Doorbird aufgetaucht sein, sowie zwei Datenpunkte PlaySound und StopSound.
        PlaySound einfach den Name der Datei ohne Endung übergeben, also heißt die Datei Ansage.wav, so schreibt ihr Ansage hinein.
        StopSound ist ein Button, der das Abspielen abbricht.
        Falls sich jemand dem Doorbird Adapter widmet, den Code gerne dort mit aufnehmen :D
        Hat jemand Verbesserungsvorschläge, immer her damit.
        Vielleicht kann man sich auch nochmal Gedanken machen, Dateien on the fly in das ulaw format zu konvertieren, für TTs zum Beispiel...

        Liebe Grüße
        Basti

        Version: 1.0.1, update erfolgte am 20.11.2022

        /*
         * @Copyright 2022 Sebastian Wolf <wolfsline@googlemail.com>
         *
         * Skript Name:     Doorbird PlaySound
         * Skript Version:  1.0.1
         * Erstell-Datum:   19. November 2022
         *
         */
        
        // ------------ CHANGE HERE -------------
        const USERNAME = "xxxxxxxx0001";
        const PASSWORD = "xxxxxxxxxxxx";
        const IP_ADDRESS = "IP-ADRESSE";
        // --------------------------------------
        
        const AUTH = 'Basic ' + Buffer.from(USERNAME + ':' + PASSWORD).toString('base64');
        const PATH = "/opt/iobroker/iobroker-data/files/0_userdata.0/doorbird/";
        const VERSION = "v1.0.1";
        const API_VERSION = "v0.31"
        
        var fs = require("fs");
        var http = require("http");
        
        var credentialsValid = false;
        var isPlaying = false;
        var stopSound = false;
        
        function init() {
            console.log("Starting...");
            console.log("Script: " + VERSION + ", API: " + API_VERSION);
            if (!fs.existsSync(PATH)) {
                fs.mkdirSync(PATH);
            }
        
            // Create Datapoint
            createState("Doorbird.PlaySound", "", false, {
                    name: "PlaySound",
                    desc: "Sound auf deiner Doorbird abspielen",
                    type: "string",
                    role: "value"
                });
        
            createState("Doorbird.StopSound", false, {
                name: "StopSound",
                desc: "Beendet das Abspielen",
                type: "boolean",
                role: "button"
            });
        
            // Check credentials
            getInfo();
        }
        
        function scriptIsReadyForPlaying() {
            // playSound("Ansage");
            on({id: "javascript.0.Doorbird.PlaySound", change: "any"}, async function (obj) {
                var name = getState("javascript.0.Doorbird.PlaySound").val;
                await playSound(name)
            });
        
            on({id: "javascript.0.Doorbird.StopSound", val: true}, async function (obj) {
                setState("javascript.0.Doorbird.StopSound", false);
                if (isPlaying) {
                    stopSound = true;
                }
            });
        }
        
        function buildURL(endpoint, params) {
            return "http://" + IP_ADDRESS + "/bha-api/" + endpoint + ".cgi?" + params;
        }
        
        function buildURL(endpoint) {
            return "http://" + IP_ADDRESS + "/bha-api/" + endpoint + ".cgi";
        }
        
        async function playSound(name) {
            if (isPlaying || !credentialsValid) {
                return;
            }
            if (name == null || name == "") {
                return;
            }
            isPlaying = true;
            const options = {
                method: "POST",
                headers: {
                    "Authorization": AUTH,
                    "Content-Type": "audio/basic",
                    "Content-Length": "9999999",
                    "Connection": "Keep-Alive",
                    "Cache-Control": "no-cache"
                }
            };
            var req = http.request(buildURL("audio-transmit"), options);
            var file_stream = fs.createReadStream(PATH + name + ".wav", {highWaterMark: 128});
            
            var timeout = 750;
            file_stream.on("data", (data) => {
                if (stopSound) {
                    stopSound = false;
                    isPlaying = false;
                    file_stream.destroy();
                    return;
                }
                req.write(data);
                file_stream.pause();
                setTimeout(() => {
                    file_stream.resume();
                    timeout = 15;
                }, timeout);
            });
            file_stream.on('error', () => {
                isPlaying = false;
            });
             file_stream.on("close", () => {
                isPlaying = false;
            });
            req.on("error", () => {
                isPlaying = false;
            });
        }
        
        function getInfo() {
            const options = {
                headers: {
                "Authorization": AUTH
                }
            };
            let rawData = '';
            http.get(buildURL("info"), options, (res) => {
                res.on("data", (chunk) => { 
                    rawData += chunk; 
                });
                res.on("end", () => {
                    if (res.statusCode == 200) {
                        console.log("Authentication success");
                        credentialsValid = true;
                        scriptIsReadyForPlaying();
                    } else {
                        console.error("Error! Check ip, username and password");
                        console.error("Please restart script");
                    }
                });
                res.on("error", (e) => {    
                    console.error(`Got error: ${e.message}`);
                });
            });
        }
        init();
        
        M Offline
        M Offline
        maxpd
        wrote on last edited by maxpd
        #3

        @basti189 danke dir. Noch nicht probiert. Weil noch eine Frage: Hast du auch noch die original Vogelgezwitscherdatei, wenn man auf diese wieder zurückgreifen möchte?

        Update: ist in der App ebenfalls änderbar und der Standardsound bleibt dort weiterhin vorhanden. https://www.doorbird.com/de/faq-single?faq=241

        Gruß
        maxpd

        Raspi 4 8gb | iobroker + pivccu3 | 46 Adapter | 68 Scripte, 120 Devices

        M 1 Reply Last reply
        0
        • M maxpd

          @basti189 danke dir. Noch nicht probiert. Weil noch eine Frage: Hast du auch noch die original Vogelgezwitscherdatei, wenn man auf diese wieder zurückgreifen möchte?

          Update: ist in der App ebenfalls änderbar und der Standardsound bleibt dort weiterhin vorhanden. https://www.doorbird.com/de/faq-single?faq=241

          M Online
          M Online
          micklafisch
          wrote on last edited by
          #4

          @maxpd
          geht das bei dir über die App?

          Wenn ich versuche den Button Klingelton in der Doorbird App zu ändern, dann crasht die App. Über das Doorbird Admin Webinterface gibts die Einstellung nicht

          M 1 Reply Last reply
          0
          • M micklafisch

            @maxpd
            geht das bei dir über die App?

            Wenn ich versuche den Button Klingelton in der Doorbird App zu ändern, dann crasht die App. Über das Doorbird Admin Webinterface gibts die Einstellung nicht

            M Offline
            M Offline
            maxpd
            wrote on last edited by
            #5

            @micklafisch hab es als admin exakt nach dem FAQ über die App gemacht. jetzt bimmeln die ersten Noten von Halloween

            Gruß
            maxpd

            Raspi 4 8gb | iobroker + pivccu3 | 46 Adapter | 68 Scripte, 120 Devices

            M 1 Reply Last reply
            0
            • M maxpd

              @micklafisch hab es als admin exakt nach dem FAQ über die App gemacht. jetzt bimmeln die ersten Noten von Halloween

              M Online
              M Online
              micklafisch
              wrote on last edited by
              #6

              @maxpd
              bin ebenfalls direkt nach der Anleitung vorgegangen, hab auch zig Soundfiles probiert.

              Aktuell iOS 18.1, Doorbirdapp V5.42 und Doorbird V000148

              Es haut einfach nicht hin, die App schließt sich selbst sobald ich das Soundfile auswähle.

              1 Reply Last reply
              0
              • M Online
                M Online
                micklafisch
                wrote on last edited by
                #7

                Hab es jetzt aus lauter Verzweiflung mit einem Android-Simulator unter Windows versucht. Dort geht die App und ich kann den Ton hochladen ohne dass die App abstürzt.

                Ziel erreicht. Danke!

                1 Reply Last reply
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                Support us

                ioBroker
                Community Adapters
                Donate

                702

                Online

                32.7k

                Users

                82.4k

                Topics

                1.3m

                Posts
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Home
                • Recent
                • Tags
                • Unread 0
                • Categories
                • Unreplied
                • Popular
                • GitHub
                • Docu
                • Hilfe