Dann dürftest du die richtigen Stichwörter verwendet haben!
Trotzdem danke für die Mühe.
LG Thomas
Anfängerfrage:#
Sollte es nicht möglich sein Variablen außerhalb von function zu deklarieren, und diese dann in einer function zu benutzen?
das geht nicht, es funktioniert nur so…
createState('zustände.fenstererd', 0);
var timere = null;
//Function zur Abfrage der Zustände
function zustanderd()
{
var b = getState("hm-rpc.0.MEQ0751783.1.STATE").val;//Stube rechts
var c = getState("hm-rpc.0.MEQ0751896.1.STATE").val;//Stube mitte
var d = getState("hm-rpc.0.MEQ0752856.1.STATE").val;//Stube links
if(b || c || d)
{
if (!timere) {
timere = setTimeout(function () {
timere = null;
setState('zustände.fenstererd', 1);
toLog("Fenster Erdgeschoss geöffnet!", true);
}, 1000);//eine Sekunde Verzögerung
}
}
else
{
if (timere) {
clearTimeout(timere);
timere = null;
}
setState('zustände.fenstererd', 0);
toLog("Fenster Erdgeschoss geschlossen!", true);
}
}
// Bei Änderrung der Zustände aufruf der Functionen
//*******************ERDGESCHOSS**************************
on({id: "hm-rpc.0.MEQ0751783.1.STATE"}, function()
{
zustanderd();
});
on({id: "hm-rpc.0.MEQ0751896.1.STATE"}, function()
{
zustanderd();
});
on({id: "hm-rpc.0.MEQ0752856.1.STATE"}, function()
{
zustanderd();
});
wobei die "timere" Variable funktioniert.
So funktioniert es auch und ist die bessere Lösung (geringere CPU-Belastung):
var timere = null;
var b;
var c;
var d;
//Function zur Abfrage der Zustände
function zustanderd()
{
if(b || c || d)
{
if (!timere) {
timere = setTimeout(function () {
timere = null;
setState('zustände.fenstererd', 1);
toLog("Fenster Erdgeschoss geöffnet!", true);
}, 1000);//eine Sekunde Verzögerung
}
}
else
{
if (timere) {
clearTimeout(timere);
timere = null;
}
setState('zustände.fenstererd', 0);
toLog("Fenster Erdgeschoss geschlossen!", true);
}
}
// Bei Änderrung der Zustände aufruf der Functionen
//*******************ERDGESCHOSS**************************
on({id: "hm-rpc.0.MEQ0751783.1.STATE"}, function(dp)
{
b = dp.newState.val;
zustanderd();
});
on({id: "hm-rpc.0.MEQ0751896.1.STATE"}, function(dp)
{
c = dp.newState.val;
zustanderd();
});
on({id: "hm-rpc.0.MEQ0752856.1.STATE"}, function(dp)
{
d = dp.newState.val;
zustanderd();
});
Perfekt!
Viel weniger Schreibaufwand!
Aber eine Erklärung steht noch aus, warum man nicht getState() außerhalb einer Funktion an einer Variable übergeben kann und diese dann in der Funktion benutzen? :oops:
…warum man nicht getState() außerhalb einer Funktion an einer Variable übergeben kann und diese dann in der Funktion benutzen? `
Die Programmteile außerhalb der Funktion werden nur einmal bei Scriptstart ausgeführt. Die per getState() außerhalb der Funktion eingelesenen Werte würden sich also nie wieder ändern (außer bei erneutem Scriptstart).
Will man sich ändernde Werte einlesen, muss man das innerhalb der durch on(id, function) aufgerufenen Funktion(en) machen.
Okay…..jetzt hab ich es verstanden. Danke :!:
Möchte man sofort nach Scriptstart ein gültges Ergebnis, dann deklariert man die Variablen nicht nur außerhalb der Funktion, sondern initialisiert sie auch und führt die Funktion bei Scriptstart aus:
// Deklaration und Initialsierung von Variablen
var timere = null;
var b = getState("hm-rpc.0.MEQ0751783.1.STATE").val;//Stube rechts
var c = getState("hm-rpc.0.MEQ0751896.1.STATE").val;//Stube mitte
var d = getState("hm-rpc.0.MEQ0752856.1.STATE").val;//Stube links
//Function zur Abfrage der Zustände
function zustanderd()
{
if(b || c || d)
{
if (!timere) {
timere = setTimeout(function () {
timere = null;
setState('zustände.fenstererd', 1);
toLog("Fenster Erdgeschoss geöffnet!", true);
}, 1000);//eine Sekunde Verzögerung
}
}
else
{
if (timere) {
clearTimeout(timere);
timere = null;
}
setState('zustände.fenstererd', 0);
toLog("Fenster Erdgeschoss geschlossen!", true);
}
}
// Bei Änderrung der Zustände aufruf der Functionen
//*******************ERDGESCHOSS**************************
on({id: "hm-rpc.0.MEQ0751783.1.STATE"}, function(dp)
{
b = dp.newState.val;
zustanderd();
});
on({id: "hm-rpc.0.MEQ0751896.1.STATE"}, function(dp)
{
c = dp.newState.val;
zustanderd();
});
on({id: "hm-rpc.0.MEQ0752856.1.STATE"}, function(dp)
{
d = dp.newState.val;
zustanderd();
});
// Scriptstart mit Initialwerten
zustanderd();
Hi,
das unterstreicht das, was du vorher erklärt hast. Danke