[ERLEDIGT] reading befüllen, wenn leer

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

Vorheriges Thema - Nächstes Thema

the ratman

grüß euch,
ich suche wieder mal eine lösung und komm nicht drauf.

ich habe in einem httpmod-modul ein reading, dass immer mal wieder nicht befüllt wird. das ist ein problem der quelle, nicht von fhem.

nachdem ich mir daten für das tool rainmeter unter windoof von eben diesem httpmod-modul ziehe und rainmeter keinen spaß mit leeren variablen hat, würde ich nach einer lösung suchen.

in kurz: gibt's eine einfache art, ein reading mit z.b. einem X zu befüllen, wenn das reading keinen wert mit gesendet bekommt?
→do↑p!dnʇs↓shit←

DetlefR

Zitatnachdem ich mir daten für das tool rainmeter unter windoof von eben diesem httpmod-modul ziehe

Wie sieht den das "ziehen" aus.
Lässt sich da evt. was machen

betateilchen

Zitat von: the ratman am 03 August 2022, 14:58:35
ich habe in einem httpmod-modul ein reading

readings hast Du höchstens in einem device, niemals in einem Modul.

Zitat von: the ratman am 03 August 2022, 14:58:35
in kurz: gibt's eine einfache art, ein reading mit z.b. einem X zu befüllen, wenn das reading keinen wert mit gesendet bekommt?

Ja, beispielsweise per Attribut:

Zitat von: commandref(get|reading)[0-9]*OExpr
defines an optional expression that is used in an eval to compute / format a readings value after parsing an HTTP response
The raw value from the parsing will be in the variable $val.

Damit kannst Du den Wert prüfen und entsprechend einen default-Wert eintragen, falls beim parsen kein brauchbarer Wert gefunden wurde.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

the ratman

gleich mal thx für die flotten reaktionen!

@DetlefR
ginge sicher ... nur wird da wieder lustig regex verwendet, mit dem ich wohl bis zu meinem ableben (und darüber hinaus) auf kriegsfuß stehe. da frag ich lieber von fhem seite her. hier gibt's wenigstens brauchbare antworten *g*

@betateilchen
warum kling das bei dir immer so einfach und ich hab trotzdem keine ahnung, was ich nu machen muss.
was muss ich da genau eintragen, wenn ich unter vielen readings z.b. ein reading "betateilchen" habe?
→do↑p!dnʇs↓shit←

DetlefR

userReadings geht auch

attr <device> userReadings mitWert:ohneWert.* {ReadingsVal($name,'ohneWert','') eq '' ? 'Ersatz':ReadingsVal($name,'ohneWert','Ersatz');}

ungetestet.

the ratman

das wäre bei mir dann:
jobstatusFine:jobstatus.* {ReadingsVal($name,'jobstatus','') eq '' ? 'jobstatusFine':ReadingsVal($name,'jobstatus','X');} oder?
wobei "jobstatus" das original reading wäre und "jobstatusFine" das neue mit dem x

er legt nicht mal das reading "jobstatusFine" an - auch ned, nach 'nem reread
→do↑p!dnʇs↓shit←

betateilchen

Zitat von: the ratman am 03 August 2022, 15:24:19
was muss ich da genau eintragen, wenn ich unter vielen readings z.b. ein reading "betateilchen" habe?

Diese Frage kann Dir niemand beantworten, solange Du kein list des gesamten devices gepostet hast, aus dem man erkennt, wie Du die readings überhaupt erzeugst.

In einem meiner HTTPMOD-devices findet sich beispielsweise folgendes:


attr myDevice reading01Name blub
attr myDevice reading01OExpr $val=~s/,\d//;;$val<2?int($val*1000):int($val)
attr myDevice reading01Regex \n\s+([\d.]+,\d+)


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

the ratman

gut, ich hab 3 neue attribute
aber eintragen tut er mir in mein reading nix

schaut jetzt so aus:reading01Name jobstatus deleteattr
reading01OExpr $val=~s/,\d//;$val<2?int($val*1000):int($val) deleteattr
reading01Regex \n\s+([\d.]+,\d+) deleteattr

und wo müsste ich da eigentlich mein x mit senden?

was mir jetzt natürlich in den kopf kommt, falls das wichtig ist: das reading muss auch beschrieben werden, wenn mein drucker z.b. nicht erreichbar ist, weil er, wie z.b. jetzt grade, gar nicht im netzwerk ist.

na wennst n list willst, kriegst natürlich eines: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

Zitat
er legt nicht mal das reading "jobstatusFine" an - auch ned, nach 'nem reread
2022-07-20 12:35:34   jobstatus
jobstatus hat sich auch noch nicht geaendert. Dann wird auch nichts angelegt.
Wenn als Ersatz ein X drin stehn soll, dann so.
Zur Not mittels "setreading" mal eine Änderung vortäuschen.

jobstatusFine:jobstatus.* {ReadingsVal($name,'jobstatus','') eq '' ? 'X':ReadingsVal($name,'jobstatus','X');}

Beta-User

"Komische" Zeitstempel haben die, deine userReadings (mach da mal einen sauberen Trigger hin)...

Ansonsten passiert da anscheinend gar nichts, der Rest hat lt. list "uralt"-Zeitstempel, und dann klappt das (erst recht!) nicht mit dem weiteren userReadings-Eintrag, der "auch nur" die Datenmenge erhöht, statt das Tier direkt zu erlegen.
Solange da anscheinend gar nichts wirklich verwertbares zurückkommt, dürfte das auf diesem Weg schwierig werden...

Und den Code von betateilchen 1:1 (vermeintlich?) zu übernehmen, ist für sich genommen dann wohl auch nicht im Sinne des Erfinders gewesen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

the ratman

#10
die zeitstempel passen schon - hab länger schon nix mehr gedruckt *g*
die paar zeitstempel, die aktuell sind, sind die userreadings, die da vor sich hin tuckern.
und passieren kann ja auch nix, weil der drucker, wie gesagt, nicht im netz ist. das ding ist aus.

das ist ja mein problem. der rainmeter fragt ja trotzdem werte ab, egal, ob da welche sind. und wenns keine werte gibt, verschiebt das dumme ding die vars ... da kommt also böser schrott dann raus.

interessant find ich auch, dass sich httpmod alle readings merkt, nur den dämlichen jobstatus nicht. d.h.: sobald ich fhem update, oder sonst mal was nicht passt, ist der jobstatus leer.


falls sich wer mit rainmeter auskennt, das script schaut so aus ... ich habs nicht geschafft, eine leere variable ind was anderes zu wandeln.[Rainmeter]
Update=1000
BackgroundMode=0
DynamicWindowSize=1

################################################################################################################
#####   BEZEICHNUNG
################################################################################################################

[linie]
Meter=Image
X=0
Y=530
W=140
H=1
SolidColor=20,20,20,255
[kreis_aussen]
Meter=Roundline
x=140
y=500
W=60
H=60
StartAngle=(Rad(270))
RotationAngle=(Rad(360))
LineWidth=1
LineStart=28
LineLength=30
LineColor=20,20,20,255
Solid=1
AntiAlias=1
[kreis_füllung]
Meter=Roundline
x=141
y=501
W=58
H=58
LineWidth=1
LineStart=0
LineLength=29
LineColor=100,100,100,150
Solid=1
AntiAlias=1
[Text1]
Meter=String
X=2
Y=508
FontFace=Bahnschrift
FontColor=200,200,200,255
FontEffectColor0,0,0
StringEffect=Border
FontSize=16
AntiAlias=1
Text=die fabrik

################################################################################################################
#####   INFO KAMERA + POPUP BROWSER
################################################################################################################

[MeterCam]
Meter=Image
ImageName=cam.png
X=145
Y=505
W=50
H=50
LeftMouseUpAction=["C:\Program Files (x86)\Microsoft\Edge\Application\msedge_proxy.exe"  --profile-directory=Default --app-id=djnakkbihifpmpdbpncdllhbceogjcmp --app-url=http://192.168.178.9:10123/stream_simple.html --app-launch-source=4]

[kreis2_aussen]
Meter=Roundline
x=185
y=545
W=40
H=40
LineWidth=1
LineStart=19
LineLength=20
LineColor=20,20,20,255
Solid=1
AntiAlias=1

[kreis2_füllung]
Meter=Roundline
x=186
y=546
W=38
H=38
LineWidth=1
LineStart=0
LineLength=19
LineColor=100,100,100,150
Solid=1
AntiAlias=1

################################################################################################################
#####   ABFRAGE DATEN BEI FHEM
################################################################################################################

[Measure_Dremel3D45]
Measure=Plugin
Plugin=WebParser.dll
URL=http://192.168.178.8:8083/fhem?cmd=jsonlist+dremel3d45+jobstatus+status+platform_temperature+buildPlate_target_temperature+temperature+extruder_target_temperature+chamber_temperature+door_open+jobname_simpel+filament_type_+layer+message+zeit_gesamt+zeit_offen+zeit_vergangen+progress&XHR=1
RegExp=(?siU)"buildPlate_target_temperature": { "Value":"(.*)".*"chamber_temperature": { "Value":"(.*)".*"door_open": { "Value":"(.*)".*"extruder_target_temperature": { "Value":"(.*)".*"filament_type_": { "Value":"(.*)".*"jobname_simpel": { "Value":"(.*)".*"jobstatus": { "Value":"(.*)".*"layer": { "Value":"(.*)".*"message": { "Value":"(.*)".*"platform_temperature": { "Value":"(.*)".*"progress": { "Value":"(.*)".*"status": { "Value":"(.*)".*"temperature": { "Value":"(.*)".*"zeit_gesamt": { "Value":"(.*)".*"zeit_offen": { "Value":"(.*)".*"zeit_vergangen": { "Value":"(.*)"
UpdateRate=1

[Measure_buildPlate_target_temperature]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=1

[Measure_chamber_temperature]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=2

[Measure_door_open]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=3
Substitute="0":"geschlossen","1":"offen"

[Measure_extruder_target_temperature]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=4

[Measure_filament_type_]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=5
Substitute="PLA":"PLA - bauraumlüfter ein","PETG":"PETG - bauraumlüfter aus","ECO-ABS":"ECO-ABS - bauraumlüfter ein"

[Measure_jobname]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=6
Substitute="zGapTest.g":"kalibirierung der nozzle"

[Measure_jobstatus]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
Substitute="^(.)(.*)"^$":"0", ".*pausing":"pause"
StringIndex=7

[Measure_layer]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=8

[Measure_message]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=9

[Measure_platform_temperature]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=10

[Measure_progress]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=11
MinValue=0
MaxValue=100

[Measure_status]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
Substitute="busy":"beschäftigt","ready":"fertig"
StringIndex=12

[Measure_temperature]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=13

[Measure_zeit_gesamt]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=14

[Measure_zeit_offen]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=15

[Measure_zeit_vergangen]
Measure=Plugin
Plugin=WebParser
URL=[Measure_Dremel3D45]
StringIndex=16

################################################################################################################
#####   INFO JOBSTATUS + POPUP INFO SCHALTEN
################################################################################################################

[Status]
Meter=Image
MeasureName=Measure_jobstatus
;ImageName=%1.png
X=189
Y=549
W=32
H=32
DynamicVariables=1
LeftMouseUpAction=[!ToggleMeterGroup "info"]|[!UpdateGroup "info"]

################################################################################################################
#####   INFO FORTSCHRITT ALS TEXT
################################################################################################################

[fertig]
Meter=String
MeasureName=Measure_zeit_offen
X=5
Y=532
StringAlign=left
FontFace=Bahnschrift
FontColor=150,150,150
FontEffectColor0,0,0
StringEffect=Border
FontSize=12
AntiAlias=1
Text=noch %1
[fertig2]
Meter=String
MeasureName=Measure_progress
X=5
Y=548
StringAlign=left
FontFace=Bahnschrift
FontColor=150,150,150
FontEffectColor0,0,0
StringEffect=Border
FontSize=12
AntiAlias=1
Text=fertig zu %1 %

################################################################################################################
#####   INFO IO
################################################################################################################

[kreis3_aussen]
Meter=Roundline
x=198
y=500
W=40
H=40
LineWidth=1
LineStart=19
LineLength=20
LineColor=20,20,20,255
Solid=1
AntiAlias=1
[kreis3_füllung]
Meter=Roundline
x=199
y=501
W=38
H=38
LineWidth=1
LineStart=0
LineLength=19
LineColor=100,100,100,150
Solid=1
AntiAlias=1

[MeasureIO]
Measure=WebParser
URL=http://192.168.178.8:8083/fhem?cmd={ReadingsVal(%22HUEDevice13%22,%22onoff%22,0)}&XHR=1
RegExp=(.*)
UpdateRate=1
StringIndex=1

[schalterIO]
Meter=Image
MeasureName=MeasureIO
ImageName=%1.png
X=201
Y=504
W=32
H=32
LeftMouseUpAction=[!ToggleMeterGroup "IO"]|[!UpdateGroup "IO"]

################################################################################################################
#####   POPUP IO-SCHALTER
################################################################################################################

[io_kreis_aussen]
Group=IO
Hidden=1
Meter=Roundline
X=170
Y=538
LineWidth=2
LineStart=0
LineLength=40
LineColor=20,20,20,150
Solid=1
AntiAlias=1
[io_kreis_füllung]
Group=IO
Hidden=1
Meter=Roundline
X=170
Y=538
LineWidth=1
LineStart=0
LineLength=40
LineColor=200,200,200,150
Solid=1
AntiAlias=1

[io_schalter]
Group=IO
Hidden=1
Meter=Image
MeasureName=MeasureIO
ImageName=%1.png
X=122
Y=490
W=90
H=90
LeftMouseUpAction=["#CURRENTPATH#WebPost.exe" "http://192.168.178.8:8083/fhem?cmd.HUEDevice13=set HUEDevice13 toggle"]|[!ToggleMeterGroup "IO"]

################################################################################################################
#####   POPUP INFO
################################################################################################################
#[info_rahmen schatten]
#Group=info
#Hidden=1
#Meter=Shape
#Shape=Rectangle 0,0,530,210,10 | Fill Color 0,0,0,255
#x=253
#y=354

[info_rahmen]
Group=info
Hidden=1
Meter=Shape
Shape=Rectangle 0,0,530,210,10 | Fill Color 255,255,255,255
x=250
y=351
LeftMouseUpAction=[!ToggleMeterGroup "info"]|[!UpdateGroup "info"]
[info_linie1]
Group=info
Hidden=1
Meter=Image
x=250
y=385
W=530
H=1
SolidColor=0,0,0
[info_linie2]
Group=info
Hidden=1
Meter=Image
x=250
y=408
W=530
H=1
SolidColor=0,0,0
[info_linie3]
Group=info
Hidden=1
Meter=Image
x=530
y=386
W=1
H=120
SolidColor=0,0,0

[TextÜberschrift]
Group=info
Hidden=1
Meter=String
X=260
Y=360
FontFace=Bahnschrift
FontColor=200,200,200,255
FontEffectColor0,0,0
#StringEffect=Border
StringStyle=BoldItalic
FontSize=14
AntiAlias=1
MeasureName=Measure_jobname
Text=%1
##########
[TextStatusT]
Group=info
Hidden=1
Meter=String
X=260
Y=390
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
Text=status:
[TextStatus]
Group=info
Hidden=1
Meter=String
X=380
Y=390
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
MeasureName=Measure_status
Text=%1
##########
[fertig_bar]
Group=info
Hidden=1
MeasureName=Measure_progress
Meter=BAR
x=531
Y=386
W=248
H=22
BarBorder=0
BarColor=0,150,0
SolidColor=200,0,0
BarOrientation=Horizontal
Dynamic Variables
[fertig_bar_text]
Group=info
Hidden=1
Meter=String
MeasureName=Measure_progress
X=550
Y=390
StringAlign=left
FontFace=Bahnschrift
FontColor=255,255,255,255
FontSize=11
AntiAlias=1
Text=fertig zu %1 %
##########

[TextÜberschriftTemp]
Group=info
Hidden=1
Meter=String
X=260
Y=415
FontFace=Bahnschrift
FontColor=0,0,0,255
FontEffectColor0,0,0
#StringEffect=Border
StringStyle=BoldItalic
FontSize=14
AntiAlias=1
Text=temperaturen
##########
[TextNozzleTempT]
Group=info
Hidden=1
Meter=String
X=260
Y=440
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
Text=düse:
[TextNozzleTemp]
Group=info
Hidden=1
Meter=String
X=380
Y=440
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
MeasureName=Measure_temperature
MeasureName2=Measure_extruder_target_temperature
Text=%1°c von %2°c
##########
[TextBettTempT]
Group=info
Hidden=1
Meter=String
X=260
Y=460
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
Text=bett:
[TextBettTemp]
Group=info
Hidden=1
Meter=String
X=380
Y=460
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
MeasureName=Measure_platform_temperature
MeasureName2=Measure_buildPlate_target_temperature
Text=%1°c von %2°c
##########
[TextGehäuseTempT]
Group=info
Hidden=1
Meter=String
X=260
Y=480
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
Text=bauraum:
[TextGehäuseTemp]
Group=info
Hidden=1
Meter=String
X=398
Y=480
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
MeasureName=Measure_chamber_temperature
MeasureName2=Measure_door_open
Text=%1°c

[tuer]
Group=info
Hidden=1
Meter=Image
MeasureName=Measure_door_open
ImageName=%1.png
X=380
Y=478
W=16
H=16
DynamicVariables=1

[venti]
Group=info
Hidden=1
Meter=Image
MeasureName=Measure_fanSpeed
ImageName=%1.png
X=400
Y=478
W=16
H=16
DynamicVariables=1

##########

[TextÜberschriftZeit]
Group=info
Hidden=1
Meter=String
X=550
Y=415
FontFace=Bahnschrift
FontColor=0,0,0,255
FontEffectColor0,0,0
#StringEffect=Border
StringStyle=BoldItalic
FontSize=14
AntiAlias=1
Text=zeiten
##########
[TextErstZeitT]
Group=info
Hidden=1
Meter=String
X=550
Y=440
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
Text=erstschätzung:
[TextErstZeit]
Group=info
Hidden=1
Meter=String
X=690
Y=440
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
MeasureName=Measure_zeit_gesamt
Text=%1
##########
[TextVergangenT]
Group=info
Hidden=1
Meter=String
X=550
Y=460
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
Text=vergangen:
[TextVergangen]
Group=info
Hidden=1
Meter=String
X=690
Y=460
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
MeasureName=Measure_zeit_vergangen
Text=%1
##########
[TextÜbrigT]
Group=info
Hidden=1
Meter=String
X=550
Y=480
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
Text=übrig:
[TextÜbrig]
Group=info
Hidden=1
Meter=String
X=690
Y=480
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
MeasureName=Measure_zeit_offen
Text=%1
##########
[info_linie4]
Group=info
Hidden=1
Meter=Image
x=250
y=505
W=530
H=1
SolidColor=0,0,0

[TextFilamntT]
Group=info
Hidden=1
Meter=String
X=260
Y=514
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
Text=vorgewählt:
[TextFilament]
Group=info
Hidden=1
Meter=String
X=380
Y=514
FontFace=Bahnschrift
FontColor=0,0,0
FontSize=11
AntiAlias=1
MeasureName=Measure_filament_type_
Text=%1

##########
[info_linie5]
Group=info
Hidden=1
Meter=Image
x=250
y=535
W=530
H=1
SolidColor=0,0,0

[TextBauraum]
Group=info
Hidden=1
Meter=String
X=330
Y=540
FontFace=Bahnschrift
FontColor=200,200,200
FontSize=11
##StringStyle=BoldItalic
AntiAlias=1
Text=bauraum: 255mm breite x 155mm tiefe x 170mm höhe

################################################################################################################
#####   NOT AUS
################################################################################################################

[na_füllung]
Meter=Roundline
X=119
Y=513
LineWidth=1
LineStart=0
LineLength=17
LineColor=200,200,200,75
Solid=1
AntiAlias=1
[schalterNA]
Meter=Image
ImageName=notaus.png
X=106
Y=500
W=26
H=26
LeftMouseUpAction=[!ToggleMeterGroup "NA"]|[!UpdateGroup "NA"]
ToolTipTitle=ACHTUNG!
ToolTipType=1
ToolTipIcon=Warning
ToolTipText=NOT AUS#CRLF#SCHALTER

#####   NOT AUS POPUP
[NA_schalter_füllung]
Group=NA
Hidden=1
Meter=Roundline
X=193
Y=531
LineWidth=1
LineStart=0
LineLength=48
LineColor=255,0,0,255
Solid=1
AntiAlias=1
[NA_schalter]
Group=NA
Hidden=1
Meter=Image
ImageName=notaus.png
X=142
Y=480
W=100
H=100
LeftMouseUpAction=["#CURRENTPATH#WebPost.exe" "http://192.168.178.8:8083/fhem?cmd.doif_dremel3d45_schalten=set doif_dremel3d45_schalten stop ja"]|[!ToggleMeterGroup "NA"]

################################################################################################################
#####   plot
################################################################################################################

[info_plot_hintergrund_oben]
Group=info
Hidden=1
Meter=Shape
Shape=Rectangle 0,0,123,90,10 | Fill Color 255,255,255,255
x=783
y=351
LeftMouseUpAction=[!ToggleMeterGroup "info"]|[!UpdateGroup "info"]

#[info_plot_hintergrund_unten]
#Group=info
#Hidden=1
#Meter=Shape
#Shape=Rectangle 0,0,123,68,10 | Fill Color 100,100,100,50
#x=783
#y=442
#LeftMouseUpAction=[!ToggleMeterGroup "info"]|[!UpdateGroup "info"]

[measure_plot_nozzle]
Measure=Calc
Formula=Measure_temperature / 3
MinValue=210
MaxValue=300

[meter_plot_düse]
Group=info
Hidden=1
Meter=Line
MeasureName=measure_plot_nozzle
x=783
y=351
W=123
H=80
LineCount=1
LineColor=200,200,200,255
AutoScale=0
AntiAlias=1

[text_plot]
Group=info
Hidden=1
Meter=String
X=843
Y=450
FontFace=Bahnschrift
FontColor=250,250,250,255
FontEffectColor0,0,0
#StringEffect=Border
#StringStyle=Bold
StringAlign=Center
FontSize=12
AntiAlias=1
Text=düse#CRLF##CRLF#bett & raum

[info_plot_bed-room]
Group=info
Hidden=1
Meter=Shape
Shape=Rectangle 0,0,123,50,10 | Fill Color 255,255,255,255
x=783
y=511
LeftMouseUpAction=[!ToggleMeterGroup "info"]|[!UpdateGroup "info"]


[meter_plot_platform]
Group=info
Hidden=1
Meter=Line
MeasureName=Measure_platform_temperature
MeasureName2=Measure_chamber_temperature
x=783
y=511
W=123
H=50
LineCount=2
LineColor=000,200,000,255
LineColor2=000,000,200,255
AutoScale=1
AntiAlias=1
MinValue=0
MaxValue=280
→do↑p!dnʇs↓shit←

betateilchen

Zitat von: the ratman am 03 August 2022, 19:29:11
gut, ich hab 3 neue attribute
aber eintragen tut er mir in mein reading nix

es macht absolut keinen Sinn, die drei von mir geposteten Beispielzeilen in Dein Device einzutragen...


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

the ratman

ja, sind schon länger wieder draußen *g*
hehe, ich dacht ned, dass es so schwer wird mit einer leeren variable ...

ich könnt eventuell ein doif schreiben und das reading überwachen und anpassen. fragt sich nur, was dann wieder passiert, wenns timing im rainmeter nicht stimmt.
und elegant ist das auch nicht wirklich in meinen augen.
→do↑p!dnʇs↓shit←

Guybrush

Zitat von: DetlefR am 03 August 2022, 19:40:08
Wenn als Ersatz ein X drin stehn soll, dann so.
jobstatusFine:jobstatus.* {ReadingsVal($name,'jobstatus','') eq '' ? 'X':ReadingsVal($name,'jobstatus','X');}

mal 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?
jobstatusFine:jobstatus.* {ReadingsVal($name,'jobstatus','X')}

OdfFhem


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


Soll bewirken, dass bei einem reread das Reading nicht älter als 1 Sekunde sein darf. Wenn doch älter, dann wird das Reading mit X überschrieben.

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←