(Gelöst) Readingsgroup, INTERNALs und ein Device mit eventmap

Begonnen von KernSani, 30 November 2014, 23:37:33

Vorheriges Thema - Nächstes Thema

KernSani

Hallo zusammen,

folgende Situation:

  • Einige meiner Rollläden sind falsch verdrahtet (Fragt nicht warum... Pfusch am Bau) und laufen daher bei "close" hoch und bei "open" runter. Das ist kein Problem, per eventmap habe ich die entsprechenden Rollläden umgemapt
  • Ich habe eine Readingsgroup für dir Rollläden, im reading "state" steht der "echte" Wert, d.h. bei den falsch verdrahteten Rollläden "open", obwohl sie unten sind und umgekehrt
  • im INTERNAL "STATE" steht der gemappte, also der tatsächliche Wert, daher verwende ich den INTERNALS-Wert in meiner Readingsgroup
  • INTERNALS mögen kein longpoll, daher aktualisiert sich die Anzeige meiner Readingsgroup nicht, wenn sich das reading ändert
Nun zu den Fragen:

  • Kann man den INTERNALS irgendwie longpoll beibringen?
  • Gibt es eine andere Möglichkeit event-gemppte redings in der Readingsgroup korrekt darzustellen?

Vielen Dank und eine frohen Advent,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

justme1968

1. nein. das geht nicht

2. nimm state und ändere den wert per valueFormat auf den richtigen.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

KernSani

Hi Andre,

Vielen Dank für die schnelle Antwort. Das Ganze über valueFormat zu machen wollte ich vermeiden, da ich dann - zumindest nach meinem Wissenstand - einzeln pro Devicenamen angeben müsste, ob "close" nun wirklich close ist oder "open" sein sollte.
Aber ich habe gerade eine Andere Idee: Könnte ich das über ein userreading im Device lösen, das ich bei jedem change entsprechend setze und das dann in der readingsgroup abfrage?

Danke,

Grüße,

Oli

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

justme1968

du kannst in der valueFormat routine einfach nachschauen ob in dem device die eventMap gesetzt ist oder nicht und dann entsprechen reagieren. da ist nichts device spezifisches nötig.

userReadings sollte auch gehen.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

KernSani

Andre,

danke für die Hilfe, userreadings ging leider doch nicht (siehe http://forum.fhem.de/index.php?topic=29862). Für mich - als FHEM und PERL-Neuling - war das Ganze dann doch eine größere Herausforderung. Falls es jemanden interessiert hier meine Lösung:

1.) Abfragen ob eventMap für das device gestzt ist. Falls ja dann wird das mapping von "open" nach "close" durchgeführt (und umgekehrt). Falls nein, wird der ursprüngliche "state" zurückgegeben. Gelöst habe ich das Ganze über eine kleine Routine in 99_myUtils.pm:
sub blindsMap($) {
my ($obj) = @_;
  if ($attr{$obj}{"eventMap"} ne '')
   {if (ReadingsVal($obj,"state","") eq "close")
     {return "open"}
    else
     {return "close"}
   }
  else
   {return ReadingsVal($obj,"state","")}
 
}


2.) Ist dann ganz einfach
attr rg_rolladen valueFormat blindsMap($DEVICE)

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...