NEWS
Blockly Script wird nach ca. 3 Tagen beendet
-
Moin,
ich möchte mit IOBroker erfassen, wie hoch der Gasverbrauch in meinem Hause ist und wann der Gasbrenner heizt. Dazu habe ich mit einem TRTC5000 einen SONOFF Basic als Counter konfiguriert. Das funktioniert ganz ordentlich, so dass ich die Gasverbrauchswerte stdl., tgl., mtl. gut im Blick habe. Um den AN / AUS - Zustand des BUDERUS Gasbrenners zu erfassen könnte ich in die Elektronik des Gasbrenners eingreifen und ein entsprechendes Signal auswerten, oder eine nach aussen geführte "Brenner An LED" verwenden. Beides möchte ich nicht. Statt dessen war meine Idee, ganz einfach den bereits funktionierenden Zähler auszuwerten. Den frage ich zur Zeit einmal pro Minute ab. Wenn sich der Zählerstand geändert hat, kann nur der Brenner angewesen sein. Mittels Blockly habe ich mir dazu ein Script erstellt, welches auch funktioniert. Nur leider wird das Script nahezu regelmäßig "disabled". Im protokoll deutet es auf zu viele Statusabfragen pro Minute hin, mit dem Hinweis "Please, check your Script". Wenn ich dass Script wieder "enable" habe ich wieder ca 3 Tage Ruhe.
Ich bin völlig unerfahren im programmieren. Erkennt jemand meinen Fehler?Gruß Dau (das ist mein Familienname, trifft aber ja evtl. zu)
schedule("*/60 * * * * *", async () => { on({ id: 'sonoff.0.DVES_8F8B87.COUNTER_C1' /* DVES_8F8B87 COUNTER C1 */, change: 'gt' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (true) { setState('0_userdata.0.Gasbrenner_AN' /* Gasbrenner_AN */, true, true); } }); on({ id: 'sonoff.0.DVES_8F8B87.COUNTER_C1' /* DVES_8F8B87 COUNTER C1 */, change: 'le' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (true) { setState('0_userdata.0.Gasbrenner_AN' /* Gasbrenner_AN */, false, true); } }); });
MOD-EDIT: Code in code-tags gesetzt!
Auch finde ich die doppelte Abfrage "Falls Objekt" unnötig. Ich dachte mir, dass eine Abfrage unter Verwendung von "Falls - Sonst" genügen müsste. Ein solches Script ändert den Gasbrenner Status nur einmal, und dann nie wieder.
-
grundsätzlich - trigger ("schedule" und "falls object") in trigger funktioniert nieeeee - ganz böse - nie wieder machen !!!
- im schedule sollte * * * * * stehen - das bedeutet jede minute (fünf sterne - die sekunden brauchst du da nicht)
- zu if (falls) : falls etwas "true ist" trifft das inmmer zu - daher kann das weggelassen werden - der if block ist überflüssig)
irgendwie ist mir nicht klar, wie du feststellst, dass der brenner nicht mehr läuft? du weißt doch nur, dass wenn der zähler eins höher ist, der brenner eingeschalten wurde - eine minute später zu fragen, wie der zähler ist, sagt doch nicht aus, dass der brenner aus ist
keine ahnung wie du den gasverbrauch aus dieser info erfasst
-
@liv-in-sky sagte in Blockly Script wird nach ca. 3 Tagen beendet:
grundsätzlich - trigger ("schedule" und "falls object") in trigger funktioniert nieeeee - ganz böse - nie wieder machen !!!
- im schedule sollte * * * * * stehen - das bedeutet jede minute (fünf sterne - die sekunden brauchst du da nicht)
- zu if (falls) : falls etwas "true ist" trifft das inmmer zu - daher kann das weggelassen werden - der if block ist überflüssig)
irgendwie ist mir nicht klar, wie du feststellst, dass der brenner nicht mehr läuft? du weißt doch nur, dass wenn der zähler eins höher ist, der brenner eingeschalten wurde - eine minute später zu fragen, wie der zähler ist, sagt doch nicht aus, dass der brenner aus ist
keine ahnung wie du den gasverbrauch aus dieser info erfasst
Warum überhaupt einen schedule ?
Einfach einen trigger auf den DP des Zählerstands.
Darin .
ein stop timeout
Einen timeout (z.bsp. 15 s), der dir den „Brenner läuft“ auf false stellt.
Einmal „brennner läuft“ auf true stellen -
@asgothian sagte in Blockly Script wird nach ca. 3 Tagen beendet:
Warum überhaupt einen schedule ?
ich habe keinen vorschlag für veränderung gemacht - weil ich nicht weiß, was genau er möchte - sondern nur mal alle offensichtlichen fehler aufgezählt
@asgothian sagte in Blockly Script wird nach ca. 3 Tagen beendet:
Einen timeout (z.bsp. 15 s), der dir den „Brenner läuft“ auf false stellt.
ist natürlich ein richtiger einwand, wenn das script das selbe ergebnis haben soll
-
@liv-in-sky stimmt, ich hätte ihm und nicht dir antworten sollen.
-
Moin,
also, grundsätzlich funktioniert mein "umständliches" Script ja so wie ich es mir vorstelle.
Dass der Gasbrenner aus ist, erkennt das Script an dem Zählerstand, der sich eben nach einer Minute nicht geändert hat. Dabei hoffe ich natürlich, dass immer, wenn Gas strömt, auch die Zündung des Gases erfolgt.
Anbei eine EChart, die ich aus der Brenner AN _ AUS Aussage generiert habe.
Wie schon beschrieben, funktioniert das Script immer nur ca 3 Tage, dann wird es beendet. Ich werde Eure Anregungen bzgl "Trigger", "Schedule" "falls" versuchen zu verstehen und mein Script dann zu ändern.
Danke -
@mhdau
Du willst also anhand des sich (mehr oder weniger konstant) ändernden Zählerstandes erkennen, ob der Brenner läuft oder nicht?Vielleicht nach diesem Prinzip
Erkennt der Zähler-Sensor eine Änderung, setzt er der Wert für
brenner_an
auftrue
und startet einen timeout.
Erfolgt nun innerhalb der Zeitspanne keine erneute Änderung, wird der Wert wieder auffalse
gesetzt.Erfolgt eine Änderung innerhalb der Zeitspanne, wird der timeout gestoppt. Damit bleibt der Wert auf
true
. -
. . . und noch einmal Moin,
glaubt mir, dass ich schon lange auf mein "umständliches Script" gestarrt habe, und keinen der Fehler wahrgenommen habe! Mannomann! Ich habe das Script jetzt vereinfacht und lasse es parallel zu meinem "überladenen laufen.Bisher funktioniert es. Evtl. ist ja auch der Fehler des Script - Abbruchs damit beseitigt,
Ich lasse es Euch dann wissen.Gruß
Dau -
@mhdau sagte in Blockly Script wird nach ca. 3 Tagen beendet:
Ich habe das Script jetzt vereinfacht
Aber immer noch "Trigger in Trigger".
Das funktioniert so nicht!https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps
-
Ich werde mir die Starthilfe noch zu Gemüte führen. Sicher mache ich einiges falsch.
Aber auch das vereinfachte Script funktioniert! Zumindest so, wie ich mir das vorstelle.
Ob der Abbruch wieder erfolgt, muss ich abwarten.Gruß
Dau -
@mhdau sagte in Blockly Script wird nach ca. 3 Tagen beendet:
Aber auch das vereinfachte Script funktioniert
Damit erzeugst Du jede Minute 2 neue Trigger!
Das fliegt Dir über kurz oder lang um die Ohren.@mhdau sagte in Blockly Script wird nach ca. 3 Tagen beendet:
Ob der Abbruch wieder erfolgt, muss ich abwarten.
Es werden noch Wetten angenommen
-
Ich werde gründlich über die Verwendung von Timeout nachdenken müssen!
Immerhin ist dann wohl kein CRON-Job nötig.
Auf jeden Fall Dank für die Denkanstöße. -
@mhdau kurz nochmal erklärt: ein trigger wird im system angemeldet, da iob darauf reagiert - "schedule oder falls object"
dein script erzeugt in 3 tagen 8640 trigger einträge
dein script funktioniert eigentlich nicht, da der schedule zum zeitpunkt x aktiviert wird und nur wenn zum zeitpunkt x auch der "falls object" getriggert wird, funktioniert es - das ist eigentlich fast unmöglich zu erreichen
wenn du aber 1000-ende von triggern hast, ist wahrscheinlich dein system so beschäftigt, dass tatsächlich mal der innere trigger getroffen wird - weil sich alles irgendwie verzögert
auf gut deutsch: du hast glück gehabt, dass dein script überhaupt was macht - dafür aber stürzt es auch nach ein paar tagen ab
-
Vielen Dank für die Mühe, die Ihr Euch mit mir macht! Aber langsam dämmert es mir.
Ich habe den Vorschlag von "Codierknecht" an meine bestehende Konfiguration angepasst. Lediglich die Timeout - Zeit werde ich noch ändern müssen, denn in der Grafik wird "Brenner AN = TRUE" nur für die angegebene Zeit angezeigt.
Die ganze Thematik kam bei mir auf, weil kurz vor unserem Weihnachtsurlaub ein Defekt in meiner Heizung auftrat. Der wurde zwar beseitigt, aber ich traute dem Frieden nicht.
Künftig kann ich jetzt zumindest aus der Ferne meine Heizung, Vorlauftemperatur, etc. überwachen und muss nicht die Verwandtschaft bemühen, um nach dem Rechten zu sehen.
Gruß
M H Dau -
@mhdau sagte in Blockly Script wird nach ca. 3 Tagen beendet:
Lediglich die Timeout - Zeit werde ich noch ändern müssen
Die hängt natürlich davon ab, in welchen Intervallen sich bei eingeschaltetem Brenner der Zählerstand ändert.
Immer vorausgesetzt, ich habe das Vorhaben korrekt interpretiert. -
@codierknecht
Genau, das Rädchen an dem Zähler liefert jeweils nach 10 Litern Durchfluss einen Impuls an den Zähler. Aber der Durchfluss kann ja auch schon z.B. nach 3 Litern stoppen. Das steuert natürlich die Gastherme selbst. 100 % genau wird der Status so nie angezeigt. Mir genügt die zu erreichende Genauigkeit aber.