NEWS
PWM Steuerung mit Fade
-
@Aphofis sagte:
Also es ist ja nur eine von vier Steuerungen und jede für sich soll ja so lange in einer Schleife laufen bis ein anderer der Datenpunkte auf true gesetzt wird.
Weshalb verwendest Du keine Werteliste mit den 5 Zuständen Aus/Sequenzial/Intervall/Pulse/Wellengang, denn es kann immer nur einer der Zustände aktiv sein und es sollte zwischen zwei aktiven Zuständen immer für mind. 5 s der Zustand "Aus" (0) geschaltet werden.
Die Abfrage bei "Sequenzial" lautet dann:
falls Wert == 1 setze sequenzial auf true
sonst setze sequential auf false -
@paul53
Das ja mal ne coole Funktion!
Bin noch auf einem Geburtstag
Teste ich heute Abend mal und wenn die Strömung für 5 Sek. Inaktiv sind beim Wechsel zwischen den Programmen stört mich das nicht -
@paul53
Also ich teste gerade etwas.
Es gibt die Steuerung Intervall:var wellenauswahl, inc, dec, sequenzial, spannung, delta, Intervall; wellenauswahl = getState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl").val; inc = 1750 / getState("Aqua_Control.0.Tunze_Steuerung.Intervall_Wave_Hold").val; dec = -1750 / getState("Aqua_Control.0.Tunze_Steuerung.Intervall_Wave_Down").val; on({id: wellenauswahl == 2, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; sequenzial = (obj.state ? obj.state.val : ""); if (sequenzial) { spannung = 30; setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); delta = inc; Intervall = setInterval(function () { spannung = (typeof spannung == 'number' ? spannung : 0) + delta; setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); if (spannung >= 100) { delta = dec; } if (spannung <= 30) { delta = inc; if (!sequenzial) { (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})(); } } }, 25); } }); // Sequenzial_Up (ms) on({id: 'Aqua_Control.0.Tunze_Steuerung.Intervall_Wave_Hold', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; inc = 1750 / (obj.state ? obj.state.val : ""); }); // Sequenzial_Down (ms) on({id: 'Aqua_Control.0.Tunze_Steuerung.Intervall_Wave_Down', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; dec = -1750 + (obj.state ? obj.state.val : ""); });
und die Steuerung Sequenzial:
var wellenauswahl, inc, dec, sequenzial, spannung, delta, Intervall; wellenauswahl = getState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl").val; inc = 1750 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Up").val; dec = -1750 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Down").val; on({id: wellenauswahl == 1, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; sequenzial = (obj.state ? obj.state.val : ""); if (sequenzial) { spannung = 30; setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); delta = inc; Intervall = setInterval(function () { spannung = (typeof spannung == 'number' ? spannung : 0) + delta; setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); if (spannung >= 100) { delta = dec; } if (spannung <= 30) { delta = inc; if (!sequenzial) { (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})(); } } }, 25); } }); // Sequenzial_Up (ms) on({id: 'Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Up', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; inc = 1750 / (obj.state ? obj.state.val : ""); }); // Sequenzial_Down (ms) on({id: 'Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Down', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; dec = -1750 + (obj.state ? obj.state.val : ""); });
Dann gibt es diese Datenpunkte:
Die switch Datenpunkte mal bei seite lassen.
Den Datenpunkt Tunze Wellen Auswahl erstellt mit 0:Aus;1:Sequenzial;2:Intervall;3:Pulse;4:Wellengang
den hab ich verknüpft damit je nach dem was in dem Datenpunkt steht soll die jeweilige Steuerung anspringen. Nur Leider will die Zeitsteuerung nicht so wie ich das will.
Sicherlich ist ein Fehler darin das man nur für 10 sek testet.
Zeitsteuerung:var Wellenauswahl, Sequenzial, Intervall, timeout, timeout3, timeout4; Wellenauswahl = getState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl").val; Sequenzial = schedule('59 16 * * *', function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 1); timeout = setTimeout(function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 0); (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})(); }, 10000); setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 0); }); Intervall = schedule('0 17 * * *', function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 2); timeout3 = setTimeout(function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 0); (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})(); }, 10000); timeout4 = setTimeout(function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 0); (function () {if (timeout2) {clearTimeout(timeout2); timeout2 = null;}})(); }, 5000); });
-
@Aphofis sagte:
Dann gibt es diese Datenpunkte:
Der Datenpunkt "Tunze Wellen Auswahl" ist keine Werteliste, denn der Wert einer Werteliste sieht so aus:
Poste mal die RAW-Daten des Datenpunktes in Code Tags.Man kann nicht auf Werte bzw. Vergleiche triggern, sondern nur auf Datenpunkt-IDs ! Der Vergleich muss mit einem falls-Logik-Baustein innerhalb des Triggers erfolgen.
-
@Aphofis
Weshalb schaltest Du das Intervall 2 mal aus (nach 10 s und 5 s) ? Wozu dienen die stop timeout und stop timeout2 ?Sequenzial wird sofort nach dem Einschalten wieder ausgeschalten ?
-
Teste ich nachher! Ich muss erstmal au einen Geburtstag!
-
mann schon wieder
-
@paul53 sagte in PWM Steuerung mit Fade:
@Aphofis
Weshalb schaltest Du das Intervall 2 mal aus (nach 10 s und 5 s) ? Wozu dienen die stop timeout und stop timeout2 ?Sequenzial wird sofort nach dem Einschalten wieder ausgeschalten ?
Du sagtest zwischen den steuerungen müssen 5 sek pause sein und die 10 sek waren nur als Test nachher sollen die einzelnen steuerungen zw 10 bis 30 min laufen.
-
@paul53 sagte in PWM Steuerung mit Fade:
@Aphofis sagte:
Dann gibt es diese Datenpunkte:
Der Datenpunkt "Tunze Wellen Auswahl" ist keine Werteliste, denn der Wert einer Werteliste sieht so aus:
Poste mal die RAW-Daten des Datenpunktes in Code Tags.Man kann nicht auf Werte bzw. Vergleiche triggern, sondern nur auf Datenpunkt-IDs ! Der Vergleich muss mit einem falls-Logik-Baustein innerhalb des Triggers erfolgen.
Hatte jetzt Zeichenkette genommen.
Wo soll denn werteliste sein !?{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1568470775091, "common": { "name": "Tunze Wellen Auswahl", "role": "value", "type": "string", "desc": "0:Aus;1:Sequenzial;2:Intervall;3:Pulse;4:Wellengang", "min": 0, "max": 4, "def": 0, "read": true, "write": true }, "native": {}, "acl": { "object": 1632, "owner": "system.user.iobroker", "ownerGroup": "system.group.administrator", "state": 1632 }, "_id": "Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl", "type": "state" }
-
@Aphofis sagte:
Wo soll denn werteliste sein !?
Nicht "desc", sondern "states" und "type": "number".
"type": "state", "common": { "name": "Tunze Wellen Auswahl", "role": "", "type": "number", "desc": "Auswahl Wellen", "states": "0:Aus;1:Sequenzial;2:Intervall;3:Pulse;4:Wellengang", "min": 0, "max": 4, "def": 0, "read": true, "write": true },
-
@Aphofis sagte:
Hatte jetzt Zeichenkette genommen.
Ich schrieb "Werteliste", die man auswählen kann.
-
@paul53
Warteliste ist also Logikwert!
Ok hab ich geändert und was kommt in Role rein ? -
@Aphofis sagte:
Warteliste ist also Logikwert!
Nein, Werteliste ist "Werteliste" (5. Auswahl von oben) mit type: "number".
@Aphofis sagte in PWM Steuerung mit Fade:
was kommt in Role rein ?
Bin mir nicht sicher, da in den Regeln nicht aufgeführt. Am ehesten "level" oder "level.mode", denn "value" ist für "read only" Datenpunkte.
-
@paul53 sagte in PWM Steuerung mit Fade:
@Aphofis sagte:
Hatte jetzt Zeichenkette genommen.
Ich schrieb "Werteliste", die man auswählen kann.
Ich habe nur diese Werte zur Auswahl
-
@paul53 sagte in PWM Steuerung mit Fade:
@Aphofis sagte:
Warteliste ist also Logikwert!
Nein, Werteliste ist "Werteliste" (5. Auswahl von oben) mit type: "number".
@Aphofis sagte in PWM Steuerung mit Fade:
was kommt in Role rein ?
Bin mir nicht sicher, da in den Regeln nicht aufgeführt. Am ehesten "level" oder "level.mode", denn "value" ist für "read only" Datenpunkte.
Ich habe einiges an verschiedenen Level und nur Level aber Level.mode gibt es nicht
-
Wie bekomme ich denn nun die werteliste
Wie sieht denn bei dir ram aus wenn du den datenpunkt als werteliste erstellst -
@Aphofis sagte:
wenn du den datenpunkt als werteliste erstellst
Habe ich schon gepostet
{ "_id": "javascript.1.test.Wellen", "type": "state", "common": { "name": "Wellen", "role": "", "type": "number", "desc": "Auswahl Wellen", "states": "0:Aus;1:Sequenzial;2:Intervall;3:Pulse;4:Wellengang", "min": 0, "max": 4, "def": 0, "read": true, "write": true }, "native": {}, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1568377978546, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 } }
-
@paul53 sagte in PWM Steuerung mit Fade:
@Aphofis sagte:
wenn du den datenpunkt als werteliste erstellst
Habe ich schon gepostet
{ "_id": "javascript.1.test.Wellen", "type": "state", "common": { "name": "Wellen", "role": "", "type": "number", "desc": "Auswahl Wellen", "states": "0:Aus;1:Sequenzial;2:Intervall;3:Pulse;4:Wellengang", "min": 0, "max": 4, "def": 0, "read": true, "write": true }, "native": {}, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1568377978546, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 } }
Hab jetzt deine RAM genommen und in meinen Datenpunkt eingebunden.
Jetzt habe ich ein Dropdown Menü mit einer 0 in Klammern dahinter. -
@paul53
Also habe jetzt den Datenpunkt so wie beschrieben.
Die Steuerung ist so richtig?var inc, dec, sequenzial, spannung, delta, Intervall; inc = 1750 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Up").val; dec = -1750 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Down").val; on({id: 'Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") == 1) { sequenzial = true; // Aktionen } else { sequenzial = false; } sequenzial = (obj.state ? obj.state.val : ""); if (sequenzial) { spannung = 30; setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); delta = inc; Intervall = setInterval(function () { spannung = (typeof spannung == 'number' ? spannung : 0) + delta; setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); if (spannung >= 100) { delta = dec; } if (spannung <= 30) { delta = inc; if (!sequenzial) { (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})(); } } }, 25); } }); // Sequenzial_Up (ms) on({id: 'Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Up', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; inc = 1750 / (obj.state ? obj.state.val : ""); }); // Sequenzial_Down (ms) on({id: 'Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Down', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; dec = -1750 + (obj.state ? obj.state.val : ""); });
-
Hatte die Steuerung mal getestet, der Channel 1 vom Sonoff Aqua_Wave rennt auch los was ich sehen kann sind auch minus werte dabei und ich kann den Datenpunkt wieder nicht auf aus setzen oder stoppen.
Kann man die Steuerung nicht irgendwie anders programmieren das nicht so viele Rechenschritte sind!? Ich denke der Pi ist damit überfordert oder bzw iobroker.