Temperaturmittelwert der geöffneten Heizkörperventile

Begonnen von Jewe, 30 Dezember 2020, 23:43:39

Vorheriges Thema - Nächstes Thema

Jewe

Hallo,

einem meiner Heizkreise übermittele ich die Raumtemperatur gemittelt aus mehreren Räumen. Das ist jedoch nicht optimal.
Nun möchte ich die Temperatur aus allen Räumen mitteln in denen das Ventil des Reglers größer 0 ist. Dazu benötige ich die Temperature der Räume und die Gesamtanzahl der Räume. Die Gesamtanzahl habe ich in HK2AnzahlVentile:heizkoerper ermittelt.

Wie bekomme ich nun an die Namen der Regelventile der Heizkörper und wie bekomme ich diese in die benötigte Formel ?

Ich habe im Moment kein Plan wie ich das angehe :-(

Mit diesem DOIF übergebe ich im Moment die Isttemperatur an die Heizung:
defmod HK2TempAverage DOIF ([SELF:state])(set BROETJETEMP Raumtemperatur_HK2 [$SELF:state])
attr HK2TempAverage do always
attr HK2TempAverage room x_Test,Heizung
attr HK2TempAverage state {(sprintf("%.1f",([KZ_Thermostat_Weather:temperature]+[KZ_Heizung_Weather:measured-temp]+[SP_Heizung_Weather:measured-temp]+[BA_Heizung_Weather:measured-temp]+[BU_Thermostat_Weather:temperature])/5))}



Die Anzahl der Heizkörper, die aktuell geöffnet sind ermittele ich mit folgendem DOIF:
defmod HK2AnzahlVentile DOIF ([#"_Clima$":ValvePosition:$_ > 0] > 0)\
(\
    set $SELF heizkoerper [#"_Clima$":ValvePosition:$_ > 0],\
    set $SELF heizbedarf on\
)\
DOELSE\
(\
    set $SELF heizkoerper 0,\
    set $SELF heizbedarf off\
)\

attr HK2AnzahlVentile DbLogExclude .*
attr HK2AnzahlVentile do always
attr HK2AnzahlVentile readingList heizkoerper  heizbedarf
attr HK2AnzahlVentile room Heizung
attr HK2AnzahlVentile stateFormat Heizbedarf heizbedarf (heizkoerper)

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jewe

So, nun in ich endlich dazugekommen hier weiterzumachen. Habe nun ein DOIF_Readings angelegt: valve:([@::"_Clima$":ValvePosition:$_ > 10]) mit diesem bekommen ich die Namen der Regelventile in dem reading valve.
Wie kann ich das nun aber so zerlegen oder auswerten dass ich diese nun in die Formel bekomme ?

z.B.:
{(sprintf("%.1f",([KZ_Thermostat_Weather:temperature]+[KZ_Heizung_Weather:measured-temp]+[SP_Heizung_Weather:measured-temp]+[BA_Heizung_Weather:measured-temp]+[BU_Thermostat_Weather:temperature])/5))}

List vom Device
Internals:
   DEF        ([#"_Clima$":ValvePosition:$_ > 10] > 0)
(
    set $SELF heizkoerper [#"_Clima$":ValvePosition:$_ > 10],
    set $SELF heizbedarf on
)
DOELSE
(
    set $SELF heizkoerper 0,
    set $SELF heizbedarf off
)

   DOIFDEV    ^global$|_Clima$
   FUUID      5feb9125-f33f-9f49-d97b-a2a9a659f7023778
   MODEL      FHEM
   NAME       HK2AnzahlVentile
   NR         726
   NTFY_ORDER 50-HK2AnzahlVentile
   STATE      Heizbedarf on (3)
   TYPE       DOIF
   VERSION    22913 2020-10-04 21:46:02
   DOIF_Readings:
     valve      (::AggregateDoIf($hash,'@::','_Clima$','ValvePosition','$_ > 10'))
   OLDREADINGS:
   READINGS:
     2021-01-03 18:18:34   Device          BA_Heizung_Clima
     2021-01-03 18:18:34   cmd             1
     2021-01-03 18:18:34   cmd_event       BA_Heizung_Clima
     2021-01-03 18:18:34   cmd_nr          1
     2021-01-03 18:18:34   heizbedarf      on
     2021-01-03 18:18:34   heizkoerper     3
     2021-01-03 01:20:23   mode            enabled
     2021-01-03 18:18:34   state           cmd_1
     2021-01-03 18:03:34   valve           BA_Heizung_Clima,BU_Heizung_Clima,DU_Heizung_Clima
   Regex:
     DOIF_Readings:
       :
         valve:
           "_Clima$"  _Clima$
       HK2AnzahlVentile:
     accu:
     cond:
       :
         0:
           "_Clima$"  _Clima$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::AggregateDoIf($hash,'#','_Clima$','ValvePosition','$_ > 10') > 0
   do:
     0:
       0               set HK2AnzahlVentile heizkoerper [#"_Clima$":ValvePosition:$_ > 10],     set HK2AnzahlVentile heizbedarf on 
     1:
       0               set HK2AnzahlVentile heizkoerper 0,     set HK2AnzahlVentile heizbedarf off 
   helper:
     DEVFILTER  ^global$|_Clima$
     NOTIFYDEV  global|.*_Clima
     event      ValvePosition: 43,boostTime: -,controlMode: auto,desired-temp: 22.0,measured-temp: 22.8,partyEnd: -,partyStart: -,partyTemp: -,T: 22.8 desired: 22.0 valve: 43
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   BA_Heizung_Clima
     timerevent ValvePosition: 43,boostTime: -,controlMode: auto,desired-temp: 22.0,measured-temp: 22.8,partyEnd: -,partyStart: -,partyTemp: -,T: 22.8 desired: 22.0 valve: 43
     triggerDev BA_Heizung_Clima
     DOIF_eventa:
       cmd_nr: 1
       cmd: 1
       cmd_event: BA_Heizung_Clima
       cmd_1
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: BA_Heizung_Clima
       state: cmd_1
     timerevents:
       ValvePosition: 43
       boostTime: -
       controlMode: auto
       desired-temp: 22.0
       measured-temp: 22.8
       partyEnd: -
       partyStart: -
       partyTemp: -
       T: 22.8 desired: 22.0 valve: 43
     timereventsState:
       ValvePosition: 43
       boostTime: -
       controlMode: auto
       desired-temp: 22.0
       measured-temp: 22.8
       partyEnd: -
       partyStart: -
       partyTemp: -
       state: T: 22.8 desired: 22.0 valve: 43
     triggerEvents:
       ValvePosition: 43
       boostTime: -
       controlMode: auto
       desired-temp: 22.0
       measured-temp: 22.8
       partyEnd: -
       partyStart: -
       partyTemp: -
       T: 22.8 desired: 22.0 valve: 43
     triggerEventsState:
       ValvePosition: 43
       boostTime: -
       controlMode: auto
       desired-temp: 22.0
       measured-temp: 22.8
       partyEnd: -
       partyStart: -
       partyTemp: -
       state: T: 22.8 desired: 22.0 valve: 43
   internals:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   DOIF_Readings valve:([@::"_Clima$":ValvePosition:$_ > 10])
   DbLogExclude .*
   do         always
   readingList heizkoerper  heizbedarf
   room       Heizung
   stateFormat Heizbedarf heizbedarf (heizkoerper)

Damian

statt:
{(sprintf("%.1f",([KZ_Thermostat_Weather:temperature]+[KZ_Heizung_Weather:measured-temp]+[SP_Heizung_Weather:measured-temp]+[BA_Heizung_Weather:measured-temp]+[BU_Thermostat_Weather:temperature])/5))}

{(sprintf("%.1f",[#average:"_Clima$":ValvePosition:$_ > 10])}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jewe

Hallo Damian,

damit bekomme ich den Mittelwert der Regelventile. Ich benötige jedoch die Mitteltemperatur der offenen Ventile (>10).
Ich habe dann das daraus gemacht:
([#average:"_Clima$":ValvePosition:$_ > 10])  (set HK2Temp4 {(sprintf("%.1f",[#average:"_Clima$":measured-temp]))})
Das funktioniert jedoch so nicht, da der Mittelwert der Temperaturen von alle Regelvenmtilen ist

Dann habe ich es so probiert,
([#average:"_Clima$":ValvePosition:$_ > 10])  (set HK2Temp4 {(sprintf("%.1f",[#sum:"_Clima$":measured-temp] / [HK2AnzahlVentile:heizkoerper]))})
Da sollte nun "nur" noch die richtigen Werte der measured-temp genommen werden.

Ich schaffe es nicht, die geöffneten Ventile und die Temperaturen dazu zu veschachteln.

Gruß, Jens

Damian

Dann eben:

set HK2Temp4 {(sprintf("%.1f",[#average:"_Clima$":measured-temp:ReadingsVal($name,"ValvePosition",0) > 10]))}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF