Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Druckerinfos mit Parser auslesen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Druckerinfos mit Parser auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @FredF last edited by Homoran

      @fredf sagte in Druckerinfos mit Parser auslesen:

      Wo gebe ich denn die Credentials an?

      das geht eben nicht über den Parser.
      Je nachdem wie das gesichert ist geht das auch anders nicht.

      Deswegen war das meine erste Frage

      EDIT:
      du brauchst ein Web-interface mit den Toner/Tintenständen ohne login

      bei dir kommt:
      you are required to Login, please Login

      1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO @Kuddel last edited by

        @kuddel said in Druckerinfos mit Parser auslesen:

        DCP-L3550CDW

        snmp aktivieren für deinen drucker
        https://support.brother.com/g/b/faqend.aspx?c=de&lang=de&prod=dcpl3550cdw_eu&faqid=faq00100232_511

        oid zum probieren
        http://www.drucker-snmp.de/printer-administration/zaehlerstand-auslesen/

        alternativ oder ergänzend einen snmp browser um darüber andere oids zu finden, die passen könnten.
        darüber habe ich die bei mir gefunden
        https://www.heise.de/download/product/ireasoning-mib-browser-personal-edition-56374

        du musst beachten.
        wenn der füllstand in Prozent angezeigt wird, dann könnte im snmp der wert auch in 255 Einheiten (1 byte) stehen. 255=100% und 0=0%

        K 1 Reply Last reply Reply Quote 0
        • K
          Kuddel @OliverIO last edited by Kuddel

          @oliverio

          SNMP aktiv: OK

          oid zum probieren:

          Gesamt Anzahl an gedruckten Seiten = 6
          Hersteller -= leer
          Lebensdauer Bandeinheit = 49986
          Lebensdauer Trommeleinheit = 17889
          Toner / Tintenpatrone Füllstand: schwarz = Black Toner Cartridge

          SNMP Browser (MIB Browser):


          91e94609-37b8-4e0b-9bfd-3487deba7355-grafik.png

          OliverIO 1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO @Kuddel last edited by

            @kuddel said in Druckerinfos mit Parser auslesen:

            @oliverio

            SNMP aktiv: OK

            oid zum probieren:

            Gesamt Anzahl an gedruckten Seiten = 6
            Hersteller -= leer
            Lebensdauer Bandeinheit = 49986
            Lebensdauer Trommeleinheit = 17889
            Toner / Tintenpatrone Füllstand: schwarz = Black Toner Cartridge

            SNMP Browser (MIB Browser):


            91e94609-37b8-4e0b-9bfd-3487deba7355-grafik.png

            ok,

            sind aber wenige zeilen im mib browser
            ich habe da beim hl-3040cn über 2000 zeilen

            K 1 Reply Last reply Reply Quote 0
            • K
              Kuddel @OliverIO last edited by

              @oliverio ja bei mir sind das auch so viele zeilen wie bei dir.

              ich kann ganz schön viel runterscrollen.

              Hast du deinen Tonerstand über SNMP ausgelesen?

              OliverIO 1 Reply Last reply Reply Quote 0
              • OliverIO
                OliverIO @Kuddel last edited by

                @kuddel said in Druckerinfos mit Parser auslesen:

                @oliverio ja bei mir sind das auch so viele zeilen wie bei dir.

                ich kann ganz schön viel runterscrollen.

                Hast du deinen Tonerstand über SNMP ausgelesen?

                ja habe ich, habe nun auch den post von damals gefunden, der mir geholfen hat:

                https://administrator.de/forum/brother-snmp-oid-toner-208991.html

                Hallo,
                
                so, wenn ich jetzt folgendes in der Testumgebung bei mir mache:
                
                Name des Toners:
                root@nagios:~# snmpget -v1 -c public 192.168.120.31 1.3.6.1.2.1.43.11.1.1.6.1.1 
                Antwort: SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 = STRING: "Black Toner Cartridge"
                
                Zustand, wenn voll:
                root@nagios:~# snmpget -v1 -c public 192.168.120.31 1.3.6.1.2.1.43.11.1.1.8.1.1
                Antwort: SNMPv2-SMI::mib-2.43.11.1.1.8.1.1 = INTEGER: -2
                
                Aktueller Stand:
                root@nagios:~# snmpget -v1 -c public 192.168.120.31 1.3.6.1.2.1.43.11.1.1.9.1.1
                Antwort: SNMPv2-SMI::mib-2.43.11.1.1.9.1.1 = INTEGER: -3
                Rechne ich nun folgendes:
                
                Füllstand = Stand * 100 / Voll
                Füllstand = -2 * 100 / -3
                Füllstand = -200 / -3
                Füllstand = 66,67
                
                Sprich: Der Toner wird in 3er Schritten abgefragt. Nun musst du nur noch Schwellenwerte einbauen. D.h. alles über 40% ist ok. 10 - 40 % = Warning, weniger als 10% = error.
                
                Gruß,
                Florian
                

                bei mir ist es tatsächlich auch so, mit dem -3 und -2 (aktuell)

                K 1 Reply Last reply Reply Quote 0
                • K
                  Kuddel @OliverIO last edited by

                  @oliverio ja auf der Seite war ich heute auch schon.

                  Die Logik geht aber nicht auf.

                  Ich habe mal eben die gleichen Abfragen bei mir gemacht:

                  c547add8-6745-477b-b2cd-b2c546fad33a-grafik.png

                  Laut der Bespielrechnung (gleiche Werte für Stand und Voll) würde bei mir auch 66,67% rauskommen.

                  Der Toner ist ja aber neu und noch komplett voll.

                  OliverIO 1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @Kuddel last edited by

                    @kuddel said in Druckerinfos mit Parser auslesen:

                    @oliverio ja auf der Seite war ich heute auch schon.

                    Die Logik geht aber nicht auf.

                    Ich habe mal eben die gleichen Abfragen bei mir gemacht:

                    c547add8-6745-477b-b2cd-b2c546fad33a-grafik.png

                    Laut der Bespielrechnung (gleiche Werte für Stand und Voll) würde bei mir auch 66,67% rauskommen.

                    Der Toner ist ja aber neu und noch komplett voll.

                    bei mir passt es bisher.
                    drucke aber auch nicht viel.
                    werde es sehen, wenn es leerer wird

                    K 1 Reply Last reply Reply Quote 0
                    • K
                      Kuddel @OliverIO last edited by

                      Da ich vom Parser Adaper und ReqEx überhaupt keine Ahnung habe, bräuchte ich noch einmal Hilfe für folgende Infos:

                      8e1288e5-fa11-45bb-ab02-56f7e1870e8b-grafik.png

                      Den Seitenzähler konnte ich per SNMP abfragen, die Aufteilung in schwarzweiß und farbe nicht.

                      Quelltext

                      <?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html lang="de" xmlns="http://www.w3.org/1999/xhtml" xml:lang="de"><head><meta http-equiv="Content-Script-Type" content="text/javascript" /><meta http-equiv="content-style-type" content="text/css" /><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><script type="text/javascript" src="/common/js/ews.js"></script><link rel="stylesheet" type="text/css" href="../common/css/common.css" />
                      <link rel="stylesheet" type="text/css" href="../common/css/ews.css" />
                      <title>Brother DCP-L3550CDW series</title></head><body><div id="baseFrame"><div id="frameContainer"><div id="headerFrameContainerLeft"><div id="headerFrameContainerRight"><div id="headerFrameInner"><div id="headerFrame"><div id="modelName"><h1>DCP-L3550CDW series</h1><div class="SetBox" id="SetBoxAuthRight"><div id="SetBoxAuthLeft"><form method="post" action="/general/status.html"><div><input type="hidden" id="CSRFToken" name="CSRFToken" value="f9MDRVUttI96beZxOrP0UxbQCW0mNjPW3bcUY3A7iGWp0rXiKQ=="/>Anmelden<input type="password" id="LogBox" name="B129d" /><input type="hidden" name="loginurl" value="/general/information.html?kind=item"/><input id="login" type="submit" value="&nbsp;" /></div></form></div></div></div><div id="corporateLogo"><a href="http://www.brother.com" target="_blank" ><img src="/common/images/logo.gif" alt="Brother" /></a></div></div><div id="solutions"><div><span><a href="http://solutions.brother.com/cgi-bin/solutions.cgi?MDL=m00124&amp;LNG=de&amp;SRC=DEVICE">Brother<br />Solutions&#32;Center</a></span></div></div><div id="tabMenu"><ul><li><ul><li class="selected"><p>Allgemein</p></li></ul></li></ul></div></div></div></div><div id="mainFrameContainer"><div id="mainFrameTopLeft"><div id="mainFrameTopRight"><div id="mainFrameTopInner"><div id="subTabMenu"><div><span><a href="#topBack">Bottom<img src="/common/images/ic_bottom.gif" alt="Bottom" /></a></span></div></div></div></div></div><div id="mainFrameInner"><div id="subMenu"><div><a href="/general/status.html">Status</a></div><div><a href="/general/reflesh.html" class="subPage">Automatische&#32;Aktualisierung</a></div><div class="selected"><div class="top"><div class="bottom"><a href="/general/information.html?kind=item">Wartungsinformationen</a></div></div></div><div><a href="/general/lists.html">Berichte/Listen</a></div><div><a href="/general/find.html">Ger&auml;t&#32;suchen</a></div><div><a href="/general/contact.html">Ansprechpartner&#32;&amp;&#32;Standort</a></div><div><a href="/general/sleep.html">Energiespardauer</a></div><div><a href="/general/powerdown.html">Autom.&#32;Abschaltung</a></div><div><a href="/general/volume.html">Lautst&auml;rke</a></div><div><a href="/general/panel.html">Bedienfeld</a></div><div><a href="/general/notice_settings.html">Best&auml;tigungen</a></div></div><div id="rightFrameContainer"><div id="rightFrame"><div id="mainContent"><div id="pageTitle"><h2>Wartungsinformationen</h2></div><script type="text/javascript">
                      // <![CDATA[
                      function csv_file_download() {
                      }window.onload=csv_file_download;
                      // ]]>
                      </script>
                      <div id="pageContents"><form method="post" action="/general/information.html?kind=item"><div><input type="hidden" id="pageid" name="pageid" value="3" /></div><div class="CSRFToken"><input type="hidden" id="CSRFToken1" name="CSRFToken" value="Y9MDRdkxoT4LIB4eOj/oRqehRJVJHTwmmPlSk0HMTkXJIael3g=="/></div><div><input type="hidden" id="postif_registration_reject" name="postif_registration_reject" value="1" /></div><div class="contentsLine"><div class="contentsButtons"><input type="submit"  value="Exportieren" /></div></div><div class="contentsGroup"><h3>Knoteninformation</h3><dl class="items"><dt>Modellname</dt><dd>Brother&nbsp;DCP-L3550CDW&nbsp;series</dd><dt>Seriennr.</dt><dd>E79018K0N222147</dd><dt>Main-Firmware-Version</dt><dd>S</dd><dt>Sub1-Firmware-Version</dt><dd>1.59</dd><dt>Speichergr&ouml;&szlig;e</dt><dd>512<span class="unit">MB</span></dd></dl></div><div class="contentsGroup"><h3>Ger&auml;testatus</h3><dl class="items"><dt>Seitenz&auml;hler</dt><dd>6</dd><dt class="subhead"><span>Farbe</span></dt><dd>6</dd><dt class="subhead"><span>SCHWARZWEISS</span></dt><dd>0</dd></dl></div><div class="contentsGroup"><h3>Verbleibende&#32;Lebensdauer</h3><dl class="items"><dt>Trommeleinheit&#32;Cyan&#32;(C)*</dt><dd>100%</dd><dt>Trommeleinheit&#32;Magenta&#32;(M)*</dt><dd>100%</dd><dt>Trommeleinheit&#32;Gelb&#32;(Y)*</dt><dd>100%</dd><dt>Trommeleinheit&#32;Schwarz&#32;(BK)*</dt><dd>100%</dd><dt>Transfereinheit</dt><dd>49986<span class="unit">Seite(n)</span></dd><dt>(Verbleibende&#32;Lebensdauer&#32;in&#32;%)</dt><dd>(100%)</dd><dt>Fixiereinheit</dt><dd>49994<span class="unit">Seite(n)</span></dd><dt>(Verbleibende&#32;Lebensdauer&#32;in&#32;%)</dt><dd>(100%)</dd><dt>Papierzufuhr-Kit&#32;1</dt><dd>49995<span class="unit">Seite(n)</span></dd><dt>(Verbleibende&#32;Lebensdauer&#32;in&#32;%)</dt><dd>(100%)</dd><dt>Toner&nbsp;Cyan&#32;(C)**</dt><dd>100%</dd><dt>Toner&nbsp;Magenta&#32;(M)**</dt><dd>100%</dd><dt>Toner&nbsp;Gelb&#32;(Y)**</dt><dd>100%</dd><dt>Toner&nbsp;Schwarz&#32;(BK)**</dt><dd>100%</dd></dl></div><div class="contentsGroup"><h3>Gesamtanzahl&#32;gedruckter&#32;Seiten</h3><dl class="items"><dt>A4/Letter</dt><dd>2<span class="unit">Seite(n)</span></dd><dt>Legal/Folio</dt><dd>4<span class="unit">Seite(n)</span></dd><dt>B5/Executive</dt><dd>0<span class="unit">Seite(n)</span></dd><dt>Umschlag</dt><dd>0<span class="unit">Seite(n)</span></dd><dt>A5</dt><dd>0<span class="unit">Seite(n)</span></dd><dt>Sonstige</dt><dd>0<span class="unit">Seite(n)</span></dd></dl></div><div class="contentsGroup"><h3>Gesamtanzahl&#32;gedruckter&#32;Seiten</h3><dl class="items"><dt>Normal/D&uuml;nn/Recycled</dt><dd>6<span class="unit">Seite(n)</span></dd><dt>Dick/Dicker/Briefpapier</dt><dd>0<span class="unit">Seite(n)</span></dd><dt>Umschl&auml;ge/Umschl&auml;ge&#32;Dick/Umschl&auml;ge&#32;D&uuml;nn</dt><dd>0<span class="unit">Seite(n)</span></dd><dt>Etikett</dt><dd>0<span class="unit">Seite(n)</span></dd><dt>Hagaki</dt><dd>0<span class="unit">Seite(n)</span></dd><dt>Glanz</dt><dd>0<span class="unit">Seite(n)</span></dd></dl></div><div class="contentsGroup"><h3>Gesamtanzahl&#32;gedruckter&#32;Seiten</h3><dl class="items"><dt>Insgesamt</dt><dd>6<span class="unit">Seite(n)</span></dd><dt class="subhead"><span>Farbe</span></dt><dd>6</dd><dt class="subhead"><span>SCHWARZWEISS</span></dt><dd>0</dd><dt class="subhead"><span>2-seitiger&#32;Druck</span></dt><dd>2</dd><dt class="subhead"><span>Farbe&#32;2-seitig</span></dt><dd>2</dd><dt class="subhead"><span>S/W&#32;2-seitig</span></dt><dd>0</dd><dt>Kopie</dt><dd>0<span class="unit">Seite(n)</span></dd><dt class="subhead"><span>Farbe</span></dt><dd>0</dd><dt class="subhead"><span>SCHWARZWEISS</span></dt><dd>0</dd><dt class="subhead"><span>2-seitiger&#32;Druck</span></dt><dd>0</dd><dt class="subhead"><span>Farbe&#32;2-seitig</span></dt><dd>0</dd><dt class="subhead"><span>S/W&#32;2-seitig</span></dt><dd>0</dd><dt>Drucken</dt><dd>6<span class="unit">Seite(n)</span></dd><dt class="subhead"><span>Farbe</span></dt><dd>6</dd><dt class="subhead"><span>SCHWARZWEISS</span></dt><dd>0</dd><dt class="subhead"><span>2-seitiger&#32;Druck</span></dt><dd>2</dd><dt class="subhead"><span>Farbe&#32;2-seitig</span></dt><dd>2</dd><dt class="subhead"><span>S/W&#32;2-seitig</span></dt><dd>0</dd><dt>Sonstige</dt><dd>0<span class="unit">Seite(n)</span></dd><dt class="subhead"><span>Farbe</span></dt><dd>0</dd><dt class="subhead"><span>SCHWARZWEISS</span></dt><dd>0</dd><dt class="subhead"><span>2-seitiger&#32;Druck</span></dt><dd>0</dd><dt class="subhead"><span>Farbe&#32;2-seitig</span></dt><dd>0</dd><dt class="subhead"><span>S/W&#32;2-seitig</span></dt><dd>0</dd></dl></div><div class="contentsGroup"><h3>Gesamtanzahl&#32;gescannter&#32;Seiten</h3><dl class="items"><dt>ADF***</dt><dd>1<span class="unit">Seite(n)</span></dd><dt>Flachbett</dt><dd>0<span class="unit">Seite(n)</span></dd><dt>Seitenzahl&#32;Scan</dt><dd>1<span class="unit">Seite(n)</span></dd></dl></div><div class="contentsGroup"><h3>Bisher&#32;ausgetauscht</h3><dl class="items"><dt>Toner&nbsp;Cyan&#32;(C)</dt><dd>0</dd><dt>Toner&nbsp;Magenta&#32;(M)</dt><dd>0</dd><dt>Toner&nbsp;Gelb&#32;(Y)</dt><dd>0</dd><dt>Toner&nbsp;Schwarz&#32;(BK)</dt><dd>0</dd><dt>Trommeleinheit&#32;Cyan&#32;(C)</dt><dd>0</dd><dt>Trommeleinheit&#32;Magenta&#32;(M)</dt><dd>0</dd><dt>Trommeleinheit&#32;Gelb&#32;(Y)</dt><dd>0</dd><dt>Trommeleinheit&#32;Schwarz&#32;(BK)</dt><dd>0</dd><dt>Transfereinheit</dt><dd>0</dd><dt>Fixiereinheit</dt><dd>0</dd><dt>Papierzufuhr-Kit&#32;1</dt><dd>0</dd><dt>Toner-Abfallbeh&auml;lter</dt><dd>0</dd></dl></div><div class="contentsGroup"><dl class="items"><dt>Gesamtanzahl&#32;Papierstaus</dt><dd>0</dd><dt class="subhead"><span>Stau&#32;manuelle&#32;Zufuhr</span></dt><dd>0</dd><dt class="subhead"><span>Stau&#32;Zuf&uuml;hrung&#32;1</span></dt><dd>0</dd><dt class="subhead"><span>Stau&#32;innen</span></dt><dd>0</dd><dt class="subhead"><span>Stau&#32;hinten</span></dt><dd>0</dd><dt class="subhead"><span>Stau&#32;2-seitig</span></dt><dd>0</dd></dl></div><div class="contentsGroup"><dl class="items"><dt>Gesamtanzahl&#32;Papierstau&#32;(ADF)***</dt><dd>0</dd></dl></div><div class="contentsGroup"><h3>Fehler-Chronik(letzte&#32;10&#32;Fehler)</h3><table class="list errorHistory" summary="Error History"><tbody><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></tbody></table></div><div class="contentsGroup"><p class="noteMessage">*Basiert&#32;auf&#32;Druck&#32;im&#32;Format&#32;A4/Letter<br />**Die&#32;Restlebensdauer&#32;ist&#32;von&#32;der&#32;Art&#32;der&#32;gedruckten&#32;Dokumente,&#32;ihrer&#32;Deckung&#32;sowie&#32;von&#32;der&#32;Ger&auml;tenutzung&#32;abh&auml;ngig.<br />***Automatischer&#32;Vorlageneinzug<br /></p></div><div class="contentsGroup"><p class="noteMessage">Diese&#32;Wartungsinformation&#32;kann&#32;in&#32;eine&#32;CSV-Datei&#32;konvertiert&#32;werden.<br />Klicken&#32;Sie&#32;auf&#32;Exportieren&#32;um&#32;die&#32;CSV-Datei&#32;zu&#32;erzeugen.</p></div><div class="contentsButtons"><input type="submit"  value="Exportieren" /></div></form></div></div></div></div><script type="text/javascript"><!--
                      SetMinHeight();
                      // --></script></div><div id="mainFrameBottomLeft"><div id="mainFrameBottomRight"><div id="mainFrameBottomInner"></div></div></div></div><div id="footerFrameContainer"><div id="copyright">Copyright(C) 2000-2018 Brother Industries, Ltd. All Rights Reserved.</div><div id="topBack"><a href="#">Top<img src="/common/images/ic_pt.gif" alt="Top" /></a></div></div></div></div></body></html>
                      
                      
                      

                      Homoran 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @Kuddel last edited by

                        @kuddel
                        über Parser:
                        Farbe Farbe[^\d]+(\d+) Typ number; NUM 0
                        Schwarzweiß: ISS[^\d]+(\d+) Typ number; NUM 0

                        K 1 Reply Last reply Reply Quote 0
                        • K
                          Kuddel @Homoran last edited by

                          @homoran sagte in Druckerinfos mit Parser auslesen:

                          @kuddel
                          über Parser:
                          Farbe Farbe[^\d]+(\d+) Typ number; NUM 0
                          Schwarzweiß: ISS[^\d]+(\d+) Typ number; NUM 0

                          Farbe geht mit folgenden Einstellungen:
                          Farbe Colour[^\d]+(\d+) Typ number; NUM 0

                          Schwarz mit:
                          Schwarz B&amp;W[^\d]+(\d+) Typ number; NUM 0

                          74f950d6-d0c3-4449-b45f-563a2630f4d1-grafik.png

                          Vielen Dank für die schnelle Hilfe

                          Homoran 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @Kuddel last edited by

                            @kuddel wieso hast du jetzt einen anderen Quelltext?

                            K 1 Reply Last reply Reply Quote 0
                            • K
                              Kuddel @Homoran last edited by

                              @homoran habe den Quelltext per Firefox kopiert. Ich vermute mal, dass der Firefox das was ins deutsche übersetzt hat und der Parser Adapter die original Sprache verwendet

                              Homoran 1 Reply Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @Kuddel last edited by

                                @kuddel sagte in Druckerinfos mit Parser auslesen:

                                habe den Quelltext per Firefox kopiert. Ich vermute mal, dass der Firefox das was ins deutsche übersetzt hat und der Parser Adapter die original Sprache verwendet

                                oder verschiedene Sprachversionen im Drucker existieren

                                Wenn der parser die englische abruft kann natürlich mein RegEx von der deutschen Version nicht passen

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post

                                Support us

                                ioBroker
                                Community Adapters
                                Donate
                                FAQ Cloud / IOT
                                HowTo: Node.js-Update
                                HowTo: Backup/Restore
                                Downloads
                                BLOG

                                813
                                Online

                                31.8k
                                Users

                                79.9k
                                Topics

                                1.3m
                                Posts

                                7
                                113
                                7061
                                Loading More Posts
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes
                                Reply
                                • Reply as topic
                                Log in to reply
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                The ioBroker Community 2014-2023
                                logo