Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Drukarki Konica Minolta - poziom tonerów

piottro1 21 Lut 2016 09:58 1881 26
  • #1 21 Lut 2016 09:58
    piottro1
    Poziom 10  

    Witam, zamierzam napisać prostą stronę (mam nadzieję), na której będzie podgląd poziomów tonerów drukarek. Na początek może jednej drukarki sieciowej.

    Znam adres (IP) drukarki, posiadam wiedzę na temat html. Czy ma ktoś doświadczenie w takim temacie i będzie potrafił mnie pokierować, jak to zrobić w prosty sposób? Czy w ogóle jest to wykonalne?

    Dzięki za wszelką pomoc.

    0 26
  • Pomocny post
    #2 21 Lut 2016 12:37
    mbo
    VIP Zasłużony dla elektroda

    Odczyt poziomu tonera (i wielu innych informacji) powinien być możliwy za pomocą SNMP.

    0
  • #3 21 Lut 2016 12:48
    piottro1
    Poziom 10  

    Tak, dziękuję, ale chciałbym to wyciągnąć na prostą stronę html a nie wiem jak technicznie to zrobić i czy się da.

    0
  • Pomocny post
    #4 21 Lut 2016 13:43
    mbo
    VIP Zasłużony dla elektroda

    Ściągasz dane z SNMP przez prosty skrypt w shellu lub php.
    Dalej co z tym zrobisz to już tylko wyobraźnia.

    0
  • #5 22 Lut 2016 07:58
    piottro1
    Poziom 10  

    Czy do SNMP muszę instalować jakieś dodatkowe oprogramowanie na komputerze?
    Dziękuję ale nadal nie wiem "z czym to się je". Masz może doświadczenie z tego rodzaju odbiorem danych? Może jakiś choć mały przykładowy skrypt? Byłbym wdzięczny.

    0
  • Pomocny post
    #6 22 Lut 2016 08:51
    mbo
    VIP Zasłużony dla elektroda

    Potrzebujesz polecenie snmpget lub jego odpowiednik w php.

    Mam doświadczenie z SNMP, akurat nie z drukarkami, ale nie ma to większego znaczenia.

    Trzeba też ustalić pod jakim OID'em jest interesująca cię wartość poziomu tonera.
    Aby było prosto przydają się MIB'y od producenta drukarki.

    0
  • #7 22 Lut 2016 10:20
    piottro1
    Poziom 10  

    Na chwilę obecną znalazłem w internecie OID'y dla Konica-Minolta BizHub C451:

    Black: 1.3.6.1.2.1.43.11.1.1.9.1.4
    Cyan: 1.3.6.1.2.1.43.11.1.1.9.1.1
    Magenta: 1.3.6.1.2.1.43.11.1.1.9.1.2
    Yellow: 1.3.6.1.2.1.43.11.1.1.9.1.3

    Czy o to chodziło?

    Czy MIB'y są unikalne dla różnych urządzeń (np. drukarka bizhub C253 i C224) i powinienem dla każdej pozyskać je osobno?

    0
  • #8 22 Lut 2016 10:31
    mbo
    VIP Zasłużony dla elektroda

    W obrębie jednej firmy powinny być te same.
    Łatwo to zweryfikujesz porównując odczytana wartość z tym co pokazuje WWW drukarki.

    0
  • #9 22 Lut 2016 11:00
    piottro1
    Poziom 10  

    mbo napisał:
    W obrębie jednej firmy powinny być te same.
    Masz na myśli np. Konica Minolta? Jeśli mam modele 20P, 40P, C35P, C220, C224e, C224, C253, C280... to dla wszystkich będą te same?

    mbo napisał:
    Łatwo to zweryfikujesz porównując odczytana wartość z tym co pokazuje WWW drukarki.
    A orientujesz się jak to mogę zweryfikować? Dodaję screen po połączeniu przez www do dwóch różnych drukarek:

    Drukarki Konica Minolta - poziom tonerów01.jpg Download (178.2 kB) Drukarki Konica Minolta - poziom tonerów02.jpg Download (179.19 kB)

    Używałeś może to narzędzie? Będzie się nadawało do uzyskania takich danych?
    http://www.wtcs.org/snmp4tpc/getif.htm

    0
  • #10 22 Lut 2016 12:37
    mbo
    VIP Zasłużony dla elektroda

    Miałem na myśli, ze zwykle jedna firma trzyma się ustalonych OID'ów we wszystkich produktach. To z doświadczeń z używania SMP do odczytu różnych parametrów.

    Na obrazkach jest tylko ustawienie SNMP.
    Czy to ta wartość stwierdzisz porównując % pozostałego tonera.

    Nie używałem.
    Do testu aby stwierdzić czy to właściwy OID się nada, ale celem użycia od strony już nie bardzo.
    Polecenie snmpget lub odpowiednik w PHP będzie idealne.

    0
  • #11 22 Lut 2016 13:32
    piottro1
    Poziom 10  

    Ok, dziękuję.

    Znalazłem taki skrypt:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    Zmieniłem oczywiście IP drukarki, jeszcze sprawdzę poprawny OID.
    Niestety, skrypt oddaje mi błąd:
    Fatal error: Call to undefined function snmpwalkoid() in
    w linii:
    Code:
    $tx_bytes_snmp = snmpwalkoid("$ip", "public", ".1.3.6.1.4.1.14988.1.1.1.2.1.3");

    Sprawdziłem plik php.ini, mam odkomentowaną linię:
    Code:
    extension=php_snmp.dll


    Co może być nie tak?

    0
  • #12 22 Lut 2016 20:55
    mbo
    VIP Zasłużony dla elektroda

    Nie masz funkcji snmpwalkoid w swoim PHP.

    0
  • #13 22 Lut 2016 21:02
    piottro1
    Poziom 10  

    Nie, nie. Po prostu jestem gapą. Nie restartowałem serwera po naniesionej zmianie w php.ini :)

    Teraz już skrypt działa. Właśnie testuję na różnych drukarkach i coś mi tylko przekłamuje trochę.

    Aktualnie używam prostszego kodu, może się komuś przyda:

    Kod: php
    Zaloguj się, aby zobaczyć kod



    Bardzo dziękuję za pomoc, być może jeszcze się odezwę w tym temacie.

    0
  • #14 22 Lut 2016 21:55
    mbo
    VIP Zasłużony dla elektroda

    Jak już będziesz miał konkretny OID praktyczniej będzie użyć snmpget zamiast snmpwalk.

    0
  • #15 23 Lut 2016 06:40
    piottro1
    Poziom 10  

    A no właśnie, zdaje się że do wyciągania różnych informacji z SNMP służą różne OID'y?
    Jeśli tak jest to bardzo fajna sprawa, bo mógłbym tym sposobem wyciągnąć jeszcze np. nazwę modelu urządzenia, nazwę urządzenia, lokalizację i pewnie wiele innych danych.

    Co masz na myśli pisząc, że snmpget jest bardziej praktyczny?

    0
  • #16 23 Lut 2016 12:17
    mbo
    VIP Zasłużony dla elektroda

    snmpget ściąga tylko dana wartość konkretnego jednego OID'a - łatwo można to przypisać np. do jakiejś zmiennej.
    snmpwalk ściąga całą gałąź OID.

    Powinny być wszystkie wymienione dane i wiele więcej.

    0
  • #17 25 Lut 2016 09:23
    piottro1
    Poziom 10  

    Wykorzystałem funkcję snmpget w taki sposób:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    Nie wiem czy poprawnie zapisuję do zmiennej i odczytuję odebraną wartość. Może jest inny sposób?

    Wyświetlenie zawartości zmiennej, w której odebrałem poziom tonera z drukarki, wygląda tak:
    Code:
    INTEGER: 75


    Potrzebuję tylko wartość cyfrową, którą użyję do stworzenia progressbar'a, więc zastosowałem funkcję str_replace w taki sposób:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #18 25 Lut 2016 09:37
    mbo
    VIP Zasłużony dla elektroda

    To czym wytniesz tekst z przodu nie ma większego znaczenia.

    W konsoli dając odpowiednie opcje polecenia można decydować jak będzie wyglądał wynik.

    0
  • #19 25 Lut 2016 09:54
    piottro1
    Poziom 10  

    No, nie korzystam z konsoli ale mniejsza z tym.

    Inny problem to próba odczytania innego OID niż tylko poziomy tonerów.
    Nie wszystkie udaje mi się poprawnie odczytać.
    Na przykład ten:

    Code:
    .1.3.6.1.2.1.43.11.1.1.9.1.3
    pozwala sprawdzić poziom tonera yellow w drukarce KONICA MINOLTA bizhub C280 (sposobem, który opisałem wyżej).
    Natomiast ten OID (prawdopodobnie nazwa urządzenia):
    Code:
    .1.3.6.1.2.1.25.3.2.1.3
    oddaje błąd:
    Code:
    snmpget(): Error in packet at 'iso.3.6.1.2.1.25.3.2.1.3': (noSuchName) There is no such variable name in this MIB. in C:\xampp\htdocs\snmp\page_03.php on line 39

    Gdy sprawdzam go funkcją snmpwalk w pętli:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    otrzymuję:
    Code:
    "KONICA MINOLTA bizhub C280"
    
    "KONICA MINOLTA bizhub C280"
    "Ethernet 10/100/1000 Base-T"
    "HDD"


    Potrzebuję tylko nazwę drukarki, czyli tego stringa: KONICA MINOLTA bizhub C280
    Da się go jakoś wyodrębnić inaczej z OID'a, którego posiadam?

    0
  • #20 26 Lut 2016 02:29
    mbo
    VIP Zasłużony dla elektroda

    Widocznie nie jest to cały OID - ma kilka podgałęzi.

    Sprawdź dokładnie co wyświetla snmpwalk

    Zapewne na końcu trzeba dopisać 0 lub 1.

    0
  • #21 26 Lut 2016 07:59
    piottro1
    Poziom 10  

    Wystarczył get :)
    Dopisałem jedynkę i:

    Code:
    STRING: "KONICA MINOLTA bizhub 284e" 

    Teraz wystarczy usunąć ten tag i cudzysłów.

    Chętnie dał bym Ci "pomógł" ale wyczerpałem zasób dozwolonych. Bardzo mi pomogłeś w tym temacie, dziękuję.

    Zapytam jeszcze czy mogę tutaj udostępnić tych kilka OID, które posiadam? Pytam, ponieważ za bazę MIB w Konice żądają podpisania klauzuli lojalności.

    Poszukuję jeszcze OID który dał by mi możliwość przechwycenia statusu drukarki Konica Minolta (ready, low paper...). Może ktoś posiada i się też podzieli?
    Drukarki Konica Minolta - poziom tonerów01.png Download (30.61 kB)

    0
  • #22 26 Lut 2016 22:39
    mbo
    VIP Zasłużony dla elektroda

    Jeśli masz MIB'y od producenta to tam powinieneś znaleźć odpowiedni OID.

    Ewentualnie można szukać doświadczalnie zrzucając całą zawartość SNMP z urządzenia z komunikatem o błędzie i bez niego. Następnie dokonać porównania.

    0
  • #23 26 Lut 2016 22:44
    piottro1
    Poziom 10  

    Nie, pełnej bazy nie dostałem, zaledwie tylko kilka OID'ów. Dlatego pytałem czy może ktoś posiada i chce się podzielić.

    mbo napisał:
    ... z komunikatem o błędzie i bez niego. Następnie dokonać porównania.
    Tak, do dobry sposób.

    mbo napisał:
    zrzucając całą zawartość SNMP z urządzenia
    Jak to najprościej zrobić?

    0
  • #24 28 Lut 2016 12:51
    mbo
    VIP Zasłużony dla elektroda

    snmpwalk <parametry> .1

    1
  • #25 01 Mar 2016 04:31
    piottro1
    Poziom 10  

    Niestety nie udało mi się zrzucić całej zawartości SNMP z urządzenia, sposobem który podałeś.
    Znalazłem natomiast to:
    http://www.oidview.com/mibs/0/Printer-MIB.html
    i wybrałem potrzebne mi OID'y. Na chwilę obecną jestem zadowolony.

    Jednak to nie koniec problemów. Wyciągając informację o ostrzeżeniach z drukarek używam OID

    Code:
    .1.3.6.1.2.1.43.18.1.1.8
    i wszystko pięknie działa... dopóki występują w drukarce ostrzeżenia.

    Zrobiłem doświadczenie.
    W drukarce występowały dwa ostrzeżenia:
    Low Paper Tray1 i Low Paper Tray2, które odczytałem używając powyższy OID. Uzupełniłem papier w pierwszym zasobniku i pierwsze ostrzeżenie zniknęło. Uzupełniłem więc papier również w drugim i... stwierdziłem, że gdy jest brak ostrzeżeń w drukarce to na przygotowanej stronie otrzymuję brzydkie "warningi"
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Jestem ciekaw co odbieram funkcją snmpwalk gdy nie występują ostrzeżenia w drukarce? Jak pozbyć się tych ostrzeżeń?

    0
  • #26 01 Mar 2016 09:19
    mbo
    VIP Zasłużony dla elektroda

    Działa tak snmpwalk do zrzucenia całego drzewa, ale jako polecenie z CLI z poziomu PHP to nie wiem.

    Widocznie wtedy nic tam nie ma.

    Odpowiedni if w kodzie strony załatwi sprawę.

    0