[gelöst] readingsGroup Werte auslesen

Begonnen von Kaufe, 07 Januar 2019, 16:37:15

Vorheriges Thema - Nächstes Thema

Kaufe

Hallo zusammen,

für meine Pumpensteuerung habe ich mir ein kleines Skript geschrieben. Dieses soll die Pumpe im Winter von 5:30 bis 21:00 Uhr einschalten.
Nun kam mir die Idee, das ich das gerne erweitern würde abhängig von der Ventil Stellung meiner Heizkörper. Doch dazu müsste ich das GroupReading irgendwie auslesen kann. Vielleicht habt ihr eine Idee dazu?

Hier meine ReadingsGroup mit eine summe aller Positionen mit dem Namen: "ZE.ValvePosition:sum"
define ZE.ValvePosition readingsGroup .*:[vV]alve[pP]osition ZE.ValvePosition:$sum
attr ZE.ValvePosition group Heizung
attr ZE.ValvePosition notime 1
attr ZE.ValvePosition room 03 Heizkörper


jetzt würde ich dieses neue Reading "ZE.ValvePosition:sum" gerne auslesen, bekomme aber keine Werte zurück. Wie muss ich dieses ansprechen, wie kann ich die Werte dann mit ReadingsVal auslesen?
define at_hz_pumpe_on_off at +*00:05:00 {\
my $hz_pumpe_soll = "off";;\
my $hm = sprintf("%02d:%02d", $hour, $min);;\
my $hz_pumpe = ReadingsVal("KE_Heizung_Sw1_PUMPE_HZ","state","off");;\
my $aussen =  ReadingsVal("FHEM_HZ_AU_Garage3","temperature","0");;\
my $ventile_sum = ReadingsVal("ZE.ValvePosition","sum","0");;\
\
# schalte Pumpe nur ein wenn es später ist als:\
# zwischen 5:30 und 21 Uhr\
# es kälter als 15 Grad ist\
if ($hm gt "05:30" && $hm lt "21:00" && $aussen lt 15 ) {\
  $hz_pumpe_soll = "on";;\
} \
Log 1, "at_hz_pumpe_on_off HZ Pumpe soll wäre $hz_pumpe_soll, Uhrzeit: $hm, Aussen: $aussen, Pumpe: $hz_pumpe, Ventile_max: $ventile_max, Ventile_sum: $ventile_sum";;\
\
# Wenn die Pumpe nicht dem soll entspricht, bitte schalten\
if ($hz_pumpe ne $hz_pumpe_soll) {\
  fhem("set KE_Heizung_Sw1_PUMPE_HZ $hz_pumpe_soll");;\
  $hz_pumpe = ReadingsVal("KE_Heizung_Sw1_PUMPE_HZ","state","off");;\
  Log 2, "at_hz_pumpe_on_off HZ Pumpe soll wäre $hz_pumpe_soll, Uhrzeit: $hm, Aussen: $aussen, Pumpe: $hz_pumpe";;\
} \
}
attr at_hz_pumpe_on_off room KE_Heizung


bei diesem Script ist dann $ventile_sum immer 0, obwohl sum mit 41 gerade berechnet wurde. Dem anschein nach ist das Reading nicht offiziell vorhanden, oder ich muss anders drauf zugreifen? Danke schon einmal für die unterstützung.
FHEM 6.0 Raspberry PI-3B-Bullseye| HauptFHEM Server (Graphana,MariaDB)
FHEM 6.0 Raspberry PI-3B-Bullseye| FHEM2FHEM, 1-Wire (Ds9490R  + 50 DS18B20)
FHEM 6.0 Raspberry PI-3B-Bullseye| FHEM2FHEM, 1-Wire (Ds9490R  + 5 DS18B20)
RaspberrMatic 3.61.7.20211218 (ca 65 HM Devices)

Kaufe

Leider konnte ich keine möglichkeit finden, direkt auf den Wert $sum im readingsGroup drauf zu zugreifen.

habe es dadurch mit einer ForEach schleife gelöst.
my $ventile_sum = 0;
my @thermostat = devspec2array("model=HM-CC-RT-DN");
foreach(@thermostat) {
  my $ventil=ReadingsVal($_, "ValvePosition", "101");
  #Log(1,"at_hz_pumpe_on_off - Ventilöffnung: " . $_ . " " . $ventil);
  if ($ventil < 101 ) {
   Log(1,"az_hz_pumpe_on_off - kalkuliere ". $_ ." mit " . $ventil . " zu " . $ventile_sum);
   $ventile_sum=$ventile_sum+$ventil;
  }
}


Für die, die es interessiert hier mein kompletter Code. Dieses kleine Skrip schaltet nun meine Heizkreisspumpe. Davor war diese von der Heizung gesteuert worden, doch die Pumpe lief dann teils um 3 in der früh und mitten im Sommer. Also auch dann, wenn sie eigentlich nicht benötigt wird.

+*00:05:00 {
my $hz_pumpe_soll = "off";
my $hm = sprintf("%02d:%02d", $hour, $min);
my $hz_pumpe = ReadingsVal("KE_Heizung_Sw1_PUMPE_HZ","state","off");
my $aussen =  ReadingsVal("FHEM_HZ_AU_Garage3","temperature","0");
my $ventile_sum = 0;
my @thermostat = devspec2array("model=HM-CC-RT-DN");
foreach(@thermostat) {
  my $ventil=ReadingsVal($_, "ValvePosition", "101");
  #Log(1,"at_hz_pumpe_on_off - Ventilöffnung: " . $_ . " " . $ventil);
  if ($ventil < 101 ) {
   Log(1,"az_hz_pumpe_on_off - kalkuliere ". $_ ." mit " . $ventil . " zu " . $ventile_sum);
   $ventile_sum=$ventile_sum+$ventil;
  }
}

# schalte Pumpe nur ein, wenn es:
# zwischen 5:30 und 21 Uhr ist
# es kälter als 15 Grad ist
# nur wenn alle Ventile in Summe mehr als 10 % geöffnet sind.
if ($hm gt "05:30" && $hm lt "21:00" && $aussen lt 15 && $ventile_sum > 10) {
  $hz_pumpe_soll = "on"
}
Log 1, "at_hz_pumpe_on_off HZ Pumpe soll wäre $hz_pumpe_soll, Uhrzeit: $hm, Aussen: $aussen, Pumpe: $hz_pumpe, ventile_sum: $ventile_sum";

# Wenn die Pumpe nicht dem soll entspricht, bitte schalten
if ($hz_pumpe ne $hz_pumpe_soll) {
  fhem("set KE_Heizung_Sw1_PUMPE_HZ $hz_pumpe_soll");
  $hz_pumpe = ReadingsVal("KE_Heizung_Sw1_PUMPE_HZ","state","off");
  Log 2, "at_hz_pumpe_on_off HZ Pumpe soll wäre $hz_pumpe_soll, Uhrzeit: $hm, Aussen: $aussen, Pumpe: $hz_pumpe";
}
}
FHEM 6.0 Raspberry PI-3B-Bullseye| HauptFHEM Server (Graphana,MariaDB)
FHEM 6.0 Raspberry PI-3B-Bullseye| FHEM2FHEM, 1-Wire (Ds9490R  + 50 DS18B20)
FHEM 6.0 Raspberry PI-3B-Bullseye| FHEM2FHEM, 1-Wire (Ds9490R  + 5 DS18B20)
RaspberrMatic 3.61.7.20211218 (ca 65 HM Devices)