Guten Tag Zusammen,
ich will gerade die Verbrauchsstatus meines Druckers auslesen und habe ein paar Probleme, ich hoffe ihr könnt mir helfen.
Zwar funktioniert es zum Teil, aber leider auch nicht alles.
Ich bekomme z.B. andere Werte ausgelesen, nur diese nicht, ich bin aktuell noch am einfuchsen in HTTPMOD, nur hänge ich hier.
Folgende Werte will ich gerne einlesen:
Tonerstand: 33%
<td>
<span class="hpConsumableBlockHeaderText">
Patrone Schwarz<br />
HP Teil bestellen: Q5942X
</span>
</td>
<td class="hpConsumableBlockHeaderPctRemaining">
<span class="hpConsumableBlockHeaderText">
33%</span>
</td>
Kitstand: 69%
<td>
<span class="hpConsumableBlockHeaderText">
Wartungskit<br />
HP Teil bestellen: 110V-Q5421A, 220V-Q5422A
</span>
</td>
<td class="hpConsumableBlockHeaderPctRemaining">
<span class="hpConsumableBlockHeaderText">
69%</span>
</td>
Fast Verbraucht: NEIN
<td >
<span class="hpPageText" >Fast verbraucht:</span></td>
<td style="text-align:right" >
<span class="hpPageText" >NEIN</span></td>
Vielen Dank und Grüße
Gear
So, mein Dev dazu, laut den Hilfeseiten wo man Pregmatch testen kann sollte das so gehen, aber es kommt bei "
>> setstate IT.Drucker.SW.State 2019-02-23 02:01:04 KeinToner Hewlett" => Hewlett und es sollte "NEIN" kommen.
Warum er "Hewlett" findet ist mir nicht erklärlich, da es eig nicht passt.
defmod IT.Drucker.SW.State HTTPMOD http://0.8.1.5/hp/device/this.LCDispatcher?nav=hp.Supplies 15
attr IT.Drucker.SW.State userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex
attr IT.Drucker.SW.State DbLogExclude .*
attr IT.Drucker.SW.State enableControlSet 1
attr IT.Drucker.SW.State enforceGoodReadingNames 1
attr IT.Drucker.SW.State reading01Name Toner
attr IT.Drucker.SW.State reading01Regex <span class="hpConsumableBlockHeaderText">\s*([0-9]+)%</span>
attr IT.Drucker.SW.State reading02Name VerbleibendeSeiten
attr IT.Drucker.SW.State reading02Regex <span class="hpPageText" >([0-9]+)
attr IT.Drucker.SW.State reading03Name Kit
attr IT.Drucker.SW.State reading03Regex <td>\s*<span class="hpConsumableBlockHeaderText">\s*Wartungskit<br \/>\s*HP Teil bestellen: 110V-Q5421A, 220V-Q5422A\s*<\/span>\s*<\/td>\s*<td class="hpConsumableBlockHeaderPctRemaining">\s*<span class="hpConsumableBlockHeaderText">\s*([0-9]+)
attr IT.Drucker.SW.State reading04Name VerbleibendeSeiten
attr IT.Drucker.SW.State reading04Regex <span class="hpPageText" >Mit diesem Artikel gedruckte Seiten:</span></td>\s*<td style="text-align:right" >\s*<span class="hpPageText" >([0-9]+)
attr IT.Drucker.SW.State reading05Name FastVerbraucht
attr IT.Drucker.SW.State reading05Regex <span class="hpPageText" >Fast verbraucht:</span></td>\s*<td style="text-align:right" >\s*<span class="hpPageText" >([A-Za-z]+)
attr IT.Drucker.SW.State reading06Name KeinToner
attr IT.Drucker.SW.State reading06Regex <span class="hpPageText" >Fast verbraucht:</span></td>\s*<td style="text-align:right" >\s*<span class="hpPageText" >([A-Za-z]+)
attr IT.Drucker.SW.State stateFormat Resttoner: Toner %
setstate IT.Drucker.SW.State Resttoner: 33 %
setstate IT.Drucker.SW.State 2019-02-23 02:01:04 KeinToner Hewlett
setstate IT.Drucker.SW.State 2019-02-22 15:33:03 Kit 33
setstate IT.Drucker.SW.State 2019-02-23 12:32:02 Toner 33
setstate IT.Drucker.SW.State 2019-02-23 12:32:02 VerbleibendeSeiten 7395
"+" hat die eigenschaft "greedy", also wird das letzte auffinden des musters gesucht.
mit "+?" wird auf "non-greedy" (erstes auffinden) umgeschaltet.
Ich bekomme eben nur den Toner Stand und die Verbelibenden Seiten ausgelesen.
Leider bekomme ich das Kit nicht ausgelesen, da hier das <td>...</td> mit den Werten für Toner und Kit das gleiche <td>...</td> besteht.
Ich wollte da dann zusätzlich das darüberliegende <td>...</td> nutzen um Toner und Kit zu unterscheiden, jedoch erkennt er den Inhalte des darüber liegendes <td>...</td> nicht.
Zudem wollte ich auch hier die Werte auslesen, also das "NEIN", jedoch geht es nicht mit "([A-Za-z]+)".
<td >
<span class="hpPageText" >Fast verbraucht:</span></td>
<td style="text-align:right" >
<span class="hpPageText" >NEIN</span></td>
Laut den PregMatch TestSeiten die ich über das Forum gefunden habe, sollte es eig funktionieren, tut es aber nicht.
Patrone Schwarz:
(?s)Patrone Schwarz.*?([\d]+%)
Wartungskit:
(?s)Wartungskit.*?([\d]+%)
NEIN:
(?s)hpPageText.*?hpPageText" >(.*?)<
angenommen, dass es immer als 2. hpPageText kommt
Habe jetzt rumprobiert, geht leider auch nicht, es erkennt damit leider nichts.
Zeig mal ein "list" vom HTTPMOD Device und was in der Log mit verbose 5 kommt.
Hier das List:
Internals:
BUSY 0
CHANGED
DEF http://192.168.4.1/hp/device/this.LCDispatcher?nav=hp.Supplies 300
FUUID 5c6ff773-f33f-5a79-5672-e326b67248ca639a
Interval 300
LASTSEND 1552151505.03142
MainURL http://192.168.4.1/hp/device/this.LCDispatcher?nav=hp.Supplies
ModuleVersion 3.5.9 - 13.2.2019
NAME IT.Drucker.SW.State
NOTIFYDEV global
NR 138
NTFY_ORDER 50-IT.Drucker.SW.State
STATE Resttoner: 33 %
TRIGGERTIME 1552151805.02984
TRIGGERTIME_FMT 2019-03-09 18:16:45
TYPE HTTPMOD
addr http://192.168.4.1:80
auth 0
data
displayurl http://192.168.4.1/hp/device/this.LCDispatcher?nav=hp.Supplies
header
host 192.168.4.1
httpversion 1.0
ignoreredirects 0
loglevel 4
path /hp/device/this.LCDispatcher?nav=hp.Supplies
protocol http
redirects 0
timeout 2
url http://192.168.4.1/hp/device/this.LCDispatcher?nav=hp.Supplies
value 0
QUEUE:
READINGS:
2019-02-27 21:25:48 FastVerbraucht
2019-02-27 20:04:33 Toner 33
2019-02-27 21:25:48 VerbleibendeSeiten 7395
REQUEST:
data
header
ignoreredirects 0
retryCount 0
type update
url http://192.168.4.1/hp/device/this.LCDispatcher?nav=hp.Supplies
value 0
sslargs:
Attributes:
DbLogExclude .*
enableControlSet 1
enforceGoodReadingNames 1
reading01Name Toner
reading01Regex (?s)Patrone Schwarz.*?([\d]+%)
reading02Name VerbleibendeSeiten
reading02Regex <span class="hpPageText" >([0-9]+)
reading03Name Kit
reading03Regex (?s)Wartungskit.*?([\d]+%)
reading04Name VerbleibendeSeiten
reading04Regex <span class="hpPageText" >Mit diesem Artikel gedruckte Seiten:</span></td>\s*<td style="text-align:right" >\s*<span class="hpPageText" >([0-9]+)
reading05Name FastVerbraucht
reading05Regex (?s)hpPageText.*?hpPageText" >(.*?)<
reading06Name KeinToner
reading06Regex <span class="hpPageText" >Fast verbraucht:</span></td>\s*<td style="text-align:right" >\s*<span class="hpPageText" >([A-Za-z]+)
stateFormat Resttoner: Toner %
userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex
Wie das mit verbose geht, hab ich keine Ahnung.
Zitat von: Gear am 09 März 2019, 18:12:33
Wie das mit verbose geht, hab ich keine Ahnung.
attr IT.Drucker.SW.State verbose 5
set IT.Drucker.SW.State reread
Dann in der Log schauen