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?
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
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.
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?
userReadings geht auch
attr <device> userReadings mitWert:ohneWert.* {ReadingsVal($name,'ohneWert','') eq '' ? 'Ersatz':ReadingsVal($name,'ohneWert','Ersatz');}
ungetestet.
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
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+)
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;}
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');}
"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...
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
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...
--
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.
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')}
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.
uij, das gefällt mir, scheint simpel zu sein.
werds mittag probieren, bin grad unterwegs.
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
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.
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 ...
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 ...
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;}
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.
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.
danke, aber ich hab doch schon längst eine lösung. tuts euch keine arbeit mehr an bitte!
Dann sei doch so gut deine Lösung hier zu präsentieren damit wir alle was davon haben.
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.