Heizungssteuerung (Sollwertverschiebung)

Begonnen von obi, 07 Dezember 2017, 22:33:37

Vorheriges Thema - Nächstes Thema

obi

Hallo,

ich möchte bei meinen KNX Heizungsaktor noch die Sollwertverschiebung implementiere.
Ich möchte hierfür kein zusätzloches Notify, Dummy, Readingsgroup usw. anlegen sondern am liebsten alles direkt im KNX Device erledigen.
Ich habe schon die Anzeige der Werte und Betriebsartenumschaltung fertig.

Hier mein Code (nicht wurdern, ich habe erst mal alle Gruppenadressen welche man später mal verwenden könnte hinzugefügt):
defmod H_E05_01 KNX 8/3/20:dpt1.003:Sperren 8/3/21:dpt9.001:Ist-Wert 8/3/22:dpt9.001:Soll-Wert 8/3/23:dpt9.001:RM_Soll-Wert 8/3/24:dpt9.001:Soll-Wert-Verschiebung 8/3/25:dpt5:Betriebsart 8/3/26:dpt5:RM_Betriebsart 8/3/27:dpt1.001:Betriebsart_Komfort 8/3/28:dpt1.001:Betriebsart_Nacht 8/3/29:dpt1.001:Betriebsart_Frostschutz 8/3/30:dpt5.001:RM_Stellwert 8/3/31:dpt9.001:RM_Status 8/3/32:dpt1.005:RM_Frostalarm 8/3/33:dpt1.005:RM_Hitzealarm 8/3/34:dpt16.000:RM_Diagnose
attr H_E05_01 IODev SY_KNX
attr H_E05_01 eventMap /on g1:Sperren/off g1:Freigeben/value 1 g6:Komfort/value 2 g6:Standby/value 3 g6:Nacht/value 4 g6:Frostschutz
attr H_E05_01 stateCmd {ReadingsVal($name,'soll-wert-verschiebung-get','')}
attr H_E05_01 stateFormat {'Ist: '.ReadingsVal($name,'ist-wert-get','').' Soll: '.ReadingsVal($name,'rm_soll-wert-get','').' Ventil: '.ReadingsVal($name,'rm_stellwert-get','').'<br>Betriebsart: '.ReadingsVal($name,'betriebsart_name','')}
attr H_E05_01 userReadings betriebsart_name { ReadingsVal($name,'rm_betriebsart-get','') == 1 ? 'Komfort' : ReadingsVal($name,'rm_betriebsart-get','') == 2 ? 'Standby' : ReadingsVal($name,'rm_betriebsart-get','') == 3 ? 'Nacht' : ReadingsVal($name,'rm_betriebsart-get','') == 4 ? 'Frostschutz' : '' }
attr H_E05_01 webCmd Komfort:Standby:Nacht:Frostschutz


Hat jemand eine Idee wie ich die Sollwertschiebung machen könnte? Eine Setlist oder so wäre schön. Ist aber im KNX Modul nicht implementiert.

Viele Grüße Obi

erwin

Hi Obi,
versuchs mal so:
defmod Kinderzimmer1_Temperatur KNX 5/0/52:dpt9:setpoint 5/0/53:dpt9:setpointist 5/0/50:dpt9 5/0/51:dpt5.001:valvepos
attr Kinderzimmer1_Temperatur IODev myKNXD
attr Kinderzimmer1_Temperatur comment GAs: SollTemp-schreiben, SollThemperatur-lesen, IstTemp, ValvePosition\
Setpoint:5,18,19.00,20.00,21.00,21.50,22.00,22.50,23.00,23.50,24.00,24.50,25.00,26.00,27.00,28.00,30.00\
{ dev=>{"^setpointist-get:.(.*)"=>'Setpoint: $1'}, usr=>{"^Setpoint(.*)"=>'value $1 g1'}, fw=>{"^Setpoint(.*)"=>'Setpoint: $1'} }
attr Kinderzimmer1_Temperatur eventMap { usr=>{"setpointist-get.(.*)"=>'value $1 g1'}, fw=>{"setpointist-get.(.*)"=>'setpointist-get'} }
attr Kinderzimmer1_Temperatur group Thermostat
attr Kinderzimmer1_Temperatur room KNX
attr Kinderzimmer1_Temperatur stateCmd {$state = ReadingsVal($name,"setpointist-get",18)}
attr Kinderzimmer1_Temperatur stateFormat getG3 °C, Ventil: valvepos-get
attr Kinderzimmer1_Temperatur webCmd setpointist-get
attr Kinderzimmer1_Temperatur webCmdLabel SollTemp
attr Kinderzimmer1_Temperatur widgetOverride setpointist-get:5.00,10.00,18.00,19.00,20.00,20.50,21.00,21.50,22.00,22.50,23.00,23.50,24.00,24.50,25.00,26.00,27.00,28.00,30.00

Das ist zwar für einen Raumthermostat, der dann das KNX-Ventil ansteuert, aber nicht unähnlich deiner Problemstellung...
Was welche Ag ist, findest du im Attribut comment!
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

Alveole

Hallo,
Mit einer ähnlichen Problematik hatte ich mich auch einmal beschäftigt, es aber dann nur mit notify und dummy hinbekommen.

Warum möchtest Du das nicht?
Welche Raumthermostate verwendest Du?

Grüße Rene

obi

Hallo erwin,

danke für die Hilfe.
Mit widgetOverride und dem entsprechendem eventMap habe ich mein Problem/Anforderung lösen können.
Nun kann ich per DropDown-Menü meinen Sollwert verschieben.

Mein Heizungsaktor (MDT AKH-0800.02) erwartet keinen Sollwert sonden die Abweichung (+/-) vom eingestellten Sollwert im Aktor.
Jetzt würde ich gerne per DropDown-Menü meinen Sollwert z.B. 21C auswählen. Dann muss im eventMap 20-21 = 1 gerechnet werden und dies dann zu der GA senden. Ich weis nicht wie ich dies machen kann da ich Anfänger mit Fhem und Perl bin.
Kann mir hierzu noch jemand eine kurze Hilfestellung geben?
Müsste irgendwie so gehen (nur zur veranschaulichtung):
usr=>{"setpointist-get.(.*)"=>'value '.return 20-$1.' g1'}

@Alveole:
Ich fände es halt übersichtlicher wenn ich alles in einem Device erledigen kann.

Ich verwende als Aktor MDT AKH-0800.02 und als Raumcontroller MDT Glastaster II Smart


Grüße Obi

JoeALLb

Hallo Obi,

poste doch mal deine aktuelle Lösung,. dann kann ich sie mir einspielen unt ansehen...

Joe


Zitat von: obi am 09 Dezember 2017, 19:23:20

@Alveole:
Ich fände es halt übersichtlicher wenn ich alles in einem Device erledigen kann.

Das geht mir gleich!
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

docm

Hallo obi,
vielleicht hilft dir folgendes:
Der MDT Heizungsaktor versteht nicht nur Sollwertverschiebung (Kommunikationsobjekt z.B. 8 für Kanal A), sondern auch Sollwert-Komfort (Kommunikationsobjekt 7 für Kanal A, Format dpt 9.001).
Da kannst du den Sollwert direkt einstellen.

Viele Grüße
Andreas

obi

Zitat von: docm am 11 Dezember 2017, 21:11:20
Hallo obi,
vielleicht hilft dir folgendes:
Der MDT Heizungsaktor versteht nicht nur Sollwertverschiebung (Kommunikationsobjekt z.B. 8 für Kanal A), sondern auch Sollwert-Komfort (Kommunikationsobjekt 7 für Kanal A, Format dpt 9.001).
Da kannst du den Sollwert direkt einstellen.

Viele Grüße
Andreas

Hallo Andreas,

das ist mir bekannt. Aber ich möchte den Sollwert-Komfort nicht ändern, da sich sonst die Sollwerte für die anderen Betriebsarten (welche ich im Aktor eingestellt habe und davon Abhängig sind) mit verändern. Mir fehlt jetzt nur noch diese blöde Rechnung mit Variablen im eventMap. Die Kombination zwischen Perl und Fehm Befehle ist mir unklar wie ich dies da machen muss.

Meine aktuelle Konfig poste ich später wenn ich zuhause bin und Zugriff auf mein Fhem habe.

obi

Hier mal meine aktuelle Konfig:

defmod H_E05_01 KNX 8/3/20:dpt1.003:Sperren 8/3/21:dpt9.001:Ist-Wert 8/3/22:dpt9.001:Soll-Wert 8/3/23:dpt9.001:RM_Soll-Wert 8/3/24:dpt9.001:Soll-Wert-Verschiebung 8/3/25:dpt5:Betriebsart 8/3/26:dpt5:RM_Betriebsart 8/3/27:dpt1.001:Betriebsart_Komfort 8/3/28:dpt1.001:Betriebsart_Nacht 8/3/29:dpt1.001:Betriebsart_Frostschutz 8/3/30:dpt5.001:RM_Stellwert 8/3/31:dpt9.001:RM_Status 8/3/32:dpt1.005:RM_Frostalarm 8/3/33:dpt1.005:RM_Hitzealarm 8/3/34:dpt16.000:RM_Diagnose
attr H_E05_01 IODev SY_KNX
attr H_E05_01 eventMap { usr=>{"on"=>'value 1 g6', "off"=>'value 4 g6', "Sperren"=>'value 1 g1', "Freigeben"=>'value 0 g1', "Komfort"=>'value 1 g6', "Standby"=>'value 2 g6', "Nacht"=>'value 3 g6', "Frostschutz"=>'value 4 g6', "soll-wert-verschiebung-get.(.*)"=>'value $1 g5'}, fw=>{"soll-wert-verschiebung-get.(.*)"=>'soll-wert-verschiebung-get'} }
attr H_E05_01 room KNX
attr H_E05_01 stateCmd {ReadingsVal($name,'soll-wert-verschiebung-get','')}
attr H_E05_01 stateFormat {'Ist: '.ReadingsVal($name,'ist-wert-get','').' Soll: '.ReadingsVal($name,'rm_soll-wert-get','').' Ventil: '.ReadingsVal($name,'rm_stellwert-get','').'<br>Betriebsart: '.ReadingsVal($name,'betriebsart_name','')}
attr H_E05_01 userReadings betriebsart_name { ReadingsVal($name,'rm_betriebsart-get','') == 1 ? 'Komfort' : ReadingsVal($name,'rm_betriebsart-get','') == 2 ? 'Standby' : ReadingsVal($name,'rm_betriebsart-get','') == 3 ? 'Nacht' : ReadingsVal($name,'rm_betriebsart-get','') == 4 ? 'Frostschutz' : '' }
attr H_E05_01 webCmd soll-wert-verschiebung-get:Komfort:Standby:Nacht:Frostschutz
attr H_E05_01 widgetOverride soll-wert-verschiebung-get:-10.00,-9.00,-8.00,-7.00,-6.00,-5.00,-4.50,-4.00,-3.50,-3.00,-2.50,-2.00,-1.50,-1.00,-0.50,0.00,0.50,1.00,1.50,2.00,2.50,3.00,3.50,4.00,4.50,5.00,6.00,7.00,8.00,9.00,10.00

docm

Hallo obi,
hast du inzwischen eine Lösung gefunden? Ich arbeite gerade an einem ähnlichen Thema und hätte ein paar Ideen.
Viele Grüße
Andreas

obi

Hallo Andreas,

ich habe noch keine Lösung (hatte auch keine Zeit daran weiter zu arbeiten).
Ich verstehe nicht wie ich in folgendem EventMap die Berechnung/Perl-Code hinbekomme:
usr=>{"setpointist-get.(.*)"=>'value '.return $1-20.' g1'}
Damit soll der Wert aus dem Regex $1 - 20 gerechnet werden. Ist dies überhaupt an dieser Stelle möglich?
Im Eventmap ist das jetzt ja eine spezielle Kombination von Fhem und Perl Code. In der Doku konnte ich diesbezüglich nichts weiters finden.

Ich bin gerade noch an einem anderen Thema drann was mir momentan wichtiger ist: Steuerung der Squeezebox/PiCorePlayer mit dem MDT Glastaster 2 Smart
Eigentlich habe ich noch diverse Sachen mit Fhem zu erledigen bis dann alles mal eingebunden und konfiguriert ist. Fhem ist sehr mächtig aber auch kompliziert zu konfiguriere und man muss sich viel zusammensuchen.

VG
Obi

docm

Hallo obi,

das kannst du mit

usr=>{"setpointist-get.(.*)"=>'".sprintf("value %i g1",$1-20)."'}

erreichen. Bitte auf die genaue Notation achten.

Die andere Frage ist, ob diese einfache Funktion

Verschiebung = Wunschtemperatur - 20

das richtige Verhalten liefert.

Verwendest du das 1Byte oder das 2Byte Objekt der Sollwertverschiebung? Ich habe leider noch keinen MDT Heizungsaktor live vor mir, aber wenn die Doku Recht hat, verhalten sich beide unterschiedlich.

Viele Grüße
Andreas

obi

Hallo Andreas,

danke für die Hilfe. Hiermit funktioniert es wie gewünscht.
Ich verwende die 2 Byte Sollwertverschiebung