Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Basti189

    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

    B
    • Profile
    • Following 0
    • Followers 0
    • Topics 4
    • Posts 8
    • Best 1
    • Groups 1

    Basti189

    @Basti189

    Starter

    1
    Reputation
    7
    Profile views
    8
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Basti189 Follow
    Starter

    Best posts made by Basti189

    • Doorbird PlaySound

      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 😄
      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();
      
      posted in Skripten / Logik
      B
      Basti189

    Latest posts made by Basti189

    • PTM 215Z funktioniert nur während des Joining

      Hallo zusammen,

      ich besitze 8 von den batterielosen Friends of hue Tastern PTM 215Z.
      6 dieser Geräte sind erfolgreich über den zigbee Adapter eingebunden.
      2 dieser Geräte machen nur über den Zigbee Adapter Probleme.
      Ich kann die Geräte joinen, das klappt wunderbar, sie werden erkannt, sie werden angezeigt, alles super.

      2023-12-29 15:21:46.059  - debug: zigbee.0 (28498) handleDeviceJoined. {"device":{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":2,"_type":"GreenPower","_ieeeAddr":"0x0000000001765c98","_networkAddress":23704,"_manufacturerID":null,"_endpoints":[],"_modelID":"GreenPower_2","_interviewCompleted":true,"_interviewing":false,"_skipDefaultResponse":false,"_skipTimeResponse":false,"meta":{},"_lastSeen":null,"_defaultSendRequestWhen":"immediate","_pendingRequestTimeout":0}}
      2023-12-29 15:21:46.062  - debug: zigbee.0 (28498) handleDeviceInterview. {"status":"successful","device":{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":2,"_type":"GreenPower","_ieeeAddr":"0x0000000001765c98","_networkAddress":23704,"_manufacturerID":null,"_endpoints":[],"_modelID":"GreenPower_2","_interviewCompleted":true,"_interviewing":false,"_skipDefaultResponse":false,"_skipTimeResponse":false,"meta":{},"_lastSeen":null,"_defaultSendRequestWhen":"immediate","_pendingRequestTimeout":0}}
      2023-12-29 15:21:46.063  - info: zigbee.0 (28498) Successfully interviewed '0x0000000001765c98', device has successfully been paired
      2023-12-29 15:21:46.063  - info: zigbee.0 (28498) Device '0x0000000001765c98' is supported, identified as: EnOcean Pushbutton transmitter module (PTM 215Z)
      

      Solange das joining noch läuft sehe ich auch die Tastendrücke.

      2023-12-29 15:22:07.303  - debug: zigbee.0 (28498) Publish {"action":"unknown_104"} to "0000000001765c98"
      2023-12-29 15:22:34.424  - debug: zigbee.0 (28498) Publish {"action":"press_1"} to "0000000001765c98"
      2023-12-29 15:22:34.764  - debug: zigbee.0 (28498) Publish {"action":"release_1"} to "0000000001765c98"
      

      Endet das Joining des Adapters nichts mehr - 0.

      Den einzigen Hinweis, der auf einen Fehler deutet ist dieser:

      2023-12-29 15:43:37.554  - debug: zigbee.0 (29314) Failed to execute LQI for '0x0000000001765c98'. "Error: AREQ - ZDO - mgmtLqiRsp after 10000ms\n    at Timeout._onTimeout (/opt/iobroker/node_modules/zigbee-herdsman/src/utils/waitress.ts:64:35)\n    at listOnTimeout (node:internal/timers:569:17)\n    at processTimers (node:internal/timers:512:7)"
      2023-12-29 15:43:37.554  - debug: zigbee.0 (29314) LQI succeeded for '0x0000000001765c98'
      2023-12-29 15:43:47.562  - debug: zigbee.0 (29314) Failed to execute routing table for '0x0000000001765c98'. "Error: AREQ - ZDO - mgmtRtgRsp after 10000ms\n    at Timeout._onTimeout (/opt/iobroker/node_modules/zigbee-herdsman/src/utils/waitress.ts:64:35)\n    at listOnTimeout (node:internal/timers:569:17)\n    at processTimers (node:internal/timers:512:7)"
      2023-12-29 15:43:47.562  - debug: zigbee.0 (29314) Routing for '0x0000000001765c98': undefined
      2023-12-29 15:43:47.563  - debug: zigbee.0 (29314) Routing table succeeded for '0x0000000001765c98'
      

      Wenn man die Geräte testweise an die HueBridge bindet, dann laufen sie einwandfrei.
      Hat jemand einen Tipp wie man das Problem beheben kann?

      Adapterversion: v1.8.25
      Coordinator: zStack3x0 2-1.2.7.1. 20230507 CC26X2R1

      posted in Einbindung von Geräten
      B
      Basti189
    • Doorbird PlaySound

      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 😄
      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();
      
      posted in Skripten / Logik
      B
      Basti189
    • Philips Hue - Effekt Kerzenlicht

      Hallo zusammen,

      ich nutze den Philips Hue Adapter und nebenher auf die Philips Hue App. Nun kann ich bei den neueren Geräten ja die Effekte Kerze und Kaminfeuer vorwählen. Dies würde ich gerne auch über ioBroker schalten können, geht das? Wenn ja, wie? Wenn nein, kommt das noch? 😄

      Besten Dank und viele Grüße

      Sebastian

      PS.: Happy Halloween 😉

      posted in Skripten / Logik
      B
      Basti189
    • RE: Bitte nicht stören Android -> ioBroker

      @liv-in-sky Ich kann die APK-Datei, die ich in den PlayStore laden werde, auch auf Github hochladen, wenn man ohne GoogleDienste unterwegs ist.

      posted in ioBroker Allgemein
      B
      Basti189
    • RE: Bitte nicht stören Android -> ioBroker

      @liv-in-sky In ein paar Tagen wird die App im Google PlayStore zur Verfügung stehen und dann kannst du sie dort herunterladen.
      Den Datenpunkt, den du ansteuern möchtest, musst du händisch anlegen 😉

      posted in ioBroker Allgemein
      B
      Basti189
    • RE: Bitte nicht stören Android -> ioBroker

      Entfernt

      posted in ioBroker Allgemein
      B
      Basti189
    • RE: Bitte nicht stören Android -> ioBroker

      Achso, es gibt unten auch die Einstellung Experte, dann wird die Adaptereinstellung freigeschaltet und man kann einen anderen Adapter hineinschreiben, wie z.B. javascript.0

      posted in ioBroker Allgemein
      B
      Basti189
    • Bitte nicht stören Android -> ioBroker

      Hallo zusammen,

      wenn ich nachts schlafen gehe, bzw. mein Android-Smartphone zum Laden anschließe, geht der "Bitte nicht stören" Modus an, damit das Smartphone ruhe gibt und nur noch wichtige Menschen anrufen können. Dies wollte ich gerne benutzen, um in ioBroker gewisse Aktionen auszulösen, z.B. alle Alexa Geräte in den Bitte nicht stören Modus zu bringen, auch die Klingel auszuschalten oder was einem sonst noch so einfällt.

      Ich habe also eine Android-App programmiert (min. Android 8.0) die den Status des "Bitte nicht stören" Modus überwacht und an ioBroker (Simple-API Adapter erforderlich) mitteilen kann. Ich hab relativ wenig Ansprüche gehabt, habe mir aber gedacht, dass ich sie etwas dynamischer gestalte, falls vielleicht einer von euch diese App auch benutzen möchte.

      photo_2022-10-22_13-23-24.jpg

      Zur App selber und den angeforderten Berechtigungen

      • Sie braucht den Zugriff während "Bitte nicht stören", sonst bekommt der Hintergrunddienst keine Mittelung, dass sich der Status geändert hat.
      • Sie braucht den Zugriff auf den genauen Gerätestandort, da sonst nicht der Name des aktuellen WLANs ausgelesen werden kann
      • Sie braucht den Zugriff immer auf den Standort, da der Name des WLANs vom Hintergrunddienst nicht ausgelesen werden kann

      Den Namen des WLANs lese ich deswegen aus, um möglichst zu versuchen, dass der Status nur im heimischen WLAN mitgeteilt wird (Kann man auch ausschalten, wieso auch immer). Wenn man bei Freunden ist und das Netzwerk heißt wie zu Hause, ja dann wird es dort eben auch mitgeteilt...

      Ich nutze keine Authentifizierung, deswegen gibt es die Einstellung (noch) nicht.
      Es sollte mit https klappen, habe ich aber nicht getestet.
      Es sind keine größeren Prüfungen enthalten, heißt man kann auch "falsche" Werte eingeben.

      Endpunkt im ioBroker

      Screenshot 2022-10-22 133413.png

      true = Benachrichtigungen sind erlaubt, Bitte nicht stören ist aus
      false = Benachrichtigungen sind verboten, Bitte nicht stören ist an

      Wenn ich ein Logo habe, dann werde ich die App auch in den PlayStore stellen.

      Quellcode ist zu finden unter: https://github.com/Basti189/DND_Tx

      posted in ioBroker Allgemein
      B
      Basti189
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo