Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Adapter - Parser (regEx)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Adapter - Parser (regEx)

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

      Dann liegt das Problem im Seitenaufruf.

      Da musst du irgendwie deine credentials mit übergeben.

      Gruß

      Rainer

      1 Reply Last reply Reply Quote 0
      • nik82
        nik82 Most Active last edited by

        Hallo,

        ich habe folgenden Fehler, ich parse eine relativ große Seite (ohne Kennwortabfrage!), unter den Objekten erscheint immer der Fehler "device error [0x44]:

        6616_parser1.jpg

        Wenn ich aber dann die Parser-Einstellungen editiere:

        6616_parser2.jpg

        6616_parser3.jpg

        Dann kommt beim Ergebnis erst keine Ausgabe, stelle ich dann aber den Typ von nuber(.) auf nuber(,) und dann wieder auf number(.) dann kommt beim Ergebniss die richtige Zahl:

        (Es ist auch egal auf was ich stelle, ob string oder sonstwas, sobald ich den Typ umstelle kommt die richtige Zahl)

        6616_parser4.jpg

        In den Objekten steht aber immer "null" drin.

        Hat hier jemand einen Tip?

        1 Reply Last reply Reply Quote 0
        • T
          Tomate last edited by

          Hallo. Ich bräuchte auch Hilfe.

          Ich würde gerne mittels Parser Adapter die Vorhersage für die tägliche Sonnenscheindauer, von dieser Seite, in den iobroker bekommen.

          https://agrar.bayer.de/de-DE/Agrar%20We … sage?day=0

          (auf dieser Seite nach unten scrollen.)

          Könnt ihr mir sagen, was ich in den Adapter eintragen muß?

          Vielen Dank
          8413_io.jpg

          1 Reply Last reply Reply Quote 0
          • D
            dtp last edited by

            Hi,

            ich wollte ja eigentlich die Fahrplanauskunft des VVS (Verkehrsverbund Stuttgart) per Parser auslesen. Geht aber leider nicht.

            Wenn ich zum Beispiel http://www2.vvs.de/vvsDM/XSLT_DM_REQUEST?dmMacro=mini&name_dm=5006112&limit=10&line=vvs%3A11001%3A+%3AR%3Aj18&line=vvs%3A11002%3A+%3AR%3Aj18&line=vvs%3A11003%3A+%3AR%3Aj18&line=vvs%3A11004%3A+%3AR%3Aj18&line=vvs%3A11005%3A+%3AR%3Aj18&line=vvs%3A11007%3A+%3AH%3Aj18&line=vvs%3A11008%3A+%3AR%3Aj18&line=vvs%3A15007%3A+%3AH%3Aj18&line=vvs%3A10001%3A+%3AH%3Aj18&line=vvs%3A10001%3A+%3AR%3Aj18&line=vvs%3A10002%3A+%3AH%3Aj18&line=vvs%3A10002%3A+%3AR%3Aj18&line=vvs%3A10003%3A+%3AH%3Aj18&line=vvs%3A10003%3A+%3AR%3Aj18&line=vvs%3A10004%3A+%3AH%3Aj18&line=vvs%3A10004%3A+%3AR%3Aj18&line=vvs%3A10005%3A+%3AH%3Aj18&line=vvs%3A10005%3A+%3AR%3Aj18&line=vvs%3A10005%3A+%3AR%3Aj18&line=vvs%3A10006%3A+%3AH%3Aj18&line=vvs%3A10006%3A+%3AR%3Aj18&line=vvs%3A10060%3A+%3AH%3Aj18&line=vvs%3A10060%3A+%3AR%3Aj18&line=vvs%3A20005%3A+%3AH%3Aj18&line=vvs%3A20005%3A+%3AR%3Aj18&line=vvs%3A20006%3A+%3AH%3Aj18&line=vvs%3A20006%3A+%3AR%3Aj18&line=vvs%3A20007%3A+%3AH%3Aj18&line=vvs%3A20007%3A+%3AR%3Aj18&line=vvs%3A20012%3A+%3AH%3Aj18&line=vvs%3A20012%3A+%3AR%3Aj18&line=vvs%3A20014%3A+%3AR%3Aj18&line=vvs%3A20015%3A+%3AH%3Aj18&line=vvs%3A20015%3A+%3AR%3Aj18&line=vvs%3A20029%3A+%3AH%3Aj18&line=vvs%3A30040%3A+%3AH%3Aj18&line=vvs%3A30040%3A+%3AR%3Aj18&line=vvs%3A30042%3A+%3AH%3Aj18&line=vvs%3A30042%3A+%3AR%3Aj18&line=vvs%3A30044%3A+%3AH%3Aj18&line=vvs%3A30044%3A+%3AR%3Aj18&line=vvs%3A30031%3A+%3AR%3Aj18 aufrufe, wird mir zwar eine Übersicht angezeigt, aber leider nicht als lesbare Tabelle. Der Parser kann also die Zeiten nicht extrahieren.

            Hat da jemand einen Tipp, ob es eine Möglichkeit gibt, direkt an die Werte zu kommen?

            Im Moment binde ich die Seite noch mit einem passenden Widget in VIS ein, um sie mir dort anzuzeigen. Geht auch, ist aber nicht ganz das, was ich haben möchte.

            1 Reply Last reply Reply Quote 0
            • E
              excalibur270 last edited by

              Frohes neues. Bin gerade am einarbeiten. Ich hätte gerne von

              ! https://www.clever-tanken.de/tankstelle_details/16695 den lpg Preis. Habe versucht mich da ranzurobben mit den Tips von hier Seite 3,7 und 8. Leider wird mir immer nur 1.2 Euro angezeigt. Kenne mich mit regex noch nicht aus.

              Und ja. Ich kenne die Agb con CT.de 😄

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

                @excalibur270:

                nd ja. Ich kenne die Agb con CT.de > Insbesondere ist es nicht gestattet, eigene Robots, Webcrawler oder sonstige Automatismen zu programmieren und die Inhalte von clever-tanken.de systematisch und umfassend in anderen Medien darzustellen oder für sonstige Zwecke zu extrahieren und zu verarbeiten. `

                und da werde ich dann nicht helfen.

                Gruß

                Rainer

                1 Reply Last reply Reply Quote 0
                • E
                  excalibur270 last edited by

                  @Homoran:

                  @excalibur270:

                  nd ja. Ich kenne die Agb con CT.de > Insbesondere ist es nicht gestattet, eigene Robots, Webcrawler oder sonstige Automatismen zu programmieren und die Inhalte von clever-tanken.de systematisch und umfassend in anderen Medien darzustellen oder für sonstige Zwecke zu extrahieren und zu verarbeiten. `

                  und da werde ich dann nicht helfen.

                  Gruß

                  Rainer `
                  Anfrage an CT ist raus seit gestern. Steht ja da das es einer Genehmigung bedarf.

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

                    genau!

                    dann sieht es anders aus.

                    Aber vielleicht kann man auch bei Herrn Kurz (Tankerkönig) nachfragen, ob er lpg mit in seine api übernimmt.

                    Das wäre noch praktischer für alle.

                    Gruß

                    Rainer

                    1 Reply Last reply Reply Quote 0
                    • E
                      excalibur270 last edited by

                      Das Wäre natürlich was. Aber ich bin doch nicht soweit weg von meinem Ziel oder? Wäre keine Hilfe sondern ein Hinweis. 😄

                      Die 1.2 waren oder sind der aktuelle Dieselpreis der Tanke.

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

                        ich seh mir das nachher mal an - habe gerade noch andere Baustellen

                        1 Reply Last reply Reply Quote 0
                        • S
                          stoepselinho last edited by

                          Hallo,
                          kann mir jemand dabei helfen? Ich würde gerne die Sonnenaufgangszeit und Sonnenuntergangszeit damit auslesen.
                          Gruß Stoepselinho

                          ```__
                          
                          [![https://sunrisesunset.de/](images/logo-sun.png)][0] 
                          
                          sunrisesunset.de
                          
                          * [__ Sonne & Mond][1]
                          * [__ Sonnenaufgang und Sonnenuntergang][2]
                          * [Mondaufgang und Monduntergang][3]
                          
                          1. [__][4]
                          2. [Deutschland][5]
                          3. Nordenham 
                          
                          # Zeiten für Sonnenaufgang und Sonnenuntergang
                          
                          Eine detaillierte Tabelle und Grafik mit den Zeiten des Sonnenaufgangs und des Sonnenuntergangs in mehr als 100.000 Städten, Orten und Ländern weltweit. Die Berechnung bezieht sich auf die geografische Mitte der ausgewählten Lage. 
                          
                          ## Nordenham, Deutschland - Wann wird es dunkel 1. Januar 2019 
                          
                          __
                          __
                          
                          __
                          
                          Bitte geben Sie 3 oder mehr Buchstaben ein
                          
                           
                          Zeit:
                          Dauer:
                          
                          Astronomische Dämmerung
                          06:31 - 07:14
                          42 Min.
                          
                          Nautische Dämmerung
                          07:14 - 07:59
                          45 Min.
                          
                          Bürgerliche Dämmerung
                          07:59 - 08:41
                          42 Min.
                          
                          **Sonnenaufgang**
                          **08:41**
                          
                          Golden Hour
                          08:41 - 09:45
                          1 Std. 3 Min.
                          
                          Zenit
                          12:29
                          
                          Golden Hour
                          15:13 - 16:17
                          1 Std. 3 Min.
                          
                          **Sonnenuntergang**
                          **16:17**
                          
                          Bürgerliche Dämmerung
                          16:17 - 17:00
                          42 Min.
                          
                          Nautische Dämmerung
                          17:00 - 17:45
                          45 Min.
                          
                          Astronomische Dämmerung
                          17:45 - 18:27
                          42 Min.
                          
                          Tageslänge am Januar :
                          
                          Sonne über dem Horizont (Tageslänge)
                          7 Std. 35 Min.
                          
                          Sonne unter dem Horizont (Nacht und Dämmerung)
                          16 Std. 24 Min.
                          
                          - deren astronomische Nacht
                          12 Std. 3 Min.
                          
                          **Im Monat  Januar, geht die Sonne auf:**
                          
                          - total  1 Std.  18 Min. *                                    
                          
                          - morgens  früher :
                          29 Min. *                                    
                          
                          - abends  später: 49 Min. *
                          
                          * Rundungsfehler können zu kleinen Abweichungen führen.
                          
                          Wann wird es dunkel 1. Januar 2019 um 17:07  :
                          
                          Sonnenposition Bürgerliche Dämmerung
                          
                          Sonne Richtung                                        __
                          239° / Südwesten
                          
                          Sonne Winkel                                         __
                          -6°
                          
                          Geographische Breite
                          53° 30'
                          
                          Geographische Länge
                          8° 30'
                          
                          **Wann wird es heute dunkel?**
                          
                          Am 1 Januar geht die Sonne um 08:41 Uhr auf und um 16:17 Uhr unter. Die Sonne steht 7 Std. 35 Min. über dem Horizont (die Tageslänge). Die astronomische Morgendämmerung (erste Lichtstrahlen) beginnt um 06:31 Uhr und um 18:27 Uhr ist es ganz dunkel (das Ende der astronomischen Dämmerung). 
                          
                          ## Table of the times of sunrise and sunset in 2019, Nordenham 
                          
                          Sommerzeit 
                          
                          Winterzeit 
                          
                          Jan Feb März April Mai Juni Juli Aug Sep Okt Nov Dez 
                          
                          108:4116:1708:1017:0807:1318:0306:5820:0105:5020:5505:0321:4405:0121:5805:4221:2206:3520:1607:2819:0307:2516:5308:1916:11
                          
                          208:4116:1808:0817:1007:1018:0506:5620:0205:4820:5705:0221:4505:0221:5705:4321:2006:3720:1407:2919:0007:2716:5108:2016:10
                          
                          308:4116:1908:0717:1207:0818:0706:5320:0405:4620:5905:0121:4605:0321:5705:4521:1906:3920:1107:3118:5807:2916:4908:2216:09
                          
                          408:4116:2108:0517:1407:0618:0906:5120:0605:4421:0005:0121:4705:0421:5605:4721:1706:4020:0907:3318:5607:3116:4808:2316:09
                          
                          508:4016:2208:0317:1607:0318:1106:4920:0805:4221:0205:0021:4805:0521:5605:4821:1506:4220:0607:3518:5307:3316:4608:2416:08
                          
                          608:4016:2308:0117:1807:0118:1306:4620:1005:4021:0404:5921:4905:0621:5505:5021:1306:4420:0407:3618:5107:3516:4408:2616:08
                          
                          708:3916:2507:5917:2006:5918:1506:4420:1205:3821:0604:5921:5005:0721:5405:5221:1106:4620:0207:3818:4807:3616:4208:2716:07
                          
                          808:3916:2607:5717:2206:5618:1606:4120:1305:3721:0804:5821:5105:0821:5405:5321:0906:4719:5907:4018:4607:3816:4008:2816:07
                          
                          908:3816:2807:5517:2406:5418:1806:3920:1505:3521:0904:5821:5205:0921:5305:5521:0706:4919:5707:4218:4407:4016:3908:2916:07
                          
                          1008:3716:2907:5417:2606:5118:2006:3720:1705:3321:1104:5721:5305:1021:5205:5721:0506:5119:5407:4418:4107:4216:3708:3016:06
                          
                          1108:3716:3107:5217:2806:4918:2206:3420:1905:3121:1304:5721:5405:1121:5105:5921:0306:5319:5207:4618:3907:4416:3508:3216:06
                          
                          1208:3616:3207:5017:3006:4718:2406:3220:2105:3021:1404:5721:5405:1221:5006:0021:0106:5419:4907:4718:3707:4616:3408:3316:06
                          
                          1308:3516:3407:4817:3206:4418:2606:3020:2305:2821:1604:5621:5505:1321:4906:0220:5906:5619:4707:4918:3407:4816:3208:3416:06
                          
                          1408:3416:3507:4517:3406:4218:2806:2720:2405:2621:1804:5621:5605:1521:4806:0420:5706:5819:4407:5118:3207:5016:3008:3416:06
                          
                          1508:3316:3707:4317:3606:3918:3006:2520:2605:2521:1904:5621:5605:1621:4706:0620:5506:5919:4207:5318:3007:5216:2908:3516:06
                          
                          1608:3216:3907:4117:3806:3718:3106:2320:2805:2321:2104:5621:5705:1721:4606:0720:5207:0119:4007:5518:2707:5316:2708:3616:06
                          
                          1708:3116:4007:3917:4006:3518:3306:2020:3005:2121:2304:5621:5705:1921:4506:0920:5007:0319:3707:5718:2507:5516:2608:3716:07
                          
                          1808:3016:4207:3717:4206:3218:3506:1820:3205:2021:2404:5621:5805:2021:4406:1120:4807:0519:3507:5818:2307:5716:2508:3816:07
                          
                          1908:2916:4407:3517:4406:3018:3706:1620:3305:1821:2604:5621:5805:2221:4206:1220:4607:0619:3208:0018:2107:5916:2308:3816:07
                          
                          2008:2816:4607:3317:4606:2718:3906:1420:3505:1721:2704:5621:5805:2321:4106:1420:4407:0819:3008:0218:1808:0116:2208:3916:08
                          
                          2108:2616:4707:3117:4806:2518:4106:1120:3705:1521:2904:5621:5905:2421:4006:1620:4107:1019:2708:0418:1608:0216:2108:3916:08
                          
                          2208:2516:4907:2817:5006:2218:4206:0920:3905:1421:3004:5721:5905:2621:3806:1820:3907:1219:2508:0618:1408:0416:1908:4016:09
                          
                          2308:2416:5107:2617:5206:2018:4406:0720:4105:1321:3204:5721:5905:2721:3706:1920:3707:1319:2208:0818:1208:0616:1808:4016:09
                          
                          2408:2216:5307:2417:5406:1718:4606:0520:4305:1221:3304:5721:5905:2921:3506:2120:3507:1519:2008:1018:1008:0816:1708:4116:10
                          
                          2508:2116:5507:2217:5506:1518:4806:0320:4405:1021:3504:5821:5905:3021:3406:2320:3207:1719:1708:1218:0808:0916:1608:4116:10
                          
                          2608:2016:5707:1917:5706:1318:5006:0120:4605:0921:3604:5821:5905:3221:3206:2520:3007:1919:1508:1418:0608:1116:1508:4116:11
                          
                          2708:1816:5907:1717:5906:1018:5205:5820:4805:0821:3804:5921:5905:3421:3106:2620:2807:2019:1307:1617:0308:1216:1408:4116:12
                          
                          2808:1717:0107:1518:0106:0818:5305:5620:5005:0721:3904:5921:5905:3521:2906:2820:2507:2219:1007:1717:0108:1416:1308:4216:13
                          
                          2908:1517:0206:0518:5505:5420:5205:0621:4005:0021:5805:3721:2706:3020:2307:2419:0807:1916:5908:1616:1208:4216:14
                          
                          3008:1317:0406:0318:5705:5220:5305:0521:4205:0121:5805:3821:2606:3220:2107:2619:0507:2116:5708:1716:1108:4216:15
                          
                          3108:1217:0607:0119:5905:0421:4305:4021:2406:3320:1807:2316:5508:4216:16
                          
                          ## Interactive graph with the sunrise and sunset times and the day length during the year  2019, Nordenham
                          
                          Heute 
                          
                          Sonnenaufgang 
                          
                          Sonnenuntergang   
                          
                          **Sonnenaufgang und Sonnenuntergang:** Der Moment, in dem das geometrische Zentrum der aufgehenden Sonne exakt auf dem Horizont steht.
                          
                          **Astronomische Dämmerung :** Am Ende der astronomischen Dämmerung ist es vollkommen dunkel. Die Nacht beginnt. Dies ist die Phase zwischen den Zietpunkten am den die Sonne 12 bzw. 18 Grad unter dem Horizont steht.
                          
                          **Nautische Dämmerung ** Phase zwischen den Zietpunkten am den die Sonne 6 bzw. 12 Grad unter dem Horizont steht. Während der Horizont auf See noch sichtbar ist, kann man ihn an Land schon nicht mehr unterscheiden. Umrisse von Bodenobjekten sind nur noch vage sichtbar. Ohne Kunstbeleuchtung können bewegende Objekte nur noch auf einer Entfernung von bis zu 300 Metern wahrgenommen werden. Immer mehr Sterne erscheinen am Himmel.
                          
                          **Bürgerliche Dämmerung ** Phase zwischen Sonnenuntergang und dem Zeitpunkt, an dem die Sonne 6 Grad unter dem Horizont steht. Horizont und Umrisse großer Objekte sind deutlich sichtbar, aber ohne Kunstbeleuchtung kann man draußen nicht mehr sehr viel machen.
                          
                          * [Datenschutzerklaerung][6] 
                          * [Ueber uns][7] [![](images/badge_appstore-lrg.svg)][8]
                          © sunrisesunset.de
                          `
                          
                          [0]: #
                          [1]: https://sunrisesunset.de/ "Sonnenaufgang & Sonnenuntergang und Mondand heute Abend"
                          [2]: https://sunrisesunset.de/sonne/ "Sunrise Sunset for any date and any place on Earth"
                          [3]: https://sunrisesunset.de/mond/ "Mondaufgang und Monduntergang für jedes Datum und jeden Ort auf der Erde"
                          [4]: https://sunrisesunset.de/
                          [5]: https://sunrisesunset.de/deutschland/ "Deutschland"
                          [6]: https://sunrisesunset.de/datenschutzerklaerung/
                          [7]: https://sunrisesunset.de/ueber-uns/
                          [8]: https://geo.itunes.apple.com/nl/app/solar-watch-sun-and-moon/id1321127425?mt=8
                          1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 last edited by

                            @stoepselinho:

                            Ich würde gerne die Sonnenaufgangszeit und Sonnenuntergangszeit damit auslesen. `
                            Weshalb machst Du es nicht mit https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#getastrodate ?

                            1 Reply Last reply Reply Quote 0
                            • S
                              stoepselinho last edited by

                              hab in in der Homematic versucht. schmeißt mir nur ??? raus. Und es ist ja nicht genau die von meinem Standort sondern von Berlin glaube ich.

                              1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 last edited by

                                @stoepselinho:

                                hab in in der Homematic versucht. schmeißt mir nur ??? raus. `
                                Javascript ist nicht HomeMatic.
                                @stoepselinho:

                                Und es ist ja nicht genau die von meinem Standort sondern von Berlin glaube ich. `
                                Die Koordinaten Deines Standortes gibst Du in den Haupteinstellungen des Hosts ein. In der Konfiguration der Javascript-Instanz im Reiter "ASTRO-EINSTELLUNGEN" setzt Du den Haken bei "Verwenden Sie die Systemeinstellungen".

                                Alternativ kannst Du die Koordinaten auch in der Konfiguration der JS-Instanz angeben.

                                1 Reply Last reply Reply Quote 0
                                • S
                                  stoepselinho last edited by

                                  und wie lass ich mir die dann Anzeigen?

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

                                    @Homoran:

                                    ich seh mir das nachher mal an - habe gerade noch andere Baustellen `

                                    Ist relativ einfach lösbar

                                    Gruß

                                    Rainer

                                    1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 last edited by

                                      @stoepselinho:

                                      und wie lass ich mir die dann Anzeigen? `
                                      Du meinst, wie du die Koordinaten Deines Standortes ermittelst ? Google Earth / Google Maps / GPS im Smartphone

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        stoepselinho last edited by

                                        möchte die Zeiten gerne in eine Variable speichern. stehe aber gerade voll aufm Schlauch,

                                        1 Reply Last reply Reply Quote 0
                                        • paul53
                                          paul53 last edited by

                                          @stoepselinho:

                                          möchte die Zeiten gerne in eine Variable speichern. `
                                          Ein kleines Skript macht es.

                                          // IDs anpassen !
                                          const idSA = '..'; // Datenpunkt-ID Sonnenaufgang
                                          const idSU = '..'; // Datenpunkt-ID Sonnenuntergang
                                          
                                          function sonne() {
                                             setState(idSA, formatDate(getAstroDate("sunrise"), 'hh:mm'));
                                             setState(idSU, formatDate(getAstroDate("sunset"), 'hh:mm'));
                                          }
                                          
                                          sonne(); // Skriptstart
                                          schedule('1 0 * * *', sonne); // täglich um 00:01 Uhr
                                          
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • E
                                            excalibur270 last edited by

                                            @Homoran:

                                            @Homoran:

                                            ich seh mir das nachher mal an - habe gerade noch andere Baustellen `

                                            Ist relativ einfach lösbar

                                            Gruß

                                            Rainer `

                                            Hallo Rainer.

                                            Ich habe jetzt die Genehmigung erhalten Inhalte von CT.de auszuwerten. Ich habe das mit dem Parser des lpg Preises mittlerweile hinbekommen.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            839
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            43
                                            268
                                            99417
                                            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