FHEM Forum

FHEM => Sonstiges => Thema gestartet von: the ratman am 16 Februar 2019, 14:35:49

Titel: [erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 16 Februar 2019, 14:35:49
hiho,

wer mich kennt, weiß ja schon, daß regex und ich absolute totfeinde sind.
darum wie immer in solch ausweglosen situationen, meine bitte um schützenhilfe.

worum gehts? ich würd auch gern ein paar infos zu meinen druckern in fhem abbilden.
dazu mal ein brother drucker im lan und natürlich mein versagen, bei der ersten regex.

interessant für mich z.b. folgender teil aus der website meines druckers: <dt>Toner&nbsp;Cyan (C)**</dt><dd>(30.00%)</dd>
was ich will? eh klar - die 30.00%
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: rudolfkoenig am 16 Februar 2019, 14:43:10
Das ist je nach Modul unterschiedlich. Da Du nichts spezifiziert hast, habe ich freie Hand :).
Folgendes fischt aus einem String eine Zahl gefolgt von einem % raus.

Zitatfhem> { my $s = '<dt>Toner&nbsp;;Cyan (C)**</dt><dd>(30.00%)</dd>';; $s =~ m/([\d.]+%)/;; $1 }
30.00%
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: the ratman am 16 Februar 2019, 14:54:09
hehe, du bist gemein.

httmod ist gefragt - was müsste ich da in z.b. ein reading01Regex reinwerfen
da ich sowieso auch von httpmod 0 bis -1 ahnung hab, am besten gleich mein schrägen gedankengänge dazu:

ich erstell mir eine httmpod mit der def: http://192.168.178.6/general/information.html?kind=item 300 (das wäre dann die website meines drucker, auf der so ziemlich alle statistiken stehen)
somit bau ich mir 2 attr für z.b. den füllstand der farbe cyan
reading01Name   cyanProzent
reading01Regex   <dt>Toner&nbsp;;Cyan (C)**</dt><dd>(m/([\d.]+%)/)</dd> <-- jetzt mal frei schnautze nach deinem perl (sicher falsch, denk ich)

so, jetzt darfst kurz über meine komischen gedankengänge lachen und mich dann bitte verbessern *g*
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: rudolfkoenig am 16 Februar 2019, 15:07:17
HTTPMOD kenne ich nicht, und dein Regexp schaut in der Tat komisch aus. Ich wuerde sowas wie:
Zitat
reading01Name   cyanProzent
reading01Regex   Cyan.*?([\d.]+%)
versuchen.
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: Maista am 16 Februar 2019, 15:26:02
Httpmod kann jetzt auch Templates.
Da gibt's auch was zu HP und Epson Drucker.

Gruß Gerd
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: the ratman am 18 Februar 2019, 10:46:20
ah, jetzt hab ichs! ganz neue erkenntnis: lesen und gucken bildet tatsächlich *g* fehlen mir also nur mehr die regex ...

nehm ich z.b. das template für den hp drucker, schaut die ja z.b. so aus für cyan:
Ink_Y.*?='([\d]+)'
jetzt müsste man mir natürlich unter die arme greifen - eh schon wissen: regex und ich - und folgendes regexen:
<dt>Toner&nbsp;Cyan (C)**</dt><dd>(30.00%)</dd>
das müsste dann ja so in etwa gehen: Cyan.*?=[\d]+ oder irgendwie so? weiß jetzt ja nicht, ob ich die '' brauch oder ob die () bei der regex nötig sind.


nebenbei ne dumme frage - und gleich voraus: ich such keine dieser regextest-seiten oder 100-seiten abhandlungen, die ich eh ned versteh.
--> gibt es irgendwo im netz etwas, dass mir vermitteln kann, welche logik hinter regex steht - ich denke, wenn ich einmal ansatzweise die logik dahinter kapieren würde, dann hättets ihr sogar chancen, ruhe vor mir in dem bereich zu kriegen *g*.
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: DeeSPe am 18 Februar 2019, 16:53:24
Ich habe Regex mal damit gelernt und fand es nicht sonderlich schwer.
https://regexone.com/

Vorher stand ich auch mit Regex auf Kriegsfuß, seit dem ich es verstanden habe liebe ich es.

Gruß
Dan
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: the ratman am 18 Februar 2019, 17:25:37
thx - mal am we reinlesen

ich würds ja auch gern super finden - seh ja, was man damit so alles vereinfachen kann oder was überhaupt erst möglich wird.
bis jetzt halt ist jeder erklärungsversuch an mich in die falsche richtung gegangen - die verwirrung wurd immer größer und ich somit immer frustrierter *g*
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: the ratman am 19 Februar 2019, 11:39:16
hmm, die seite ist ja mal als einsteiger für dummes nicht - bei mir wirfts allerdings dann mehr fragen auf, als es antworten gibt.

ich suche ja nach einem begriff im text "Cyan" und will dann die nächsten 2 bis 3 zahlen haben, die er findet. alles dazwischen kann ich ja mit .* abdecken, denk ich mal.
-> dann leg ich mit ?= fest, dass er folgendes als variable nehmen soll. gehören dann irgendwelche '' oder klammern um die variable rum?
-> als quasi anfang fürs zahlen suchen kommt denn wohl die ( von (30% gut hin. brauch ich dann wieder klammern oder '' für die klammer?
-> die zahl selber such ich mir dann wie zusammen? kann ja auch aus 3 zahlen bestehen \d\d\d ? was is dann, wenns nur 2 zahlen gibt? nehm ich \d\d\. ? aber dann hätt ich bei 2 zahlen ja wieder das % drinnen stehen.
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: DeeSPe am 19 Februar 2019, 13:42:40
Zitat von: the ratman am 19 Februar 2019, 11:39:16
hmm, die seite ist ja mal als einsteiger für dummes nicht - bei mir wirfts allerdings dann mehr fragen auf, als es antworten gibt.

ich suche ja nach einem begriff im text "Cyan" und will dann die nächsten 2 bis 3 zahlen haben, die er findet. alles dazwischen kann ich ja mit .* abdecken, denk ich mal.
-> dann leg ich mit ?= fest, dass er folgendes als variable nehmen soll. gehören dann irgendwelche '' oder klammern um die variable rum?
-> als quasi anfang fürs zahlen suchen kommt denn wohl die ( von (30% gut hin. brauch ich dann wieder klammern oder '' für die klammer?
-> die zahl selber such ich mir dann wie zusammen? kann ja auch aus 3 zahlen bestehen \d\d\d ? was is dann, wenns nur 2 zahlen gibt? nehm ich \d\d\. ? aber dann hätt ich bei 2 zahlen ja wieder das % drinnen stehen.

1. Wofür brauchst Du variablen Inhalt (?) bei der Aufgabenstellung?
2. Ja, Du kannst ( für den Anfang nehmen, diese kannst Du mit \ escapen.
3. Du kannst in geschweiften Klammern die Wiederholungen angeben, also z.B. von 1 bis 3 Zahlen \d{1,3}

Lösungvorschlag für Cyan:
Cyan.*\((\d{1,3}\.\d{1,2}%)\)
wenn das % Zeichen Teil des Ergebnisses sein soll, oder ohne % Zeichen:
Cyan.*\((\d{1,3}\.\d{1,2})%\)

Gruß
Dan
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: the ratman am 19 Februar 2019, 15:21:15
vielen vielen dank !!! funzt mal perfekt ...
was mich mehr freut, dass ich langsam so ein winizig kleines licht am ende seh. das ist die erste regex mit mehr als .* die ich zumindest ansatzweise versteh und auch nachvollziehen kann.
aber da ist halt noch viel, was mir fehlt *g*

o.k. - erstes, was mich verwirrt hatte "=". schon klar, dass war nur in der suche des original-templates mit drinnen. blöd bin ...

mal aufteilen ...
Cyan.*\(           \) ... danach such ich - klar

(\d{1,3}\.\d{1,2})%\  alles in der klammer will ich haben. stimmts? - aber dann steh ich schon wieder an.
d{1,3} müsste dann wohl ich will die nächsten 1 bis 3 zahlen heißen, oder?
\. d{1,2} ... ja, und schon weiß ich gar nix mehr.
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: DeeSPe am 19 Februar 2019, 15:26:54
Zitat von: the ratman am 19 Februar 2019, 15:21:15
vielen vielen dank !!! funzt mal perfekt ...
was mich mehr freut, dass ich langsam so ein winizig kleines licht am ende seh. das ist die erste regex mit mehr als .* die ich zumindest ansatzweise versteh und auch nachvollziehen kann.
aber da ist halt noch viel, was mir fehlt *g*

o.k. - erstes, was mich verwirrt hatte "=". schon klar, dass war nur in der suche des original-templates mit drinnen. blöd bin ...

mal aufteilen ...
Cyan.*\(           \) ... danach such ich - klar

(\d{1,3}\.\d{1,2})%\  alles in der klammer will ich haben. stimmts? - aber dann steh ich schon wieder an.
d{1,3} müsste dann wohl ich will die nächsten 1 bis 3 zahlen heißen, oder?
\. d{1,2} ... ja, und schon weiß ich gar nix mehr.

\d{1,3} - es müssen 1-3 Zahlen folgen (mindestens eine Zahl, maximal drei Zahlen)
\.\d{1,2} - es müssen ein Punkt und dann 1-2 Zahlen folgen (mindestens eine Zahl, maximal zwei Zahlen)

Schön wenn es langsam etwas "heller" wird bei Dir.

Gruß
Dan
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: the ratman am 19 Februar 2019, 15:40:35
ahhh, schurke - das wäre also ne blöde frage gewesen, aber da stimmt wohl no ned alles. darf ich dich weiter nerven?

der quelltext wäre (der lesbarkeit halber in mehreren zeilen):<dt>Toner&nbsp;Cyan (C)**</dt><dd>(30.00%)</dd>
<dt>Toner&nbsp;Magenta (M)**</dt><dd>(30.00%)</dd>
<dt>Toner&nbsp;Gelb (Y)**</dt><dd>(30.00%)</dd>
<dt>Toner&nbsp;Schwarz (BK)**</dt><dd>(10.00%)</dd>

ich krieg aber mit reading01Name  Cyan
reading01Regex Cyan.*\((\d{1,3}\.\d{1,2})%\)
reading02Name Magenta
reading02Regex Magenta.*\((\d{1,3}\.\d{1,2})%\)
reading03Name Gelb
reading03Regex Gelb.*\((\d{1,3}\.\d{1,2})%\)
reading04Name Schwarz
reading04Regex Schwarz.*\((\d{1,3}\.\d{1,2})%\)

als ergebnis nur Cyan 10.00 2019-02-19 15:27:45
Magenta 10.00 2019-02-19 15:27:45
also falsche zahlen, gelb und schwarz kommt gar nicht ...


o.k. - mal selber was gefunten:
der suchstring reicht ned - der findet auch blödsinn.
somit erhöhe ich um "Toner&nbsp;" also z.b. "Toner&nbsp;Cyan" und geh mal fest von aus, dass &nbsp; sicher wieder ein problem wird.
ginge da auch Toner.*Cyan?

und ja - kommt der eventuell mit \( durcheinander, weil die ja vorher auch schon kommt mit z.b. (C)?
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: DeeSPe am 19 Februar 2019, 15:47:53
Probiere es mal bitte mit den genauen Such-Strings (also ohne ".*" dazwischen):
Cyan\s\(C\)\*\*</dt><dd>\((\d{1,3}\.\d{1,2})%\)
Magenta\s\(M\)\*\*</dt><dd>\((\d{1,3}\.\d{1,2})%\)
Gelb\s\(Y\)\*\*</dt><dd>\((\d{1,3}\.\d{1,2})%\)
Schwarz\s\(BK\)\*\*</dt><dd>\((\d{1,3}\.\d{1,2})%\)


Sollte auch gehen:
Cyan...............\((\d{1,3}\.\d{1,2})%\)
Magenta...............\((\d{1,3}\.\d{1,2})%\)
Gelb...............\((\d{1,3}\.\d{1,2})%\)
Schwarz................\((\d{1,3}\.\d{1,2})%\)


Gruß
Dan
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: the ratman am 19 Februar 2019, 15:54:46
vielleicht hät ich mir was einfacheres für meine ersten versuche suchen sollen *g*

der vollständigkeit halber mal ein aktuelles list - nicht, dass ich schon bei generellen einstellungen blödsinn gmacht hab:Internals:
   BUSY       0
   CHANGED   
   DEF        http://192.168.178.6/general/information.html 60
   FUUID      5c6a7ba7-f33f-0f9e-cfd0-7e63bbd2761e4026
   Interval   60
   LASTSEND   1550587785.09522
   MainURL    http://192.168.178.6/general/information.html
   ModuleVersion 3.5.8 - 12.1.2019
   NAME       httpmod_augenlaser
   NOTIFYDEV  global
   NR         267
   NTFY_ORDER 50-httpmod_augenlaser
   STATE      C: 10.00% M: 10.00% G: Gelb% S: Schwarz%
   TRIGGERTIME 1550587845.09379
   TRIGGERTIME_FMT 2019-02-19 15:50:45
   TYPE       HTTPMOD
   addr       http://192.168.178.6:80
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl http://192.168.178.6/general/information.html
   header     
   host       192.168.178.6
   httpheader HTTP/1.1 200 OK
Cache-Control: no-cache
X-Frame-Options: DENY
Content-Length: 9695
Content-Type: text/html
Content-Language: en-gb
Connection: close
Server: debut/1.30
Pragma: no-cache
   httpversion 1.1
   hu_blocking 0
   hu_filecount 79
   hu_port    80
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /general/information.html
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.178.6/general/information.html
   value      0
   QUEUE:
   READINGS:
     2019-02-19 15:47:45   Cyan            10.00
     2019-02-19 15:48:45   Magenta         10.00
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.178.6/general/information.html
     value      0
   defptr:
     readingBase:
       Cyan       reading
       Magenta    reading
     readingNum:
       Cyan       01
       Magenta    02
     readingOutdated:
     requestReadings:
       update:
         Cyan       reading 01
         Magenta    reading 02
   sslargs:
Attributes:
   alias      augenlaser infos
   group      updates
   httpVersion 1.1
   icon       it_printer
   model      B_01a_hp_printer_cartridge_status
   reading01Name Cyan
   reading01Regex Cyan\s\(C\)\*\*</dt><dd>\((\d{1,3}\.\d{1,2})%\)
   reading02Name Magenta
   reading02Regex Magenta\s\(M\)\*\*</dt><dd>\((\d{1,3}\.\d{1,2})%\)
   reading03Name Gelb
   reading03Regex Gelb\s\(Y\)\*\*</dt><dd>\((\d{1,3}\.\d{1,2})%\)
   reading04Name Schwarz
   reading04Regex Schwarz\s\(BK\)\*\*</dt><dd>\((\d{1,3}\.\d{1,2})%\)
   room       computer
   stateFormat C: Cyan% M: Magenta% G: Gelb% S: Schwarz%
   userattr   reading01Name reading01Regex reading01XPath-Strict reading02Name reading02Regex reading02XPath-Strict reading03Name reading03Regex reading03XPath-Strict reading04Name reading04Regex reading04XPath-Strict

der will uns ärgern, scheinbar ... braucht man vielleicht fürs html-zeugs < und /> jeweils noch \ davor?
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: DeeSPe am 19 Februar 2019, 15:56:30
Zitat von: the ratman am 19 Februar 2019, 15:54:46
der will uns ärgern, scheinbar ... braucht man vielleicht fürs html-zeugs < und /> jeweils noch \ davor?

Eigentlich nicht, aber versuche doch mal die zweite Variante die ich vorgegeben habe, die kommt ja ohne die HTML Tags aus.

Gruß
Dan
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: the ratman am 19 Februar 2019, 16:02:43
ist das selbe ergebnis

ich geh schwer davon aus, dass anstelle Cyan besser Toner&nbsp;Cyan als suchteil gut wäre. anstelle %nbsp; brauch ich jetzt am besten ein .*, gelle?
bzw. könnte man nur auf (C)** gehen. die ** sind eindeutig - gibts auch mit nur (C)* oder auch (C)*** - aber das scheint 100% eindeutig
z.b. Cyan allein kommt auf der seite öfter vor, auch für verwendete farben vor, seh ich grade.


es wird:
   reading01Name Cyan
   reading01Regex \(C\)\*\*.........\((\d{1,3}\.\d{1,2})%\)
   reading02Name Magenta
   reading02Regex \(M\)\*\*.........\((\d{1,3}\.\d{1,2})%\)
   reading03Name Gelb
   reading03Regex \(Y\)\*\*.........\((\d{1,3}\.\d{1,2})%\)
   reading04Name Schwarz
   reading04Regex \(BK\)\*\*.........\((\d{1,3}\.\d{1,2})%\)

goil!
ich dank dir echt herzlich - krieg wieder oberwasser in sachen regex.
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: DeeSPe am 19 Februar 2019, 16:09:31
Zitat von: the ratman am 19 Februar 2019, 16:02:43
ist das selbe ergebnis

ich geh schwer davon aus, dass anstelle Cyan besser Toner&nbsp;Cyan als suchteil gut wäre. anstelle %nbsp; brauch ich jetzt am besten ein .*, gelle?
bzw. könnte man nur auf (C)** gehen. die ** sind eindeutig - gibts auch mit nur (C)* oder auch (C)*** - aber das scheint 100% eindeutig
z.b. Cyan allein kommt auf der seite öfter vor, auch für verwendete farben vor, seh ich grade.

Setze mal:
Toner.{6}
vor die jeweiligen Readings-Regex'.

Gruß
Dan

P.S. Ich bin kein HTTPMOD Profi, kenne mich nur (mittlerweile) ganz gut mit Regex aus.
Titel: Antw:httpmod + regex + ich = dummy-hilfe erbeten!
Beitrag von: the ratman am 19 Februar 2019, 16:09:58
siehe oben - wir habens


kann man tempales irgendwie weiter geben?
bin vielleicht ned der einzige mit nem brohter laser

hier zumindest mal der rawdef- ip muß halt angepasst werden:

defmod httpmod_augenlaser HTTPMOD http://192.168.178.6/general/information.html 60
attr httpmod_augenlaser userattr reading01Name reading01Regex reading01XPath-Strict reading02Name reading02Regex reading02XPath-Strict reading03Name reading03Regex reading03XPath-Strict reading04Name reading04Regex reading04XPath-Strict
attr httpmod_augenlaser alias augenlaser infos
attr httpmod_augenlaser group updates
attr httpmod_augenlaser httpVersion 1.1
attr httpmod_augenlaser icon it_printer
attr httpmod_augenlaser model B_01a_hp_printer_cartridge_status
attr httpmod_augenlaser reading01Name Cyan
attr httpmod_augenlaser reading01Regex \(C\)\*\*.........\((\d{1,3}\.\d{1,2})%\)
attr httpmod_augenlaser reading02Name Magenta
attr httpmod_augenlaser reading02Regex \(M\)\*\*.........\((\d{1,3}\.\d{1,2})%\)
attr httpmod_augenlaser reading03Name Gelb
attr httpmod_augenlaser reading03Regex \(Y\)\*\*.........\((\d{1,3}\.\d{1,2})%\)
attr httpmod_augenlaser reading04Name Schwarz
attr httpmod_augenlaser reading04Regex \(BK\)\*\*.........\((\d{1,3}\.\d{1,2})%\)
attr httpmod_augenlaser room computer
attr httpmod_augenlaser stateFormat C: Cyan% M: Magenta% G: Gelb% S: Schwarz%
Titel: Antw:[erledigt] brother netzwerk laser per httmpd abfragen
Beitrag von: DeeSPe am 19 Februar 2019, 16:16:14
Vielleicht ist das besser optimiert auf Lesbarkeit (für Mensch und Maschine):
Toner.{6}Cyan.{15}\((\d{1,3}\.\d{1,2})%\)
Toner.{6}Magenta.{15}\((\d{1,3}\.\d{1,2})%\)
Toner.{6}Gelb.{15}\((\d{1,3}\.\d{1,2})%\)
Toner.{6}Schwarz.{16}\((\d{1,3}\.\d{1,2})%\)


Freut mich wenn wir Dein Problem gelöst haben und Du evtl. etwas gelernt hast.

Gruß
Dan
Titel: Antw:[erledigt] brother netzwerk laser per httmpd abfragen
Beitrag von: the ratman am 19 Februar 2019, 16:27:08
sicher besser - vor allem, weil mir jetzt klar ist, was {15} zu bedeuten hat - wieder was gelernt und vor allem was, dass der übersicht wirklich zuträglich ist.
allerdings kriegt er dann wieder die falschen daten.
das gibts wohl nochmal mit der info, wie oft die toner schon gewechselt wurden. müsste man also noch vor Toner.{6} html rein bringen, also "<dt>Toner,{6}". da denk ich langsam aber schon, dass meine billige lösung übersichtlicher ist. die 9 "." könnte man natürlich noch zusammen fassen.
aber ich denk: jeder, der sich über sowas gedanken macht, braucht grad meine geistigen ergüsse nicht, der hat solche problemchen warscheinlich in unter 10 sek. selber gelöst ...

der vollständigkeit halber die lösung mit 2 kommastellen:   reading01Name Cyan
   reading01Regex \(C\)\*\*.{9}\((\d{1,3}\.\d{1,2})%\)
   reading02Name Magenta
   reading02Regex \(M\)\*\*.{9}\((\d{1,3}\.\d{1,2})%\)
   reading03Name Gelb
   reading03Regex \(Y\)\*\*.{9}\((\d{1,3}\.\d{1,2})%\)
   reading04Name Schwarz
   reading04Regex \(BK\)\*\*.{9}\((\d{1,3}\.\d{1,2})%\)
und warscheinlich könnte ich eigentlich \d{1,2} weg lassen. der drucker liefert scheinbar eh nur in 10% schritten, wofür die da 2 kommastellen drinnen haben, ist mir derzeit ein rätsel.

die lösung ohne nachkommastellen sollte dann so aussehen:   reading01Name Cyan
   reading01Regex \(C\)\*\*.{9}\((\d{1,3})
   reading02Name Magenta
   reading02Regex \(M\)\*\*.{9}\((\d{1,3})
   reading03Name Gelb
   reading03Regex \(Y\)\*\*.{9}\((\d{1,3})
   reading04Name Schwarz
   reading04Regex \(BK\)\*\*.{9}\((\d{1,3})


ich lerne also: bei brother druckern sind * und deren anzahl wichtig - die einzig sichere orientierungshilfe ...
kann dir nur nochmal danken - ich hätt nicht gedacht, dass ich überhaupt nochmal über regex nachdenken werd - der weg, das zeug zu beherrschen ist sowieso noch weit, aber ich seh den weg jetzt wenigstens.

und weil ich grad stolz wie oskar bin, präsentier ich meine rg dazu *g* (oh, werd ich mich morgen schämen welch solchen überschwangs):
Titel: Antw:[erledigt] brother netzwerk laser per httmpd abfragen
Beitrag von: DeeSPe am 19 Februar 2019, 16:41:23
Top!

Schön dass Du Deine finale Lösung nun auch noch zur Verfügung gestellt hast.

Gruß
Dan
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Beta-User am 19 Februar 2019, 19:38:14
Zitat von: DeeSPe am 19 Februar 2019, 16:41:23
Top!

Schön dass Du Deine finale Lösung nun auch noch zur Verfügung gestellt hast.

Gruß
Dan
Schließe mich an.
Ergebnis ist im svn als template zu finden, habe auch ein paar Brother, war aber noch nicht dazugekommen, die regexe anzupassen :) .

Zusätzlich gibt es jetzt auch Flusspegel.

Gruß, Beta-User
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 19 Februar 2019, 19:57:07
ZitatZusätzlich gibt es jetzt auch Flusspegel.
wat n dat?  :o
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Beta-User am 19 Februar 2019, 20:02:57
Zitat von: the ratman am 19 Februar 2019, 19:57:07
wat n dat?  :o
Ganz andere Baustelle, ganz anderes template: https://forum.fhem.de/index.php/topic,97570.msg908103.html#msg908103. War nur zur Info gedacht, falls das jemand haben wollte :) .
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 24 Februar 2019, 13:08:07
mann, ich steh schon wieder mit regex an ...

wollt den brother noch ein wenig erweitern ...
brother bringt die letzten 10 fehler wunderschön aufgelistet. dabei scheint fehler nr. 1 immer der aktuellste fehler zu sein. ideal für eine kurzübersicht, dacht ich mir.

so würds im html stehen:                <th>1</th><td>Wenig Toner :BK</td>
das konstrukt:                                 \<th\>1\<\/th\>\<td\>(.*)< ergibt auf https://regex101.com Wenig Toner :BK
trag ich das 1:1 beim httpmod ein, krieg ich nen haufen weitere zeilen.

was mich ich den falsch?
und warum ergibt eine regex 2 verschiedene ergebnisse? sagts mir bitte jetzt nicht, dass das auch noch in verschiedenen sprachen verschieden gehandhabt wird ...
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Maista am 24 Februar 2019, 21:52:05
Moin

Ich frage in meinen FHEM Regex ohne \ vor den <> ab.
Nur vor dem Schrägstrich / steht ein \
Event. musst du reading01RegOpt noch setzen?
Steht bei regex101.com rechts oben in der Zeile.

Aber nur Vermutung da es via Mobilfone schwierig ist zu probieren  ;)

Schönen Abend

Gerd
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 24 Februar 2019, 22:13:43
ah sehe, mal ohne \ vor < und > - hab ich wieder übertrieben ...

ZitatEvent. musst du reading01RegOpt noch setzen?
wo find ich das?

ich danke auch für vermutungen *g*
n8n8
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Maista am 24 Februar 2019, 22:59:59
In der oberen Zeile in der du dein Regex eingibst bei regex101.com, Rechts .
Nennt sich "Regex flags", kann man draufklicken und auswählen.
Beim Start steht da vermutlich  gm
Zumindest bei mir.

Manchmal gibt's ein timeout. Dann passiert nichts mehr.
Wenn ich dann neu schreiben klappt es dann wieder.
Nervt dann etwas ::)

So, erst mal  gn8

Gerd
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 25 Februar 2019, 09:22:53
ja, das gm hab ich auch - mit nem / davor
weiß eben nur nicht, was ich damit machen soll. ich denke, ich scheitere in dem fall an httpmod - der ist ja auch mein erstes mal *g*

das einfach ans attr zu hängen bringt mal nix bei mir
und die vielen, vielen möglichkeiten weiterer attr erschlagen mich grad ein bissi. somit die frage: wohin mit dem gm, oder wie heißt das dann in httpmod?
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Maista am 25 Februar 2019, 10:15:40
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
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 25 Februar 2019, 12:32:17
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
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: frank am 25 Februar 2019, 13:15:32
der quantifier "*" hat die eigenschaft "greedy" => "frisst alles", bis zum letzten auftauchen von "<".

umstellung auf non-greedy durch nachfolgendes fragezeichen "*?".
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 25 Februar 2019, 14:54:11
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.
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: frank am 25 Februar 2019, 14:59:55
besser so, mit klammern und punkt:
attr httpmod_augenlaser reading05Regex <th>1<\/th><td>(.*?)<
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 25 Februar 2019, 15:05:59
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*
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Maista am 25 Februar 2019, 16:56:59
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
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 25 Februar 2019, 17:03:45
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*
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Beta-User am 26 Februar 2019, 07:35:28
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.
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: the ratman am 26 Februar 2019, 08:12:14
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?
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Beta-User am 26 Februar 2019, 08:40:08
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.
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: frank am 26 Februar 2019, 09:09:23
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.
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Beta-User am 26 Februar 2019, 10:17:16
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).
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: frank am 26 Februar 2019, 10:29:46
merci. das hört sich ja wirklich interessant an.
muss ich demnächst mal mit spielen.  :)
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: Mathea am 15 Dezember 2019, 14:21:12
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
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: dusti64 am 05 Dezember 2020, 09:43:30
Moin die Runde o/...

Was ich hier geschrieben hatte seiner Zeit, war mehr als Quatsch!

Sorry, ich habs berichtigt bzw. gelöscht!

Gruß Dusti
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: amenomade am 05 Dezember 2020, 21:57:47
Hast Du das httpmod.template probiert? Mich interessiert, ob es damit funtioniert oder nicht.
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: dusti64 am 09 Dezember 2020, 18:38:58
Oh Sorry...hab jetzt erst gesehen  ::)

Ja, das hatte ich ausprobiert, aber wie gesagt, keine Werte erhalten. Hab mich aber auch nicht wirklich fest gebissen...

Gruß Dusti o/
Titel: Antw:[erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: RedHorse am 24 Januar 2021, 14:40:30
Moin,
hab hier mal mitgelesen und wollte nun auch meinen Brother L3230CDW Drucker abfragen.
Dank des Tipps von Rudolf, bin ich auf die richtige Spur gekommen.

Das hier ist mein HTML String:
<dt>Toner&nbsp;Cyan (C)**</dt><dd>90%</dd>

Mit diesem RegEx funzt es bei mir wunderbar:

httpVersion 1.1
reading01Name Yellow
reading01Regex \(Y\)\*\*.*?([\d.]+)


Danke an euch alle für die wertvollen Tipps!!!!
Ihr seid echt super!
Bis neulich....
Titel: Aw: [erledigt] brother netzwerk laser per httpmod abfragen
Beitrag von: satprofi am 18 November 2023, 09:28:55
Hallo.
Habe hier Brother J Serie, wo man sich anmelden muss um die Daten auszulesen.
Wenn ich die Seite im Browser aufrufe, kommt Meldung ob ich wirklich zugreifen will. Wie bestätige ich das mit FHEM?

Gruss