NEWS
Grundlegendes zu Skripten
-
Hallo,
ich möchte meine Skripte von fhem übernehmen, und jetzt stellen sich mir ein paar Fragen:Bei verlassen der Wohnung sämtliche Lichter ausschalten:
Ein Skript das alle Lichter ausschaltet, oder ist es besser in jedem "Licht-Skript" das Licht auszuschalten?Drei Dimmer für 2 Lampen:
(Schlafzimmer; ein Dimmer bei der Tür für beide Nachttischlampen, jeweils ein Dimmer bei den Lampen)
Ein Skript für alles (damit die Lampen gleichzeitig an/aus gehen), oder besser für jede Lampe ein Skript?If-Verknüpfungen: Was ist Resourcenschonender - oder egal?
if Bedingung1 && Bedingung2 // oder if Bedingung1 if Bedingung2
Skripte richtig triggern:
on( "fhem.0.GB_Home.state", "zwave2.0.Node_059.status", function (obj) { // oder on( "fhem.0.GB_Home.state", "zwave2.0.Node_059.status", (obj) => { // oder wie bei Blokly on({id: [].concat(['fhem.0.GB_Home.state']).concat(['zwave2.0.Node_059.status']), change: "ne"}, async function (obj) { // oder ganz anders?
Wohin mit den Skripten - root, common, global?
Danke,
Jack -
@jack sagte: If-Verknüpfungen: Was ist Resourcenschonender - oder egal?
Das macht kaum Unterschied. Die Version, die man selbst besser lesen kann, verwenden.
@jack sagte in Grundlegendes zu Skripten:
Skripte richtig triggern:
Die ersten beiden Versionen funktionieren nicht. Richtig:
on(["fhem.0.GB_Home.state", "zwave2.0.Node_059.status"], function (obj) { // triggert bei Wertänderung eines DP
@jack sagte in Grundlegendes zu Skripten:
Wohin mit den Skripten - root, common, global?
Unter "common" oder eigene Ordner; keinesfalls unter "global". Unter "global" erstellt man nur Skripte mit häufig verwendeten eigenen Funktionen, die sich aus jedem anderen (nicht globalen) Skript aufrufen lassen, da sie dort bei Skriptstart hinein kopiert werden.
@jack sagte: Drei Dimmer für 2 Lampen:
(Schlafzimmer; ein Dimmer bei der Tür für beide Nachttischlampen, jeweils ein Dimmer bei den Lampen)
Ein Skript für alles (damit die Lampen gleichzeitig an/aus gehen), oder besser für jede Lampe ein Skript?Besser ein Skript, da man sonst leicht den Überblick darüber verliert, wo überall die Dimmer gesteuert werden.
-
Die nächsten Fragen. - Ich konnte das leider nicht an meinen alten Beitrag anhängen...
Javascript:
Sollte man Objekte direkt abfragen, oder einmal in Variablen packen, und dann damit arbeiten?//entweder direkt if (getState(x.y.z).var == true {mach was}; if (getState(x.y.z).var == false {mach was}; //oder mit variablen var VarStatus = getState(x.y.z).var; if (VarStatus == true) {mach was}; if (VarStatus == false) {mach was};
Wenn man ein Licht schaltet; wird es dann immer wieder eingeschaltet?:
if ("ist dunkel genug" && "ist das Licht NICHT an" ) {Licht an}; //oder reicht einfach nur (und ioBroker managed den Rest? if ("ist dunkel genug") {Licht an};
Und ein Frage am Rande:
Ich hab "Fibaro Bewegungsmelder, die eine Warnung im Log auslösen:
'State value to set for "zwave2.0.Node_090.Basic.currentValue" has value "255" greater than max "99"'
wem soll ich das mitteilen? Fibaro, oder dem ZWave-Adapter Autor?Danke für eure Hilfe,
Jack -
@jack sagte: Sollte man Objekte direkt abfragen, oder einmal in Variablen packen, und dann damit arbeiten?
Wenn ein Datenpunktwert mehr als einmal verwendet wird, sollte man eine Variable verwenden. Bei einmaliger Verwendung macht eine zusätzliche Variable keinen Sinn:
if (getState(x.y.z).val) {mach was}; else {mach was anderes};
@jack sagte in Weitere grundsätzliche Fragen:
Wenn man ein Licht schaltet; wird es dann immer wieder eingeschaltet?:
Das hängt davon ab, wie "ist dunkel genug" ermittelt wird.
-
-
@paul53 Hallo paul53, es geht nicht um "dunkel genug", sondern um den Zustand der Lampe, bzw. dem Telegramm Verkehr dazwischen.
if (dunkel) {licht an} //< Setzt mir bei jedem Script Aufruf ERNEUT das "licht an" //damit es nur ein mal passiert: if (dunkel && licht aus) {licht an} //< Setzt nur EINMAL "licht an"
Muss ICH das berücksichtigen, oder macht das IObROKER?
-
@bahnuhr Leider hab ich, als ich das an meinen ursprünglichen Beitrag anhängen wollte einen Fehler erhalten -(Forbiden) und hab (sorry) den Text nicht geändert...
-
@jack sagte in Weitere grundsätzliche Fragen:
Fehler erhalten -(Forbiden)
Mit F5 die Seite neu laden; dann kommt forbidden nicht mehr.
-
@jack sagte in Weitere grundsätzliche Fragen:
(sorry) den Text nicht geändert...
kannst du aber jetzt immer noch tun.
Einfach in #1 ändern -
@jack sagte in Weitere grundsätzliche Fragen:
Muss ICH das berücksichtigen, oder macht das IObROKER?
iob macht genau das was du ihm sagst.
@jack sagte in Weitere grundsätzliche Fragen:
&& "ist das Licht NICHT an"
Diese Prüfung würde ich einziehen. Denn ansonsten wird das Licht eingeschaltet obwohl es schon an ist.
Und sorgt für unnötigen duty cycle -
@jack sagte: Muss ICH das berücksichtigen, oder macht das IObROKER?
Das musst Du berücksichtigen, wenn "dunkel" nicht nur einmal triggert oder innerhalb eines anderen Triggers abgefragt wird.
on(idLux, function(dp) { let dunkel = dp.state.val < 10; if(dunkel && !getState(idLicht).val) setState(idLicht, true); }); // Wenn "dunkel" ein boolescher Datenpunkt ist on(idDunkel, funktion(dp) { if(dp.state.val) setState(idLicht, true); });
-
-
@jack sagte in Weitere grundsätzliche Fragen:
einen Fehler erhalten -(Forbiden)
meistens in Verbindung mit Firefox.
Seite neu laden und wiedrr abdrücken!wo soll ich es hinschieben?
bitte Link! -
@homoran Grüß Dich!
meinst Du:
'State value to set for "zwave2.0.Node_090.Basic.currentValue" has value "255" greater than max "99"'
wem soll ich das mitteilen? Fibaro, oder dem ZWave-Adapter Autor? -
@Homoran ja bitte (hab da was falsch verstanden). wenn, dann zu meinem vorherigen Beitrag: https://forum.iobroker.net/topic/61388/grundlegendes-zu-skripten
Da wollte ich es ja prinzipiell anhängen. -
@jack erledigt!