Navigation

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

    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

    • Profile
    • Following 0
    • Followers 0
    • Topics 3
    • Posts 98
    • Best 7
    • Groups 1

    grrfield

    @grrfield

    7
    Reputation
    18
    Profile views
    98
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    grrfield Follow
    Starter

    Best posts made by grrfield

    • RE: Bahn: Zuglauf nach Zugnummer

      @martinp Es gibt den Adapter fahrplan - da kannst Du bevorzugte Verbindungen einstellen und bekommst dann die aktuellen Abfahrts- und Ankunftszeiten der Züge. Ich nutze das, um mir Verspätungen auf meinem Wandtablett anzeigen zu lassen und bei Zugausfall morgens den Wecker früher klingeln zu lassen, damit ich einen früheren Zug nehmen kann.

      posted in Off Topic
      grrfield
      grrfield
    • RE: Falschfarben im Fullybrowser [gelöst]

      @joergh Hallo, hast Du im Fullybrowser das dunkle Design eingestellt? Da werden die Farben verfälscht, versuch mal das helle Design.

      posted in Visualisierung
      grrfield
      grrfield
    • Skript zum PiHole Version 6 an- und ausschalten

      Ich nutze einen PiHole-Werbeblocker, der auch sehr zuverlässig funktioniert. Manchmal werden allerdings nützliche Seiten blockiert, und ich möchte ihn schnell abschalten können. Ich habe das bisher über den PiHole-Adapter gemacht, der aber ab der neuen Version 6 nicht mehr funktioniert, da die Authentifizierung geändert wurde. Ich habe mir daher ein Javaskript erstellt, das den Werbeblocker für eine festgelegte Zeit ausschaltet oder wieder einschaltet. Gesteuert wird das über zwei angelegte States:
      '0_userdata.0.PiHole' true|false - schaltet den Werbeblocker ein oder aus
      '0_userdata.0.PiHoleOffTime' time - Ausschaltzeit time Minuten
      Dem State '0_userdata.0.PiHole' habe ich über den iot-Adapter den Alexabefehl "Werbeblocker" zugewiesen und kann nun mit "Alexa - schalt den Werbeblocker an/aus" den PiHole steuern. Über das angesprochene Echo-Gerät kommt dann eine Bestätigung über den Alexa-Adapter; diese läßt sich im Skript mit der Einstellung useAlexa ein- oder ausschalten.
      Für die Funktion müssen im Skript die IP-Adresse des PiHole-Servers unter piHoleIP sowie das PiHiole-API-Token unter apiToken eingetragen werden. Das API-Token erhält man über die Weboberfläche des PiHole unter "Settings - Web interface / API - Advanced Settings - Configure app password".

      Hier ist das Skript versteckt:

      /**
       * PiHole 2.0
       * Schaltet PiHole (ab Version 6) für eine vorgegebene Zeit (120 min) aus und dann wieder ein.
       * Das Ein- und Aussachalten erfolgt über den State '0_userdata.0.PiHole', 
       * dem über den iot-Adapter ein Alexa-Befehl zugewiesen werden kann - 
       * z. B. "Alexa, schalt den Werbeblocker an/aus"
       * Die Ausschaltzeit kann über den State '0_userdata.0.PiHoleOffTime' eingestellt werden.
       * 
       * log:     PH006
       */
      
      const fetch = require('node-fetch');
      
      
      /**
       * Einstellungen                                                //Defaults
       */
      
      // IP-Adresse des PiHole Servers ['IP']
      // hier eigene PiHole-Adresse eintragen
      const piHoleIP='192.168.1.199';                                 //'192.168.1.199'
      
      // API-Token [string]
      // hier eigenes API-Token eintragen - wird generiert unter
      // "PiHole - Settings - Web interface / API - Advanced Settings - Configure app password"
      const apiToken='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
      
      // Nutzung mit Alexa-Adapter [true|false]
      const useAlexa=true;					        //true
      
      // Verzögerung der Echoansage bis History-State geschrieben ist
      const EchoDelay=500;                                            //500
      
      
      /**
       * States
       */
      
      createState('0_userdata.0.PiHole', {name: 'PiHole', type: 'boolean'});
      createState('0_userdata.0.PiHoleOffTime', 120, {name: 'Ausschaltzeit', type: 'number', unit: 'min'});
      
      
      /**
       * Main
       */
      
      on({id: Trigger+'PiHole', change: 'any'}, (obj) => {
          if(obj.state.val) {
              disablePiHole(0, piHoleIP, apiToken); 
      		if(useAlexa) {
      			setTimeout(() => {
      				setState(getEcho()+'.Commands.speak', 'Der Werbeblocker ist wieder aktiviert.');
      			}, EchoDelay);
      		}
          } else {
              disablePiHole(getState(Verwaltung+'PiHoleOffTime').val, piHoleIP, apiToken); 
      		if(useAlexa) {
      			setTimeout(() => {
      				setState(getEcho()+'.Commands.speak', 'Der Werbeblocker wird für '+getState(Verwaltung+'PiHoleOffTime').val+' Minuten abgeschaltet.');
      			}, EchoDelay);
      		}
          }
      });
      
      
      /**
       * Funktionen
       */
      
      /**
       * Generiert eine Session ID
       * @param   {string}            ip  IP-Adresse des PiHole-Servers
       * @param   {string}            password    API-Token
       * @returns {Promise<string>}   SID
       */
      async function getSessionID(ip, password) {
          const url=`http://${ip}/api/auth`;
          const data={password};
      
          try {
              const response=await fetch(url, {
                  method: 'POST',
                  headers: {'Content-Type': 'application/json'},
                  body: JSON.stringify(data)
              });
      
              if(response.ok) {
                  const result=await response.json();
                  return result.session.sid; // Session ID zurückgeben
              } else {
                  console.error('PH005 Fehler beim Abrufen der Session ID: '+await response.json());
                  return null;
              }
          } catch(error) {
              console.error('PH006 Netzwerkfehler: ', error);
              return null;
          }
      }
      
      
      /**
       * Schaltet PiHole für duration min ab, bei duration == 0 wieder an.
       * @param   {number}    duration    Dauer [min]
       * @param   {string}    ip          IP-Adresse des PiHole-Servers
       * @param   {string}    password    API-Token
       */
      async function disablePiHole(duration, ip, password) {
          const sid=await getSessionID(ip, password);
          if (!sid) {
              console.error(' PH004 Authentifizierung fehlgeschlagen');
              return;
          }
      
          const url=`http://${ip}/api/dns/blocking`;
          const headers={
              'Content-Type': 'application/json',
              'X-FTL-SID': sid
          };
          const data={blocking: duration != 0 ? false: true, timer: duration*60};
      
          try {
              const response=await fetch(url, {
                  method: 'POST',
                  headers,
                  body: JSON.stringify(data)
              });
      
              if(response.ok) {
                  console.log(`PH001 Pi-hole wurde für ${duration} Minuten deaktiviert.`);
              } else {
                  console.error('PH002 Fehler beim Deaktivieren von Pi-hole');
              }
          } catch(error) {
              console.error('PH003 Netzwerkfehler:', error);
          }
      }
      
      
      /**
       * Gibt die ID des Echos EchoName zurück
       * Bei mehreren Übereinstimmungen wird nur die erste berücksichtigt
       * @param   {string}    EchoName        Name des Echos - wenn leer, dann letzter Echo
       * @returns {string}    ID des Echos; undefined, wenn nicht gefunden
       */
      function getEcho(EchoName)
      {
          if(EchoName === undefined) {
              EchoName=getState('alexa2.0.History.name'/*Echo Device name*/).val;
          }
          let EchoID;
          let IDs=(getIdByName(EchoName, true));
          if(IDs == undefined) {
              log('getEcho: '+EchoName+' not registered!');
              return;
          }
          for (let i=0; i < IDs.length; i++) {
              if (IDs[i].search('Echo-Devices') != -1) {
                  EchoID=IDs[i];
                  i=IDs.length;       // Abbruch nach erstem gefundenen Echo
              }
          }
          return EchoID;
      }
      
      
      // ___|\/|
      //  |
      
      

      posted in JavaScript
      grrfield
      grrfield
    • RE: Nuki Smart Lock 3.0 pro in ioBroker einbinden

      @andibr Hast Du in der Nuki-App beim Einrichten von MQTT "Sperren erlauben" eingestellt?

      posted in ioBroker Allgemein
      grrfield
      grrfield
    • RE: Test Adapter Daikin-Cloud 0.4.0

      @apollon77 Habe ich gerade gemacht.

      posted in Tester
      grrfield
      grrfield
    • RE: [gelöst]Aus den Backups ein Javascript extrahieren

      @martinp Auch, wenn es jetzt vielleicht schon zu spät ist: vor längere Zeit gab es mal ein Skript https://forum.iobroker.net/topic/34161/source-code-von-script-aus-backup-json-extrahieren, um einzelne Skripte aus dem Backup zu extrahieren. Ich habe das mal erfolgreich angewandt, weiß aber nicht, ob es mit den aktuellen Backups noch funktioniert.

      posted in ioBroker Allgemein
      grrfield
      grrfield
    • RE: Alexa2 3.27.x im Beta (und bald Stable)

      @apollon77 Vielen Dank - läuft einwandfrei, auch die Listen funktionieren endlich wieder!

      posted in ioBroker Allgemein
      grrfield
      grrfield

    Latest posts made by grrfield

    • RE: Alexa2 3.27.x im Beta (und bald Stable)

      @apollon77 Vielen Dank - läuft einwandfrei, auch die Listen funktionieren endlich wieder!

      posted in ioBroker Allgemein
      grrfield
      grrfield
    • Skript zum PiHole Version 6 an- und ausschalten

      Ich nutze einen PiHole-Werbeblocker, der auch sehr zuverlässig funktioniert. Manchmal werden allerdings nützliche Seiten blockiert, und ich möchte ihn schnell abschalten können. Ich habe das bisher über den PiHole-Adapter gemacht, der aber ab der neuen Version 6 nicht mehr funktioniert, da die Authentifizierung geändert wurde. Ich habe mir daher ein Javaskript erstellt, das den Werbeblocker für eine festgelegte Zeit ausschaltet oder wieder einschaltet. Gesteuert wird das über zwei angelegte States:
      '0_userdata.0.PiHole' true|false - schaltet den Werbeblocker ein oder aus
      '0_userdata.0.PiHoleOffTime' time - Ausschaltzeit time Minuten
      Dem State '0_userdata.0.PiHole' habe ich über den iot-Adapter den Alexabefehl "Werbeblocker" zugewiesen und kann nun mit "Alexa - schalt den Werbeblocker an/aus" den PiHole steuern. Über das angesprochene Echo-Gerät kommt dann eine Bestätigung über den Alexa-Adapter; diese läßt sich im Skript mit der Einstellung useAlexa ein- oder ausschalten.
      Für die Funktion müssen im Skript die IP-Adresse des PiHole-Servers unter piHoleIP sowie das PiHiole-API-Token unter apiToken eingetragen werden. Das API-Token erhält man über die Weboberfläche des PiHole unter "Settings - Web interface / API - Advanced Settings - Configure app password".

      Hier ist das Skript versteckt:

      /**
       * PiHole 2.0
       * Schaltet PiHole (ab Version 6) für eine vorgegebene Zeit (120 min) aus und dann wieder ein.
       * Das Ein- und Aussachalten erfolgt über den State '0_userdata.0.PiHole', 
       * dem über den iot-Adapter ein Alexa-Befehl zugewiesen werden kann - 
       * z. B. "Alexa, schalt den Werbeblocker an/aus"
       * Die Ausschaltzeit kann über den State '0_userdata.0.PiHoleOffTime' eingestellt werden.
       * 
       * log:     PH006
       */
      
      const fetch = require('node-fetch');
      
      
      /**
       * Einstellungen                                                //Defaults
       */
      
      // IP-Adresse des PiHole Servers ['IP']
      // hier eigene PiHole-Adresse eintragen
      const piHoleIP='192.168.1.199';                                 //'192.168.1.199'
      
      // API-Token [string]
      // hier eigenes API-Token eintragen - wird generiert unter
      // "PiHole - Settings - Web interface / API - Advanced Settings - Configure app password"
      const apiToken='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
      
      // Nutzung mit Alexa-Adapter [true|false]
      const useAlexa=true;					        //true
      
      // Verzögerung der Echoansage bis History-State geschrieben ist
      const EchoDelay=500;                                            //500
      
      
      /**
       * States
       */
      
      createState('0_userdata.0.PiHole', {name: 'PiHole', type: 'boolean'});
      createState('0_userdata.0.PiHoleOffTime', 120, {name: 'Ausschaltzeit', type: 'number', unit: 'min'});
      
      
      /**
       * Main
       */
      
      on({id: Trigger+'PiHole', change: 'any'}, (obj) => {
          if(obj.state.val) {
              disablePiHole(0, piHoleIP, apiToken); 
      		if(useAlexa) {
      			setTimeout(() => {
      				setState(getEcho()+'.Commands.speak', 'Der Werbeblocker ist wieder aktiviert.');
      			}, EchoDelay);
      		}
          } else {
              disablePiHole(getState(Verwaltung+'PiHoleOffTime').val, piHoleIP, apiToken); 
      		if(useAlexa) {
      			setTimeout(() => {
      				setState(getEcho()+'.Commands.speak', 'Der Werbeblocker wird für '+getState(Verwaltung+'PiHoleOffTime').val+' Minuten abgeschaltet.');
      			}, EchoDelay);
      		}
          }
      });
      
      
      /**
       * Funktionen
       */
      
      /**
       * Generiert eine Session ID
       * @param   {string}            ip  IP-Adresse des PiHole-Servers
       * @param   {string}            password    API-Token
       * @returns {Promise<string>}   SID
       */
      async function getSessionID(ip, password) {
          const url=`http://${ip}/api/auth`;
          const data={password};
      
          try {
              const response=await fetch(url, {
                  method: 'POST',
                  headers: {'Content-Type': 'application/json'},
                  body: JSON.stringify(data)
              });
      
              if(response.ok) {
                  const result=await response.json();
                  return result.session.sid; // Session ID zurückgeben
              } else {
                  console.error('PH005 Fehler beim Abrufen der Session ID: '+await response.json());
                  return null;
              }
          } catch(error) {
              console.error('PH006 Netzwerkfehler: ', error);
              return null;
          }
      }
      
      
      /**
       * Schaltet PiHole für duration min ab, bei duration == 0 wieder an.
       * @param   {number}    duration    Dauer [min]
       * @param   {string}    ip          IP-Adresse des PiHole-Servers
       * @param   {string}    password    API-Token
       */
      async function disablePiHole(duration, ip, password) {
          const sid=await getSessionID(ip, password);
          if (!sid) {
              console.error(' PH004 Authentifizierung fehlgeschlagen');
              return;
          }
      
          const url=`http://${ip}/api/dns/blocking`;
          const headers={
              'Content-Type': 'application/json',
              'X-FTL-SID': sid
          };
          const data={blocking: duration != 0 ? false: true, timer: duration*60};
      
          try {
              const response=await fetch(url, {
                  method: 'POST',
                  headers,
                  body: JSON.stringify(data)
              });
      
              if(response.ok) {
                  console.log(`PH001 Pi-hole wurde für ${duration} Minuten deaktiviert.`);
              } else {
                  console.error('PH002 Fehler beim Deaktivieren von Pi-hole');
              }
          } catch(error) {
              console.error('PH003 Netzwerkfehler:', error);
          }
      }
      
      
      /**
       * Gibt die ID des Echos EchoName zurück
       * Bei mehreren Übereinstimmungen wird nur die erste berücksichtigt
       * @param   {string}    EchoName        Name des Echos - wenn leer, dann letzter Echo
       * @returns {string}    ID des Echos; undefined, wenn nicht gefunden
       */
      function getEcho(EchoName)
      {
          if(EchoName === undefined) {
              EchoName=getState('alexa2.0.History.name'/*Echo Device name*/).val;
          }
          let EchoID;
          let IDs=(getIdByName(EchoName, true));
          if(IDs == undefined) {
              log('getEcho: '+EchoName+' not registered!');
              return;
          }
          for (let i=0; i < IDs.length; i++) {
              if (IDs[i].search('Echo-Devices') != -1) {
                  EchoID=IDs[i];
                  i=IDs.length;       // Abbruch nach erstem gefundenen Echo
              }
          }
          return EchoID;
      }
      
      
      // ___|\/|
      //  |
      
      

      posted in JavaScript
      grrfield
      grrfield
    • RE: SwitchBot Blind Tilts

      @kimukao Kann wieder am Switchbotserver liegen. Bei mir kamen heute auch viele Fehlermeldungen.

      posted in ioBroker Allgemein
      grrfield
      grrfield
    • RE: SwitchBot Blind Tilts

      @kimukao Gestern gab es auch bei mir Probleme mit den Switchbots mit unzähligen Fehlermeldungen. Heute lief es wieder bis auf einzelne Fehlermeldungen im Log. Ich nehme an, daß gestern der Switchbotserver teilweise nicht erreichbar war.

      In dem neuen Skript aus dem ersten Post muß in Zeile 82 das const entfernt werden, das war ein Copy-Paste-Fehler, den ich bei mir nicht bemerkt habe. Du kannst es einfach herauslöschen, ich aktualisiere es im ersten Post.

      Edit: Nach Aktualisierung ist die Zeile 82 nun Zeile 84.

      posted in ioBroker Allgemein
      grrfield
      grrfield
    • RE: SwitchBot Blind Tilts

      @kimukao Ich habe vor einiger Zeit noch einen Skriptneustart zur Neuinitialisierung bei Verbindungsfehlern eingefügt - die neue Version habe ich im ersten Post aktualisiert. Wenn Du willst, kannst Du das bei Dir mal testen (Token und Secret müssen wieder in das Skript eingfügt werden).

      posted in ioBroker Allgemein
      grrfield
      grrfield
    • RE: SwitchBot Blind Tilts

      @kimukao Bei mir funktioniert alles einwandfrei. Versuch doch mal, das Token und das Secret zu erneuern, vielleicht ist da bei Deinem Account etwas abgelaufen. Wenn das nicht geht, bitte mal DEBUG=true; setzen und die LOG-Ausgabe hier reinstellen.

      posted in ioBroker Allgemein
      grrfield
      grrfield
    • RE: Bahn: Zuglauf nach Zugnummer

      @martinp Es gibt den Adapter fahrplan - da kannst Du bevorzugte Verbindungen einstellen und bekommst dann die aktuellen Abfahrts- und Ankunftszeiten der Züge. Ich nutze das, um mir Verspätungen auf meinem Wandtablett anzeigen zu lassen und bei Zugausfall morgens den Wecker früher klingeln zu lassen, damit ich einen früheren Zug nehmen kann.

      posted in Off Topic
      grrfield
      grrfield
    • RE: Test Adapter Daikin-Cloud 0.4.0

      @apollon77 Habe ich gerade gemacht.

      posted in Tester
      grrfield
      grrfield
    • RE: Test Adapter Daikin-Cloud 0.4.0

      @apollon77 sagte in Test Adapter Daikin-Cloud 0.4.0:

      https://github.com/Apollon77/ioBroker.daikin-cloud

      Vielen Dank für die schnelle Lösung!!!
      Funktioniert bei mir super, allerdings wird eine der beiden Klimageräte, die ich habe, als offline angezeigt: cloudConnected == (null), obwohl beide Geräte laut Log verbunden sind:

      2024-07-04 17:17:42.394 - info: daikin-cloud.0 (19723) Initialize device 53675292-15a8-4272-b21e-xxxxxxxxxxxx: connected true, lastUpdated Thu Jul 04 2024 17:17:31 GMT+0200 (Mitteleuropäische Sommerzeit)
      2024-07-04 17:17:42.421 - info: daikin-cloud.0 (19723) Initialize device d157a703-d5c3-4f0c-9db3-xxxxxxxxxxxx: connected true, lastUpdated Thu Jul 04 2024 16:35:36 GMT+0200 (Mitteleuropäische Sommerzeit)
      

      Beide Geräte lassen sich auch bedienen und zeigen Informationen zu Temperatur usw. an.

      posted in Tester
      grrfield
      grrfield
    • RE: [gelöst]Aus den Backups ein Javascript extrahieren

      @martinp Auch, wenn es jetzt vielleicht schon zu spät ist: vor längere Zeit gab es mal ein Skript https://forum.iobroker.net/topic/34161/source-code-von-script-aus-backup-json-extrahieren, um einzelne Skripte aus dem Backup zu extrahieren. Ich habe das mal erfolgreich angewandt, weiß aber nicht, ob es mit den aktuellen Backups noch funktioniert.

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