Rule zum "blinken" eines Relais
-
- Beiträge: 417
- Registriert: 6. Jan 2021 18:05
Rule zum "blinken" eines Relais
Moin zusammen.
Ich möchte ein Relais Schalten, wobei ON und OFF unterschiedliche Laufzeiten haben sollen. Ich sage mal 10 sek an, 20 sek aus. Die soll als ""Endlosschleife"" passieren, solange ein Item Switch auf ON steht...
(dieser Switch soll durch verschiedene Leistungsaufnahme und Temperaturen ""Differenzen"" meiner BWWP und 2ten Warmwasser speicher aktiv gesetzt werden).
Wie könnte ich dies ausführen?
Ich habe Leider keine wirkliche Idee.
vielleicht mit einer "while" schleife und Timern?
Danke und Gruss
Ich möchte ein Relais Schalten, wobei ON und OFF unterschiedliche Laufzeiten haben sollen. Ich sage mal 10 sek an, 20 sek aus. Die soll als ""Endlosschleife"" passieren, solange ein Item Switch auf ON steht...
(dieser Switch soll durch verschiedene Leistungsaufnahme und Temperaturen ""Differenzen"" meiner BWWP und 2ten Warmwasser speicher aktiv gesetzt werden).
Wie könnte ich dies ausführen?
Ich habe Leider keine wirkliche Idee.
vielleicht mit einer "while" schleife und Timern?
Danke und Gruss
Gruss mad-mike
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
- udo1toni
- Beiträge: 14077
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule zum "blinken" eines Relais
Einfach nur einen Timer nehmen
Vollständige Rule:
Natürlich kann man den Code im Timer auch anders gestalten
Es ist noch zu erwähnen, dass gerade ein Relais nicht die beste Option für die Anwendung ist, gewöhnlich sind Relais nur für einige zehntausend Schaltspiele ausgelegt. Hier wäre also ein Triac mit Nulldurchgangserkennung vermutlich die bessere Wahl.
Vollständige Rule:
Code: Alles auswählen
var Timer tEndlos = null // Variable für Timer
val iOnTime = 10 // Einschaltdauer
val iOffTime = 20 // Ausschaltdauer
rule "endlos Timer"
when
Item TimerStart changed // Schalter zum aktivieren/deaktivieren
then
tEndlos?.cancel // timer anhalten, falls er läuft
if(newState != ON) { // falls Schalter nicht ON
return; // fertig
// ab hier war der Schalter auf ON
tEndlos = createTimer(now,[| // Timer anlegen und sofort ausführen
var iTime = if(MyRelais.state != ON) iOnTime else iOffTime // Falls Relais nicht ON, ONzeit setzen, ansonsten OFFzeit
MyRelais.sendCommand(if(MyRelais.state != ON) ON else OFF) // Relais toggeln
tEndlos.reschedule(now.plusSeconds(iTime)) // Timer erneut planen
])
end
Es ist noch zu erwähnen, dass gerade ein Relais nicht die beste Option für die Anwendung ist, gewöhnlich sind Relais nur für einige zehntausend Schaltspiele ausgelegt. Hier wäre also ein Triac mit Nulldurchgangserkennung vermutlich die bessere Wahl.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 417
- Registriert: 6. Jan 2021 18:05
Re: Rule zum "blinken" eines Relais
Moin, danke, werde es gleich Mal ausprobieren.
Das ist ja viel einfacher, wie ich dachte.
Ich grübelte hin und her. anscheinend viel zu kompliziert.
Du dem triac. Kannst du da was empfehlen als Zwischenstecker oder Montage für den Zählerschrank (Hutschiene)?
Die Last sollen keine 20 Watt bei 230 Volt zu schalten sein.
Das ist ja viel einfacher, wie ich dachte.
Ich grübelte hin und her. anscheinend viel zu kompliziert.
Du dem triac. Kannst du da was empfehlen als Zwischenstecker oder Montage für den Zählerschrank (Hutschiene)?
Die Last sollen keine 20 Watt bei 230 Volt zu schalten sein.
Gruss mad-mike
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
- udo1toni
- Beiträge: 14077
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule zum "blinken" eines Relais
Eine direkte Empfehlung habe ich nicht, typisch wäre ein Heizungsaktor. Allerdings weiß ich nicht, ob es die einzeln (also einkanalig) gibt. Dimmer wären hier ebenfalls möglich, wobei man da immer auch auf die Art der Last schauen muss. Den Dimmer nutzt man dann nicht, um die Phase an- oder abzuschneiden, sondern lediglich als elektronischen Schalter.
Ansonsten kannst Du auch nach dem Begriff "SolidStateRelay" suchen, wobei mir auf die Schnelle kein "fertiges" Produkt einfiele.
Ansonsten kannst Du auch nach dem Begriff "SolidStateRelay" suchen, wobei mir auf die Schnelle kein "fertiges" Produkt einfiele.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 417
- Registriert: 6. Jan 2021 18:05
Re: Rule zum "blinken" eines Relais
Ich habe ja ein paar LCN Module hier. Diese haben ein Dimmer und können auch als Schalter verwendet werden. (Je nach Konfiguration)
In der Doku steht z.b.
Nullspannungsschalter oder Phasen schnittDimmer.
Das sollte doch so etwas sein, richtig ?
Dann habe ich sowas sogar noch daheim.
Danke für deine Hilfe.
P.s. in deiner rule ist eine geschweifte Klammer zuviel. (2te Zeile nach then)
In der Doku steht z.b.
Nullspannungsschalter oder Phasen schnittDimmer.
Das sollte doch so etwas sein, richtig ?
Dann habe ich sowas sogar noch daheim.
Danke für deine Hilfe.
P.s. in deiner rule ist eine geschweifte Klammer zuviel. (2te Zeile nach then)
Gruss mad-mike
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
- udo1toni
- Beiträge: 14077
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule zum "blinken" eines Relais
Ja, genau, topp. Nullspannungsschalter ist genau das, was Du willst.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 417
- Registriert: 6. Jan 2021 18:05
Re: Rule zum "blinken" eines Relais
Moin,
Kann man auch einen Timer innerhalb eines Timers Starten?
Oben die Rule läuft. Jetzt soll das ganze noch etwas erweitert werden, weil sich mit der zeit ein paar Punkte gezeigt haben.
Punkt 1: Starten die Rule automatisch: Größer 55°C
Punkt 2 : Rule soll wie oben etwa 10 minuten laufen. (Deswegen hier die frage nach Timer von 10 minuten) jedoch hat nach meinem Versuch nix mehr gestartet)
punkt 3: nach ende der 10 Minuten soll Item dauerhaft on.
Punkt 4: Item soll ende , Wenn: unter 50 Watt...
Aktuell wird das ganze manuell gestartet, taktet 10 Minuten hin, danach stelle ich auf Dauer ON,
Ausschalten tue ich auch manuell.. passt man natürlich nicht jede minute drauf auf
Kann man auch einen Timer innerhalb eines Timers Starten?
Oben die Rule läuft. Jetzt soll das ganze noch etwas erweitert werden, weil sich mit der zeit ein paar Punkte gezeigt haben.
Punkt 1: Starten die Rule automatisch:
Code: Alles auswählen
Item Puffer_T2
Punkt 2 : Rule soll wie oben etwa 10 minuten laufen. (Deswegen hier die frage nach Timer von 10 minuten) jedoch hat nach meinem Versuch nix mehr gestartet)
punkt 3: nach ende der 10 Minuten soll Item dauerhaft on.
Punkt 4: Item soll ende , Wenn:
Code: Alles auswählen
FRITZDECT_210_Leistung
Aktuell wird das ganze manuell gestartet, taktet 10 Minuten hin, danach stelle ich auf Dauer ON,
Ausschalten tue ich auch manuell.. passt man natürlich nicht jede minute drauf auf
Gruss mad-mike
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
- udo1toni
- Beiträge: 14077
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule zum "blinken" eines Relais
Ja, aber nein.
Wie sieht Deine Rule aktuell aus?
Mein Tipp an der Stelle wäre, die Zyklen zu zählen. Nehmen wir an, der Timer schaltet alle (iOnTime + iOffTime) Sekunden zweimal den Zustand um, dann bedeutet das 2 * 10 * 60 / (iOnTime + iOffTime) Schaltvorgänge innerhalb von 10 Minuten.
Du zählst also mit einer Integer Variable mit:
Das Ausschalten des Lichts kann natürlich innerhalb der Rule erledigt werden, wenn newState OFF ist, einfach vor dem return; noch das passende sendCommand(OFF) mit einbauen.
vollständige Rule evtl. so:
Aber grau ist alle Theorie...
Es gäbe natürlich auch diverse andere Möglichkeiten, das zu lösen
Wie sieht Deine Rule aktuell aus?
Mein Tipp an der Stelle wäre, die Zyklen zu zählen. Nehmen wir an, der Timer schaltet alle (iOnTime + iOffTime) Sekunden zweimal den Zustand um, dann bedeutet das 2 * 10 * 60 / (iOnTime + iOffTime) Schaltvorgänge innerhalb von 10 Minuten.
Du zählst also mit einer Integer Variable mit:
Code: Alles auswählen
// globale Variable
var Integer iCountBlink = 0
...
// im Timer ganz vorne
iCountBlink += 1 // Zähler um 1 erhöhen
val Integer iBorder = 2 * 10 * 60 / (iOnTime + iOffTime)
if(iCountBlink > iBorder) {
tEndlos.cancel // Timer abbrechen
MyRelais.sendCommand(ON) // und Licht dauerhaft einschalten
}
...
vollständige Rule evtl. so:
Code: Alles auswählen
var Timer tEndlos = null // Variable für Timer
var Integer iCountBlink = 0 // Zähler für Blinken
val iOnTime = 10 // Einschaltdauer
val iOffTime = 20 // Ausschaltdauer
val Integer iMinTemp = 50 // Einschalttemperatur
val Integer iMaxPower = 50 // Ausschaltleistung
rule "10 Minuten Blinken"
when
Item Puffer_T2 changed or // Temperatur überschritten?
Item FRITZDECT_210_Leistung changed // Leistung unterschritten?
then
val fTemp = if(Puffer_T2.state instanceof Number) // lokale Konstante mit Wert füllen
(Puffer_T2.state as Number).floatValue // falls gültige Zahl, Wert aus Item
else // ansonsten
54 // Wert, der nicht triggert
val fPower = if(FRITZDECT_210_Leistung.state instanceof Number) // enbenso für das zweite Item
(FRITZDECT_210_Leistung.state as Number).floatValue
else
51
if(tEndlos === null && fTemp > iMinTemp) { // Timer läuft nicht und Temperatur überschritten
tEndlos = createTimer(now, [| // Timer anlegen und sofort ausführen
val iCountBorder = 2 * 10 * 60 / (iOffTime + iOnTime) // Periodenanzahl berechnen
iCountBlink += 1 // Schritt zählen
if(iCountBlink > iCountBorder) { // Falls Periodenanzahl überschritten
MyRelais.sendCommand(ON) // Licht einschalten
return; // und nix weiter machen
}
var iTime = if(MyRelais.state != ON) iOnTime else iOffTime // Falls Relais nicht ON, ONzeit setzen, ansonsten OFFzeit
MyRelais.sendCommand(if(MyRelais.state != ON) ON else OFF) // Relais toggeln
tEndlos.reschedule(now.plusSeconds(iTime)) // Timer erneut planen
])
} else if(tEndlos !== null && fPower < iMaxPower) { // Timer existiert und Leistung unterschritten
MyRelais.sendCommand(OFF) // Ausschalten
tEndlos.cancel // Timer abbrechen
tEndlos = null // Zeiger auf null
}
end
Es gäbe natürlich auch diverse andere Möglichkeiten, das zu lösen
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 417
- Registriert: 6. Jan 2021 18:05
Re: Rule zum "blinken" eines Relais
Danke dir...
Habe gestern die Temperaturen zum testen etwas tiefer gesetzt. Lief auch sofort. Die OFF Bedingung habe ich im Test jedoch nicht erreicht.
Weiter unten hast du den part geschrieben:
Kann man hier auch eine ODER abfrage mit einfügen?? Ich meine als beispiel:
Item DHW ist größer Puffer_t2 gleich??
[/code]
sowas z.B.??
Danke und Gruß
Habe gestern die Temperaturen zum testen etwas tiefer gesetzt. Lief auch sofort. Die OFF Bedingung habe ich im Test jedoch nicht erreicht.
Weiter unten hast du den part geschrieben:
Code: Alles auswählen
} else if(tEndlos !== null && fPower < iMaxPower) { // Timer existiert und Leistung unterschritten
Kann man hier auch eine ODER abfrage mit einfügen?? Ich meine als beispiel:
Item DHW ist größer Puffer_t2 gleich
Code: Alles auswählen
sendCommand(OFF)
Code: Alles auswählen
[code] } else if(tEndlos !== null && fPower < iMaxPower) oder DHW > Puffer_T2 { // Timer existiert und Leistung unterschritten
sowas z.B.??
Danke und Gruß
Gruss mad-mike
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.1.2 auf Raspberry Pi 4 Mod. b (8GB)
- udo1toni
- Beiträge: 14077
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule zum "blinken" eines Relais
Ja, sicher:
Die erste Bedingung muss erfüllt sein (Timer existiert), von den beiden anderen Bedingungen muss mindestens eine erfüllt sein.
DHW und Puffer_T2 sollten in diesem Fall allerdings lokale oder globale Variablen sein ansonsten sollten die Itemstatus zunächst sicher in lokale Variablen überführt werden, so wie bei fPower und fTemp schon vorgeführt.
Code: Alles auswählen
else if(tEndlos !== null && (fPower < iMaxPower || DHW > Puffer_T2)) { // Timer existiert und (Leistung unterschritten oder Temperatur erreicht)
DHW und Puffer_T2 sollten in diesem Fall allerdings lokale oder globale Variablen sein ansonsten sollten die Itemstatus zunächst sicher in lokale Variablen überführt werden, so wie bei fPower und fTemp schon vorgeführt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet