[erledigt] brother netzwerk laser per httpmod abfragen

Begonnen von the ratman, 16 Februar 2019, 14:35:49

Vorheriges Thema - Nächstes Thema

Maista

Moin

Attribut reading01RegOpt
Oder wie das regex bei dir heißt.
Auswendig weiß ich nicht was die alles bewirken.
Aber die dienen zum steuern ob und wie z.B. Zeilen behandelt werden sollen.
Im regex101 werden die Optionen ja kurz in der Funktion beschrieben.

Muss weiter arbeiten ???

Gruss Gerd

the ratman

#31
ahh, schurke *g*
selber muß man das anlegen ... so wie die regex auch. ist noch neu für mich, dass nicht alles auswählbar ist
attr httpmod_augenlaser reading05RegOpt gm

stimmt aber immer noch was nicht
reading05Name   Status
reading05RegOpt   gm
reading05Regex   <th>1<\/th><td>(.*)<\/td>
ergibtWenig Toner :BK</td><td>Page&nbsp;:&nbsp;728</td></tr><tr><th>2</th><td>Stau Duplex</td><td>Page&nbsp;:&nbsp;188</td></tr><tr><th>3</th><td></td><td>Page&nbsp;:&nbsp;0</td></tr><tr><th>4</th><td></td><td>Page&nbsp;:&nbsp;0</td></tr><tr><th>5</th><td></td><td>Page&nbsp;:&nbsp;0</td></tr><tr><th>6</th><td></td><td>Page&nbsp;:&nbsp;0</td></tr><tr><th>7</th><td></td><td>Page&nbsp;:&nbsp;0</td></tr><tr><th>8</th><td></td><td>Page&nbsp;:&nbsp;0</td></tr><tr><th>9</th><td></td><td>Page&nbsp;:&nbsp;0</td></tr><tr><th>10</th><td></td><td>Page&nbsp;:&nbsp;0
→do↑p!dnʇs↓shit←

frank

der quantifier "*" hat die eigenschaft "greedy" => "frisst alles", bis zum letzten auftauchen von "<".

umstellung auf non-greedy durch nachfolgendes fragezeichen "*?".
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

the ratman

#33
und das wars auch schon - vielen dank für die hilfe, ihr 2!
ich seh schon - regex und dann auch noch der httpmod sind ne riesen spielwiese.

somit abschließend, falls dies auch ins template übernommen werden soll:

attr httpmod_augenlaser reading05Name Status
attr httpmod_augenlaser reading05RegOpt gm
attr httpmod_augenlaser reading05Regex <th>1<\/th><td>(.*?)<
ergibt den fehlerstatus, der unter der nummer 1 von 10 möglichen zu finden ist.
da ich erst 2 dieser fehler im leben meines druckers hab, ists noch nicht felsenfest, aber es scheint, also ob die nr. 1 immer der letzte aufgetretene fehler ist.
somit sollte man mit obiger regex immer den aktuellesten fehler im klartext bekommen, was doch sehr waf-freundlich ist.
einziges manko: der fehler steht so lange da, bis es nen neuen gibt ...

aja, man kann auch noch die seite, ab der der fehler aufgetreten ist angeben. brauch ich aber nicht.
falls es wer braucht: die vollständige zeile dafür würde folgenden qualltext haben: <tr><th>1</th><td>Wenig Toner :BK</td><td>Seite&nbsp;:&nbsp;728</td></tr>
falls hier jemals eine einheitliceh angabe von druckereigenschaften erwünscht ist liefer ich gern auch noch alles andere, was die seite her gibt.
→do↑p!dnʇs↓shit←

frank

besser so, mit klammern und punkt:
attr httpmod_augenlaser reading05Regex <th>1<\/th><td>(.*?)<
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

the ratman

#35
o.k. habs oben rein gebessert
hatte die klammern sogar, nur ohne punkt - da hat er sich aufgeregt ... jojo, ich glaub, in sachen regex werd ich noch einigen leute im lauf der zeit gehörig auf die nerven gehen *lach*
→do↑p!dnʇs↓shit←

Maista

Moin

Ich habe auch nicht viel Ahnung davon :=)
Ein Buch habe ich dazu.

Bei mir wird bei der der Stadt die Blitzer abgefragt, beim SWR3 hole ich mir die gespielten Titel.
Und ein paar Tankstellen frage ich noch ab.
Sporadisch probiere ich die Erdbeben in DL Abzufragen.

Mein HP Drucker scheint hingegen ganz andere Seiten zu erzeugen.
Da gibt's kein HTML  als Ausgabe   :-\

Gruß Gerd

the ratman

#37
täusch ich mich, oder hat sich da ned einer der wissenden mit nem myutils was gebastelt für hp?
finds nur grade nicht.

und wenn du mal einen gesprächigen drucker willst ... kauf dir nen brother Web-based Management (Webserver)
Telnet
SNMP
Remote Setup
LPD (PC-Fax senden)
Raw-Port
IPP
AirPrint
Webdienst
Google Cloud Print
Proxy
Netzwerk-Scan
PC-Faxempfang
POP3/SMTP
FTP
TFTP
CIFS
mDNS
LLMNR
SNTP

und meiner ist nicht mal der neueste - die neueren können sicher noch mehr *lach*
→do↑p!dnʇs↓shit←

Beta-User

Zitat von: the ratman am 25 Februar 2019, 14:54:11
somit abschließend, falls dies auch ins template übernommen werden soll:
Ob soll oder nicht soll, es ist seit eben jedenfalls drin ;D .

Bei hp: wenn die mit httpmod abzufragen sind, gibt's dafür auch ein paar templates.
Es "kann" aber sein, dass da Optimierungsmöglichkeiten bestehen ::) , ich habe das auch "nur zusammenkopiert" und regex kann ich auch nur, wenn ich muß...
Für die hp's konnte ich es jedenfalls nicht austesten, bei den Brother-Druckern schon. Ergebnis: MFC-9142CDN funktioniert scheinbar gut, MFC-9120-CN will gar nicht (der macht das mit dem Tonerstatus mit Symbolen).

@the ratman:
Hast du mir noch den/die Typen, dann nehme ich die Info auch bei Gelegenheit in die Beschreibung rein, mit welchen es erfolgreich getestet ist.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

the ratman

erfolgreich getestet: Brother MFC-9142CDN

sollten gehen:  Brother DCP-9015 CDW DCP-9020 HL-3140 CW HL-3150 CDN HL-3170 MFC-9130 MFC-9140 MFC-9330 MFC-9340

btw - falls du da irgendwas in sachen "vereinheitlichung der abfragen" machen willst - falls der drucker es mitmacht, einfach sagen.

man könnte z.b. noch sehr einfach gerätestandort + ansprechpartner, modellname, seriennumerr, main- und 2 sub-firmwares, speichergröße an allg. daten raus holen.
dazu dann noch so ziemlich alles, was man statistisch von nem drucker haben wollen würde, wäre man eine firma. dazu sollte noch viel, viel mehr abfragen, wenn man angemeldet ist - interessant für firmen warscheinlich: welcher user darf was, wie oft und wann, ip-filter, blaaaa

und weil ichs selbs grad gefunden hab - es werden immer ein paar javascripts mit aufgerufen. darunter das "../common/js/lcddisplay.js". da mir ned wirklich klar is, wo das in der webübersicht stehen sollte, könnte man ja fast schon vermuten, man könnte das display zur anzeige eigener sachen mißbrauchen? das ding kann auch geräusche machen - könnte lustig sein *g*.
doku hab ich keine gefunden, aber vielleicht weiß da ja wer was?
→do↑p!dnʇs↓shit←

Beta-User

Danke für die Modell-Info, das kommt dann zusammen mit einem Link zum "Vorschlags-Thread" mit dem nächsten update.
Zitat von: the ratman am 26 Februar 2019, 08:12:14
btw - falls du da irgendwas in sachen "vereinheitlichung der abfragen" machen willst - falls der drucker es mitmacht, einfach sagen.

man könnte z.b. noch sehr einfach [...]
Bin kein regex-Experte, wenn da jemand Vorschläge zur Vereinheitlichung hat: her damit...

Was eine "extended Version" angeht:
Man kann auch einen "Kettenaufruf" von templates machen (siehe die tasmota-Beispiele in mqtt2.template). Hier würde ich vorschlagen, zwei templates anzubieten: eines, das "nur" die Basis macht (das exisiterende) und ein zweites, das das dann - für einen ggf. speziellen Nutzerkreis - erweitert (und intern erst mal das erste aufruft). So haben "normalos" was funktionales und müssen nicht unnützes Zeug wieder löschen, und die, die mehr wissen wollen/müssen, bekommen auch das passende.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

frank

moin.

mit templates habe ich noch nicht gespielt. es hört sich aber so an, als würde dann mit 2 stufen unnötiger weise auch 2 mal der selbe request erfolgen.
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

Beta-User

Zitat von: frank am 26 Februar 2019, 09:09:23
mit templates habe ich noch nicht gespielt. es hört sich aber so an, als würde dann mit 2 stufen unnötiger weise auch 2 mal der selbe request erfolgen.
Das mit den zwei Stufen erfolgt nur einmalig beim Anwenden der templates, die zur erstmaligen Einrichtung gedacht sind, nicht im laufenden Betrieb.

Also: wird template2 aufgerufen, ruft dies intern zunächst template1 auf, greift sich die Anweisungen von dort (idR.: schreibe Attribute, im tasmota-Fall auch: Konfiguriere den Aktor so, dass der zukünftig on statt ON sendet), dann wird der Rest von template2 ausgeführt, als ggf. auch ein gerade erst geschriebenes Attribut durch ein anderes ersetzt.

Im laufenden Betrieb sind dann die tatsächlich vorhandenen Attribute wichtig, und da ruft man in der Regel ja auch nicht mehr attrTemplate auf (was theoretisch möglich wäre, aber vermutlich nur in speziellen Fällen sinnvoll sein könnte).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

frank

merci. das hört sich ja wirklich interessant an.
muss ich demnächst mal mit spielen.  :)
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

Mathea

#44
Hallo Leute,

ich schreibe einen Beitrag, weil die hier beschriebene Vorgehensweise zum Drucker abfragen bei mir leider nicht funktioniert hat. Ich habe es auch mit dem fhem HTTPMOD-Template probiert, aber das Modul hat die Suchabfragen immer als "UNMATCHED_READINGS" gemeldet.

Gestern konnte ich es endlich via "XPath-Strict" zum Laufen bringen.

Hier die Vorgehensweise für alle Laien, wie mich, die es auch gerne umsetzen möchten:

1. Zunächst "set [DeviceName] attrTemplate brother_printer_cartridge_status" ausführen, um die meisten Attribute vorzukonfigurieren.
2. Attribut "enableXPath-Strict" auf 1 setzen.
3. Die Bezeichnungen "reading[Nr.]Regex" im Attribut "userattr" in "reading[Nr.]XPath-Strict" umändern.
4. Die Attribute "reading[Nr.]Regex" löschen, da sie nicht mehr benötigt werden.
5. Nun den passenden XPath in das jeweilige Attribut "reading[Nr.]XPath-Strict" einsetzen.
    Den passenden XPath für die jeweilige Toner-Farbe kriegt man folgendermaßen raus:
    - Web-Browser Interface des Druckers über folgenden Pfad öffnen: "[IP-Adresse des Druckers]/general/information".
    - Seitenquelltext im Browser anzeigen (je nach Browser im Entwicklermenü. In meinem Fall die Vorgehensweise für Safari).
    - Rechtsklick auf die Prozentzahl des abzufragenden Toners und die Element-Informationen anzeigen.
    - Das hervorgehobene Element aufklappen, bis die aktuell angezeigte Prozentzahl im Code zu sehen ist.
    - Rechtsklick auf diese Zeile und "XPath" kopieren. Bei mir steht da dann sowas wie: "//*[@id="pageContents"]/form/div[7]/dl/dd[11]/text()".
    - Den kopierten String in das Attribut "reading[Nr.]XPath-Strict" der jeweiligen Tonerfarbe einfügen.

Bei mir sehen die Attribute dann am Ende wie folgt aus:

attr Brother_MFC_L3750CDW userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict
attr Brother_MFC_L3750CDW alias Laserdrucker
attr Brother_MFC_L3750CDW disable 0
attr Brother_MFC_L3750CDW enableControlSet 1
attr Brother_MFC_L3750CDW enableXPath-Strict 1
attr Brother_MFC_L3750CDW event-on-change-reading .*
attr Brother_MFC_L3750CDW group Haushaltsgeräte
attr Brother_MFC_L3750CDW httpVersion 1.1
attr Brother_MFC_L3750CDW icon it_printer
attr Brother_MFC_L3750CDW model brother_printer_cartridge_status
attr Brother_MFC_L3750CDW reading01Name Yellow
attr Brother_MFC_L3750CDW reading01XPath-Strict //*[@id="pageContents"]/form/div[7]/dl/dd[13]/text()
attr Brother_MFC_L3750CDW reading02Name Cyan
attr Brother_MFC_L3750CDW reading02XPath-Strict //*[@id="pageContents"]/form/div[7]/dl/dd[11]/text()
attr Brother_MFC_L3750CDW reading03Name Magenta
attr Brother_MFC_L3750CDW reading03XPath-Strict //*[@id="pageContents"]/form/div[7]/dl/dd[12]/text()
attr Brother_MFC_L3750CDW reading04Name Black
attr Brother_MFC_L3750CDW reading04XPath-Strict //*[@id="pageContents"]/form/div[7]/dl/dd[14]/text()
attr Brother_MFC_L3750CDW reading05Name gedruckte_Seiten
attr Brother_MFC_L3750CDW reading05XPath-Strict //*[@id="pageContents"]/form/div[6]/dl/dd[1]/text()
attr Brother_MFC_L3750CDW room Arbeitszimmer
attr Brother_MFC_L3750CDW showError 1
attr Brother_MFC_L3750CDW showMatched 1
attr Brother_MFC_L3750CDW stateFormat C: Cyan M: Magenta Y: Yellow B: Black


Anmerkung zum Schluss: Ich habe von HTML, Regex, etc. überhaupt keine Ahnung und habe es nur über Trial and Error hinbekommen. Bei mir funktioniert es aber. Falls jemand mit tatsächlichen Programmierkenntnissen noch Verbesserungsvorschläge hat, bin ich ganz Ohr!

Viele Grüße,
Mathea