@holzlenkrad
Ich habe es jetzt ohne die Bindings im Adapter für mich gelöst. Wenn die Ikea Bulb und die Fernbedienung am Zigbee Netzwerk angelernt ist, kannst du sie trotzdem noch direkt mit der Lampe koppeln (Daneben halten Koppelnknopf drücken). Die FB redet dann direkt mit der Lampe teilt aber den Knopfdruck trotzdem noch dem iobroker mit.
Einziger Nachteil: Der Status der Lampe wird eben nicht mehr im iobroker gesetzt.
Hierzu verwende ich ein Polling-Skript auf der Basis von Garfonso. Ich triggere es allerdings über die Tradfri-Fernbedienung.
Edit: Habe gerade entdeckt, dass der neue Adapter einen Polling Button eingebaut hat. Dieser funktioniert bei mir aber nicht ganz zuverlässig...
NEWS
Latest posts made by giessener
-
RE: zigbee bindings
-
RE: [Vorlage] Anwesenheitssimulation - Script
Hallo,
ich habe hierzu eine alternatives Skript für mich gebastelt. Es verwendet keine Zufallszeiten, sondern einfach die Daten aus einem definierten Zeitraum aus der Historyinstanz (bei mir SQL). Fahre ich eine Woche weg, spiele ich einfach die letzte Woche ab und habe damit auch logische Lichtabfolgen. Ich habe es für 10 ids gebaut und es gibt keine Fehlerabfragen. Vielleicht hilft das ja auch jemandem von euch. Meine Scriptingfähigkeiten sind eher so Copy-Paste. Deshalb wiederholt sich hier auch 10mal der Code da ich sonst nicht wusste wie ich die asynchronen Arrays zusammen bekomme. Wer also Ideen zur Verbesserung hat, darf da gerne dran basteln.//Das Script lädt eine Liste der Schaltvorgänge der angegebenen Datenpunkte für einen definierten Zeitraum und spielt diese dann nocheinmal ab. var Zeitspanne = 604800000; //Wie weit in der Vergangenheit mit dem Replay begonnen werden soll in ms (Tag:86400000, Woche: 604800000 ) var id1 ='sonoff.0.EG-KUECHE-Oberschranklicht.POWER'; //ids der zu Schaltenden Geraete var id2 ='sonoff.0.EG-KUECHE-Vitrinenlicht.POWER'; var id3 ='sonoff.0.EG-HWR-Deckenlicht.POWER'; var id4 ='sonoff.0.EG-FLUR-Deckenlicht.POWER'; var id5 ='sonoff.0.EG-WZ-Wandlicht.POWER'; var id6 ='sonoff.0.EG-WZ-Stehlampe.POWER'; var id7 ='sonoff.0.EG-BAD-Deckenlicht.POWER'; var id8 ='sonoff.0.OG-FLUR-Deckenlicht.POWER'; var id9 ='sonoff.0.OG-BAD-Deckenlicht.POWER'; var id10 ='sonoff.0.OG-OST-Deckenlicht.POWER'; //id1 var Pause1; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id1, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id1 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause1 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id1 +' : ' + Pause1 + ' ms'); setTimeout (function () {schalten (j);}, Pause1);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); }); //id2 var Pause2; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id2, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id2 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause2 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id2 +' : ' + Pause2 + ' ms'); setTimeout (function () {schalten (j);}, Pause2);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); }); //id3 var Pause3; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id3, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id3 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause3 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id3 +' : ' + Pause3 + ' ms'); setTimeout (function () {schalten (j);}, Pause3);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); }); //id4 var Pause4; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id4, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id4 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause4 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id4 +' : ' + Pause4 + ' ms'); setTimeout (function () {schalten (j);}, Pause4);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); }); //id5 var Pause5; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id5, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id5 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause5 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id5 +' : ' + Pause5 + ' ms'); setTimeout (function () {schalten (j);}, Pause5);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); }); //id6 var Pause6; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id6, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id6 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause6 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id6 +' : ' + Pause6 + ' ms'); setTimeout (function () {schalten (j);}, Pause6);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); }); //id7 var Pause7; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id7, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id7 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause7 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id7 +' : ' + Pause7 + ' ms'); setTimeout (function () {schalten (j);}, Pause7);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); }); //id8 var Pause8; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id8, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id8 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause8 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id8 +' : ' + Pause8 + ' ms'); setTimeout (function () {schalten (j);}, Pause8);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); }); //id9 var Pause9; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id9, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id9 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause9 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id9 +' : ' + Pause9 + ' ms'); setTimeout (function () {schalten (j);}, Pause9);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); }); //id10 var Pause10; sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL id: id10, options: { start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen aggregate: 'onchange' } }, function (result) { j = 0; function schalten(j) { setState(id10 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste j++; if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren Pause10 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen console.log('Zeit bis zum naesten Statusupdate von '+ id10 +' : ' + Pause10 + ' ms'); setTimeout (function () {schalten (j);}, Pause10);} //wieder aufrufen der Funktion verzoegert um die Pause } schalten (0); });
-
RE: Sonoff Adapter: old client with secret send pingreq
Das Problem hängt mit dem 2.4.2 core zusammen. Wenn man seine sonoff Version selber compiliert kann man dabei einen anderen core verwenden. Entweder den stabilen 2.3.0 oder den etwas experimentellen 2.5.0.
Ich hatte das gleiche Problem seit ich (wieder) den 2.3.0 core verwende habe ich keine Probleme mehr.