Poolsteuerung für Wärmepumpe

Geflasht oder ungeflasht ...

Moderator: seppy

Antworten
marco_KE
Beiträge: 2
Registriert: 1. Mai 2023 13:56
Answers: 0

Poolsteuerung für Wärmepumpe

Beitrag von marco_KE »

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

Benutzeravatar
udo1toni
Beiträge: 13989
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Poolsteuerung für Wärmepumpe

Beitrag von udo1toni »

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?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

marco_KE
Beiträge: 2
Registriert: 1. Mai 2023 13:56
Answers: 0

Re: Poolsteuerung für Wärmepumpe

Beitrag von marco_KE »

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.

Benutzeravatar
udo1toni
Beiträge: 13989
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Poolsteuerung für Wärmepumpe

Beitrag von udo1toni »

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

Code: Alles auswählen

Switch PoolPumpe "Poolpumpe"
Number:Temperature PoolSoll "Solltemperatur"
Number:Temperature PoolIst "Isttemperatur"
Dann sieht eine passende DSL Rule - erstellt über eine Textdatei - so aus:

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
Das wäre die vollständige Variante. Natürlich geht es auch kürzer:

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
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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten