FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Manul am 08 Juli 2017, 13:30:10

Titel: [Erledigt] Hilfe bei userReading
Beitrag von: Manul am 08 Juli 2017, 13:30:10
Ich hätte gerne für ein device einen String als userReading. Wie ich den berechne, habe ich, glaube ich, rausbekommen. Aber wie gebe ich den zurück? Mein Ansatz war:


attr device userReadings reading {
  my $value = "ein berechneter String";
  $value;
}


Das scheint so aber nicht zu funktionieren. Ist der Ansatz falsch oder habe ich schon vorher einen Fehler im Code? In perlconsole habe ich den Code getestet, da scheint er zu tun, was er soll.
Titel: Antw:Verständnisfrage userReadings
Beitrag von: Otto123 am 08 Juli 2017, 13:38:39
Hi,

ich würde return $value versuchen.

Gruß Otto
Titel: Hilfe bei userReading
Beitrag von: Manul am 08 Juli 2017, 13:53:26
Danke, funktioniert leider genauso wenig. Vielleicht ist ja doch ein Fehler in meinem sonstigen Code. Mag jemand mal drüberschauen?


powerlevel {

  my %levels = split(/[ ,:]/,attrVal("Robi","powerlevels","");

  my $numlevel = ReadingsVal("Robi","fan_power",undef);
 
  my $level = "Custom";
 
  while(my ($key,$value) = each %levels) {
 
    if ($value == $numlevel) {
   $level = $key;
}
  }
 
  return $level;
}


Das Attribut "powerlevels" hat den Wert "Quiet:38 Balanced:60 Turbo:77 MAX:90", ein "set Robi fan_power 60" produziert den Fehler "Error evaluating Robi userReading powerlevel: syntax error at (eval 46297) line 3, at EOF".

Edit: Verwendung von "eq" statt "==" (werf ich immer durcheinander) ändert nichts
Titel: Antw:Hilfe bei userReading
Beitrag von: Otto123 am 08 Juli 2017, 14:03:21
Also das kannst Du so erstmal nicht sagen, deine Aufgabe würd emit return schon funktionierenattr device userReadings reading {
  my $value = "ein berechneter String";
  return $value;
}

ich kenne attrVal nicht, ich denke es muss AttrVal heißen.

Gruß Otto
Titel: Antw:Hilfe bei userReading
Beitrag von: Manul am 08 Juli 2017, 14:07:11
Ich denke, Du hast recht. Ich denke außerdem, ich sollte die Klammer von der split-Funktion wieder schließen.  :-[

Das Ergebnis gibt uns beiden recht: Funktioniert, danke!