Autor Thema: [gelöst] readingsGroup Werte auslesen  (Gelesen 397 mal)

Offline Kaufe

  • New Member
  • *
  • Beiträge: 42
[gelöst] readingsGroup Werte auslesen
« am: 07 Januar 2019, 16:37:15 »
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.
« Letzte Änderung: 14 Januar 2019, 08:33:40 von Kaufe »
FHEM 5.7 auf Raspberry Pi - 3B - Jessie-4.4.27-v7+ | CUL868 CC1101 - USB - Lite module - V3 FW 1.66, 1-Wire DS18B20 via 2 * Ds9490R
FHEM 5.7 auf Raspberry PI - 3B - Jessie-4.4.27-v7+ | FHEM2FHEM, Pumpen + Brenner werden über GPIO ausgelesen

Offline Kaufe

  • New Member
  • *
  • Beiträge: 42
Antw:readingsGroup Werte auslesen
« Antwort #1 am: 14 Januar 2019, 08:32:56 »
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 5.7 auf Raspberry Pi - 3B - Jessie-4.4.27-v7+ | CUL868 CC1101 - USB - Lite module - V3 FW 1.66, 1-Wire DS18B20 via 2 * Ds9490R
FHEM 5.7 auf Raspberry PI - 3B - Jessie-4.4.27-v7+ | FHEM2FHEM, Pumpen + Brenner werden über GPIO ausgelesen