NEWS
Wie kann man ein Programm in ""Falls Objekt(e)" stoppen?
-
Hallo zusammen,
ich habe hier ein Programm, dass durch einen Datenpunkt ein Falls Objekt Trigger auslöst und somit ein darin enthaltenes Programm mit Zeitplan, Pausen, wiederhole bis und timeout startet.
Jetzt kann aber ein anderer Trigger ausgelöst werden und ich möchte keine parallele Abarbeitung, sondern, es soll der erste "Falls Objekt" Programm gestoppt werden.
Wie geht das? -
Hallo zusammen,
ich habe hier ein Programm, dass durch einen Datenpunkt ein Falls Objekt Trigger auslöst und somit ein darin enthaltenes Programm mit Zeitplan, Pausen, wiederhole bis und timeout startet.
Jetzt kann aber ein anderer Trigger ausgelöst werden und ich möchte keine parallele Abarbeitung, sondern, es soll der erste "Falls Objekt" Programm gestoppt werden.
Wie geht das? -
Hallo zusammen,
ich habe hier ein Programm, dass durch einen Datenpunkt ein Falls Objekt Trigger auslöst und somit ein darin enthaltenes Programm mit Zeitplan, Pausen, wiederhole bis und timeout startet.
Jetzt kann aber ein anderer Trigger ausgelöst werden und ich möchte keine parallele Abarbeitung, sondern, es soll der erste "Falls Objekt" Programm gestoppt werden.
Wie geht das?@hg6806 sagte in Wie kann man ein Programm in ""Falls Objekt(e)" stoppen?:
Jetzt kann aber ein anderer Trigger ausgelöst werden und ich möchte keine parallele Abarbeitung, sondern, es soll der erste "Falls Objekt" Programm gestoppt werden.
Wie geht das?Das ist nicht trivial, und hängt davon ab welche Befehle in dem Trigger ausgeführt werden.
Einfacher ist es, die neue Ausführung zu verhindern. Alles was du dafür brauchst ist eine 'blockierende' Variable die gesetzt ist solange das was du 'programm' nennst läuft.
A.
-
Hier ist das Programm. ist recht groß deshalb hoffe ich man kann es erkennen.

-
Hintergrund ist, ich möchte meine Wärmepumpe auf Grund häufiger Abtau Vorgänge kontinuierlich nach x Minuten abschalten und nach x Minuten wieder einschalten.
Nach einem Abtauvorgang soll es ebenfalls neu gestartet werden.
Das Ganze nur unter 4,5°C Außentemperatur.
Im schlimmsten Fall habe ich alle 25 Minuten Abtauvorgänge, die m ir den Warmwasserspeicher "leersaugen". -
Das entscheidende kann man sehen:
- Du musst das
widerhole bismitpausedurch eine timout chain oder ein Intervall ersetzen
Das sollte (meiner Meinung nach) innerhalb des Shedule so aussehen:

Dabei gilt:
DataA ist das rot im Folgenden Screenshot markierte
DataB ist das grün im folgenden Screenshot markierte
das was bei selectID rein muss ergibt sich au sdem was in den Steuer befehlen drin steht. Ich denke das kriegst du hin.
Actions A ist das blau im folgenden Screenshot markierte.
In dieser Konstellation wird, sofern der Shedule erneut zuschlägt der laufende Prozess abgebrochen und das ganze neu gestartet.
Ich hoffe das war gemeint.
Zusätzlich feht vor dem
Zeitplan Schedule1einstop Shedule1Baustein. - Du musst das
-
Hintergrund ist, ich möchte meine Wärmepumpe auf Grund häufiger Abtau Vorgänge kontinuierlich nach x Minuten abschalten und nach x Minuten wieder einschalten.
Nach einem Abtauvorgang soll es ebenfalls neu gestartet werden.
Das Ganze nur unter 4,5°C Außentemperatur.
Im schlimmsten Fall habe ich alle 25 Minuten Abtauvorgänge, die m ir den Warmwasserspeicher "leersaugen".@hg6806 sagte in Wie kann man ein Programm in ""Falls Objekt(e)" stoppen?:
nach x Minuten abschalten und nach x Minuten wieder einschalten.
bist du sicher, dass das
- der Wärmepumpe gut tut
- zu dem gewünschten Erfolg führt
- was soll das sein?
@hg6806 sagte in Wie kann man ein Programm in ""Falls Objekt(e)" stoppen?:
Das Ganze nur unter 4,5°C Außentemperatur
wie hoch ist die Luftfeuchte und der Taupunkt?
je nach den Werten wird durch einfaches abschalten nichts abtauen, schon gar nicht in ausreichend kurzer Zeit.@hg6806 sagte in Wie kann man ein Programm in ""Falls Objekt(e)" stoppen?:
die mir den Warmwasserspeicher "leersaugen".
dazu ist der da, dafür springt wahrscheinlich dann der Heizstab noch nicht an
(möglicherweise ist da trotzdem etwas unglücklich konfiguriert/ausgelegt) -
@asgothian
Danke für den Tipp, habe ich verstanden.
Doch wozu am Anfang der "Clear Intervall" Baustein?
Und wieso fehlt vor dem Zeitplan ein Stop?@homoran
Ich habe das händisch probiert und hilft etwas gangen die häufigen unnötigen Abtauvorgänge.
Erfahrungsgemäß taut die Rotex nicht öfters ab, wenn sie auf mehr Last läuft, könnte sogar seltener sein. Deshalb dieVersuche, sie mit mehr Last laufen zu lassen und dann eine gewisse Zeit abzuschalten.
Ich schalte nicht ganz ab sondern nur auf "Sommer", also wird immer Warmwasser erzeugt, je nach WW Einstellung.
Und schaden tut es ganz sicher nicht, da ich ja nicht "hart" sonder erst abschalte, wenn dem Kompressor aus ist.4,5°C ist mal ein Anfangs- und Erfahrungswert, könnte natürlich auch auf den Taupunkt triggern, den ich auch zur Verfügung habe.
Schön wäre, wenn man von der Rotex einen Wert erhalten könnte, der anzeigt ob ein Abtauvorgang kurz bevorsteht. Dann könnte man direkt abschalten und im besten Fall nur den Lüfter laufen lassen, damit sich das Temperatur-Delta normalisiert. Alles etwas hypothetisch. Habe gerade Zeit für solche "Spielchen". -
@asgothian
Danke für den Tipp, habe ich verstanden.
Doch wozu am Anfang der "Clear Intervall" Baustein?
Und wieso fehlt vor dem Zeitplan ein Stop?@homoran
Ich habe das händisch probiert und hilft etwas gangen die häufigen unnötigen Abtauvorgänge.
Erfahrungsgemäß taut die Rotex nicht öfters ab, wenn sie auf mehr Last läuft, könnte sogar seltener sein. Deshalb dieVersuche, sie mit mehr Last laufen zu lassen und dann eine gewisse Zeit abzuschalten.
Ich schalte nicht ganz ab sondern nur auf "Sommer", also wird immer Warmwasser erzeugt, je nach WW Einstellung.
Und schaden tut es ganz sicher nicht, da ich ja nicht "hart" sonder erst abschalte, wenn dem Kompressor aus ist.4,5°C ist mal ein Anfangs- und Erfahrungswert, könnte natürlich auch auf den Taupunkt triggern, den ich auch zur Verfügung habe.
Schön wäre, wenn man von der Rotex einen Wert erhalten könnte, der anzeigt ob ein Abtauvorgang kurz bevorsteht. Dann könnte man direkt abschalten und im besten Fall nur den Lüfter laufen lassen, damit sich das Temperatur-Delta normalisiert. Alles etwas hypothetisch. Habe gerade Zeit für solche "Spielchen".@hg6806 sagte in Wie kann man ein Programm in ""Falls Objekt(e)" stoppen?:
Doch wozu am Anfang der "Clear Intervall" Baustein?
Und wieso fehlt vor dem Zeitplan ein Stop?Es gibt 2 Situtionen wo das ganze 'neu' gestartet werden kann - wenn der externe Trigger neu kommt, und der Zeitplan neu gesetzt wird.
Wenn der voherige Zeitplan nicht gestoppt oder abgearbeitet wurde wird ohne den
stop Schedule 1Bausten ggf. ein 2. Zeitplan mit der gleichen und/oder einer anderen Zeit gesezt. Das willst du nicht.Die 2. Situation ist wenn der Zeitplan ausgeführt wird während ein vorheriger Zeitplan noch läuft - dann ist das Intervall ggf. noch aktiv. Um das Abzubrechen brauchst du den
clear IntervalBausteinA.
-
Danke!
Sieht ganz gut aus bis auf ein Warning:javascript.0 19:47:30.024 warn
at Object.<anonymous> (script.js.common.Energiesparen.Wärmepumpe_Pause_nach_Abtauen:48:11)Im Javascript ist die Zeile 48:
timeout = setTimeout(async () => {
-
Danke!
Sieht ganz gut aus bis auf ein Warning:javascript.0 19:47:30.024 warn
at Object.<anonymous> (script.js.common.Energiesparen.Wärmepumpe_Pause_nach_Abtauen:48:11)Im Javascript ist die Zeile 48:
timeout = setTimeout(async () => {
-
Intervall2 = setInterval(async () => { if (getState('canbus.0.500.61').val == true) { setState('canbus.0.680.05-set' /* T-Raum Soll1 setzen */, (getState('canbus.0.300.05').val - 0.5)); } else { (() => { if (Intervall2) { clearInterval(Intervall2); Intervall2 = null; }})(); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Status_WP_aktiv' /* Status_WP_aktiv */, false, true); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Status_WP_inaktiv' /* Status_WP_inaktiv */, true, true); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.WP_inaktiv_seit' /* WP_inaktiv_seit */, formatDate(new Date(), 'hh:mm'), true); setState('canbus.0.680.fa0112-set' /* Modus setzen */, 5); Naechstes_Einschalten = (new Date().getTime()); Naechstes_Einschalten = (typeof Naechstes_Einschalten === 'number' ? Naechstes_Einschalten : 0) + getState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Zeit_WP-Pause').val * 60000; setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Naechstes_WP-Einschalten' /* Naechstes_WP-Einschalten */, formatDate(getDateObject(Naechstes_Einschalten), 'hh:mm'), true); timeout = setTimeout(async () => { timeout = null; setState('canbus.0.680.fa0112-set' /* Modus setzen */, 3); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Status_WP_inaktiv' /* Status_WP_inaktiv */, false, true); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Status_WP_aktiv' /* Status_WP_aktiv */, true, true); setState('canbus.0.680.05-set' /* T-Raum Soll1 setzen */, getState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.alter_Soll_Raum_Temp_Wert').val); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Trigger-Timer-Start' /* Trigger-Timer-Start */, true, true); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Trigger-Timer-Start' /* Trigger-Timer-Start */, false, true); }, parseInt((getState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Zeit_WP-Pause').val * 60000))); } }, 15000); }); } else { -
@asgothian
Danke für den Tipp, habe ich verstanden.
Doch wozu am Anfang der "Clear Intervall" Baustein?
Und wieso fehlt vor dem Zeitplan ein Stop?@homoran
Ich habe das händisch probiert und hilft etwas gangen die häufigen unnötigen Abtauvorgänge.
Erfahrungsgemäß taut die Rotex nicht öfters ab, wenn sie auf mehr Last läuft, könnte sogar seltener sein. Deshalb dieVersuche, sie mit mehr Last laufen zu lassen und dann eine gewisse Zeit abzuschalten.
Ich schalte nicht ganz ab sondern nur auf "Sommer", also wird immer Warmwasser erzeugt, je nach WW Einstellung.
Und schaden tut es ganz sicher nicht, da ich ja nicht "hart" sonder erst abschalte, wenn dem Kompressor aus ist.4,5°C ist mal ein Anfangs- und Erfahrungswert, könnte natürlich auch auf den Taupunkt triggern, den ich auch zur Verfügung habe.
Schön wäre, wenn man von der Rotex einen Wert erhalten könnte, der anzeigt ob ein Abtauvorgang kurz bevorsteht. Dann könnte man direkt abschalten und im besten Fall nur den Lüfter laufen lassen, damit sich das Temperatur-Delta normalisiert. Alles etwas hypothetisch. Habe gerade Zeit für solche "Spielchen".@hg6806 sagte in Wie kann man ein Programm in ""Falls Objekt(e)" stoppen?:
Erfahrungsgemäß
siehe https://forum.iobroker.net/post/1321821
wird hier sonst zu sehr OT
-
Intervall2 = setInterval(async () => { if (getState('canbus.0.500.61').val == true) { setState('canbus.0.680.05-set' /* T-Raum Soll1 setzen */, (getState('canbus.0.300.05').val - 0.5)); } else { (() => { if (Intervall2) { clearInterval(Intervall2); Intervall2 = null; }})(); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Status_WP_aktiv' /* Status_WP_aktiv */, false, true); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Status_WP_inaktiv' /* Status_WP_inaktiv */, true, true); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.WP_inaktiv_seit' /* WP_inaktiv_seit */, formatDate(new Date(), 'hh:mm'), true); setState('canbus.0.680.fa0112-set' /* Modus setzen */, 5); Naechstes_Einschalten = (new Date().getTime()); Naechstes_Einschalten = (typeof Naechstes_Einschalten === 'number' ? Naechstes_Einschalten : 0) + getState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Zeit_WP-Pause').val * 60000; setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Naechstes_WP-Einschalten' /* Naechstes_WP-Einschalten */, formatDate(getDateObject(Naechstes_Einschalten), 'hh:mm'), true); timeout = setTimeout(async () => { timeout = null; setState('canbus.0.680.fa0112-set' /* Modus setzen */, 3); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Status_WP_inaktiv' /* Status_WP_inaktiv */, false, true); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Status_WP_aktiv' /* Status_WP_aktiv */, true, true); setState('canbus.0.680.05-set' /* T-Raum Soll1 setzen */, getState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.alter_Soll_Raum_Temp_Wert').val); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Trigger-Timer-Start' /* Trigger-Timer-Start */, true, true); setState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Trigger-Timer-Start' /* Trigger-Timer-Start */, false, true); }, parseInt((getState('0_userdata.0.Rotex_HPSU.Abtauvermeidung.Zeit_WP-Pause').val * 60000))); } }, 15000); }); } else {