Navigation

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

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Profile
    • Following 0
    • Followers 18
    • Topics 45
    • Posts 9210
    • Best 1131
    • Groups 4

    dslraser

    @dslraser

    Forum Testing Most Active

    1411
    Reputation
    1303
    Profile views
    9210
    Posts
    18
    Followers
    0
    Following
    Joined Last Online
    Age 58

    dslraser Follow
    Forum Testing Pro Starter Most Active

    Best posts made by dslraser

    • Fenster und andere Geräte zählen opt. Alexa Ansagen
      Versionen 1.6.7
      aktualisiert am 23.12.2020
      Typ Blockly mit JavaScript Funktionen
      verwendete Adapter je nach dem was im Blockly aktiviert ist
      verwendete Geräte verschieden - gemischt
      was kann das Blockly wird hier beschrieben

      Hallo Zusammen.
      Ich stelle hier mein Blockly zum Geräte zählen und optional zum Ansagen über den Alexa2 Adapter über speak, sowie optionaler Versand über Telegram / E-Mail zur Verfügung.
      Das gesamte Blockly nutzt "alias'e". Alle anderen benötigten Datenpunkte erstellt und löscht das Blockly selbst, je nach dem was verwendet werden soll.
      Wer also keine alias erstellen oder nutzen möchte kann an dieser Stelle aufhören zu lesen, für alle anderen Interessierten versuche ich möglichst genau zu beschreiben was zu tun ist.

      Mit Alexa geht dann z.B.

      • Alexa, welche Fenster sind noch auf
      • Alexa, welche Türen sind noch auf
      • Alexa, welche Steckdosen sind noch an
      • Alexa, welche Lampen sind noch an
      • Alexa, was machen die Batterien
      • Alexa, welche Bewegungsmelder sind aktiv
      • Alexa, wie sind die Temperaturen (Ansage, aller Temperaturen meiner Räume und Außentemperatur nacheinander in einer Ansage)

      Welche Frage in welcher Formulierung gestellt wird bestimmt Ihr natürlich selbst, da dies über eine Routine in der Alexa App gesteuert wird. Dazu später mehr.

      Ein Hinweis gleich noch zu Beginn. Da die Ansage am angesprochenen ECHO erfolgen soll, kann es vorkommen, das, wenn es mehrere ECHO's in Hörweite gibt, die Ansage an einem anderen ECHO ausgegeben wird, weil sich ein anderer ECHO "angesprochen fühlt". Wenn ich in einem Raum bin, wo mich nur ein ECHO hören kann, funktioniert es bei mir zuverlässig.

      Meine verwendeten Adapter dafür sind:

      • Alexa2 Adapter 3.4.0
      • iot Adapter 1.8.8
      • Javascript Adapter 4.10.8
      • Telegram Adapter 1.5.9 (optional)
      • E-Mail Adapter 1.0.7 (optional)
      • und wenn gewünscht (optional) iQontrol 1.5.2
      • TR-064 4.2.1 Anruferansage (optional Telegram/EMAIL-extra Blockly im zweiten Beitrag)

      SmartGeräte für den iot Adapter werden direkt im Blockly erstellt, das sind dann die Button für die spätere Routine in der Amazon App.
      Das Blockly legt die benötigten Datenpunkte wahlweise unter 0_userdata.0 oder javascript.x selbst an (x=Javascript Instanznummer). Für die Erstellung der Datenpunkte nutze ich das Script von @Mic in einer Funktion. Dafür muß die Option "Erlaube das Kommando "setObject" im Javascript Adapter erlaubt sein.

      Bildschirmfoto 2020-04-08 um 12.05.38.png

      Der Versand aller Nachrichten (Telegram oder EMAIL) ist immer schaltbar, z.B. wenn man eine Anwesenheitsfunktion hat, dann könnte man den Versand bei Abwesenheit "scharf" schalten.
      Die Button hingegen funktionieren immer. Hier könnte man jeweils eine Routine in der Alexa App anlegen und den Versand des Gerätestatus-Versand auslösen.
      Z.B.
      Alexa, schicke mir den Fensterstatus.
      Alexa, schicke mir den Lichtstatus
      Alexa, schicke mir den Steckdosenstatus usw...

      Über diesen Weg lasse ich mir auch zum Beispiel auf Anforderung den Batteriestatus aller meiner Geräte mit Batterien als Liste schicken. Oder auch, Alexa schicke mir ein Bild von der Eingangskamera. Wenn man es auf die Spitze treibt, dann geht auch: Alexa, schicke mir den kompletten Status und dann trudeln bei mir nacheinander Bilder von drei Kameras, alle Batteriezustände, eine Liste mit geöffneten/gekippten Fenstern, ein Liste mit eingeschalteten Lampen usw. usw. usw. ein.

      Wenn Ihr nun Lust auf das Blockly habt, dann ist jetzt einmalig etwas Fleißarbeit angesagt. Bevor Ihr das Blockly nutzen könnt, müssen die Alias für Eure Geräte, die Ihr im Blockly verwenden wollt, erstellt werden. Dafür eignet sich die Scriptvorlage von @CruziX hervorragend. Mit dieser Vorlage können alle Alias auf einmal erstellt werden. Eine Vorlage als Beispiel findet Ihr im Spoiler. An dieser Stelle sei gleich gesagt, sinnvolle Namen im Alias zu verwenden (id ist egal, nur der Name ist gemeint), da diese Namen dann für alles im Blockly verwendet werden, also alle Gerätenamen allgemein. Also immer so erstellen, das sich der Name auch z.B. für Alexa aussprechen lässt.
      In der id keine Leerzeichen/Sonderzeichen oder Umlaute verwenden, damit vermeidet man direkt im Vorfeld mögliche Fehler.
      Als erstes solltet ihr in den Aufzählungen neue Funktionen erstellen, diese kann man dann gleich im alias Script benutzen. Da auf das Plus drücken.
      Bildschirmfoto 2020-06-29 um 21.16.04.png
      dann auf das Plus bei neue benutzerdefinierte Gruppe klicken
      Bildschirmfoto 2020-06-29 um 21.16.19.png

      Ich habe folgende erstellt (wenn Ihr die gleichen nehmt müsst Ihr das nichtmal im Blockly umstellen)

      batterien_voll_leer_alias
      batterien_volt_alias
      bewegungsmelder_alias
      fenster_alias
      licht_alias
      steckdosen_alias
      temperaturen_alias
      tueren_alias
      batterien_prozent_alias

      Das sind die Selektoren im Blockly

      Bildschirmfoto 2020-12-19 um 09.07.55.png
      Bildschirmfoto 2020-12-19 um 09.08.22.png
      Bildschirmfoto 2020-12-19 um 09.08.51.png
      Bildschirmfoto 2020-12-19 um 09.09.21.png
      Bildschirmfoto 2020-12-19 um 09.09.59.png
      Bildschirmfoto 2020-12-19 um 09.10.34.png
      Bildschirmfoto 2020-12-19 um 09.11.17.png
      Bildschirmfoto 2020-12-19 um 09.12.00.png
      Bildschirmfoto 2020-12-19 um 09.12.32.png

      Das ganze sieht dann nach dem Blockly Start in den Objekten z.B. so aus: (wenn alle Schalter im Blockly auf wahr stehen)

      Bildschirmfoto 2020-12-02 um 19.33.40.png

      01_Anzeigen_und_Listen

      Bildschirmfoto 2020-12-02 um 19.43.57.png

      02_Trigger_und_Schalter

      Bildschirmfoto 2020-12-02 um 19.44.12.png

      03_HTML_Daten hat zwei Unterordner

      Bildschirmfoto 2020-12-02 um 19.44.31.png

      01_HTML_Hell_Dunkel_Festeinstellung ist nicht veränderbar und sieht so aus (helle Einstellung aktiv)

      Bildschirmfoto 2020-12-02 um 19.45.09.png

      03_HTML_Eigene_Einstellung enthält die gleichen Datenpunkte und wird beim ersten verwenden des Triggers mit Standardwerten befüllt. Diese Werte können dann mit eigenen Werten überschrieben werden.

      Und hier noch der Rest

      Bildschirmfoto 2020-12-02 um 19.45.42.png

      Die Bilder bzw. Icon links und rechts habe ich als Base64 eingefügt. Ich benutze dafür das hier: https://www.base64-image.de/

      Wenn iQontrol installiert ist, dann funktioniert auch der Pfad zu einem Icon (einfach den eingestellten Pfad zum Icon aus iQontrol kopieren und einfügen)
      In den eigenen 02_HTML_Eigene_Einstellungen kann alles selbst an die eigenen Wünsche angepasst werden.

      Hier noch ein kurzes GiF
      (klick auf das linke Icon schaltet die Farbeinstellungen durch. klick auf das rechte Icon blendet die Tabelle ein und aus bzw. schaltet auf aktiv/inaktiv)
      20201202_200704.gif



      Das ganze sieht dann so bei mir aus (ich habe immer nur die ersten fünf auf den Bildern)

      Bildschirmfoto 2020-07-04 um 19.22.51.png

      Bildschirmfoto 2020-07-04 um 19.26.55.png

      Bildschirmfoto 2020-06-30 um 15.46.33.png

      Bildschirmfoto 2020-06-30 um 15.46.48.png

      Bildschirmfoto 2020-06-30 um 15.47.02.png

      Bildschirmfoto 2020-06-30 um 15.47.15.png

      Bildschirmfoto 2020-07-04 um 19.23.12.png

      Bildschirmfoto 2020-06-30 um 15.47.46.png


      Im Beispielvideo werden die eigenen Alias ab Zeile 271 eingefügt, also ab dem ersten createAlias
      Video Beispiel:
      Alias_per_Script_erstellen.m4v
      In der Vorlage habe ich jeweils zwei meiner verwendeten Geräte als Beispiel eingefügt.
      Hier und in den folgenden Beiträgen versuche ich die Alias Funktion vom Script etwas zu erklären:
      Klick Erklärung alias Funktion

      /**************************************************************
      Github - https://github.com/xCruziX/ioBroker-Creating-Alias/blob/master/CreateAlias.js
         			Changelog
      Version 1.1.4
      - fix error by using bCreateAliasPath and bConvertExistingPath (has no target 9/Error creating alias-path)
      **************************************************************/
      
      /**************************************
         	Flags /
         	Variablen
      ***************************************/
      
      // typeAlias = 'boolean'; // oder 'number'
      // read = "val == 'Ein' ? true : false"; // Erkennung "Aus" --> false erfolgt automatisch  
      // write = "val ? 'Ein' : 'Aus'";
      // nameAlias = 'Licht Haustür';
      // role = 'switch';
      // desc = 'per Script erstellt';
      // min = 0; // nur Zahlen
      // max = 100; // nur Zahlen
      // unit = '%'; // nur für Zahlen
      // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
      
      
      let bCreateAliasPath = true;  // If this flag is true, each folder is created seperately so rooms and functions can be assigned.
      
      /*
      Requirements: bCreateAliasPath == true
      If this flag is true, existing folders in the path will be converted so rooms and functions can be assigned.
      */
      let bConvertExistingPath = false;
      
      /***************************************
         	Don't change anything from here /
         	Ab hier nichts verändern
      ***************************************/
      
      let arEnum = [];
      let arId = [];
      let timeoutAssignEnum;
      var callbackAlias = undefined;
      function createAlias(idSrc, idDst,raum, gewerk,typeAlias, read, write, nameAlias, role, desc, min, max, unit, states) {
       if(!idDst.includes('alias.0.'))
           idDst = 'alias.0.' + idDst;
       if(!existsObject(idSrc))
       {
           log('Source-Id ' + idSrc +' does not exists.','warn');
           return;
       }
       
       // Create the object Path for alias id, 
       // so you can assign rooms and function to the parents
       var createAliasPath = (id) => {
            if(bCreateAliasPath){
                 let lisMergedIds = [];
                 let mergedId = 'alias.0';
                 id = id.replace(mergedId + '.', ''); // Remove prefix alias so it will not be changed
                 let split = id.split('.'); 
                 for(let i=0;i<split.length-1;i++){
                     mergedId += '.' + split[i];
                     lisMergedIds.push(mergedId);
                 }
                 
                 function path(){
                     if(lisMergedIds.length == 0) {
                         alias();
                         return;
                     }
                     let tmpId = lisMergedIds[0];
                     lisMergedIds.splice(0,1); // remove element
                     if(!existsObject(tmpId) || bConvertExistingPath){ // not exists
                         let obj;
                         if(existsObject(tmpId))
                             obj = getObject(tmpId);
                         else
                             obj = {};
      
                         let bApply = false;
                         if(obj != undefined){
                             if(obj.type == undefined || String(obj.type) != 'meta'){
                                 obj.type = 'meta';
                                 bApply = true;
                             }
                             if(obj.common == undefined){
                                 obj.common = {};
                                 obj.common.type = 'meta.folder';
                                 bApply = true;
                             }
                             else if(obj.common.type == undefined || String(obj.common.type) != 'meta.folder'){
                                 obj.common.type = 'meta.folder';
                                 bApply = true;
                             }
                             if(obj.native == undefined){
                                 obj.native = {};
                                 bApply = true;
                             }
                         }
                         else{
                             path();
                             log('Object is undefined');
                             return;
                         }
                         
      
                         if(bApply){
                             setObject(tmpId, obj, (err) =>{
                             if(!err){
                                 log('Created Alias-Path ' + tmpId);
                                 path();
                             }
                             else
                                 log('Error creating alias-path','error');
                         });
                         }
                         else
                             path();
                         
                     }
                 }
                 path();
            }
            else
              alias();
       }
       
       
       function alias(){
           // Create alias object
           
             if(!existsObject(idDst)){
                 let obj = {};
                 obj.type = 'state';
                 obj.common = getObject(idSrc).common;
                 obj.common.alias = {};
                 obj.common.alias.id = idSrc;
                 if(typeAlias !== undefined) 
                     obj.common.type = typeAlias;
                 if(obj.common.read !== undefined) 
                     obj.common.alias.read = read;
                 if(obj.common.write !== undefined) 
                     obj.common.alias.write = write;
                 if(nameAlias !== undefined) 
                     obj.common.name = nameAlias;
                 if(role !== undefined) 
                     obj.common.role = role;
                 if(desc !== undefined) 
                     obj.common.desc = desc;
                 if(min !== undefined) 
                     obj.common.min = min;
                 if(max !== undefined) 
                     obj.common.max = max;
                 if(unit !== undefined) 
                     obj.common.unit = unit;
                 if(states !== undefined) 
                     obj.common.states = states;
      
                 obj.native = {};
                 obj.common.custom = []; // Damit die Zuordnung zu iQontrol, Sql etc. nicht übernommen wird
                 log('Created Alias-State ' + idDst);
                 setObject(idDst, obj,(err) =>{ 
                     if(!err)
                         startAttach(); 
                     else
                         log('Error creating-alias','error');
                 });
             }
             else
                 startAttach();
       }
       
       
       // Save ID and Enum (room or function)
       var attach = (id, enu,value) => {
           if(id.length == 0){
               log('ID has lenght 0, can not attach to enum','warn');
               return;
           }
           if(value.length == 0){
               log('Value has lenght 0','warn');
               return;
           }
         
           let sEnuId = 'enum.' + enu + '.' + value;
           if(enu.length > 0 && existsObject(sEnuId)) 
           {
               let obj = getObject(sEnuId)
               let members = obj.common.members;
               if(!members.includes(id)){
                   arEnum.push(sEnuId);
                   arId.push(id);
               }
           }
           else
        	      log('Can not find enum ' + sEnuId,'warn');
       }
      
      function startAttach(){
         let bRoom = raum !== undefined && raum.length > 0;
         let bGewerk = gewerk !== undefined && gewerk.length > 0;
         
         if(bRoom)
             attach(idDst,'rooms',raum);
         if(bGewerk)
             attach(idDst,'functions',gewerk);
         if(bRoom || bGewerk){
                 if(timeoutAssignEnum){
                     clearTimeout(timeoutAssignEnum);
                     timeoutAssignEnum = null;
                 }
                 timeoutAssignEnum = setTimeout(finishScript,100);
         }
      }
      
       createAliasPath(idDst);
      }
      
      function finishScript(){
         assignEnums();
      }
      
      // Add the saved IDs to the rooms/functions
      function assignEnums(){
      if(arEnum.length == 0 || arId.length == 0){
           return;
      }
      
      if(arEnum.length != arId.length){
           log('Arrays have different size','error');
           return;
      }
      let mapEnumId = new Map();
      
      for(let i=0;i < arEnum.length; i++){
          let enu = arEnum[i];
          let id = arId[i];
          if(existsObject(id)){
         	 let obj = getObject(enu)
         	 let members;
         	 if(!mapEnumId.has(enu)){
         		 members = obj.common.members;
         		 mapEnumId.set(enu,members);
         	 }
         	 else
         		 members = mapEnumId.get(enu);    
         	 if(!members.includes(id)){
         		  log("Adding " + id + " to " + enu);
         		  members.push(id);
         	 }	      
          }
          else
              log('Can not find Alias ' + id,'error');
      }
       
       function setMembers(members,enu,map){
           let obj = getObject(enu);
           obj.common.members = members;
           setObject(enu,obj);
       }
       mapEnumId.forEach(setMembers);
      }
      
      /**********************************************************
         	END /
         	ENDE
      **********************************************************/
      
      //////////////////////////////
      //  Fenster
      //////////////////////////////
      //2 x Fenstersensoren HMIP
      //einfache HMIP Fenstersensoren über rpc-Adapter in function fenster_alias
      //{0: 'geschlossen', 1: 'geöffnet'}
      createAlias('hm-rpc.0.xxx.1.STATE'/*Wohnzimmer Fenster links STATE*/, 'Fenster.Wohnzimmer_Fenster_links', undefined, 'fenster_alias', 'number', undefined, undefined, 'Wohnzimmer links', 'window.value', 'per Script erstellt', 0, 1, '',{0: 'geschlossen', 1: 'geöffnet'})
      createAlias('hm-rpc.0.xxx.1.STATE'/*Küche Fenster links STATE*/, 'Fenster.Kueche_Fenster_links', undefined, 'fenster_alias', 'number',undefined, undefined, 'Küche links', 'window.value', 'per Script erstellt', 0, 1, '',{0: 'geschlossen', 1: 'geöffnet'})
      
      //2 x Fenstersensoren HM
      //einfache HM Fenstersensoren über rpc-Adapter in function fenster_alias
      //{false: 'geschlossen', true: 'geöffnet'}
      createAlias('hm-rpc.0.xxx.1.STATE'/*Wohnzimmer Fenster links STATE*/, 'Fenster.Wohnzimmer_Fenster_links', undefined, 'fenster_alias', 'boolean', undefined, undefined, 'Wohnzimmer links', 'window.value', 'per Script erstellt', undefined, undefined, undefined, {false: 'geschlossen', true: 'geöffnet'})
      createAlias('hm-rpc.0.xxx.1.STATE'/*Küche Fenster links STATE*/, 'Fenster.Kueche_Fenster_links', undefined, 'fenster_alias', 'boolean',undefined, undefined, 'Küche links', 'window.value', 'per Script erstellt', undefined, undefined, undefined, {false: 'geschlossen', true: 'geöffnet'})
      
      
      //2 x Fensterdrehgriffe HMIP
      //HMIP Fensterdrehgriffe über rpc-Adapter in function fenster_alias
      //{0: 'geschlossen', 1: 'gekippt', 2: 'geöffnet'}
      createAlias('hm-rpc.0.xxx.1.STATE'/*Keller W-Baum Fenster STATE*/, 'Fenster.Keller_Weihnachtsbaum_Fenster', undefined, 'fenster_alias', 'number',undefined, undefined, 'Keller W Baum', 'window.value', 'per Script erstellt', 0, 2, '',{0: 'geschlossen', 1: 'gekippt', 2: 'geöffnet'})
      createAlias('hm-rpc.0.xxx.1.STATE'/*Keller Wohnzimmer Fenster mitte STATE*/, 'Fenster.Keller_Wohnzimmer_Fenster_mitte', undefined, 'fenster_alias', 'number',undefined, undefined, 'Keller Wohnzimmer mitte', 'window.value', 'per Script erstellt', 0, 2, '',{0: 'geschlossen', 1: 'gekippt', 2: 'geöffnet'})
      
      //2 x Fenster(Türen) Sensoren HMIP
      //einfache HMIP Fenstersensoren über rpc-Adapter in function tueren_alias
      //{0: 'geschlossen', 1: 'geöffnet'}
      createAlias('hm-rpc.0.xxx.1.STATE'/*Wohnzimmer Terrassentür STATE*/, 'Tueren.Terrassentuer', undefined, 'tueren_alias', 'number',undefined, undefined, 'Terrassentür', 'window.value', 'per Script erstellt', 0, 1, '',{0: 'geschlossen', 1: 'geöffnet'})
      createAlias('hm-rpc.0.xxx.1.STATE'/*Haustür STATE*/, 'Tueren.Haustuer', undefined, 'tueren_alias', 'number',undefined, undefined, 'Haustür', 'window.value', 'per Script erstellt', 0, 1, '',{0: 'geschlossen', 1: 'geöffnet'})
      
      //////////////////////////////
      //  Steckdosen
      //////////////////////////////
      //2 x Steckdosen
      //HMIP Steckdosen über rpc-Adapter in function steckdosen_alias
      //{false: 'aus', true: 'an'}
      createAlias('hm-rpc.0.xxx.3.STATE'/*Waschmaschine STATE*/, 'Steckdosen.Waschmaschine', undefined, 'steckdosen_alias', 'boolean', undefined, undefined, 'Waschmaschine', 'switch', 'per Script erstellt', undefined, undefined, undefined, {false: 'aus', true: 'an'})
      createAlias('hm-rpc.0.xxx.3.STATE'/*Geschirrspueler STATE*/, 'Steckdosen.Geschirrspueler', undefined, 'steckdosen_alias', 'boolean', undefined, undefined, 'Geschirrspüler', 'switch', 'per Script erstellt', undefined, undefined, undefined, {false: 'aus', true: 'an'})
      
      //////////////////////////////
      //  Bewegungsmelder
      //////////////////////////////
      //2 x Bewegungsmelder und 2 x Präsenzmelder und 1 x Erschütterungssensor
      //HMIP Bewegungsmelder und Präsenzmelder über rpc-Adapter in function bewegungsmelder_alias
      //{false: 'inaktiv', true: 'aktiv'}
      createAlias('hm-rpc.0.xxx.1.MOTION'/*Bewegungsmelder Weihnachtsbaumkeller MOTION*/, 'Bewegungsmelder.Bewegungsmelder_Weihnachtsbaumkeller', undefined, 'bewegungsmelder_alias', 'boolean', undefined, undefined, 'W Baum Keller', 'sensor.motion', 'per Script erstellt', undefined, undefined, undefined, {false: 'inaktiv', true: 'aktiv'})
      createAlias('hm-rpc.0.xxx.1.MOTION'/*Bewegungsmelder Heizungskeller MOTION*/, 'Bewegungsmelder.Bewegungsmelder_Heizungskeller', undefined, 'bewegungsmelder_alias', 'boolean', undefined, undefined, 'Heizungskeller', 'sensor.motion', 'per Script erstellt', undefined, undefined, undefined, {false: 'inaktiv', true: 'aktiv'})
      //ab hier 2 x Präsenzmelder
      createAlias('hm-rpc.0.xxx.1.PRESENCE_DETECTION_STATE'/*Präsenzmelder Badezimmer PRESENCE DETECTION STATE*/, 'Bewegungsmelder.Praesenzmelder_Badezimmer', undefined, 'bewegungsmelder_alias', 'boolean', undefined, undefined, 'Badezimmer', 'sensor.motion', 'per Script erstellt', undefined, undefined, undefined, {false: 'inaktiv', true: 'aktiv'})
      createAlias('hm-rpc.0.xxx.1.PRESENCE_DETECTION_STATE'/*Präsenzmelder Dusche PRESENCE DETECTION STATE*/, 'Bewegungsmelder.Praesenzmelder_Dusche', undefined, 'bewegungsmelder_alias', 'boolean', undefined, undefined, 'Dusche', 'sensor.motion', 'per Script erstellt', undefined, undefined, undefined, {false: 'inaktiv', true: 'aktiv'})
      //ab hier 1 x Erschütterungssensor
      createAlias('hm-rpc.0.xxx.1.MOTION'/*Briefkasten MOTION*/, 'Bewegungsmelder.Praesenzmelder_Briefkasten', undefined, 'bewegungsmelder_alias', 'boolean', undefined, undefined, 'Briefkasten', 'sensor.motion', 'per Script erstellt', undefined, undefined, undefined, {false: 'inaktiv', true: 'aktiv'})
      
      //////////////////////////////
      //  Licht
      //////////////////////////////
      //2 x HUE und 5 x HMIP Licht über HUE und rpc-Adapter in function licht_alias
      //{false: 'aus', true: 'an'}
      createAlias('hue.0.Badezimmerlampe_links.on'/*Badezimmerlampe links on*/, 'Licht.Badezimmer_Licht_links', undefined, 'licht_alias', 'boolean', undefined, undefined, 'Badezimmer links', 'switch.light', 'per Script erstellt', undefined, undefined, undefined, {false: 'aus', true: 'an'})
      createAlias('hue.0.Badezimmerlampe_rechts.on'/*Badezimmerlampe rechts on*/, 'Licht.Badezimmer_Licht_rechts', undefined, 'licht_alias', 'boolean', undefined, undefined, 'Badezimmer rechts', 'switch.light', 'per Script erstellt', undefined, undefined, undefined, {false: 'aus', true: 'an'})
      
      //ab hier 2 x Licht HMIP Steckdosen über rpc Adapter
      createAlias('hm-rpc.0.xxx.3.STATE'/*Kugellampe STATE*/, 'Licht.Wohnzimmer_Kugel_Licht', undefined, 'licht_alias', 'boolean', undefined, undefined, 'Kugellicht', 'switch.light', 'per Script erstellt', undefined, undefined, undefined, {false: 'aus', true: 'an'})
      createAlias('hm-rpc.0.xxx.3.STATE'/*Gäste WC Licht STATE*/, 'Licht.Gaeste_WC_Licht', undefined, 'licht_alias', 'boolean', undefined, undefined, 'Gäste WC Licht', 'switch.light', 'per Script erstellt', undefined, undefined, undefined, {false: 'aus', true: 'an'})
      
      //////////////////////////////
      //  Temperaturen
      //////////////////////////////
      //HMIP 2 x Temperaturen über rpc-Adapter in function temperaturen_alias
      createAlias('hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE'/*Wandthermostat Schlafzimmer:1 ACTUAL TEMPERATURE*/, 'Temperaturen.Temperatur_Schlafzimmer', undefined, 'temperaturen_alias', 'number', 'Math.round(val * 10) / 10', undefined, 'Schlafzimmer', 'value.temperature', 'per Script erstellt', undefined, undefined, '°C', undefined)
      createAlias('hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE'/*Wandthermostat Wohnzimmer:1 ACTUAL TEMPERATURE*/, 'Temperaturen.Temperatur_Wohnzimmer', undefined, 'temperaturen_alias', 'number', 'Math.round(val * 10) / 10', undefined, 'Wohnzimmer', 'value.temperature', 'per Script erstellt', undefined, undefined, '°C', undefined)
      
      //////////////////////////////
      //  Batterien_voll_leer
      //////////////////////////////
      //2 x Batterien voll-leer über boolean Wert false/true in function batterien_voll_leer_alias
      createAlias('hm-rpc.0.xxx.0.LOW_BAT'/*Wohnzimmer Fenster links:0 LOW BAT*/, 'Batterien_voll_leer.Wohnzimmer_Fenster_links', undefined, 'batterien_voll_leer_alias', 'boolean', undefined, undefined, 'Wohnzimmer Fenster links', 'indicator.lowbat', 'per Script erstellt', undefined, undefined, undefined, {false: 'voll', true: 'leer'})
      createAlias('hm-rpc.0.xxx.0.LOW_BAT'/*Küche Fenster links:0 LOW BAT*/, 'Batterien_voll_leer.Kueche_Fenster_links', undefined, 'batterien_voll_leer_alias', 'boolean', undefined, undefined, 'Küche Fenster links', 'indicator.lowbat', 'per Script erstellt', undefined, undefined, undefined, {false: 'voll', true: 'leer'})
      
      //////////////////////////////
      //  Batterien_Volt
      //////////////////////////////
      //2 x Batterien Volt Anzeige in function batterien_volt_alias
      createAlias('hm-rpc.0.xxx.0.OPERATING_VOLTAGE'/*Wohnzimmer Fenster links:0 OPERATING VOLTAGE*/, 'Batterien_Volt.Wohnzimmer_Fenster_links', undefined, 'batterien_volt_alias', 'number', undefined, undefined, 'Wohnzimmer Fenster links', 'value.voltage', 'per Script erstellt', undefined, undefined, 'Volt', undefined)
      createAlias('hm-rpc.0.xxx.0.OPERATING_VOLTAGE'/*Küche Fenster links:0 OPERATING VOLTAGE*/, 'Batterien_Volt.Kueche_Fenster_links', undefined, 'batterien_volt_alias', 'number', undefined, undefined, 'Küche Fenster links', 'value.voltage', 'per Script erstellt', undefined, undefined, 'Volt', undefined)
      
      


      nach dem Alias erstellen das hier beachten: Klick


      bitte das Blockly auf den eigenen Rechner downloaden und dort mit einem Editor öffnen und den gesamten Inhalt der Textdatei in die Zwischenablage kopieren und anschließend in ein neues leeres Blockly importieren. Nicht direkt im Browser öffnen und kopieren, dann kommt es oft zu Umlaute Fehlern im Blockly.

      Hier ist der Blockly Export


      Temperaturen_1-6-7.zip


      Batterien_Volt_1-6-7.zip


      Steckdosen_1-6-7.zip


      Lichter_1-6-7.zip


      Bewegungsmelder_1-6-7.zip


      Batterien_voll_leer_1-6-7.zip


      Fenster_1-6-7.zip


      Tueren_1-6-7.zip


      Batterien_Prozent_1-6-7.zip

      meine iQontrol Einstellungen


      Bildschirmfoto 2020-12-03 um 08.00.37.png

      Bildschirmfoto 2020-12-03 um 08.00.50.png

      Bildschirmfoto 2020-12-03 um 08.02.31.png

      Bildschirmfoto 2020-12-03 um 08.03.03.png

      Bildschirmfoto 2020-12-03 um 08.03.44.png

      Bildschirmfoto 2020-12-03 um 08.04.20.png

      Bildschirmfoto 2020-12-03 um 08.05.09.png

      Bildschirmfoto 2020-12-03 um 08.06.48.png

      Bildschirmfoto 2020-12-03 um 08.07.24.png

      Bildschirmfoto 2020-12-03 um 08.08.20.png

      Bildschirmfoto 2020-12-03 um 08.09.00.png


      Hier der Export von diesem View
      2020-12-20_iqontrol_0_selected_views.json.zip

      20201220_092104.jpg




      Zuerst muß das neue SmartGerät aus iot gesucht und gefunden werden. Dazu ist es wichtig einmal den iot Adapter zu öffnen und in den Reiter "SMART-GERÄTE" zu wechseln. Das neue Gerät sollte da sein, aber wenn man diesen Schritt nicht macht, dann werden von Alexa keine neuen Geräte gefunden. Danach kann der Adapter wieder geschlossen werden.
      Bildschirmfoto 2020-04-26 um 15.34.49.png
      Nun entweder in der App neue Geräte suchen lassen, oder kurz den Sprachbefehl: "Alexa, suche neue Geräte" ausführen. Wenn das durchgelaufen ist und ein neues oder mehrere neue Geräte gefunden wurden, dann geht es mit dem Einrichten der Routine weiter.

      neue Geräte suchen lassen in der Alexa App

      2020-06-30 15.03.38.jpg

      ein neues Gerät (oder mehrere) wurde gefunden

      2020-06-30 15.04.00.jpg
      alles überspringen und dann zu den Routinen. Dort dann auf das Plus (oben rechts) drücken und eine neue Routine anlegen. Satz bzw. Frage eingeben bei Stimme

      2020-06-30 15.04.36.jpg

      Dann als nächstes die Aktion hinzufügen (SmartHome), alle Geräte auswählen und das passende Gerät einfügen.

      2020-06-30 15.04.55.jpg

      Oben rechts auf speichern, dann kurz warten und ausprobieren...

      posted in Blockly
      dslraser
      dslraser
    • Alexa Ansagen I Telegram I EMail I Alias I VISU I HTML
      Versionen 1.8.1
      zuletzt aktualisiert am Dezember 2021
      Typ Blockly mit JavaScript Funktionen
      verwendete Adapter je nach dem was im Blockly aktiviert ist
      verwendete Geräte verschieden - gemischt
      Ursprung war hier
      Version 1.8.1 hier
      Zusatzblockly zur Anruferansage klick hier

      Hallo Zusammen.
      Da mir der ursprüngliche Forum Thread zu lang geworden ist und sich der Funktionsumfang des Blockly immer wieder verändert hat erstelle ich hier einen neuen Beitrag. Diese "Anleitung" möchte ich hiermit auch auf den aktuellen Stand bringen und somit die Anwendung erleichtern.

      Ich stelle hier meine Blockly's zum Geräte zählen und optional zum Ansagen über den Alexa2 Adapter über speak, sowie optionaler Versand über Telegram / E-Mail zur Verfügung. Ebenfalls werden diverse Listen als Text oder HTML Ausgaben zur Verfügung gestellt.
      Das gesamte Blockly nutzt "alias". Alle anderen benötigten Datenpunkte erstellt oder löscht das Blockly selbst, je nach dem was verwendet werden soll.
      Wer also keine alias erstellen oder nutzen möchte kann an dieser Stelle aufhören zu lesen, für alle anderen Interessierten versuche ich möglichst genau zu beschreiben was zu tun ist.

      Meine verwendeten Adapter sind:

      • Alexa2 Adapter
      • iot Adapter
      • Javascript Adapter
      • Telegram Adapter (optional)
      • E-Mail Adapter (optional)
      • iQontrol (optional)
      • jarvis (optional)
      • alias-manager (optional)

      Mit Alexa geht dann z.B.

      • Alexa, welche Fenster sind noch auf
      • Alexa, welche Türen sind noch auf
      • Alexa, welche Steckdosen sind noch an
      • Alexa, welche Lampen sind noch an
      • Alexa, was machen die Batterien
      • Alexa, welche Bewegungsmelder sind aktiv
      • Alexa, wie sind die Temperaturen (Ansage, aller Temperaturen meiner Räume und Außentemperatur nacheinander in einer Ansage)
      • Alexa, schick mir den Status der Batterien(Fenster/Türen/Lampen/ Bewegungsmelder usw.---entweder auf Telegram oder per E-Mail, oder auf beides)

      Welche Frage in welcher Formulierung gestellt wird bestimmt Ihr natürlich selbst, da dies über eine Routine in der Alexa App gesteuert werden kann. Dazu später mehr.
      Ein Hinweis gleich noch zu Beginn. Da die Ansage am angesprochenen ECHO erfolgen soll, kann es vorkommen, das, wenn es mehrere ECHO's in Hörweite gibt, das die Ansage an einem anderen ECHO ausgegeben wird, weil sich ein anderer ECHO "angesprochen fühlt". Wenn ich in einem Raum bin, wo mich nur ein ECHO hören kann, funktioniert es bei mir zuverlässig.

      SmartGeräte und SmartNamen für den iot Adapter werden direkt im Blockly erstellt, das sind dann die Button für die spätere Routine in der Amazon App.
      Das Blockly legt die benötigten Datenpunkte wahlweise unter 0_userdata.0 oder javascript.x selbst an ( x = Javascript Instanznummer).

      01_Speicherort.png

      Für die Erstellung der Datenpunkte nutze ich diese Funktion.

      03_Funktion_Datenpunkte_anlegen.png

      Für diese Funktion muß die Option "Erlaube das Kommando "setObject" im Javascript Adapter erlaubt sein.

      02_JS_Adapter_Einstellung.png

      Im Blockly muß dann noch eine "Etage" eingestellt werden.
      Mit den "Etagen" wäre es dann möglich z.B. seine Fenster, oder auch alle anderen Geräte, in mehreren Blocklys zu verwenden, also das Blockly einmal installieren für Fenster/Erdgeschoss und ein zweites Blockly dann z.B. für Fenster/Keller.

      04_Etage.png

      Hier muß dann eingestellt werden was verwendet werden soll. (wenn Fenster_verwenden auf falsch gestellt wird, werden alle vom Blockly angelegten Datenpunkte wieder gelöscht. Das gleiche gilt für die anderen Optionen, wenn diese auf falsch gestellt werden, dann werden die dazu gehörigen Datenpunkte gar nicht erst angelegt, oder wieder gelöscht.)

      05_Blockly_Grundeinstellungen.png

      Bevor Ihr das Blockly nutzen könnt, müssen die Alias für Eure Geräte, die Ihr im Blockly verwenden wollt, erstellt werden. Dafür eignet sich die Scriptvorlage von @CruziX hervorragend. Mit dieser Vorlage können alle Alias auf einmal erstellt werden. Eine Vorlage als Beispiel findet [Ihr im Spoiler im 2. Beitrag]
      (https://forum.iobroker.net/post/549502).
      Eine weitere Möglichkeit zum alias erstellen ist der relativ neue Adapter alias-manager von @s-bormann (https://github.com/sbormann/ioBroker.alias-manager#readme)
      An dieser Stelle sei gleich gesagt, sinnvolle Namen im Alias zu verwenden (id ist egal, nur der Name ist gemeint), da diese Namen dann für alles im Blockly verwendet werden, also alle Gerätenamen allgemein. Also immer so erstellen, das sich der Name auch z.B. für Alexa aussprechen lässt.
      In der id keine Leerzeichen/Sonderzeichen oder Umlaute verwenden, damit vermeidet man direkt im Vorfeld mögliche Fehler.
      Als erstes solltet ihr in den Aufzählungen neue Funktionen erstellen, diese kann man dann gleich im alias Script benutzen. Aufzählungen sind im ioBroker hier zu finden (Haken rein setzen bei Aufzählungen)

      06_Aufzählung_einstellen.png

      dann erscheinen die hier

      07_Aufzählung_einstellen.png

      Bei den Aufzälungen/Funktionen dann hier auf das + klicken

      08_Funktionen.png

      danach dann runter scrollen und dann auf das + bei Benutzerdefinierte Gruppe klicken

      09_benutzerdefinierte Gruppe.png

      Ich habe folgende erstellt (wenn Ihr die gleichen nehmt müsst Ihr das nichtmal im Blockly umstellen)

      batterien_voll_leer_alias
      batterien_volt_alias
      bewegungsmelder_alias
      fenster_alias
      licht_alias
      steckdosen_alias
      temperaturen_alias
      tueren_alias
      batterien_prozent_alias
      rssi_alias

      Das ist dann auch gleich der Selektor im jeweiligen Blockly

      10_Selektor.png

      Wenn alle Blocklys benutzt werden sieht das in den ioBroker Objekten so aus:

      11_Geräte zählen.png

      Am Beispiel Fenster erstellt das Blockly nach dem ersten Start diese Datenpunktstruktur: (wenn alle Schalter im Blockly auf wahr stehen und die "Etage" Haus heißt, bei mit unter 0_userdata.0)

      12_Datenpunktstruktur.png

      • Unter 01_Anzeigen_und_Listen sieht es so aus, wobei die Unterpunkte 11/12/13 selbst mit Smileys befüllt/überschrieben werden können. Auf meinem Mac geht das z.B. mit der rechten Maustaste in das Feld klicken und den Emoji auswählen, bei Windows weiß ich es nicht)

      • Die Datenpunkte 1-5 sind (denke ich) Selbsterklärend.

      • In 06 sind alle "aktiven" Geräten als Textliste.

      • In 07 ist die gesamte Liste inkl. Zustand als Text.

      • In 08 sind alle Geräte inklusive Zustand (+ Emoji wenn eingestellt) als HTML Liste.

      • In 09 sind alle "aktiven" Geräte (gekippt oder geöffnet + Emoji wenn eingestellt)

      • In 10 ist eine formartierte Liste für den Telegram/Email Versand, ebenfalls mit Emoji
        Bildschirmfoto 2021-06-23 um 17.50.27.png

      • Unter 02_Trigger_und_Schalter sieht es so aus. Hier lassen sich verschiedene Dinge für die HTML Ausgabe Listen umschalten.
        14_Trigger_und_Schalter.png

      • Unter 02_Trigger_und_Schalter kann es auch so aussehen. Mit den zwei zusätzlichen Datenpunkten lässt sich z.B. in der HTML Überschrift der Status an/abschalten, oder auch für iQontrol Nutzer direkt in der Tabelle Geräte schalten (bei Licht und Steckdosen, andere Geräte lassen sich ja nicht schalten)
        Bildschirmfoto 2021-02-20 um 18.55.23.png

      • Unter 03_HTML_Daten befinden sich zwei Unterordner.

      • Unter 01_HTML_Hell_Dunkel_Festeinstellung kann nichts verändert werden. Dort sind alle Datenpunkte für die HTML Listen enthalten. Diese Ansichten können dann mit den Datenpunkten aus 02_Trigger_und_Schalter umgetellt werden. Dazu später noch mehr, insbesondere wenn man iQontrol nutzen möchte.
        15_HTML_Daten.png

      • In 02_HTML_Eigene_Einstellungen sieht es dann so aus. Dort können alle Datenpunkte für die HTML Anzeigen selbst eingestellt werden. Beim ersten Aufruf dieser Anzeige werden die Datenpunkte mit "Standardwerten" gefüllt und können dann überschrieben werden.
        16_eigene_html.png
        17_eigene_html.png
        Die Bilder bzw. Icon links und rechts habe ich als Base64 eingefügt. Ich benutze dafür das hier: https://www.base64-image.de/
        Wenn iQontrol installiert ist, dann funktioniert auch der Pfad zu einem Icon (einfach den eingestellten Pfad zum Icon aus iQontrol kopieren und einfügen)
        In den eigenen 02_HTML_Eigene_Einstellungen kann alles selbst an die eigenen Wünsche angepasst werden.
        Hier noch ein kurzes GiF
        (klick auf das linke Icon schaltet die Farbeinstellungen durch. klick auf das rechte Icon blendet die Tabelle ein und aus bzw. schaltet auf aktiv/inaktiv)
        1606936309509-20201202_200704.gif

      • Unter 04_Alexa
        befindet sich ein Button der für die später noch einzurichtende Routine in der Alexa App gebraucht wird. Der Button funktioniert nur wenn er per Sprache ausgelöst wurde. Wenn also per Hand der Button betätigt wird erfolgt keine Ansage, oder nur Zufällig auf den gerade zuletzt genutzten ECHO.
        18_Alexa.png

      • Unter 05_Telegram befindet sich ein Button und ein Schalter.
        19_Telegram.png

      • Unter 06_E-Mail befindet sich ein Button und ein Schalter.
        20_EMAIL.png

      Der Button in 05 und 06 kann verwendet werden um den aktuellen Status bzw. aktive Geräte als Liste zu senden.

      Der Schalter aktiviert/deaktiviert den "Direktversand" dieser Listen. Das könnte man z.B. bei Abwesenheit einschalten lassen, dann wird bei jeder Änderung, z.B. wenn eine Tür geöffnet/geschlossen wird eine Liste versendet.

      Im Spoiler noch einige wichtige Dinge für die Alexa Ansage und den iot Adapter:


      Zuerst muß das neue SmartGerät aus iot gesucht und gefunden werden. Dazu ist es wichtig einmal den iot Adapter zu öffnen und in den Reiter "SMART-GERÄTE" zu wechseln. Das neue Gerät sollte da sein, aber wenn man diesen Schritt nicht macht, dann werden von Alexa keine neuen Geräte gefunden. Danach kann der Adapter wieder geschlossen werden.

      1587908223350-bildschirmfoto-2020-04-26-um-15.34.49.png

      Nun entweder in der App neue Geräte suchen lassen, oder kurz den Sprachbefehl: "Alexa, suche neue Geräte" ausführen. Wenn das durchgelaufen ist und ein neues oder mehrere neue Geräte gefunden wurden, dann geht es mit dem Einrichten der Routine weiter.
      neue Geräte suchen lassen in der Alexa App

      1593522360683-2020-06-30-15.03.38.jpg

      ein neues Gerät (oder mehrere) wurde gefunden

      1593522438928-2020-06-30-15.04.00.jpg

      alles überspringen und dann zu den Routinen. Dort dann auf das Plus (oben rechts) drücken und eine neue Routine anlegen. Satz bzw. Frage eingeben bei Stimme

      1593522549969-2020-06-30-15.04.36.jpg

      Dann als nächstes die Aktion hinzufügen (SmartHome), alle Geräte auswählen und das passende Gerät einfügen.

      1593522621510-2020-06-30-15.04.55.jpg

      Oben rechts auf speichern, dann kurz warten und ausprobieren...

      Alle Blockly Exporte sind/kommen in den zweiten Beitrag. Bilder und Videos in den dritten Beitrag

      posted in Praktische Anwendungen (Showcase)
      dslraser
      dslraser
    • Vorlage Telegram Menü ohne Text2Command

      Menüvorlage/Ursprung @Sven_Topp !

      Anbei mein Menü für Telegram ohne Text2Command.
      Da ich immer wieder per Chat nach meinem kompletten Menü gefragt wurde und werde, stelle ich es jetzt doch wieder zur Verfügung, obwohl dies nur bedingt Sinnvoll ist, da ohnehin jedes "Untermenü" an die eigenen Geräte angepasst werden muß, oder manches vielleicht gar nicht gebraucht wird. Deshalb habe ich auch die meisten "Untermenüs", bzw. die Aktionen darin deaktiviert und zusammengeklappt, aber zum anschauen ist alles vorhanden. Am Besten man arbeitet sich im Blockly einmal von oben nach unten durch. Dazu jeweils einen Menüpunkt/Baustein auswählen und entfalten zum bearbeiten. Teilweise müssen mehrere Bausteine innerhalb einer Aktion zum bearbeiten entfaltet werden.
      Im Prinzip lässt sich dieses Menü beliebig erweitern oder umgestalten. Dies hier gezeigte Menü soll nur als mögliche Vorlage dienen. Wenn man dieses Blockly startet und zuvor mindestens einen User an seinen eigenen Telegram User angepasst hat, ist es sofort lauffähig. Jeder User kann sein eigenes Menü mit eigenem Funktionsumfang haben.
      Der Import des Menüs kann einen Moment dauern und das bearbeiten des Blocklys ist auf Grund der Größe des Blocklys (über 5100 Bausteine in meinem Fall) und je nach verwendeten Endgerät langsam. Im fertigen Zustand arbeitet es aber ohne jegliche Verzögerung. Schalten und abfragen läßt sich damit im Grunde alles was ioBroker zur Verfügung stellt.
      Aufrufen kann man das Menü indem man einmal das Wort Übersicht oder nur ein ü in den Bot eintippt und absendet.
      Screenshot_20190409-183328_Telegram.jpg
      Hier werden die Benutzer eingetragen. Hier in diesem Beispiel gibt es zwei Benutzer, aber auch das wäre erweiterbar. Wenn man hier den/die eigenen Benutzer drinn hat und das Blockly startet, sollte das Menü sofort lauffähig sein. (ohne schaltbare Aktionenen, da deaktiviert)
      Bildschirmfoto 2019-11-16 um 19.56.43.png

      Anbei noch Bilder, wie das Menü bei mir aussieht, wenn Aktionen tatsächlich geschaltet oder abgefragt werden....

      Wer es braucht, viel Spaß damit....


      Hier ein YouTube Link (Sven Topp) zum anschauen. Ein Download Link wird im Videokommentar in der Ursprungsversion angeboten.
      Video

      oder hier das Menü wie ich es aktuell verwende.

      Telegram-Menue.txt.zip


      Anbei einige Bilder, wie das Menü bei mir aussieht:

      Hauptmenü (Übersicht)
      Screenshot_20190409-183328_Telegram.jpg
      Menü Licht schalten
      Screenshot_20190409-183407_Telegram.jpg
      Untermenü von Licht schalten
      Licht im Wohnzimmer
      Screenshot_20190409-183430_Telegram.jpg
      Menü Heizung stellen
      Screenshot_20190409-183452_Telegram.jpg
      Untermenü Heizung stellen
      Heizung im Wohnzimmer stellen
      Screenshot_20190409-183514_Telegram.jpg
      Menü TV System Wohnzimmer schalten
      Screenshot_20190409-183529_Telegram.jpg
      TV System Schlafzimmer schalten
      Screenshot_20190409-183546_Telegram.jpg
      Menü Kamera Bild senden
      Screenshot_20190409-183606_Telegram.jpg
      Menü Steckdosen schalten
      Screenshot_20190409-183628_Telegram.jpg
      Menü Temperaturen abfragen
      Screenshot_20190409-183652_Telegram.jpg
      Menü Gerätestatus
      Screenshot_20190409-183710_Telegram.jpg
      Untermenü Gerätestatus
      Fenster
      Screenshot_20190409-183725_Telegram.jpg
      Untermenü Gerätestatus
      Licht
      Screenshot_20190409-183739_Telegram.jpg
      Untermenü Gerätestatus
      Steckdosen
      Screenshot_20190409-183755_Telegram.jpg
      Untermenü Gerätestatus
      Batterien
      Screenshot_20190409-183812_Telegram.jpg
      Menü Alexa2 Stimmen einstellen
      Screenshot_20190409-183829_Telegram.jpg
      Menü Telegram Nachricht an ECHO senden
      Screenshot_20190409-183842_Telegram.jpg

      posted in Blockly
      dslraser
      dslraser
    • RE: Wunschliste Blockly-Elemente

      @thewhobox

      Die Bausteine und / oder mit mehreren "Ausgängen" versehen bzw. die Anzahl wählbar oder hinzufügbar über ein Zahnrad.

      Nicht so...

      Bildschirmfoto 2019-03-11 um 13.11.15.png

      posted in Entwicklung
      dslraser
      dslraser
    • [VORLAGE] Anruferansage mit TR-064 und Alexa2

      Stand vom 06.05.2020
      Die aktuelle Anruferansage habe ich hier mit eingefügt: Klick hier

      Anbei eine Vorlage in Blockly zur Anruferansage mit der Möglichkeit zwischen vier verschiedenen Stimmen zu wählen.

      • verwendete Adapter
        Script Engine 4.3.4
        Alexa2 Adapter 3.0.7
        TR-064 Adapter 3.1.4
        iot Adapter 1.2.1

      In diesem Blockly werden mehrere Datenpunkte erstellt. Diese Datenpunkte werden nach dem ersten Start des Blocklys unter 0_userdat.0 erstellt. (Der Speicherort kann in der Funktion "Datenpunkte_erstellen" auch auf javascript.x umgestellt werden. Script zum erstellen der Datenpunkte ist von @Mic , siehe hier, danke dafür)
      Es werden vier Stimmen erstellt.

      • verwendete Stimmen
        Alexa
        Hans
        Vick
        Conchita

      Diese Stimmen Datenpunkte werden direkt in den iot Adapter eingefügt. Nach dem die Stimmen Datenpunkte erstellt wurden, müssen diese nun in der Amazon App gesucht werden, damit diese auch verwendet werden können. Entweder über die Amazon App, oder über den Sprachbefehl, "Alexa, suche neue Geräte." Danach kann man mit den

      • Befehlen:
        Alexa, schalte Alexa an
        Alexa, schalte Hans an
        Alexa, schalte Vicki an
        Alexa, schalte Conchita an

      die Stimmen umschalten. Sollte eine Stimme ausgeschaltet werden, wird automatisch auf die Stimme Alexa umgeschaltet.
      Es müssen nur die wenigen aufgeklappten Blöcke an die eigenen Daten angepasst werden.

      Bildschirmfoto 2020-01-01 um 17.24.17.png

      Wer an der Struktur der zuvor erstellten Datenpunkte nichts verändert, kann dann im Blockly alles so lassen.
      Die benötigten Datenpunke werden unter 0_userdata.0 erstellt
      Die erstellten Stimmen lassen sich dann auch in anderen Blocklys mit Ansagen verwenden.
      Vielleicht hat Jemand Verwendung für das Blockly. Eventuell geht das ganze auch eleganter/kürzer, aber bei mir läuft es schon eine ganze Weile so. Die Stimmen nutze ich auch in anderen Ansagen. (Fenster/Licht/Staubsauger/Rasenmäher usw...)

      Stand vom 06.05.2020

      Die aktuelle Anruferansage habe ich hier mit eingefügt: Klick hier

      posted in Blockly
      dslraser
      dslraser
    • RE: [Diskussion] Weihnachtsaktion Assistenten/Fernzugriff 2020

      Warum freut man sich nicht einfach über eine Aktion...? (egal wieviel Rabatt oder die länge der Laufzeit)
      Egal wo es sowas gibt, da habe ich auch keinen Einfluss auf die Aktion des "Anbieters".

      Ich wünsche einen schönen Nikolaustag und 2. Advent.🎄 ✌

      posted in ioBroker Allgemein
      dslraser
      dslraser
    • RE: Test Adapter iQontrol 2.0.x Vis (Entwicklungs-Thread)

      @docgame
      Kann ich machen, aber es fängt schon bei den Aufzählungen/aliasen an. Wenn Du aliase/Aufzählungen wie für meine Blocklys angelegt hast, dann kannst Du die direkt verwenden. (Aliase in einem Ordner, also bei mir ohne Elternordner)

      Beispiel Fenster

      Bildschirmfoto 2022-01-11 um 16.39.00.png

      Bildschirmfoto 2022-01-11 um 16.39.20.png

      Wenn es sowas gibt, dann geht es in iQontrol weiter.

      über das Plus (+) eine neue Liste anlegen (Beispiel Fensterliste)

      Bildschirmfoto 2022-01-11 um 16.40.40.png

      rechts auf den Bleistift klicken

      Bildschirmfoto 2022-01-11 um 16.42.44.png

      3 Counter anlegen

      Bildschirmfoto 2022-01-11 um 16.43.21.png

      jeweils rechts auf den Bleistift klicken, Beispiel gekippt

      Bildschirmfoto 2022-01-11 um 16.45.06.png

      Beispiel geöffnet

      Bildschirmfoto 2022-01-11 um 16.45.57.png

      Beispiel geschlossen

      Bildschirmfoto 2022-01-11 um 16.46.33.png

      zwei Calculations anlegen

      Bildschirmfoto 2022-01-11 um 16.47.16.png

      Fenster_sortiert auf dem Bleistift rechts anklicken.Diese Ansicht ist auch die Reihenfolge, wie die spätere sortierte Liste angezeigt wird. Also zuerst gekippt, dann geöffnet und dann geschlossen. Wer eine andere Reihenfolge will, der kann auch rechts bei den Strichen per Drag & Drop verschieben.

      Bildschirmfoto 2022-01-11 um 16.48.48.png

      Fenster_geoeffnet_oder_gekippt auf dem Bleistift rechts anklicken.

      Bildschirmfoto 2022-01-11 um 16.50.11.png

      Es kann sein, das man an einigen Stellen zuvor zwischenspeichern muss, damit die Listen auch angelegt werden und somit vorhanden sind.

      Jetzt folgt Teil 2 - Das Widget anlegen

      Unter Geräte WIDGET AUTOMATISCH ERSTELLEN anklicken

      Bildschirmfoto 2022-01-11 um 16.53.18.png

      Namen vergeben und Quelle Device-Counter auswählen

      Bildschirmfoto 2022-01-11 um 16.55.06.png

      Es öffnet sich

      Bildschirmfoto 2022-01-11 um 16.56.46.png

      Unter Allgemein rechts die sortiert Liste auswählen

      Bildschirmfoto 2022-01-11 um 16.58.26.png

      Styling und Icon-Replacement mache ich zum Schluss, wenn die Liste steht.

      Unter Datapoint Detection für diese Art alias ändern auf name

      name;plainText

      damit werden die Namen der Datenpunkte angezeigt.

      Widget erstellen/speichern und erstmal in der iQontrol View schauen was in der Liste steht.

      Wenn nun das Widget wieder bearbeitet werden soll, dann über den Bleistift rechts öffnen.

      Bildschirmfoto 2022-01-11 um 17.05.32.png

      Dann bei diesem Datenpunkt rechts auf den Bleistift klicken.

      Bildschirmfoto 2022-01-11 um 17.06.29.png

      Dann ist man wieder hier

      Bildschirmfoto 2022-01-11 um 17.07.57.png

      Beispiel Styling

      Bildschirmfoto 2022-01-11 um 17.22.47.png

      Bildschirmfoto 2022-01-11 um 17.23.40.png

      Bildschirmfoto 2022-01-11 um 17.23.52.png

      Bildschirmfoto 2022-01-11 um 17.24.01.png

      Bildschirmfoto 2022-01-11 um 17.24.11.png

      Beispiel Icon-Replacement

      Bildschirmfoto 2022-01-11 um 17.25.52.png

      Bildschirmfoto 2022-01-11 um 17.26.03.png

      Bildschirmfoto 2022-01-11 um 17.26.14.png

      Badge einfügen (die Anzahl der geöffneten/gekippten Fenster)

      Bildschirmfoto 2022-01-11 um 17.28.11.png

      Rechts auf den Bleistift und den Datenpunkt mit value (Zahl) auswählen

      Bildschirmfoto 2022-01-11 um 17.28.24.png

      Bis auf die Überschrift (erkläre ich später) sieht es dann bei mir so aus.

      Bildschirmfoto 2022-01-11 um 17.28.49.png

      Wer solche Überschriften möchte

      A88AFCC9-52C1-4E5E-8BC1-B6BC01004557.jpeg

      1DFCB116-9B93-4AEE-8F69-8AE81179228E.jpeg

      8753ACAB-D0A5-435D-97AF-10A7120357B8.jpeg

      906FA727-D194-4DFD-8234-CBE6D496EAAA.jpeg

      Der kann folgendes Blockly nehmen, oder für sich umarbeiten.

      Dieses Blockly legt einen Datenpunkt unter 0_userdata.0 an

      Bildschirmfoto 2022-01-11 um 19.31.46.png

      Man kann in iQontrol diesen Datenpunkt für die Überschrift verlinken

      Bildschirmfoto 2022-01-11 um 19.32.25.png

      Beispiel (für den Datenpunkt aus dem Blockly)

      Fenster| {0_userdata.0.iQontrol.Listen.Fenster.Fenster_Ueberschrift}

      Die Exporte sind hier zu finden.

      https://forum.iobroker.net/post/741659

      Ich hoffe das hilft erstmal

      posted in Tester
      dslraser
      dslraser
    • RE: Vorlage Telegram Menü ohne Text2Command

      @Sven_Topp
      Das alles ist so nach und nach entstanden und natürlich auch nach Deinen Vorlagen.
      das habe ich auch hier

      https://forum.iobroker.net/topic/17113/alexa-per-telegram-sprechen-lassen/5

      und hier

      https://forum.iobroker.net/topic/11245/telegram-und-inline-keyboard-menu/18

      erwähnt.

      Nur in diesem Beitrag habe ich vergessen Dich zu erwähnen. Dafür entschuldige ich mich.
      Da ich es immer mehr erweitert habe und nicht an verschieden Stellen hier im Forum haben wollte ist dieser Beitrag hier entstanden.

      posted in Blockly
      dslraser
      dslraser
    • Blockly Selektor u. Aufzählungen Geräte zählen

      Die aktuellen Blocklys befinden sich jetzt Klick hier

      Eine Beschreibung wie man das ganze einrichten und nutzen kann ist auf dieser Seite im Spoiler Fensteransage zu finden. Bis auf die Ansage ist das Blockly identisch.

      posted in Blockly
      dslraser
      dslraser
    • RE: Wunschliste Blockly-Elemente

      @thewhobox
      @kmxak

      Neue Datenpunkte erstellen, direkt mit allen wichtigen Angaben wie z.B. button, switch, string, SmartName (für iot/cloud)
      Im Moment gibt es keinen Baustein, nur einen Umweg.

      z.B.
      Bildschirmfoto 2019-03-11 um 10.51.05.png

      z.B.
      Bildschirmfoto 2019-03-11 um 10.51.27.png

      Beispiel Blockly Export im Spoiler


      <xml xmlns="http://www.w3.org/1999/xhtml">
      <variables>
      <variable type="" id="IXz~K#YUIctwF3U+jmc9">Name</variable>
      <variable type="" id="[FB;17/z0UcP)$EBMig!">Initialisierung</variable>
      <variable type="" id="R!!D7e3u8I~wDQS~TwL8">Beschreibung</variable>
      <variable type="" id="7q~+hs5u{Q0dn$oM{@t-">Type</variable>
      <variable type="" id="_F3NI18eUQsGs2qt.T]">Rolle</variable>
      <variable type="" id="J=uVGW;P^k@A!vhBphUm">smartName</variable>
      </variables>
      <block type="procedures_defcustomnoreturn" id="49kvg:%69IF}@lKJq@(J" x="-337" y="13">
      <mutation statements="false">
      <arg name="Name" varid="IXz~K#YUIctwF3U+jmc9"></arg>
      <arg name="Initialisierung" varid="[FB;17/z0UcP)$EBMig!"></arg>
      <arg name="Beschreibung" varid="R!!D7e3u8I~wDQS~TwL8"></arg>
      <arg name="Type" varid="7q~+hs5u{Q0dn$oM{@t-"></arg>
      <arg name="Rolle" varid="_F3NI18eUQsGs2
      qt.T]"></arg>
      <arg name="smartName" varid="J=uVGW;P^k@A!vhBphUm"></arg>
      </mutation>
      <field name="NAME">Variablen anlegen</field>
      <field name="SCRIPT">Y3JlYXRlU3RhdGUoTmFtZSwgSW5pdGlhbGlzaWVydW5nLCB7DQogIG5hbWU6IEJlc2NocmVpYnVuZywNCiAgcmVhZDogdHJ1ZSwgDQogIHdyaXRlOiB0cnVlLCANCiAgdHlwZTogVHlwZSwgDQogIGRlZjogZmFsc2UsDQogIHJvbGU6IFJvbGxlLA0KICBzbWFydE5hbWU6IHNtYXJ0TmFtZQ0KfSk7DQo=</field>
      <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
      </block>
      <block type="procedures_callcustomnoreturn" id="O45R/5Gw(j@)2M*_xdcB" x="-337" y="62">
      <mutation name="Variablen anlegen">
      <arg name="Name"></arg>
      <arg name="Initialisierung"></arg>
      <arg name="Beschreibung"></arg>
      <arg name="Type"></arg>
      <arg name="Rolle"></arg>
      <arg name="smartName"></arg>
      </mutation>
      <value name="ARG0">
      <block type="text" id="nSr7Hq~;DUU2#lB+Yj:}">
      <field name="TEXT">Eigene_Datenpunkte.OrdnerA.DatenpunktA</field>
      </block>
      </value>
      <value name="ARG1">
      <block type="text" id="xlqa55O11o@{+#@Yj;%"> <field name="TEXT">true</field> </block> </value> <value name="ARG2"> <block type="text" id="yEhqZqxh*}Ip8?yzOW7I"> <field name="TEXT">neuer Datenpunkt A</field> </block> </value> <value name="ARG3"> <block type="text" id="sYAGk@@-Fz^fIDONX!/i"> <field name="TEXT">boolean</field> </block> </value> <value name="ARG4"> <block type="text" id="/t]#6;-K%9u+eD1jG09@"> <field name="TEXT">button</field> </block> </value> <value name="ARG5"> <block type="text" id="f?//#sV0P}x+|S.8nzy">
      <field name="TEXT">SmartName A</field>
      </block>
      </value>
      </block>
      </xml>

      posted in Entwicklung
      dslraser
      dslraser

    Latest posts made by dslraser

    • RE: iQontrol Vis Support Thread

      @meute
      welchen Browser nutzt Du ? (ich benutze Chrome)

      posted in Visualisierung
      dslraser
      dslraser
    • RE: iQontrol Vis Support Thread

      @meute
      eine Idee habe ich nicht wirklich, aber hast Du in den Optionen was eingestellt, also hier ?

      Bildschirmfoto 2024-08-20 um 09.14.46.png

      Bildschirmfoto 2024-08-20 um 09.14.27.png

      posted in Visualisierung
      dslraser
      dslraser
    • RE: iQontrol Vis Support Thread

      @meute

      ich habe Dein Gerät mal importiert. Bei mir sieht es normal aus.

      Bildschirmfoto 2024-08-19 um 20.31.41.png

      posted in Visualisierung
      dslraser
      dslraser
    • RE: iQontrol Vis Support Thread

      @da_woody
      mein Beispielbild ist html (aus dem Blockly)
      Das mit den Breakpoints schaue ich mir mal in meinen anderen Listen an. (so aus der Erinnerung…kann es sein das der dafür da war wieviel Zeilen in einer Liste angezeigt werden und dann mit einem „weiter“ Button weitere Zeilen angezeigt werden?)

      posted in Visualisierung
      dslraser
      dslraser
    • RE: iQontrol Vis Support Thread

      @meute

      ja, gemeint. habe ich es so:

      Bildschirmfoto 2024-08-11 um 18.21.15.png

      aber das bringt Dir nicht wirklich was, weil die Liste eine eigene (doch kein json) ist. Die Werte stehen in einer eigenen Liste. (in dem Beispiel ganz unten)

      Bildschirmfoto 2024-08-11 um 18.21.57.png

      Die Idee war ja nur die eingehenden und die verpassten Anrufe zu haben, weil Du ja die ausgehenden Anrufe nicht sehen wolltest bzw. ausblenden wolltest.

      Ich habe jetzt mal das Blockly von der verlinkten Seite etwas bearbeitet und die Symbole aus der FritzBox genommen. (anstatt Symbole ginge aber auch Text, z.B. ankommender Anruf usw.)
      Dieses Blockly kann man auch recht schnell umarbeiten, das Du nur die eingehenden und verpassten Anrufe angezeigt bekommst)
      Übrigens ist in dem Blockly noch ne Astro Funktion die Du löschen kannst...(sonst gibt es Fehler, wenn die ID*s nicht ausgewählt werden)

      Das Ergebnis vom Blockly macht dann sowas. (nicht auf die Farben achten, das ist nur ne Testseite und sieht dann bei Dir anders aus)

      Bildschirmfoto 2024-08-11 um 18.31.56.png

      Bei Anrufer habe ich etwas mehr Platz gelassen, weil die Nummern (wenn kein Name im Telefonbuch steht) deutlich länger sein kann.

      Wäre das eine Anzeige die für Dich passen könnte ?

      posted in Visualisierung
      dslraser
      dslraser
    • RE: iQontrol Vis Support Thread

      @meute

      hier

      https://forum.iobroker.net/post/885706

      findest Du auch einige Tabellen als Blockly Export. Dafür mußt Du eigentlich nur einen Datenpunkt erstellen und das dann im Blockly anpassen (ist nur an einer Stelle ganz unten anzupassen)
      In dem Blockly siehst Du ganz gut welche Werte Du in einer Tabelle (als html) ausgeben kannst bzw. wie man es machen kann.

      posted in Visualisierung
      dslraser
      dslraser
    • RE: iQontrol Vis Support Thread

      @meute
      ja, diese Beispiele habe ich da mal reingestellt, danach wurde aber noch so einiges an iQontrol weiterentwickelt, kann sein das manches jetzt anders, leichter bzw. besser funktioniert.
      Ich habe länger nix mehr an meinem iQontrol verändert.

      posted in Visualisierung
      dslraser
      dslraser
    • RE: iQontrol Vis Support Thread

      @da_woody
      das mit den Listen war erstmal nur eine Idee, ich habe das nicht getestet ob es auch geht 🤷‍♂️(Hast Du es probiert ?)

      Ansonsten kann man natürlich auch z.B. Blockly hernehmen und gleich eine Liste in „schön“ machen (so wie man die Liste angezeigt haben möchte) und die dann z.B. hals html Ausgabe in einen Datenpunkt schreiben.

      posted in Visualisierung
      dslraser
      dslraser
    • RE: iQontrol Vis Support Thread

      @meute
      nur so als Idee…
      schau Dir mal die Listen/Zähler Funktion von iQontrol an. Damit kannst Du Listen (auch als json) erstellen. Du könntest einfach eine neue Liste aus den schon bestehenden Datenpunkten vom tr64 Adapter zusammenbauen und hast dann eine fertige Liste für Dein Widget. Der tr64 Adapter wirft ja für ankommende / ausgehende usw. Anrufe einzelne Datenpunkte aus. So hättest Du dann ein json wie Du es brauchst.

      posted in Visualisierung
      dslraser
      dslraser
    • RE: iQontrol Vis Support Thread

      @mike-hellracer
      Sorry, ich bin auch nur Nutzer von iQontrol.

      posted in Visualisierung
      dslraser
      dslraser
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo