foreach element of readingsGroup

Begonnen von Hackstall, 01 Januar 2020, 20:39:51

Vorheriges Thema - Nächstes Thema

Hackstall

Hallo,

es gab bereits einen Thread der sich mit readingsGroup beschäftigte. Dieser beinhaltete genau auch mein Problem wurde bereits auf gelöst gestellt aber
die Kernfrage blieb offen.

Mein Wunsch ist es auf eine readingsGroup ein foreach anzuwenden um dann die jeweiligen Readings zu überprüfen:

Meine Group ist folgende:


#Batteriestatus aller Devices im Raum Zentral anzeigen
define BatterieSV readingsGroup .*:[Bb]atterieValueSV.*
attr BatterieSV DbLogExclude .*
attr BatterieSV group Grp-Batterie
attr BatterieSV notime 1
attr BatterieSV room 1.0.0_Haus
attr BatterieSV valueFormat {return "25" if( $VALUE < 64 );; return "50" if( $VALUE < 128 );; return "75" if( $VALUE < 192 );; return "100"}


Nun möchte ich irgendwie einmal am Tag um 19:00 via "at"
alle Readings auslesen und gegen einen Wert vergleichen um dann eine Aktion einzleiten.

Also irgendwie so:


foreach readingGroup.Element
   my $value = readingsNum(readingGroup.Element);
   if $value < 10 then
      tue etwas
  endif
end loop


Geht das und wenn ja wie?

Danke Andreas

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Hackstall

Danke Otto,

aber in dem Link werden alle Readings eines Devices ermittelt.
Ich benötige viel mer alle Devices eines Readings.

Könnte das hier vielleicht funktionieren:

define a_Battery at *19:00:00 \
   {\
     my @monitored=devspec2array("[Bb]atterienValueSV.*<64");;\
     my $cnt_devs=@monitored;;\
     my $i = 0;;\
     my $msgtext = "";;\
     foreach(@monitored)\
       {\
          $msgtext .= AttrVal($_,"alias",$_);;\
          if ($i == 0)
     {\
               fhem ("gebe $msgtext aus");;\
             }\
       }\
   }


a) Ich bin mir nicht ganz sicher was AttrVal($_,"alias",$_);; macht?
b) kann ich in devspec2arry auch den < operator verwenden?
c) Lautet der Wildcard in devspec2array .*?

Danke Andreas


Otto123

Hi,

ich habe es nicht ganz verstanden, aber ich hätte noch den Artikel https://wiki.fhem.de/wiki/DevelopmentModuleAPI

Generell werden regExp verwendet, das sind keine Wildcards :)
Aber "ja" devspec für "alle" ist .*

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

#4
Was spricht dagegen ein Notify zu nehmen, welches genau auf die gleichen Readings/Events "hört" wie deine readingsGroup um dann da die Werte gesammelt in einen Dummy zu schreiben.
Dann könntest du mit der verlinkten Methode "alle Readings eines Devices" weitermachen... ;)

Also in etwa so (schwer ungetestet ;)  ):


define nSammelWerte notify .*:[Bb]atterieValueSV.* setreading dSammelDummy $NAME $EVENT


Und dann nat. den entsprechenden Dummy anlegen nicht vergessen ;)

Und evtl. statt $EVENT eben einen bestimmten $EVTPART...

EDIT: Dann gibt es für jedes Device welches eben ein solches Event "feuert" einen Eintrag mit "seinem Namen" und dem entsprechenden Wert (gesammelt) im Dummy...

Jaja, ich weiß: warum immer Dummy ;)

P.S.: da es irgendwie mit Batteriestatus zu tun hat, evtl. ja auch das interessant https://forum.fhem.de/index.php/topic,82637.msg747514.html#msg747514 (dort wird es im Prinzip so [ähnlich] gemacht. Da werden auch die Batteriewerte "in gleicher Form" für alle Devices in einen Dummy geschrieben (und eben dabei gleich auf gleiche Form gebracht, egal was die einzelnen Devices sonst so alles "liefern": Spannung, ok/low, 0-100, 0%-100%, ...)...

EDIT: eine readingsGroup hat doch eigentlich gar keine "eigenen" Readings!?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)