[Workarround] userreadings und $EVENT funktioniert nicht?

Begonnen von Tobias, 11 Juli 2016, 08:07:22

Vorheriges Thema - Nächstes Thema

Tobias

Hi,
ich habe ein userreading:set SWAP_0C userReadings Dummy:0D.0-Gruppe_.* {SWAP_WindowStateSensor("$NAME", "$EVENT")}
dieses soll auf folgende Events reagieren:2016-07-11 08:03:52 SWAP SWAP_0C 0D.0-Gruppe_1: 02
2016-07-11 08:03:52 SWAP SWAP_0C 0D.1-Gruppe_2: 01
2016-07-11 08:03:52 SWAP SWAP_0C 0D.2-Gruppe_3: 00
2016-07-11 08:03:52 SWAP SWAP_0C 0D.3-Gruppe_4: 00
2016-07-11 08:03:52 SWAP SWAP_0C 0D.4-Gruppe_5: 00
2016-07-11 08:03:52 SWAP SWAP_0C 0D.5-Gruppe_6: 00
2016-07-11 08:03:52 SWAP SWAP_0C 0D.6-Gruppe_7: 00


Problem ist nun, das ich es nicht hinbekomme, das Event meiner Funktion zu übergeben, weder $EVTPART0, noch $EVTPART1 noch $EVENT selbst.
Ich bekomme folgende Fehlermeldung:2016-07-11 08:03:52 SWAP SWAP_0C Dummy: Error evaluating SWAP_0C userReading Dummy: Global symbol "$EVENT" requires explicit package name at (eval 508414) line 1.

Kann mal bitte jemand das Brett vor meinem Kopf entfernen?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

rudolfkoenig

Ich dachte userreadings setzt man mit setreading.
Und {} wird in einem set nicht ausgewertet, es sei denn, man verwenden {(...)} (siehe auch http://fhem.de/commandref.html#set)

Tobias

Hi Rudi,
userReadings gehört IMHO ja in die readingFNattributes.
Auch wenn ich den Prozeduraufruf in Klammer setze kommt derselbe Fehler :(
$NAME oder $name wird erkannt, aber $EVENT nicht :(
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

dev0

Zitat von: Tobias am 11 Juli 2016, 08:07:22
Problem ist nun, das ich es nicht hinbekomme, das Event meiner Funktion zu übergeben, weder $EVTPART0, noch $EVTPART1 noch $EVENT selbst.
Es ist auch nirgends dokumentiert, dass ein userReading mit $EVENT... funktioniert. Dein gesuchtes Event ist beispielsweise ein Reading. Hier wird "onState" auf 0 oder 1 gesetzt, wenn actuator...

attr ST_RTR userReadings onState:actuator:.* {(ReadingsVal($name,"actuator","0")>0?1:0)}

Tobias

#4
@Rudi: Wäre es denn ein Problem auch $EVENT und $EVTPARTx für userReadings verfügbar zu machen?
Bei meiner Anforderung müsste ich jetzt 7 mal dasselbe Userreading schreiben. Stattdessen wollte ich es nur einmal machen, die aufgerufene Prozedur ermittelt selbst aber zu welchem Reading der Call gehört

Die Prozedur soll folgende sein:

sub
SWAP_WindowStateSensor($$$) {
  my ($device, $reading, $value) = @_;
  my $state;

  $state = "closed" if ($value == "00");
  $state = "tilted" if ($value == "01");
  $state = "open" if ($value == "02");
 
  readingsSingleUpdate($defs{$device}, $reading . "_state", $state, 1);

  return undef;
}


EDIT:
ich habe es jetzt so gelöst:Gruppe1:0D.0-Gruppe_1.* {SWAP_WindowStateSensor(ReadingsVal($name, "0D.0-Gruppe_1", ""))},
Gruppe2:0D.1-Gruppe_2.* {SWAP_WindowStateSensor(ReadingsVal($name, "0D.1-Gruppe_2", ""))},
Gruppe3:0D.2-Gruppe_3.* {SWAP_WindowStateSensor(ReadingsVal($name, "0D.2-Gruppe_3", ""))},
Gruppe4:0D.3-Gruppe_4.* {SWAP_WindowStateSensor(ReadingsVal($name, "0D.3-Gruppe_4", ""))},
Gruppe5:0D.4-Gruppe_5.* {SWAP_WindowStateSensor(ReadingsVal($name, "0D.4-Gruppe_5", ""))},
Gruppe6:0D.5-Gruppe_6.* {SWAP_WindowStateSensor(ReadingsVal($name, "0D.5-Gruppe_6", ""))},
Gruppe7:0D.6-Gruppe_7.* {SWAP_WindowStateSensor(ReadingsVal($name, "0D.6-Gruppe_7", ""))}
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

dev0

Ich bin nicht Rudi ;) und vielleicht völlig auf dem Holzweg, weil ich nicht verstehe was machen möchtest, aber wäre ein notify der passende Weg? Da hast Du $EVENT und kannst mit readingsSingleUpdate...
Und wenn ich auf dem Holzweg bin, dann ignoriere mich einfach ;)

Tobias

ok, ein notify wäre auch möglich....

Mit Rudi meinte ich RudolfKönig mit der Frage of das $Event auch in ein Userreading einfließen könnte ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

rudolfkoenig

Zitat@Rudi: Wäre es denn ein Problem auch $EVENT und $EVTPARTx für userReadings verfügbar zu machen?
Ja. Devices generieren potentiell mehrere Events auf einmal, userReading wird in so einem Fall aber nur einmal ausgewertet. Ich wuesste nicht, auf welchem Event aus dem Buendel $EVENT gesetzt werden soll.

ZitatBei meiner Anforderung müsste ich jetzt 7 mal dasselbe Userreading schreiben.
Ich wuerde das Reading in der Perl-Funktion setzen, und sie per notify aufrufen.

Tobias

Danke, so mache ich es... passt auch mit dem Vorschlag von dev0
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

Gelöst:

##############################################
# Übersetzt den Status der
# SWAP Fensterkontakte in Klarnamen
#
##############################################

sub
SWAP_WindowStateSensor($$$) {
  my ($device, $reading, $value) = @_;
  my $state = "??";
  my $group = 0;

  $group = $reading; 
  $group =~ s/.*-Gruppe_(\d)*.*/$1/;

  $state = "closed" if ($value eq "00");
  $state = "tilted" if ($value eq "01");
  $state = "open" if ($value eq "02");

  readingsSingleUpdate($defs{$device}, "Gruppe".$group, $state, 1);

  return undef;
}

define NTFY_SWAP_Fensterstatus notify SWAP_.*:0D.*-Gruppe.* {SWAP_WindowStateSensor($NAME, $EVTPART0, $EVTPART1)}
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter