[ERLEDIGT] reading befüllen, wenn leer

Begonnen von the ratman, 03 August 2022, 14:58:35

Vorheriges Thema - Nächstes Thema

the ratman

uij, das gefällt mir, scheint simpel zu sein.
werds mittag probieren, bin grad unterwegs.
→do↑p!dnʇs↓shit←

the ratman

#16
passiert leider auch nix, wenn der drucker offline ist

so, hab's nun mit einem doif geregelt, das sich eh schon hab und eigentlich diverse werte auf 0 setzt, damit die plots nicht so grausam aussehen, wenn der drucker ausgeschaltet wird  *g*
funzt.

ich dank euch für die hilfeversuche
→do↑p!dnʇs↓shit←

Guybrush

kenn deinen drucker nicht, aber die ich kenne benötigen erst ein magic packet (wol) bevor die schnittstellen funktionieren. macht auch sinn, drucker die eher selten aktiv was machen, im deep stand by zu halten.

the ratman

naja, der drucker ist n 3d-drucker und er ist vollkommen stromlos - da würde auch kein wol was nutzen *g*
der wird primitiv mit einer philips hue steckdose ein/aus-geschaltet.

es ging ja - wie erwähnt - darum, dass das device (httpmod) leer wird, wenn der drucker aus ist, ich aber gefüllte readings brauche um meine etwas spezielle anzeige unter windoof nicht zum streiken zu veranlassen.
blöder weise musste da erst wieder betateilchen auftauchen - stichwort: "komische readings-zeiten", dass ich mich dran erinnert hab, wie ichs einfach lösen könnte ...
→do↑p!dnʇs↓shit←

OdfFhem

Zitat von: the ratman am 04 August 2022, 09:40:29
passiert leider auch nix, wenn der drucker offline ist

Ich habe mal genauer im Wiki geschaut. Dort steht:
Zitat
If a device does not respond then the values stored in readings will keep the same and only their timestamp shows that they are outdated. If you want to modify reading values that have not been updated for a number of seconds, you can use the attributes ...
Müsste eigentlich genau auf Deinen Anwendungsfall passen ...


Falls Du noch zur Weiterforschung Lust hast ... kannst Du mal das finale list von dremel3d45 einstellen ... das Problem sollte ja reproduzierbar sein ...

the ratman

ich zitiere mich mal selber - allerdings is es mir egal, weil meine version funzt und ich bei knapp 44° auf der haus südseite sowieso ned denken kann:
Zitat von: the ratman am 03 August 2022, 19:29:11SNIP:Internals:
   BUSY       1
   DEF        http://192.168.178.9/command 5
   FUUID      5f4e00ed-f33f-f543-2e1d-6dc7f8ca5c655dd1
   Interval   5
   MainURL    http://192.168.178.9/command
   ModuleVersion 4.1.12 - 19.4.2022
   NAME       dremel3d45
   NOTIFYDEV  global
   NR         310
   NTFY_ORDER 50-dremel3d45
   STATE      ready
   TYPE       HTTPMOD
   eventCount 7790
   value     
   CompiledRegexes:
   HttpUtils:
     NAME       
     addr       http://192.168.178.9:80
     auth       0
     data       GETPRINTERSTATUS
     displayurl http://192.168.178.9/command
     header     
     host       192.168.178.9
     httpversion 1.0
     ignoreredirects 1
     loglevel   4
     path       /command
     protocol   http
     redirects  0
     timeout    2
     url        http://192.168.178.9/command
     sslargs:
   QUEUE:
   READINGS:
     2022-07-20 12:35:36   buildPlate_target_temperature 0
     2022-07-20 12:35:36   chamber_temperature 0
     2022-07-20 12:35:34   door_open       0
     2022-07-20 12:35:36   elaspedtime     0
     2022-07-20 12:35:34   error_code      200
     2022-07-20 12:35:36   extruder_target_temperature 0
     2022-07-20 12:35:34   fanSpeed        0
     2022-07-20 12:35:34   filament_type_  PETG
     2022-07-20 12:35:34   firmware_version v3.0_R02.12.10
     2022-07-20 12:35:34   jobname         
     2022-08-03 19:27:34   jobname_simpel 
     2022-07-20 12:35:34   jobstatus       
     2022-07-20 12:35:34   layer           0
     2022-07-20 12:35:34   message         success
     2022-07-20 12:35:34   networkBuild    0
     2022-07-20 12:35:36   platform_temperature 0
     2022-07-20 12:35:36   progress        0
     2022-07-20 12:35:36   remaining       0
     2022-07-20 12:35:34   status          ready
     2022-07-20 12:35:36   temperature     0
     2022-07-20 12:35:36   totalTime       0
     2022-08-03 19:27:34   zeit_gesamt     00 h 00 min
     2022-08-03 19:27:34   zeit_offen      00 h 00 min
     2022-08-03 19:27:34   zeit_vergangen  00 h 00 min
   REQUEST:
     context    reading
     data       GETPRINTERSTATUS
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        http://192.168.178.9/command
Attributes:
   alias      die fabrik - daten
   disable    0
   extractAllJSON 1
   group      3d druck
   icon       3d_printer
   reading01Name jobstatus
   reading01OExpr $val=~s/,\d//;$val<2?int($val*1000):int($val)
   reading01Regex \n\s+([\d.]+,\d+)
   requestData GETPRINTERSTATUS
   room       computer
   stateFormat status
   userReadings zeit_vergangen { strftime('%H h %M min',gmtime(ReadingsNum($NAME,"elaspedtime",0))) },
zeit_offen { strftime('%H h %M min',gmtime(ReadingsNum($NAME,"remaining",0))) },
zeit_gesamt { strftime('%H h %M min',gmtime(ReadingsNum($NAME,"totalTime",0))) },
jobname_simpel { my $js = ReadingsVal($NAME,"jobname",0);if ($js =~/zGapTest/){return "teste düsen kalibrierung";} $js=~s/.gcode//; $js=~s/_/ /g;$js;}

→do↑p!dnʇs↓shit←

DetlefR

Zitatmal eine blöde frage. Wozu da die If Bedingung in deinem Beispiel?
der 3. Parameter ist doch schon der Fallback/Default wert, falls da ein undefined kommt?

Das Reading ist ja vorhanden nur eben leer. Da kommt dann kein undefined.

OdfFhem

#22
Zum Test dremel3d45 um folgende Attribute erweitert:

attr dremel3d45 reading01MaxAge 1
attr dremel3d45 reading01MaxAgeReplacement X
attr dremel3d45 reading01MaxAgeReplacementMode text



Fall #1) das aktuelle reread war nicht erfolgreich und das Reading ist noch nicht "outdated"
- sind die MaxAge-Attribute aktiviert und treffen zu ... gewünschte Operation ausführen ... Reading gilt als "outdated"

Mit hohem Wert beim verbose-Attribut steht im Log:

2022.08.05 15:15:47.604 5: dremel3d45: MaxAge: check reading jobstatus
2022.08.05 15:15:47.605 5: dremel3d45: MaxAge: reading definition comes from reading, 01
2022.08.05 15:15:47.605 5: dremel3d45: MaxAge: max = 1, mode = text, rep = X
2022.08.05 15:15:47.605 4: dremel3d45: MaxAge: reading jobstatus too old - using X instead



Fall #2) das aktuelle reread war nicht erfolgreich und das Reading ist bereits "outdated"
- selbst, wenn die MaxAge-Attribute aktiviert/geändert sind, wird die gewünschte Operation nicht mehr ausgeführt

Mit hohem Wert beim verbose-Attribut steht im Log:

  2022.08.05 15:00:24.163 5: dremel3d45: MaxAge: check reading jobstatus
  2022.08.05 15:00:24.163 5: dremel3d45: MaxAge: reading jobstatus was outdated before - skipping



Fall#3) Ein erfolgreiches reread führt dazu, dass das Reading nicht mehr als "outdated" gilt.

the ratman

danke, aber ich hab doch schon längst eine lösung. tuts euch keine arbeit mehr an bitte!
→do↑p!dnʇs↓shit←

romakrau

Dann sei doch so gut deine Lösung hier zu präsentieren damit wir alle was davon haben.

the ratman

wie oben schon geschrieben ( https://forum.fhem.de/index.php/topic,128618.msg1230256.html#msg1230256 ): ich hab einfach in ein vorhandenes doif das diverse readings für plots auf 0 zu setzt, während der drucker nicht druckt. das schreibt halt jetzt in ein weiteres reading ein "X".
bisher funzt die sache wunderbar. im rainmeter gabs kein fehlerlog mehr.
→do↑p!dnʇs↓shit←