Neues Modul readingsGroup

Begonnen von Niko, 24 August 2013, 11:59:11

Vorheriges Thema - Nächstes Thema

JoeALLb

Zitat von: Peedy2495 am 21 Februar 2017, 12:46:57
beim öffnen mit dem enthaltenen html-Code im Anzeigefeld sind auch alle Slider auf "0"
Da skann ich auch bestätigen. Vorallem am Android-Browser kommt das immer wieder vor.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Peedy2495

Ich habe Firefox (Win7, Linux & Android), Dolphin (Android), IE11 (Win7),  und Konqueror (Linux, KDE) ausprobiert.
Überall das selbe Ergebnis ...

Reinerlein

#1667
Hi Andre,

bei der von mir beschriebenen readingsGroup mit den Ventilständen scheint es jetzt zu gehen. Dafür habe ich das Problem, dass eine andere die Readings nicht (mehr?) aktualisiert:

define heizung_Sammler_FK readingsGroup <Name>,<Zustand>,<Zeitpunkt> <hr> list heizung_[^_]+_FK.*:state <hr> heizung_Sammler_FK:<Anzahl&nbsp;;offene>,<>,$count(opened)(:1)@open heizung_Sammler_FK:<Anzahl&nbsp;;geschlossene>,<>,$count(closed)(:1)@close heizung_Sammler_FK:<Gesamtanzahl>,<>,$scalar(:1)@count
attr heizung_Sammler_FK alias Heizung Fensterübersicht
attr heizung_Sammler_FK alwaysTrigger 2
attr heizung_Sammler_FK group 1. Grundsätzliches
attr heizung_Sammler_FK mapping $DEVICE
attr heizung_Sammler_FK nameStyle style="font-weight: bold;; text-align: left;;"
attr heizung_Sammler_FK nostate 1
attr heizung_Sammler_FK room Heizung
attr heizung_Sammler_FK valueStyle { open => 'style="text-align:right"', close => 'style="text-align:right"', count => 'style="text-align:right"' }

setstate heizung_Sammler_FK 2017-02-26 11:33:44 close 8
setstate heizung_Sammler_FK 2017-02-26 11:33:44 count 10
setstate heizung_Sammler_FK 2017-02-26 11:33:44 open 2

Hier sollen die offenen und geschlossenen Fenster ausgewertet werden. Die Summen unter der Liste sind stets korrekt. Die entsprechenden Readings allerdings nicht.
Auf dem Screenshot ist der Unterschied direkt zu sehen... Die Werte unter der Liste sind die korrekten...

Noch ein Problem? oder bin ich der Fehler ? :)

Danke schon mal...

Edit: Gerade beobachtet: Er aktualisiert die Werte nur, wenn ich die readingsGroup gerade auf dem Bildschirm sehe, und ein Fensterkontakt gerade aktualisiert... Bei meinem anderen Problem musste ich die readingsGroup einmal anzeigen, dann ging es aber auch im Hintergrund...

Grüße
Reiner

Reinerlein

Hi Andre,

ich muss das nochmal hochholen... ich muss mir sonst was anders einfallen lassen, da auf diesen Werten meine Fernwärmestation gesteuert wird...
Mittlerweile geht auch die andere ReadingsGroup mit den Ventilständen nicht mehr...

Eine Idee?

Danke schon mal...

Grüße
Reiner

justme1968

ich konnte das problem noch nicht reproduzieren. eigentlich sollte einfach alles gehen ...

was heisst es geht jetzt auch nicht mehr? mach dem update ging es und dann plötzlich nicht mehr?

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

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

Reinerlein

Hi Andre,

zumindest dachte ich, dass es geht, war aber wahrscheinlich nicht so. Es ist aktuell so, dass die Readings meistens erst aktualisiert werden, wenn ich die Readingsgroup auf dem Bildschirm sehe, also die Detaildarstellung (das mit allen Internals, Readings und Attributen). Diese Seite muss ich ein paar Sekunden offen haben, dann wird das Reading (oder die Readings) aktualisiert, und erhält den Wert (bzw. die Werte), der (oder die) bereits unter der Auflistung selbst dargestellt werden...

Im Hintergrund wird es nicht regelmäßig (aber irgendwann dann halt doch) aktualisiert. Eben habe ich nochmal bei der Ventilsteuerung geschaut (auf einer anderen Seite als der ReadingsGroup-Seite wird ein Graph mit den ermittelten Ventilstellungen angezeigt): Vor 15 Minuten hat er den Wert aktualisiert, ohne dass ich mir die Readingsgroup angeschaut hätte...

Was kann ich denn loggen, damit dir das bei der Problemlösung hilft?

Grüße
Reiner

Reinerlein

Hi Andre,

ich habe das Problem vermutlich gefunden.
Ich hatte in meiner ReadingsGroup Heizungsthermostate mit ihren Ventilstellungen und der gewünschten Temperatur aufgelistet.
Außerdem hatte ich für das Format der Werte das Attribut valueFormat definiert.

Leider sind im Reading "desiredTemperature" nicht nur Zahlenwerte, sondern auch Texte enthalten (was ich persönlich sehr unglücklich finde), sodass mein Format "%.1f °C" immer Fehler der Art "Argument "on" isn't numeric in sprintf at ./FHEM/33_readingsGroup.pm line 529." im Log verursacht hat.
Des Weiteren hatte ich für meinen Prozent-ValueFormat einen Fehler. Ich hatte "%i %" definiert (wo es ja "%i %%" heißen muss), und damit zusätzlich noch die Meldung "Missing argument in sprintf at ./FHEM/33_readingsGroup.pm line 529." und "Invalid conversion in sprintf: end of string at ./FHEM/33_readingsGroup.pm line 1339" im Log erhalten.

Dadurch ist er immer aus der Notify-Methode ausgestiegen, und hat keinerlei Werte mehr im Hintergrund aktualisiert.
Wenn man die Readingsgroup auf dem Bildschirm gesehen hat, wurde alles immer korrekt angezeigt, sodass ich keinerlei Fehler in meiner Attribut-Definition erwartet habe (warum ging das eigentlich?).

Kann man da irgendeine Art von Überprüfung einbauen, oder etwas Fehlertoleranz bei dem "sprintf"?
Ich musste mir für meine Max-Thermostate jetzt ein UserReading bauen, welches immer einen Zahlenwert liefert (anstatt der Worte "on", "off", "eco", "comfort" und "boost").

Früher war das nicht so, dass muss mit irgendeinem Update Anfang des Jahres zusammenhängen...

Danke schon mal.

Grüße
Reiner

justme1968

sehr gut. kein wunder das ich es nicht reproduzieren konnte:)

am sichersten ist es sich nicht auf die einfache valueFormat variante zu verlassen sondern selber mit printf und $NUM zu formatieren. hier kannst du dann auch auf die nicht numerischen werte prüfen. d.h. z.b. mit ..., desiredTemperature  =>'{...}', ...perl code variante des attributs zu verwenden.

du kannst auch die jeweiligen alphabetischen varianten mit eigenen spezifischeren valueFormat einträgen der art 'desiredTemperature.on' => ...,  'desiredTemperature.off' => ... abfangen. dann reicht die einfache variante für die numerischen werte eventuell doch wieder.

da der printf format string theoretisch beliebig kompliziert ausfallen kann ist es schwierig hier etwas vorher zu überprüfen. man könnte höchstens alles in ein eval stecken und dann schauen ob es fehler gab und diese dann loggen. das würde zumindest das abbrechen verhindern.

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

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

Reinerlein

Hi Andre,

danke für die Tipps, die werde ich mir nochmal zu Gemüte führen.
Was für mich verwirrend war, war, dass es in der Detailansicht korrekt dargestellt wurde, und im Hintergrund eben zu einem Abbruch der Aktualisierung führte.

Wird denn das mit dem spezifischeren valueFormat auf jeden Fall vor dem allgemeinen Format durchgeführt/geprüft?
Dann könnte ich ja ein allgemeines für die Zahlen lassen, und nur die fünf Worte durch jeweils ein spezielles definieren...

Ich hatte dann auch versucht mit einem eval{}-Block um das sprintf den Fehler abzufangen, das war aber leider nicht erfolgreich.
Wahrscheinlich ist es besser, dass in einem eval()-String zusammenzubauen und testweise auswerten zu lassen. Dabei wäre zumindest der Fehler mit dem einzelnen Prozentzeichen aufgefallen.

Aber im Prinzip reicht die Logausgabe dann doch aus, nur abbrechen sollte der im Hintergrund nicht :)
Das heißt: eine Erweiterung wäre schon gut: Ich konnte an der Log-Errormeldung so erstmal gar nicht sehen, welche meiner 30 ReadingsGroups jetzt überhaupt betroffen war... Man selber sieht die Fehler ja sowieso nicht... sonst wären sie ja gar nicht drin :)

Grüße
Reiner

Xguide

Hallo zusammen,

kann es sein das da eine Zeile zuviel an Code in der aktuellen Version von 33_readingsGroup.pm liegt?

Zeile 1384

          my $value = $value;
          if( $format eq 't' || $format eq 'sec' ) {
            $value = TimeNow();
            $value = time() - time_str2num($value) if($format eq 'sec');
          } elsif( $format =~ m/^[dir]/ ) {
            $value = rgVal2Num($value);
            $value = int($value) if( $format eq 'i' );
            $value = round($value, defined($1) ? $1 : 1) if($format =~ /^r(\d)?/);
          }

          my $value_style = lookup2($hash->{helper}{valueStyle},$n,$reading,$value);
-->     my $value = $value;   <---

          my $value_orig = $value;


Ferner wollte ich mal fragen, ob mir jemand eine Debugging-Info stricken kann, mit der ich herausfinden kann, von welchem Device die folgende Meldung im Log erscheint.
Betroffene Codezeile in readingsGroup.pm

          next if( $lattr eq 'IODev' && $defs{$d}{$lattr}{NAME} !~ m/^$re$/);


Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.

Es scheint also um das Attribut IODev zu gehen, diese habe ich für meine HM-Devices gesetzt, da ich eine VCCu mit 3 IFs nutze. Wie könnte ich an der Stelle ein sinnhaftes Log einbauen um dem Fehler auf die Spur zu kommen?

Danke für Eure Hilfe und viele Grüße,

Marcel
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

justme1968

die zeile ist mit absicht drin und korrekt.


schalte mal stacktrace ein und schau ob du mehr zur meldung siehst. ich tippe es gibt kein device das zum wert aus IODev gehört.

auf welchen wert hast du IODev gesetzt?

wenn du eine vccu verwendest ist das setzen von hand nicht nötig, IODev dann von der vccu verwendet und gesetzt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Xguide

Die Zeile "my $value = $value;"erzeugt auf jeden Fall einen Logeintrag - aber natürlich nicht so wild.

Ich habe "attr global stacktrace 1" gesetzt, bekomme aber nicht wirklich mehr Infos ins log. Muss ich verbose hochsetzen?

Zusätzlich bekomme ich jetzt noch einen neuen Eintraga aus Zeile 261, wobei das eher vom Aufruf aller rGs her rührt.

sub
rgVal2Num($)
{
  my ($val) = @_;

  #$val =~ s/[^-\.\d]//g if( defined($val) );
  $val = ($val =~ /(-?\d+(\.\d+)?)/ ? $1 : "");



Use of uninitialized value $val in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 261.




FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

justme1968

sorry. mit der doppelten zeile hattest du doch recht. da ist beim einchecken etwas schief gegangen.

die rgVal2Num habe ich hoffentlich auch eben behoben.


mit stacktrace solltest du im log den call stack sehen. aber schau dir noch mal an was ich oben geschrieben hatte:
Zitatauf welchen wert hast du IODev gesetzt?

wenn du eine vccu verwendest ist das setzen von hand nicht nötig, IODev dann von der vccu verwendet und gesetzt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Xguide

#1678
Hallo justme,

ich war mit meiner Aussage bezüglich der IOdefs nicht wirklich präzise, es hätte heißen müssen, all HM-Devices haben ein attr IODef - welches automatisch gesetzt wurde. Manuell habe ich im Zusammenhang der Umstellung auf VCCU nur die IOgrp für die devices gesetzt.

Stacktrace hat bei mir nicht eine Zeile mehr ins Log gebracht, es erscheint immer noch nur:

Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.
Use of uninitialized value in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 121.


Ich würde mich ja schon freuen zu wissen von welcher readingsGroup das ausgelöst wird. Interessanterweise kommt die Meldung auch, wenn keine rG angezeigt wird.

Ich werde morgen ersteinmal die geänderte Version laden und mal schauen ob der folgende Fehler damit eliminiert wurde.


Use of uninitialized value $val in pattern match (m//) at /opt/fhem//FHEM/33_readingsGroup.pm line 261.


Danke erstmal und viele Grüße,

Marcel
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

justme1968

ich sehe gerade die meldung kommt nicht von einem IODev attribut sondern von einem IODev internal.

schau mal bitte ob der Actiondetector in einer deiner readingsGroups landet. der scheint einen leeren hash als IODev internal zu haben. ich würde sagen das ist eigentlich ein fehler.

ab morgen wird der fehler abgefangen. ich denke du solltest den Actiondetector aber trotzdem nicht mit in der readingsGroup haben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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