NEWS
Trigger zum einschalten -nur 1x
-
@ostseeskipper Grundsätzlich reagiert ein Script auf ein Trigger. In Deinem Fall also 3 Trigger. Immer wenn nun ein Wert von den 3 Objekten sich ändert läuft das Script. Ob es dann was macht oder nicht entscheidest Du mit der Programmierung.
Wenn nun die Einspeisung von 1,0 auf 1,1 springt läuft das Script los:
Wenn Einspeisung > 3kW schalte Warmwassererwärmung an.
Wenn Du ihm nicht sagt was er bei Einspeisung < 3 Kw macht das Script einfach nichts. Alternativ könnte man z. B. ein log ausgeben.
Wenn wir jetzt weitergehen wäre es besser zu sagen
wenn Einspeisung > 3kw und Warmwassererwärmung ist noch nicht an schalte sie ein.
Auch hier macht das Script nichts wenn Du ihm nicht sagt was es machen soll wenn die Einspeisung >3kw aber die Warmwassererwärmung bereits an ist -
@ostseeskipper
3 Trigger (Einspeisung, Speicherladung, Sonnenmittag) und nur schalten wenn nicht "on".
Das mit Gewalt in nur einen Trigger zu prügeln halte ich persönlich für suboptimal.
Einspeisung und Speicherladung könnte man noch in einem Trigger zusammenfassen, aber dann müsste man auch wieder ermitteln, wer nun gerade ausgelöst hat. -
@cash
das bekomme ich ja hin, es ist nur so das dann das Script tagsüber jede Sekunde aufgerufen wird nur um festzustellen das nichts zu tun ist.
Geht mir irgendwie gegen den Strich.
Mittags wird ja auch nur 1x ausgelöst, das würde ich in einen zweiten Trigger nehmen wie @Codierknecht gerade empfohlen hat. -
@ostseeskipper
Vorschlag:
-
@Codierknecht
Danke für deine Mühe, ich weiss das wirklich zu schätzen, falls du das noch wo auf hast, magst du bitte im blockly auf JS gehen und das posten.
Blockly ist nicht meinsGibts im ioBroker/JS eigentlich ne Möglichkeit sich eine Funktionsbibliothek zu errichten um von mehreren Scripten aus darauf zuzugreifen?
-
@ostseeskipper
Da haste aber Glück
Da war übrigens noch ein Fehler drin. Habe ich oben korrigiertvar warmwasserOn, value; // Beschreibe diese Funktion … async function einschalten(value) { if (warmwasserOn != value) { warmwasserOn = value; setState("Object ID", value); } } warmwasserOn = getState("ID auswählen").val; schedule({astro: "sunset", shift: 0}, async function () { await einschalten(false); }); schedule({astro: "solarNoon", shift: 0}, async function () { await einschalten(true); }); on({id: "Object ID", change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") >= 2000 && getState("ID auswählen").val >= 30) { await einschalten(true); } }); on({id: "Object ID", change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") >= 5000) { await einschalten(true); } });
-
@ostseeskipper sagte in Trigger zum einschalten -nur 1x:
Gibts im ioBroker/JS eigentlich ne Möglichkeit sich eine Funktionsbibliothek zu errichten um von mehreren Scripten aus darauf zuzugreifen?
Ja - globale Scripte.
Die werden dann aber nicht von den anderen Scripten aufgerufen, sondern in die anderen Scripte "reinkopiert".
Sollte man auch vorsichtig mit sein. Wenn die mal Amok laufen, knallt's so richtig. -
@codierknecht
Ich frag deshalb weil ich die Funktionen zum ein und ausschalten schon programmiert habe, prüfung ob Mensch nicht doch lieber die Automatik aus haben will.
Es gibt bereits in einem anderen Script ein Trigger der zum Sonnenuntergang läuft. Jetzt noch einen 2ten auch zum Sonnenuntergang soll ja nicht so wirklich gemacht werden. Will aber auch die ausschaltfunktion nicht in 2 Scripten haben. -
@ostseeskipper
Ich würde das alles in einem einzigen Script zusammenfassen.
Alles zum gleichen Thema an einem Platz.
Dann braucht's auch keine "globale" Funktion. Die sind wie gesagt mit äußerster Vorsicht zu genießen. -
@codierknecht
Versuch ich, alles zum gleichen Thema an einen Platz,
z.B. alles was beim sonnenuntergang passieren soll. einiges davon soll aber vorher schon durch Mensch oder andere Einflüsse ausgeschaltet werden können.
und die Scripte sollen ja auch nicht zu riesig werden und lesbar bleiben. Werd mir mal überlegen doch einige zusammenzulegen.
Alternativ mach ich shift -10 Minutenschedule({astro: "solarNoon", shift: -10}, async function () {