[Gelöst] Problem beim Daten des Druckers auslesen mit HTTPMOD

Begonnen von Gear, 22 Februar 2019, 16:37:20

Vorheriges Thema - Nächstes Thema

Gear

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
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

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

> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

frank

"+" hat die eigenschaft "greedy", also wird das letzte auffinden des musters gesucht.
mit "+?" wird auf "non-greedy" (erstes auffinden) umgeschaltet.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Gear

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.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

amenomade

Patrone Schwarz:
(?s)Patrone Schwarz.*?([\d]+%)

Wartungskit:
(?s)Wartungskit.*?([\d]+%)

NEIN:
(?s)hpPageText.*?hpPageText" >(.*?)<angenommen, dass es immer als 2. hpPageText kommt
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Gear

Habe jetzt rumprobiert, geht leider auch nicht, es erkennt damit leider nichts.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

amenomade

Zeig mal ein "list" vom HTTPMOD Device und was in der Log mit verbose 5 kommt.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Gear

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.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

amenomade

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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus