NEWS
Anfängerfrage Dashbutton Javascript
-
Hallo,
aus via google zusammengetragenen Informationen habe ich mir untenstehendes Script gebastelt. Ziel ist es, mittels eines Amazon Dash Buttons eine LIFX Lampe an- bzw. auszuschalten.
Das Script schaltet auch an und aus, allerdings pro Druck auf den Dash Button mehrfach (Licht geht kurz an und wieder aus, dann nach ein paar Sekunden an). Den Button drücke ih natürlich nur einmal kurz. Beim Ausschalten genau andersum, kurz aus, wieder für ein paar Sekunden an und dann aus.
Anstatt der LIFX Lampe habe ich das gleiche Script zum Testen auch mit einem Homematic Funkaktor durchlaufen lassen. Hier zeigt sich das gleiche Verhalten.
Im Scripten habe ich Null Erfahrung. Kann mir jemand helfen und sagen, was falsch läuft?
Die Randbedingungen: iobroker auf Raspberry Pi, Dash Buttons eingebunden und erkannt, funktionieren und schalten ja auch, nur halt nicht wie gewünscht.
Und hier das verwendete Script (Adressen durch xxx ersetzt):
var IAMSDASH = 'amazon-dash.0.xxxxxx.switch';
var BULB1 = 'lifx.0.Bulb_xxxxxx.state';
on({id: IAMSDASH, val: true}, function (obj) {
var b = getState(BULB1).val;
if (b === false) { setState(BULB1, true); } else { setState(BULB1, false); }
}
);
-
Ich habe SetState mal zu SetstateDelayed abgeändert und mit den Verzögerungen experimentiert. Jetzt läufts wies soll, allerdings dauert das Schalten so um die 8 Sekunden. Gibts da noch eine andere Option, das Ganze etwas schneller zu gestalten?
-
Ich habe SetState mal zu SetstateDelayed abgeändert und mit den Verzögerungen experimentiert. Jetzt läufts wies soll, allerdings dauert das Schalten so um die 8 Sekunden. Gibts da noch eine andere Option, das Ganze etwas schneller zu gestalten? `
ja nu der knopp muss jedesmal zuerst die WLAN Verbindung aufbauen das dauert
-
Gibts da noch eine andere Option, das Ganze etwas schneller zu gestalten? `
Die gibt es immerStatt auf "pressed" zu reagieren, kannst du auch auf den Datenpunkt "switch" reagieren, dieser simuliert praktischerweise schon einen Schalter über den Dashbutton. D.h. er wechselt bei jedem Press zwischen false und true.
Bsp:
var oidDash = "amazon-dash.0.xx-xx-xx-xx-xx-xx.switch"; var oidLicht = "hm-rpc.1.yyyyyyyyyy.1.STATE"; on({id: oidDash, change: "ne"}, function (obj) { setState(oidLicht, obj.state.val ); });
Wenn du jedoch von mehreren Stellen aus schalten möchtest, wird dir "switch" nicht helfen. Dann bist du auf "pressed" angewiesen und musst dieses "entprellen". Das geht leicht, in dem die Timestamps (ts, Zeitstempel) vom obj.state und obj.oldState verglichen werden und erst dann geschaltet wird, wenn diese 5 Sek Differenz haben.
var oidDash = "amazon-dash.0.xx-xx-xx-xx-xx-xx.pressed"; var oidLicht = "hm-rpc.1.yyyyyyy.1.STATE"; on({id: oidDash, val: true}, function (obj) { if ( obj.state.ts - obj.oldState.ts > 5000) { setState(oidLicht, !getState(oidLicht).val ); } });
-
Danke für die Rückmeldungen!
@artek: Das ist mir klar aber er schaltet ja auch früher wenn ich die Verzögerung nicht einbaue. Also könnte die Schalt- (Reaktions-)zeit theoretisch kürzer sein, wenn ich das Mehrfachgeschalte ohne die Verzögerung in den Griff bekomme.
@Uhula: Bei deinem ersten Script habe ich auch die an/aus oder aus/an Sequenz. Ab und zu tut sich gar nix nach dem Tastendruck. Bei dem 2. Script schaltet die Lampe unregelmäsig, d.h. mehrfach hintereinander so wie sie soll, dann aber manchmal auch nur bei jedem 2., 3. oder 4. Tastendruck. Schema kann ich da keines erkennen.
-
genau das hab ich gesucht. Habe 6 Dash Buttons und jetzt funktionieren sie wie sie sollen. Danke im nachhinein