Hallo Servus,
ich stell mich mal kurz vor da ich neu hier bin.
Bin Marco 32 aus dem Allgäu.
Beschäftige mich schon länger mit Openhab als Neuland für mich.
Soweit komme ich schritt für schritt immer weiter.
Nun hänge ich seit Tagen irgendwie fest.
Ich möchte folgendes Realisieren:
Geräte Shelly 1 Plus mit 3 Temperaturfühlern.
Mein Wunsch war wie folgt:
Wenn sich Temperatur senkt schaltet ein weiterer Shelly die Wärmepumpe.
Ich habe ein Item angelegt mit Wunschtemperatur
Ein Item mit Temperatur Pool
und ein weiteres Item mit Wärmepumpe.
Ein Rule erstellt mit einem fix wert von unter 20 Grad gemessen vom Fühler schalte mir die Wärmepumpe an, selbes mit anderen Werten mit aus.
Läuft prima.
Nun möchte ich aber die Rule so zum laufen bekommen, das hier mein eingestellter Wunsch wert mit dem des Fühlers verglichen wird und demensprechend die Wärmepumpe so einzuschalten.
Was denkt Ihr darüber ist mein Vorhaben umsetzbar ohne ein Skript?
Vielen Dank an alle schon mal
Poolsteuerung für Wärmepumpe
Moderator: seppy
- udo1toni
- Beiträge: 14057
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Poolsteuerung für Wärmepumpe
Herzlich willkommen im openHAB Forum!
Automation bedeutet immer, dass Du Rules brauchst.
Natürlich könntest Du in den Shellies eine entsprechende Logik einbauen und die Solltemperatur an den Shelly schicken, aber das ändert ja nichts daran, dass eine oder mehrere Rules die Steuerung abwickeln (dann halt welche im Shelly - falls der Shelly selbst keine Scriptsprache anbietet müsstest Du zumindest einen davon noch mit Tasmota flashen).
Du könntest auch versuchen, mit einem JavaScript direkt im Channel zu steuern, aber auch das ist letztlich Code.
Du kannst die Rules per Blockly grafisch erstellen (erzeugt halt Blockly für Dich die JavaScript Scripte...)
Das wird aber alles aufwändig und hässlich, außerdem widerspricht es dem Gedanken von openHAB - also abgesehen von Blockly natürlich.
Die Frage ist also zunächst mal: Warum willst Du keine Rule verwenden?
Automation bedeutet immer, dass Du Rules brauchst.
Natürlich könntest Du in den Shellies eine entsprechende Logik einbauen und die Solltemperatur an den Shelly schicken, aber das ändert ja nichts daran, dass eine oder mehrere Rules die Steuerung abwickeln (dann halt welche im Shelly - falls der Shelly selbst keine Scriptsprache anbietet müsstest Du zumindest einen davon noch mit Tasmota flashen).
Du könntest auch versuchen, mit einem JavaScript direkt im Channel zu steuern, aber auch das ist letztlich Code.
Du kannst die Rules per Blockly grafisch erstellen (erzeugt halt Blockly für Dich die JavaScript Scripte...)
Das wird aber alles aufwändig und hässlich, außerdem widerspricht es dem Gedanken von openHAB - also abgesehen von Blockly natürlich.
Die Frage ist also zunächst mal: Warum willst Du keine Rule verwenden?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 2
- Registriert: 1. Mai 2023 13:56
Re: Poolsteuerung für Wärmepumpe
Servus danke für deine Antwort.
Ich würde hier schon gerne mit Rules arbeiten, komme aber nicht weiter, glaube war etwas doof geschrieben von mir.
Ich hänge an dem Punkt wie ich die Gewünschte Solltemperatur einbinde in die Rule so dass die Rule den Wert den ich einstelle mit dem Temperaturfühler abgleicht, sobald diese eben zu niedrig ist dann die Wärmepumpe einschaltet.
Hoffe ich hab es einigermaßen verständlich geschrieben.
Ich würde hier schon gerne mit Rules arbeiten, komme aber nicht weiter, glaube war etwas doof geschrieben von mir.
Ich hänge an dem Punkt wie ich die Gewünschte Solltemperatur einbinde in die Rule so dass die Rule den Wert den ich einstelle mit dem Temperaturfühler abgleicht, sobald diese eben zu niedrig ist dann die Wärmepumpe einschaltet.
Hoffe ich hab es einigermaßen verständlich geschrieben.
- udo1toni
- Beiträge: 14057
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Poolsteuerung für Wärmepumpe
ok, am einfachsten ist es immer mit konkreten Itemnamen und natürlich Infos, wie die Items definiert wurden
Nehmen wir mal an, Du hast die drei Items
Dann sieht eine passende DSL Rule - erstellt über eine Textdatei - so aus:
Das wäre die vollständige Variante. Natürlich geht es auch kürzer:
Der große Unterschied: die kurze Variante ist kacke.
Warum?
1. Es kann sein, dass eines der Items keinen gültigen Zahlenwert liefert -> null-Pointer Exception
2. Die Pumpe wird im Zweifel ständig ein- und ausgeschaltet, wenn die Temperatur sehr nah am Sollpunkt ist (macht Pumpe kaputt)
3. Egal ob ein Schaltvorgang notwendig ist oder nicht, die Regel sendet bei jeder Temperaturänderung einen Befehl (Ballast im Log)
Die Rule kannst Du auch über die UI anlegen, aber Achtung! Der Code oben wird in dieser Form nur über eine Datei <irgendwas>.rules im Verzeichnis $OPENHAB_CONF/rules/ funktionieren. Wobei <irgendwas> halt der Dateiname ohne die Endung ist.
Wenn Du über die UI arbeiten willst, trägst Du den Namen der Rule (hinter dem Schlüsselwort rule) als Namen der Rule ein. Anschließend legst Du als when-Eigenschaften die Einträge zwischen when und then ein. Als Action trägst Du dann die Codezeilen zwischen (aber ohne diese) den Schlüsselworten then und end ein. Dabei musst Du darauf achten, als Sprache DSL auszuwählen.
Du kannst die Rule natürlich auch mit anderen Script Sprachen erstellen, openHAB bietet ja verschiedene Optionen.
Nehmen wir mal an, Du hast die drei Items
Code: Alles auswählen
Switch PoolPumpe "Poolpumpe"
Number:Temperature PoolSoll "Solltemperatur"
Number:Temperature PoolIst "Isttemperatur"
Code: Alles auswählen
rule "Pool Temperatur"
when
Item PoolSoll changed or
Item PoolIst changed
then
var Number nSoll = 25 // Vorgabe falls Item leer
var Number nIst = 25 // Vorgabe falls Item leer
val Number nHysterese = 1.5 // Hysterese ON/OFF
if(PoolSoll.state instanceof Number) nSoll = (PoolSoll.state as Number).floatValue // falls Item gültig, Wert aus Item
if(PoolIst.state instanceof Number) nIst = (PoolIst.state as Number).floatValue // falls Item gültig, Wert aus Item
var sSoll = PoolPumpe.state // Schaltstellung
if(nIst < nSoll - nHysterese) sSoll = ON // falls zu kalt ON
if(nIst > nSoll) sSoll = OFF // falls zu warm OFF
if(PoolPumpe.state != sSoll) PoolPumpe.sendCommand(sSoll.toString) // Pumpe schalten
end
Code: Alles auswählen
rule "Pool Temperatur"
when
Item PoolSoll changed or
Item PoolIst changed
then
if((PoolSoll.state as Number).floatValue > PoolIst.state as Number).floatValue)
PoolPumpe.sendCommand(ON)
else
PoolPumpe.sendCommand(OFF)
end
Warum?
1. Es kann sein, dass eines der Items keinen gültigen Zahlenwert liefert -> null-Pointer Exception
2. Die Pumpe wird im Zweifel ständig ein- und ausgeschaltet, wenn die Temperatur sehr nah am Sollpunkt ist (macht Pumpe kaputt)
3. Egal ob ein Schaltvorgang notwendig ist oder nicht, die Regel sendet bei jeder Temperaturänderung einen Befehl (Ballast im Log)
Die Rule kannst Du auch über die UI anlegen, aber Achtung! Der Code oben wird in dieser Form nur über eine Datei <irgendwas>.rules im Verzeichnis $OPENHAB_CONF/rules/ funktionieren. Wobei <irgendwas> halt der Dateiname ohne die Endung ist.
Wenn Du über die UI arbeiten willst, trägst Du den Namen der Rule (hinter dem Schlüsselwort rule) als Namen der Rule ein. Anschließend legst Du als when-Eigenschaften die Einträge zwischen when und then ein. Als Action trägst Du dann die Codezeilen zwischen (aber ohne diese) den Schlüsselworten then und end ein. Dabei musst Du darauf achten, als Sprache DSL auszuwählen.
Du kannst die Rule natürlich auch mit anderen Script Sprachen erstellen, openHAB bietet ja verschiedene Optionen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet