NEWS
Sonnenprogramm
-
Und die menge der Timer ist also nicht so schlimm ? Die könnte ich ja wie beschrieben auch noch reduzieren. `
Das würde ich nicht machen, denn es kann vielleicht doch mal zu zeitlichen Überschneidungen kommen. Die Menge der Timer ist unkritisch.
@meicker:Könnte ich eigentlich alle Scripts einfach untereinander packen und nur noch eines haben ? Oder ist es besser viele kleine zu haben ? Oder ist es gar nicht möglich ? `
Man kann viele Funktionen in ein Skript packen oder einzelne Skripte erstellen. Ich bevorzuge wegen der Übersichtlichkeit mehrere kleine Skripte. Es ist letztlich Geschmacksache. -
OK - Dann lasse ich das so wie es ist. Oben habe ich das aufgeräumte Script in meinen vorherigen Post eingepflegt. Meinst Du so, richtig ?
-
Ich würde es pro Ort etwa so machen, wenn ich in Blockly programmieren würde:
Es können auch alle Abfragen für die virtuellen Datenpunkte in des eine Schedule und die Trigger auf die Datenpunkte untereinander, wie Du es bereits gemacht hast.Die Abfrage des Datenpunktes "global.sonnenprogramm_aktiv" muss in das Schedule !
-
Hallo Paul,
das sonnenprogramm aktiv liegt mit Absicht daneben. Es war zum abschalten der Funktion gedacht und wird nicht aktualisiert.
Den rest schaue ich mir Morgen noch mal an …
Was meinst Du mit
> Es können auch alle Abfragen für die virtuellen Datenpunkte in des eine Schedule und die Trigger auf die Datenpunkte untereinander, wie Du es bereits gemacht hast.
?Aber sonst ist mein Script OK, oder ?
Bitte schau noch mal in dem Controme Thread vorbei
vg
Marc
-
das sonnenprogramm aktiv liegt mit Absicht daneben. Es war zum abschalten der Funktion gedacht und wird nicht aktualisiert. `
Zum Abschalten, wenn dieser DP false wird, muss aber das Skript neu gestartet werden. Was Du möchtest, funktioniert so:
@meicker:Aber sonst ist mein Script OK, oder ? `
Ja. Man kann es vereinfachen (siehe Bild). Das Setzen von Variablen mit konstanten Werten ist z.B. überflüssig. -
Hi Paul,
hat etwas länger gedauert aber ich habe mich eben mal dran gegeben … mir ist aber noch was unklar. Bitte mal meine Kommenare ansehen. Es geht im wesentlichen um die Stellen wo Du WERT eingetragen hat in einem roten Block - Mir ist nicht klar was ich da reinpacken muss ...
Falls Objekt -> Default - bleibt so ?
Viele Grüße,
Marc
-
die Stellen wo Du WERT eingetragen hat in einem roten Block - Mir ist nicht klar was ich da reinpacken muss … `
Das ist der Wert des Trigger-Datenpunktes.
default muss ersetzt werden durch den Datenpunkt global.sonnenprogramm_aktiv, denn wenn dieser sich ändert, soll das Sonnenprogramm gestartet bzw. das Schedule Sommer2 gestoppt werden. -
danke Paul,
da mache ich die tage dran weiter …
-
Hi Paul,
das sieht nicht richtig aus …
Sonnenprogramm aktib soll ein globaler Schalter sein um das gesamte Programm ausser gefecht zu setzen.
Wenn Sonne Balkon wahr ist macht es Sonnenprogramm, ansonsten wird Sommer 2 angehalten. Damit ist doch dann Ende im Gelände … keine der anderen Prüfungen im Sommerprogramm würde mehr ausgeführt, oder täusche ich mich da ?
vg
Marc
-
Sonnenprogramm aktib soll ein globaler Schalter sein um das gesamte Programm ausser gefecht zu setzen. `
So habe ich es auch verstanden.
@meicker:Wenn Sonne Balkon wahr ist macht es Sonnenprogramm, ansonsten wird Sommer 2 angehalten. Damit ist doch dann Ende im Gelände … keine der anderen Prüfungen im Sommerprogramm würde mehr ausgeführt, oder täusche ich mich da ? `
Richtig. In meinem Vorschlage wird auch nicht der Wert von "javascript.0.global.sonne-balkon" ausgewertet, um die Funktion auszurufen bzw. das Schedule zu stoppen, sondern der Wert des Triggerdatenpunktes = Wert von "global.sonnenprogramm_aktiv". -
Hi Paul
OK Morgen wieder Jetzt ist es zu spät …
Wenn ich hier Sternchen vergeben dürfte würdest Du ne ganze Menge bekommen. Hier scheint es nicht viele user zu geben die sich mit Antworten Mühe geben ... Dankeschön dafür !!! Meist bekommt man nur ein Stichwort vor den Latz geknallt und das wars ...
vg
Marc
-
Hier scheint es nicht viele user zu geben die sich mit Antworten Mühe geben … Dankeschön dafür !!! Meist bekommt man nur ein Stichwort vor den Latz geknallt und das wars ... `
Ich würde sagen: haltlose Anschuldigung!
Enrico
-
Ich würde sagen: haltlose Anschuldigung! `
Damit wollte ich nicht die helfenden Hände ansprechen ! Sicherlich habe ich hier viel Hilfe erhalten, sonst wäre ich nicht da wo ich jetzt bin, das ist klar.
-
Hi Paul,
noch eine Kleinigkeit -
script.js.Homepilot.Szenen.Sonne.Sonnenprogramm_V2: clearTimeout() => not found
Kannst Du damit was anfangen ? M.E werden alle Timeouts auch geschlossen, dieser hat aber keinen Namen …
Ich zeige am Besten mal den Code, das Blocky ist zu lang wenn ich es komplett öffne ...
! ````
var Sommer2, TOB1, TOB2, TOM1, TOM2, TOE1, TOE2, TOBS1, TOBS2;
! /**- Beschreibe diese Funktion …
/
function Sonnenprogramm() {
Sommer2 = schedule(' 9-20 * 5-9 *', function () {
createState("global.sonne-balkon", function () {
});
createState("global.sonne-markise", function () {
});
createState("global.sonne-esszimmer", function () {
});
createState("global.sonne-bad-schlafzimmer", function () {
});
if (getState("javascript.0.Homepilot.Temperatur").val >= 22 && getState("javascript.0.Homepilot.Lichtwert").val >= 50000 && getState("javascript.0.Homepilot.Sonnenrichtung").val >= 80 && getState("javascript.0.Homepilot.Sonnenrichtung").val <= 190) {
setState("javascript.0.global.sonne-balkon"/global.sonne-balkon/, true, true);
} else {
setState("javascript.0.global.sonne-balkon"/global.sonne-balkon/, false, true);
}
if (getState("javascript.0.Homepilot.Temperatur").val >= 22 && getState("javascript.0.Homepilot.Lichtwert").val >= 50000 && getState("javascript.0.Homepilot.Sonnenrichtung").val >= 80 && getState("javascript.0.Homepilot.Sonnenrichtung").val <= 190) {
setState("javascript.0.global.sonne-markise"/global.sonne-markise/, true, true);
} else {
setState("javascript.0.global.sonne-markise"/global.sonne-markise/, false, true);
}
if (getState("javascript.0.Homepilot.Temperatur").val >= 22 && getState("javascript.0.Homepilot.Lichtwert").val >= 10000 && getState("javascript.0.Homepilot.Sonnenrichtung").val >= 190 && getState("javascript.0.Homepilot.Sonnenrichtung").val <= 265) {
setState("javascript.0.global.sonne-esszimmer"/global.sonne-esszimmer/, true, true);
} else {
setState("javascript.0.global.sonne-esszimmer"/global.sonne-esszimmer/, false, true);
}
if (getState("javascript.0.Homepilot.Temperatur").val >= 22 && getState("javascript.0.Homepilot.Lichtwert").val >= 5000 && getState("javascript.0.Homepilot.Sonnenrichtung").val >= 260 && getState("javascript.0.Homepilot.Sonnenrichtung").val <= 280) {
setState("javascript.0.global.sonne-bad-schlafzimmer"/global.sonne-bad-schlafzimmer/, true, true);
} else {
setState("javascript.0.global.sonne-bad-schlafzimmer"/global.sonne-bad-schlafzimmer/, false, true);
}
});
}
! if (getState("javascript.0.global.sonnenprogramm_aktiv").val) {
Sonnenprogramm();
}
on({id: 'javascript.0.global.sonnenprogramm_aktiv', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("javascript.0.global.sonnenprogramm_aktiv").val == true) {
Sonnenprogramm();
} else {
(function () {if (Sommer2) {clearSchedule(Sommer2); Sommer2 = null;}})();
}
});
on({id: "javascript.0.global.sonne-balkon"/global.sonne-balkon/, change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
// Balkon
if (getState("javascript.0.global.sonne-balkon").val == true) {
(function () {if (TOB2) {clearTimeout(TOB2); TOB2 = null;}})();
TOB1 = setTimeout(function () {
if (getState("javascript.0.global.homepilot.automatik.wohnzimmer").val == true) {
setState("homepilot.0.devices.RolloTubeDuoFern.10015.level"/level Rollo Links/, 30);
setState("homepilot.0.devices.RolloTubeDuoFern.10001.level"/level Rollo Rechts/, 30);
(function () {if (TOB1) {clearTimeout(TOB1); TOB1 = null;}})();
}
}, 900000);
} else {
(function () {if (TOB1) {clearTimeout(TOB1); TOB1 = null;}})();
TOB2 = setTimeout(function () {
if (getState("javascript.0.global.homepilot.automatik.wohnzimmer").val == true) {
setState("homepilot.0.devices.RolloTubeDuoFern.10015.level"/level Rollo Links/, 0);
setState("homepilot.0.devices.RolloTubeDuoFern.10001.level"/level Rollo Rechts/, 0);
(function () {if (TOB2) {clearTimeout(TOB2); TOB2 = null;}})();
}
}, 900000);
}
});
// Markise
on({id: "javascript.0.global.sonne-markise"/global.sonne-markise/, change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("javascript.0.global.sonne-markise").val == true) {
(function () {if (TOM2) {clearTimeout(TOM2); TOM2 = null;}})();
TOM1 = setTimeout(function () {
if (getState("javascript.0.global.sonne-markise").val == true) {
if (getState("javascript.0.global.homepilot.automatik.markise").val == true) {
setState("homepilot.0.devices.DuoFernRohrmotor-Aktor.10018.level"/level Markise/, 90);
(function () {if (TOM1) {clearTimeout(TOM1); TOM1 = null;}})();
}
}
}, 900000);
} else {
(function () {if (TOM1) {clearTimeout(TOM1); TOM1 = null;}})();
TOM2 = setTimeout(function () {
if (getState("javascript.0.global.sonne-markise").val == false) {
if (getState("javascript.0.global.homepilot.automatik.markise").val == true) {
setState("homepilot.0.devices.DuoFernRohrmotor-Aktor.10018.level"/level Markise/, 0);
(function () {if (TOM2) {clearTimeout(TOM2); TOM2 = null;}})();
}
}
}, 900000);
}
});
// Esszimmer
on({id: "javascript.0.global.sonne-esszimmer"/global.sonne-esszimmer/, change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("javascript.0.global.sonne-esszimmer").val == true) {
(function () {if (TOE2) {clearTimeout(TOE2); TOE2 = null;}})();
TOE1 = setTimeout(function () {
if (getState("javascript.0.global.sonne-esszimmer").val == true) {
if (getState("javascript.0.global.homepilot.automatik.esszimmer").val == true) {
setState("homepilot.0.devices.RolloTubeDuoFern.1010011.level"/level Rollo Esstisch/, 30);
}
(function () {if (TOE1) {clearTimeout(TOE1); TOE1 = null;}})();
}
}, 900000);
} else {
(function () {if (TOE1) {clearTimeout(TOE1); TOE1 = null;}})();
TOE2 = setTimeout(function () {
if (getState("javascript.0.global.sonne-esszimmer").val == false) {
if (getState("javascript.0.global.homepilot.automatik.esszimmer").val == true) {
setState("homepilot.0.devices.RolloTubeDuoFern.1010011.level"/level Rollo Esstisch/, 0);
(function () {if (TOE2) {clearTimeout(TOE2); TOE2 = null;}})();
}
}
}, 900000);
}
});
// Bad & Schlafzimmer
on({id: "javascript.0.global.sonne-bad-schlafzimmer"/global.sonne-bad-schlafzimmer/, change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("javascript.0.global.sonne-bad-schlafzimmer").val == true) {
(function () {if (TOBS2) {clearTimeout(TOBS2); TOBS2 = null;}})();
TOBS1 = setTimeout(function () {
if (getState("javascript.0.global.sonne-bad-schlafzimmer").val == true) {
if (getState("javascript.0.global.homepilot.automatik.badezimmer").val == true) {
setState("homepilot.0.devices.RolloTubeDuoFern.10013.level"/level Rollo Badezimmer/, 30);
}
if (getState("javascript.0.global.homepilot.automatik.schlafzimmer").val == true) {
setState("homepilot.0.devices.RolloTubeDuoFern.10012.level"/level Rollo Schlafzimmer/, 30);
}
(function () {if (TOBS1) {clearTimeout(TOBS1); TOBS1 = null;}})();
}
}, 900000);
} else {
(function () {if (TOBS1) {clearTimeout(TOBS1); TOBS1 = null;}})();
TOBS2 = setTimeout(function () {
if (getState("javascript.0.global.sonne-bad-schlafzimmer").val == false) {
if (getState("javascript.0.global.homepilot.automatik.badezimmer").val == true) {
setState("homepilot.0.devices.RolloTubeDuoFern.10013.level"/level Rollo Badezimmer/, 0);
}
if (getState("javascript.0.global.homepilot.automatik.schlafzimmer").val == true) {
setState("homepilot.0.devices.RolloTubeDuoFern.10012.level"/level Rollo Schlafzimmer/, 0);
}
(function () {if (TOBS2) {clearTimeout(TOBS2); TOBS2 = null;}})();
}
}, 900000);
}
});vg Marc
- Beschreibe diese Funktion …
-
M.E werden alle Timeouts auch geschlossen, dieser hat aber keinen Namen … `
Ich kann keinen clearTimeout() ohne Namen finden. Im Reiter Log ist die Fehlermeldung meist ausführlicher mit Angabe der Zeilennummer. -
Im Reiter Log ist die Fehlermeldung meist ausführlicher mit Angabe der Zeilennummer. `
Du meinst bei den Scripten selber, richtig ? Hast Du eine Idee warum ich da manchmal gar nichts angezeigt bekomme ? Normalerweise kommt ja beim Start eines Scriptes etwas von subscriptions bla bla bla … da kommt nix. Javascript Adapter habe ich schon neu gestartet.Der Fehler kommt glaube ich auch nur wenn das Script läuft, also richtig aktiv ist. Morgen mal sehen wenn die Sonne wieder scheint, oder ich muss heute Abend mal auf Fake Werte setzen ...
vg Marc
-
Du meinst bei den Scripten selber, richtig ? `
Nein, im Reiter "Log". -
Das stand nur auf 'WARN' - Hab eben den Javascript Adapter wieder auf info gesetzt und warte auf ein erneutes Vorkommnis …
-
neeeee, Paul, da kommt nix anderes
javascript.0 2018-09-11 16:30:00.040 warn script.js.Homepilot.Szenen.Sonne.Sonnenprogramm_V2: clearTimeout() => not found
Ist doch richtig, dass ich zwei eigenständige Blöcke habe, oder ? Wobei das immer noch nicht den Timer erklären würde und eigentlich ja auch alles funktioniert …
vg
Marc
-
da kommt nix anderes `
Ist ja auch "nur" eine Warnung.