Fehler in fhem.pl??

Begonnen von Tobias, 02 September 2013, 14:56:09

Vorheriges Thema - Nächstes Thema

Tobias

Ich mach mal ausgehend von diesem Thread hier weiter:
Fehlernach FHEM-Update

Und zwar tritt der Fehler bei der Verarbeitung des Readings "state" auf. Klar, Ein Blick in die InternalValues verrät, das diese Variable dort nicht gefplegt ist, aber warum??
2013.09.02 14:49:12 1: evaluating HZ_EG_Bad userReading state , Modifier:  , Perlcode:
Use of uninitialized value $modifier in string eq at fhem.pl line 3330.
Use of uninitialized value $modifier in string eq at fhem.pl line 3332.
Use of uninitialized value $modifier in string eq at fhem.pl line 3334.
Use of uninitialized value $modifier in string eq at fhem.pl line 3340.
Use of uninitialized value $modifier in string eq at fhem.pl line 3344.




Internals:
   CULMAX0_MSGCNT 6
   CULMAX0_RAWMSG
   CULMAX0_TIME 2013-09-02 14:50:15
   DEF        HeatingThermostat 01784b
   IODev      CULMAX0
   LASTInputDev CULMAX0
   MSGCNT     6
   NAME       HZ_EG_Bad
   NR         226
   RSSI       -65.5
   STATE      19.0 °C
   TYPE       MAX
   addr       01784b
   backend    CULMAX0
   dstsetting 1
   mode       1
   rferror    0
   type       HeatingThermostat
   .userreadings:
     Desiredtemperature:
       TIME       2013-09-02 14:50:15
       t          1378126215.38733
       value      
       Dblog_dblog:
         TIME       1378126152.62145
         VALUE      19.0
     Floorplantext:
       TIME       2013-09-02 14:50:15
       modifier   none
       perlCode   {FloorplanText("FHT", $name, "")}
       t          1378126215.38733
       trigger    
       value      <a href="#" onClick="ShowCmdBox(event, 'HZ_EG_Bad', 'ht-max', '19', '')"><div name="div-HZ_EG_Bad-sub" class="HeizThermostat">19.0°C</div></a>
     State:
       TIME       2013-09-02 14:50:15
       t          1378126215.38733
       value      
       Dblog_dblog:
         TIME       1378126131.45631
         VALUE      windowOpenTemperature 5.0
   CHANGETIME:
   Readings:
     2013-07-21 14:01:40   .weekProfile    44485508452045204520452045204520452045204520452045204448550845204520452045\
2045204520452045204520452045204448546c44cc55144520452045204520452045204520452045204448546c44cc55144520452045204520452\
045204520452045204448546c44cc55144520452045204520452045204520452045204448546c44cc551445204520452045204520452045204520\
45204448546c44cc5514452045204520452045204520452045204520
     2013-09-02 14:36:42   LastExtTemperature 22.1
     2013-07-21 14:47:28   TimeInformationHour 1
     2013-09-02 14:50:15   battery         ok
     2013-07-21 14:01:40   boostDuration   25
     2013-07-21 14:01:40   boostValveposition 80
     2013-07-21 14:01:40   comfortTemperature 21.0
     2013-07-21 14:01:40   decalcification Sat 12:00
     2013-09-02 14:50:15   desiredTemperature 19.0
     2013-07-21 14:01:40   ecoTemperature  17.0
     2013-09-02 14:50:15   floorplantext   <a href="#" onClick="ShowCmdBox(event, 'HZ_EG_Bad', 'ht-max', '19', '')"><div name="div-HZ_EG_Bad-sub" class="HeizThermostat">19.0°C</div></a>
     2013-07-29 11:44:22   groupid         3
     2013-07-21 14:01:40   maxValveSetting 100
     2013-07-26 13:26:52   maximumTemperature on
     2013-07-21 14:01:40   measurementOffset 0.0
     2013-07-26 13:26:52   minimumTemperature off
     2013-09-02 14:50:15   mode            manual
     2013-09-02 14:48:51   msgcnt          215
     2013-09-02 14:50:15   state           19.0 °C
     2013-09-02 12:00:16   temperature     22.3
     2013-07-21 14:01:40   valveOffset     0
     2013-09-02 12:00:16   valveposition   0
     2013-07-21 14:01:40   weekprofile-0-Sat-temp 17.0 °C  /  21.0 °C  /  17.0 °C
     2013-07-21 14:01:40   weekprofile-0-Sat-time 00:00-06:00  /  06:00-22:00  /  22:00-00:00
     2013-07-21 14:01:40   weekprofile-1-Sun-temp 17.0 °C  /  21.0 °C  /  17.0 °C
     2013-07-21 14:01:40   weekprofile-1-Sun-time 00:00-06:00  /  06:00-22:00  /  22:00-00:00
     2013-07-21 14:01:40   weekprofile-2-Mon-temp 17.0 °C  /  21.0 °C  /  17.0 °C  /  21.0 °C  /  17.0 °C
     2013-07-21 14:01:40   weekprofile-2-Mon-time 00:00-06:00  /  06:00-09:00  /  09:00-17:00  /  17:00-23:00  /  23:00-00:00
     2013-07-21 14:01:40   weekprofile-3-Tue-temp 17.0 °C  /  21.0 °C  /  17.0 °C  /  21.0 °C  /  17.0 °C
     2013-07-21 14:01:40   weekprofile-3-Tue-time 00:00-06:00  /  06:00-09:00  /  09:00-17:00  /  17:00-23:00  /  23:00-00:00
     2013-07-21 14:01:40   weekprofile-4-Wed-temp 17.0 °C  /  21.0 °C  /  17.0 °C  /  21.0 °C  /  17.0 °C
     2013-07-21 14:01:40   weekprofile-4-Wed-time 00:00-06:00  /  06:00-09:00  /  09:00-17:00  /  17:00-23:00  /  23:00-00:00
     2013-07-21 14:01:40   weekprofile-5-Thu-temp 17.0 °C  /  21.0 °C  /  17.0 °C  /  21.0 °C  /  17.0 °C
     2013-07-21 14:01:40   weekprofile-5-Thu-time 00:00-06:00  /  06:00-09:00  /  09:00-17:00  /  17:00-23:00  /  23:00-00:00
     2013-07-21 14:01:40   weekprofile-6-Fri-temp 17.0 °C  /  21.0 °C  /  17.0 °C  /  21.0 °C  /  17.0 °C
     2013-07-21 14:01:40   weekprofile-6-Fri-time 00:00-06:00  /  06:00-09:00  /  09:00-17:00  /  17:00-23:00  /  23:00-00:00
     2013-07-21 14:01:40   windowOpenDuration 15
     2013-09-02 14:50:15   windowOpenTemperature 5.0
   Internals:
     interfaces thermostat;battery;temperature
Attributes:
   DbLogExclude (desiredTemperature|temperature|valveposition):21600,floorplantext
   event-on-update-reading desiredTemperature,temperature,valveposition,floorplantext
   fp_FP_EG   176,399,3,floorplantext
   room       MAX
   userReadings floorplantext {FloorplanText("FHT", $name, "")}

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

mit folgender fhem.pl ist der Fehler beseitigt.
Rudi muss jetzt entscheiden ob ich an der richtigen Stelle angesetzt habe und dann den Patch einchecken.

my $modifier= $userReadings{$userReading}{modifier};
      my $perlCode= $userReadings{$userReading}{perlCode};
      my $oldvalue= $userReadings{$userReading}{value};
      my $oldt= $userReadings{$userReading}{t};
     
+      $perlCode = "" if(!$perlCode);
+      $modifier = "none" if(!$modifier);

      #Debug "Evaluating " . $userReadings{$userReading};
      # evaluate perl code
      my $value= eval $perlCode;
      my $result;
      # store result
      if($@) {

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

So einfach machen wir das nicht: beim definieren von userReadings wird perlCode und modifier genau geprueft.
Ich wuesste gerne, wieso die Werte verschwunden sind.

Tobias

Hi Rudi,
sag mir was ich machen soll um den Fehler zu finden.. ev. hast du eine aktuelle fhem.pl mit vielen Logeinträgen??
Ein global verbose 5 brachte irgendwie nix

Edit: ich hab mal ein wenig meine Devices angesehen. Alle "echten" Userreadings, also die ich per attr userreading angelegt habe, die haben auch einen modifier und perlcode. Alle anderen haben dazu keine Einträge (zb state)
Hilft das?
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

Mit userReadings habe ich bisher mich nicht wirklich befasst: was sind "unechte" userReadings? Ist unser Problemfall ein echter?

>  sag mir was ich machen soll um den Fehler zu finden..

Wenn ich helfen soll: ein fhem.cfg bauen (moeglichst klein), was das Problem (moeglichst ohne Hardware) reproduziert. Dann kann ich es einfach nachstellen, notfalls mit weiteren Log versehen, und irgendwannmal kapieren, was das Problem verursacht.

Du hast den Vorteil, dass du das noetige Hardware hast. Du kannst natuerlich auch fhem.pl mit weiteren Logs zupflastern, bis du das Problem findest.


> ev. hast du eine aktuelle fhem.pl mit vielen Logeinträgen??

Sowas gibt es (natuerlich) nicht, ich verwende genau das, was du auch zur Verfuegung hast.

Tobias

Zitat von: rudolfkoenig schrieb am Di, 03 September 2013 08:47Mit userReadings habe ich bisher mich nicht wirklich befasst: was sind "unechte" userReadings? Ist unser Problemfall ein echter?
Naja, die Fehlermeldung im Ursprungstopic kam bei der Verarbeitung von dem Reading "State". Dieses ist kein "echtes" userreading.
Bezogen auf den ersten Post ist aufgrund "attr <dev> userReadings floorplantext {FloorplanText("FHT", $name, "")}" nur das Reading  "floorplantext" ein "echtes, von mir erzeugtes userreading.
In der Internen Variable .userreadings sind aber "floorplantext, State, Desiredtemperature" drin. Nur floorplantext enthält die zusätzlichen internen Attribute "modifier" und "perlcode". Die anderen "unechten" .userreadings "State, Desiredtemperature" enthalten diese nicht.
Da aber in fhem.pl IMHO alle Attribute in .userreadings durchgegangen werden, gibts den Fehler bei State und Desiredtemperature.
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

justme1968

ich denke ich habe das problem gefunden.

in der aktuellen version von dbLog wird für das neue DbLogExclude in Zeile 409 und 410 direkt auf {'.userReadings'} zugegriffen. das erzeugt natürlich dann einträge im hash mit denen die echten userReadings nicht klar kommen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Tobias

Haben wir glaube ich zeitgleich gefunden. ;) ;)
Ich habe gestern eine geänderte Version des DBLog-Moduls eingecheckt
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