Schwellwert Schalter
-
- Beiträge: 7
- Registriert: 21. Jan 2021 11:53
Schwellwert Schalter
Hallo,
ich beschäftige mich seit kurzem mit OH3 weil ich nun endlich einen Raspi 4 4GB ergattert habe.
Davor habe ich mit OH 2.5 gearbeitet auf einem Raspi3.
Meine Frage betrifft die Schwellwert Bearbeitung in den Rules.
Wenn mein Item (FroniusSymoInverter_CurrentSolarYield) einen Wert überschreitet soll ein anderes Item / State (PhoenixModbusData400Ladenstarten_ValueasSwitch) auf ON geschaltet werden.
When item changes from state XXX to state XXX - habe ich ausgewählt. Ich denke dass der "state" in FroniusSymoInverter_CurrentSolarYield kein Messwert seien darf sondern nur ON oder OFF. Bin ich da richtig?
Wenn ich einen beliebigen KNX Taster anstelle des FroniusSymoInverter... verwende schaltet das Modbus Register.
Meine Frage, wie wird bei einer Überschreitung ein anderes Item auf ON geschaltet?
Grüße
Ronny
ich beschäftige mich seit kurzem mit OH3 weil ich nun endlich einen Raspi 4 4GB ergattert habe.
Davor habe ich mit OH 2.5 gearbeitet auf einem Raspi3.
Meine Frage betrifft die Schwellwert Bearbeitung in den Rules.
Wenn mein Item (FroniusSymoInverter_CurrentSolarYield) einen Wert überschreitet soll ein anderes Item / State (PhoenixModbusData400Ladenstarten_ValueasSwitch) auf ON geschaltet werden.
When item changes from state XXX to state XXX - habe ich ausgewählt. Ich denke dass der "state" in FroniusSymoInverter_CurrentSolarYield kein Messwert seien darf sondern nur ON oder OFF. Bin ich da richtig?
Wenn ich einen beliebigen KNX Taster anstelle des FroniusSymoInverter... verwende schaltet das Modbus Register.
Meine Frage, wie wird bei einer Überschreitung ein anderes Item auf ON geschaltet?
Grüße
Ronny
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Schwellwert Schalter
Die Rules Engine funktioniert exakt wie schon immer. Du hast nun lediglich (optional) die grafische Oberfläche zum Erstellen der Rules.
Vorweg mein Tipp an dieser Stelle: Wenn Du nicht wirklich heiß darauf bist, von der DSL weg zu kommen, bleib bei den Textdateien.
Nun noch mal etwas genauer: die Rules sind - wie eigentlich alles in openHAB - event driven, also eine Rule wird gestartet, wenn ein Ereignis eintritt. Als Ereignisse stehen viele verschiedene Optionen zur Verfügung, unter anderem Item changed [from] [to]. Das was Du möchtest, wäre allerdings from under to over, einen solchen Trigger gibt es nach wie vor nicht.
Du kannst also lediglich eine Rule schreiben, die bei jeder Änderung auslöst (Item changed, ohne irgendwelche Einschränkungen) und dann innerhalb der Rule prüfen, ob der alte Wert unter Deinem Grenzwert liegt und der neue Wert darüber (und eine der beiden Seiten sollte natürlich den Grenzwert beinhalten, für den Fall, dass zufällig mal exakt der Grenzwert geliefert wird).
Ich bin nicht sehr gut mit der grafischen Variante der Rules vertraut, es kann sein, dass Du solche Grenzwerte über die But Only If Option konfigurieren kannst. Der alte Wert müsste auch dort als previousState zur Verfügung stehen, genau wie der neue Wert als newState verfügbar sein sollte. Ist das nicht der Fall, so musst Du es im Code der Rule prüfen, womit wir an dem Punkt sind, weshalb ich die Verwendung der DSL weiterhin empfehle, insbesondere, wenn Du damit vertraut bist.
Vorweg mein Tipp an dieser Stelle: Wenn Du nicht wirklich heiß darauf bist, von der DSL weg zu kommen, bleib bei den Textdateien.
Nun noch mal etwas genauer: die Rules sind - wie eigentlich alles in openHAB - event driven, also eine Rule wird gestartet, wenn ein Ereignis eintritt. Als Ereignisse stehen viele verschiedene Optionen zur Verfügung, unter anderem Item changed [from] [to]. Das was Du möchtest, wäre allerdings from under to over, einen solchen Trigger gibt es nach wie vor nicht.
Du kannst also lediglich eine Rule schreiben, die bei jeder Änderung auslöst (Item changed, ohne irgendwelche Einschränkungen) und dann innerhalb der Rule prüfen, ob der alte Wert unter Deinem Grenzwert liegt und der neue Wert darüber (und eine der beiden Seiten sollte natürlich den Grenzwert beinhalten, für den Fall, dass zufällig mal exakt der Grenzwert geliefert wird).
Ich bin nicht sehr gut mit der grafischen Variante der Rules vertraut, es kann sein, dass Du solche Grenzwerte über die But Only If Option konfigurieren kannst. Der alte Wert müsste auch dort als previousState zur Verfügung stehen, genau wie der neue Wert als newState verfügbar sein sollte. Ist das nicht der Fall, so musst Du es im Code der Rule prüfen, womit wir an dem Punkt sind, weshalb ich die Verwendung der DSL weiterhin empfehle, insbesondere, wenn Du damit vertraut bist.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 7
- Registriert: 21. Jan 2021 11:53
Re: Schwellwert Schalter
Ok, danke, also back to the roots.
Alles klassisch getippt mit >< und () und [] und "".
Bin davon ausgegangen das die neue Zeit schöne grafische Leckerbissen parat hält.
Ähnlich wie von Step 5 über Step 7 zum TIA Portal.
Kann man definierte Item Messwerte als Logische neue Items festlegen um somit logische Verknüpfungen herzustellen?
Alles klassisch getippt mit >< und () und [] und "".
Bin davon ausgegangen das die neue Zeit schöne grafische Leckerbissen parat hält.
Ähnlich wie von Step 5 über Step 7 zum TIA Portal.
Kann man definierte Item Messwerte als Logische neue Items festlegen um somit logische Verknüpfungen herzustellen?
-
- Beiträge: 7
- Registriert: 21. Jan 2021 11:53
Re: Schwellwert Schalter
Ich versuche es mal damit
https://www.openhab.org/addons/transformations/scale/
https://www.openhab.org/addons/transformations/scale/
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Schwellwert Schalter
Du kannst natürlich Blockly Rules bauen, wenn Dir das lieber ist.
Ehrlich gesagt habe ich nicht den Eindruck, dass dieses grafische Frontend die Arbeit erleichtert, aber ich gehöre auch einer Generation an, die im Kaufhaus auf einem TI-99 den eigenen Namen als Endlostext über den Bildschirm flimmern ließ.
Ehrlich gesagt habe ich nicht den Eindruck, dass dieses grafische Frontend die Arbeit erleichtert, aber ich gehöre auch einer Generation an, die im Kaufhaus auf einem TI-99 den eigenen Namen als Endlostext über den Bildschirm flimmern ließ.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 7
- Registriert: 21. Jan 2021 11:53
Re: Schwellwert Schalter
Ich habe eine andere Lösung gefunden das es erstmal funzt!
Das mit der Scale war nicht nachvollziehbar wo es hängt.
Mich hat das Ereignis orientiert stutzig gemacht. Anders wie bei Siemens SPS.
Ich habe 2 Rules erstellt, einmal zum Wallbox ein und zum ausschalten.
Dazu einen Hilfsschalter um die start Rule zu aktivieren. Als 3. Bedingung But only if... kann man von Items Zahlen Werte eingeben.
Also: Wenn Automatik angewählt, dann Modbus Befehl Laden ON und den Strom-Wert 7A, ABER nur wenn der Wechselrichter eine "Number" überschritten hat.
Das Ausschalten war etwas schwieriger
Wenn Cron timer, dann Modbus Befehl Laden OFF, ABER nur wenn Wechselrichter eine "Number" unterschritten hat.
Das einstellen des Cron war etwas triggi. Stimmt es das man 15 sec einstellen muss als kleinste Zeiteinheit?
Heute Abend hat es theoretisch funktioniert. Ich sehe jedoch Probleme mit dem "Hilfsmerker" item Wallboxautomatik.
Kann man Taster programmieren?
Grüße Ronny
Das mit der Scale war nicht nachvollziehbar wo es hängt.
Mich hat das Ereignis orientiert stutzig gemacht. Anders wie bei Siemens SPS.
Ich habe 2 Rules erstellt, einmal zum Wallbox ein und zum ausschalten.
Dazu einen Hilfsschalter um die start Rule zu aktivieren. Als 3. Bedingung But only if... kann man von Items Zahlen Werte eingeben.
Also: Wenn Automatik angewählt, dann Modbus Befehl Laden ON und den Strom-Wert 7A, ABER nur wenn der Wechselrichter eine "Number" überschritten hat.
Das Ausschalten war etwas schwieriger
Wenn Cron timer, dann Modbus Befehl Laden OFF, ABER nur wenn Wechselrichter eine "Number" unterschritten hat.
Das einstellen des Cron war etwas triggi. Stimmt es das man 15 sec einstellen muss als kleinste Zeiteinheit?
Heute Abend hat es theoretisch funktioniert. Ich sehe jedoch Probleme mit dem "Hilfsmerker" item Wallboxautomatik.
Kann man Taster programmieren?
Grüße Ronny
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Schwellwert Schalter
Eine SPS kennt gewöhnlich auch Ereignisse, z.B. Flanken, ansonsten laufen SPS Programme meines Wissens allgemein zyklisch.
Mit der Art Rules zu erstellen, kratzt Du allenfalls an der Oberfläche.
Du brauchst nur eine Rule.
Alternativ:
Die erste Rule macht das, was Deine zwei Rules machen, nur etwas eleganter, weil nicht streng zyklisch, sondern nur, wenn der Messwert sich ändert.
Die zweite Rule verhält sich anders. Wallbuxautomatik wird hier lediglich alsSchalter verwendet, mit dem man das Starten des Ladevorgangs verhindern kann. Steht der Schalter auf ON, so wird der Ladevorgang gestartet, sobald der Messwert über die 600 steigt, was vermutlich eher sinnvoll ist. Ansonsten müsstest Du immer darauf achten, dass der Messwert über 600 ist, wenn Du den Schalter betätigst.
Den Code kannst Du genauso auch über die UI verwenden, Du musst lediglich den Teil zwischen when und then als Trigger eintragen. Im Code-Teil der UI Rule wird dann nur der Code zwischen then und end eingetragen. Als Code Typ muss hier DSL ausgewählt sein.
Den Du kannst natürlich auch andere Sprachen nutzen, ob nun Blockly, ECMA... Du musst aber den Code dann anders schreiben.
Anhand des Codes kannst Du sehen, dass die Namen Deiner Items mindestens suboptimal sind.
Items sind zu 100% hardwareunabhängig. Entsprechend ist es vollkommen irrelevant, dass CurrentSolarYield vom Fronius Inverter stammt, der Name wird nur fürchterlich lang. Genauso ist es völlig unwichtig, dass die Wallbox von Phoenix stammt oder dass sie per Modbus angebunden ist. Das ist alles unnötiger Ballast, genau wie die Info ValueasSwitch.
WallboxLadestromsenden hingegen ist ein ziemlich sinnvoller Name, auch wenn er noch etwas kürzer sein könnte.
Passend dazu wäre dann WallboxPower sinnvoll für das Starten und Stoppen des Ladevorgangs.
Mit der Art Rules zu erstellen, kratzt Du allenfalls an der Oberfläche.
Du brauchst nur eine Rule.
Code: Alles auswählen
rule "Ladeschaltung, Start nur nach Befehl"
when
Item FroniusSymoInverter_CurrentSolarYield changed or // Messwert ändert sich
Item Wallboxautomatik received command ON // Start gedrückt
then
if(!(FroniusSymoInverter_CurrentSolarYield.state instanceof Number)) // fallse Messwer nicht gültig
return; // abbrechen
val Number nYield = (FroniusSymoInverter_CurrentSolarYield.state as Number).floatValue
if(receivedCommand == ON && nYield > 600 && PhoenixModbusData400Ladenstarten_ValueasSwitch.state != ON) {
PhoenixModbusData400Ladenstarten_ValueasSwitch.sendCommand(ON)
WallboxLadestromsenden.sendCommand(7)
} elss if(nYield <= 250 && PhoenixModbusData400Ladenstarten_ValueasSwitch.state != OFF) {
PhoenixModbusData400Ladenstarten_ValueasSwitch.sendCommand(OFF)
}
end
Code: Alles auswählen
rule "Ladeschaltung, Start nur bei Automatik aktiv"
when
Item FroniusSymoInverter_CurrentSolarYield changed
then
if(!(FroniusSymoInverter_CurrentSolarYield.state instanceof Number))
return;
val Number nYield = (FroniusSymoInverter_CurrentSolarYield.state as Number).floatValue
if(Wallboxautomatik.state == ON && nYield > 600 && PhoenixModbusData400Ladenstarten_ValueasSwitch.state != ON) {
PhoenixModbusData400Ladenstarten_ValueasSwitch.sendCommand(ON)
WallboxLadestromsenden.sendCommand(7)
} elss if(nYield <= 250 && PhoenixModbusData400Ladenstarten_ValueasSwitch.state != OFF) {
PhoenixModbusData400Ladenstarten_ValueasSwitch.sendCommand(OFF)
}
end
Die zweite Rule verhält sich anders. Wallbuxautomatik wird hier lediglich alsSchalter verwendet, mit dem man das Starten des Ladevorgangs verhindern kann. Steht der Schalter auf ON, so wird der Ladevorgang gestartet, sobald der Messwert über die 600 steigt, was vermutlich eher sinnvoll ist. Ansonsten müsstest Du immer darauf achten, dass der Messwert über 600 ist, wenn Du den Schalter betätigst.
Den Code kannst Du genauso auch über die UI verwenden, Du musst lediglich den Teil zwischen when und then als Trigger eintragen. Im Code-Teil der UI Rule wird dann nur der Code zwischen then und end eingetragen. Als Code Typ muss hier DSL ausgewählt sein.
Den Du kannst natürlich auch andere Sprachen nutzen, ob nun Blockly, ECMA... Du musst aber den Code dann anders schreiben.
Anhand des Codes kannst Du sehen, dass die Namen Deiner Items mindestens suboptimal sind.
Items sind zu 100% hardwareunabhängig. Entsprechend ist es vollkommen irrelevant, dass CurrentSolarYield vom Fronius Inverter stammt, der Name wird nur fürchterlich lang. Genauso ist es völlig unwichtig, dass die Wallbox von Phoenix stammt oder dass sie per Modbus angebunden ist. Das ist alles unnötiger Ballast, genau wie die Info ValueasSwitch.
WallboxLadestromsenden hingegen ist ein ziemlich sinnvoller Name, auch wenn er noch etwas kürzer sein könnte.
Passend dazu wäre dann WallboxPower sinnvoll für das Starten und Stoppen des Ladevorgangs.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 7
- Registriert: 21. Jan 2021 11:53
Re: Schwellwert Schalter
Danke für deine Mühe.
Jedoch funktioniert es nicht so einfach wie ich es mir vorstelle.
Wo genau muss ich deinen Geschrieben Code einfügen?
Ich habe schon herum probiert, habe aber nichts passendes gefunden.
Bi den Settings Rules erstellen? und dann wo einfügen? Bei Then und welches Script?
ECMA, Rule DSL ?
Ich habe zwischen durch mit vielen Rules Erfolge verbuchen können.
Ist aber relativ aufwändig.
Eine Rule für laden Starten,
dann eine für Ladestrom senden wenn Wallbox OK ist,
dann bei PV Leistung X Stromstärke Y
Und für jede Stromstärke eine eigen Rule zum erhöhen und dann Rules zum senken
und zu Letzt eine Rule zum laden stoppen.
Jedoch funktioniert es nicht so einfach wie ich es mir vorstelle.
Wo genau muss ich deinen Geschrieben Code einfügen?
Ich habe schon herum probiert, habe aber nichts passendes gefunden.
Bi den Settings Rules erstellen? und dann wo einfügen? Bei Then und welches Script?
ECMA, Rule DSL ?
Ich habe zwischen durch mit vielen Rules Erfolge verbuchen können.
Ist aber relativ aufwändig.
Eine Rule für laden Starten,
dann eine für Ladestrom senden wenn Wallbox OK ist,
dann bei PV Leistung X Stromstärke Y
Und für jede Stromstärke eine eigen Rule zum erhöhen und dann Rules zum senken
und zu Letzt eine Rule zum laden stoppen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Schwellwert Schalter
Ich schreibe die DSL Rules immer als native DSL Rules. Du kannst den Teil zwischen when und then als when-Teil der UI-Rule eintragen, anschließend wählst Du als Action DSL Rule Code aus und trägst dort den Code zwischen then und end ein.
Oder Du legst einfach im GNU/Linux Dateisystem unterhalb /etc/openhab/rules/ eine Datei meine.rules an (oder ein beliebiger Name, muss aber mit .rules enden) und fügst Dort den Code ein. Die Rule taucht anschließend als nur lesbare Rule in der UI auf.
Oder Du legst einfach im GNU/Linux Dateisystem unterhalb /etc/openhab/rules/ eine Datei meine.rules an (oder ein beliebiger Name, muss aber mit .rules enden) und fügst Dort den Code ein. Die Rule taucht anschließend als nur lesbare Rule in der UI auf.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet