[gelöst] CO20 notify tut es nicht mehr

Begonnen von DeeSPe, 17 August 2016, 07:59:28

Vorheriges Thema - Nächstes Thema

DeeSPe

Zitat von: frank am 17 August 2016, 12:06:37
kommt mir irgendwie bekannt vor.  :)
versuch mal userreading statt notify/setreading für airquality.

https://forum.fhem.de/index.php/topic,26826.msg198009.html#msg198009
Danke für den Tipp! Werde ich probieren...
Nur wie gesagt, es funktionierte bereits wochenlang mit meiner alten Funktion und setreading.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

marvin78

#16
Deswegen hatte ich das sleep vorgeschlagen, weil mir sowas auch bekannt vorkam. Damit verlässt man das notify sozusagen. Meine Vermutung waren zwar Timingprobleme aber im Grunde ist das Vorgehen das gleiche.

userReadings ist hier aber ohnehin eigentlich das Mittel der Wahl. setreading wäre nur nötig, wenn es sich um unterschiedliche Devices handelt. Siehe meinen Hinweis oben.

BTW: Interessant ist auch, dass meine dummy Nachstellung funktioniert....

frank

ZitatBTW: Interessant ist auch, dass meine dummy Nachstellung funktioniert....
ich nutze das vorgehen teilweise trotzdem noch, da es seltsamer weise meistens/häufig doch funktioniert.
aber vielleicht sollte ich diese notify nun mal intensiver kontrollieren.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

DeeSPe

Kann mir mal eben bitte einer helfen das vorherige notify in ein userreading zu verwandeln? Ich stelle mich irgendwie an...
attr wz_CO20 userReadings
airquality:voc {
my $voc = int(ReadingsVal("wz_CO20","voc",200));
my $val;
$val = "gut" if ($voc < 1500);
$val = "mittel" if ($voc >= 1500 && $voc < 1750);
$val = "schlecht" if ($voc >= 1750);
return $val;
}


So klappt es nicht!
Wie gebe ich denn den Wert von $val zurück?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

marvin78

Packe es einfach in eine sub der myUtils. Trigger funktionieren wie im NOTIFY. Achte also auf korrektes Regex.

userReadings kennt übrigens $name und für numerische Werte gibt es ReadingsNum.

DeeSPe

Danke für die Tipps.

Habe es nun mit einem userreading und eigener Sub hinbekommen.
Fertig kann es dann so aussehen:
list CO20:
Internals:
   INTERVAL   300
   LAST_POLL  2016-08-19 07:48:34
   NAME       wz_CO20
   NOTIFYDEV  global
   NR         223
   NTFY_ORDER 50-wz_CO20
   STATE      gut: 941 ppm
   TYPE       CO20
   fail       0
   manufacturer AppliedSensor
   product    iAQ Stick
   retries    3
   seq2       213
   seq4       1
   tag
   timeout    1000
   Readings:
     2016-08-19 07:48:34   airquality      gut
     2016-08-19 07:48:34   debug           758
     2016-08-19 07:48:34   pwm             369
     2016-08-19 07:48:34   r_h             163.47
     2016-08-19 07:48:34   r_s             408222
     2016-08-19 07:48:34   voc             941
Attributes:
   advanced   1
   alias      Luftgütesensor
   devStateIcon gut.*:control_centr_arrow_up@green mittel.*:control_centr_arrow_left@yellow schlecht.*:control_centr_arrow_down@red
   event-on-change-reading airquality,voc
   group      Sensoren
   icon       cul_usb
   interval   300
   room       Anwesenheit,HomeKit,Wohnzimmer
   stateFormat airquality: voc ppm
   userReadings airquality:voc.* {CO20voc()}


Und die Sub in 99_myUtils.pm:
sub CO20voc(;$)
{
  my ($name) = @_;
  $name = "wz_CO20" if (!defined($name));
  my $voc = int(ReadingsVal($name,"voc",200));
  my $val;
  $val = "gut" if ($voc < 1500);
  $val = "mittel" if ($voc >= 1500 && $voc < 2000);
  $val = "schlecht" if ($voc >= 2000);
  return $val;
}


Danke für Eure Hilfe!
Dann muss ich wohl meine Glatteiswarnung vom Außensensor auch auf userreading statt notify umstellen...

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe