Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. IObroker funktioniert seit einer Woche nicht mehr

    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

    IObroker funktioniert seit einer Woche nicht mehr

    This topic has been deleted. Only users with topic management privileges can see it.
    • crunchip
      crunchip Forum Testing Most Active @photographix last edited by

      @photographix sagte in IObroker funktioniert seit einer Woche nicht mehr:

      Zusätzlich habe ich auch NPM auf den neuesten Stand gebracht

      das macht man nicht
      https://docs.buanet.de/iobroker-docker-image/docs/#getting-started

      P 1 Reply Last reply Reply Quote 0
      • P
        photographix @crunchip last edited by

        @crunchip
        Das klärt doch aber nicht warum es vorher nicht ging.
        Das update war doch nur eine Folge der Fehlersuche.

        Ich kann auch ein :latest Image wieder Pullen und das nutzen.
        Das NPM müsste ja dann wieder alt sein.

        crunchip 1 Reply Last reply Reply Quote 0
        • crunchip
          crunchip Forum Testing Most Active @photographix last edited by

          @photographix sagte in IObroker funktioniert seit einer Woche nicht mehr:

          Das klärt doch aber nicht warum es vorher nicht ging

          keine Ahnung was vorher lief, kenn mich mit docker auch nicht aus, aber ein nodejs upgrade kommt mit einem neuen image und wird nicht manuell dran rumgefummelt, zumindest nicht an npm.

          @photographix sagte in IObroker funktioniert seit einer Woche nicht mehr:

          über USB 3 auf einer Samsung T7 1TB SSD.

          vllt macht dies Probleme

          @photographix sagte in IObroker funktioniert seit einer Woche nicht mehr:

          immer öfter einen Timeout brachte

          oder der Ram zu gering

          @photographix sagte in IObroker funktioniert seit einer Woche nicht mehr:

          Unter htop auf dem Pi frisst der iobroker.js-controller/controler.js die meisten Ressourcen. Hier durchgehend über 25%. Teilweise bis zu 60% an CPU.

          vllt auch ein script das unrund läuft

          generell mal das log durchsehen

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

            @photographix

            kannst du mal auf die konsole im container gehen und checken ob es da internetverbindung gibt?
            im log gab es die ein oder andere fehlermeldung die darauf deutete.

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

              @oliverio

              hallo innerhalb des Containers geht Ping sowie auch wget über dns. Das heißt für mich das alles auf DNS und Internet Konnektivität ok ist.

              1 Reply Last reply Reply Quote 0
              • Marc Berg
                Marc Berg Most Active @photographix last edited by Marc Berg

                @photographix sagte in IObroker funktioniert seit einer Woche nicht mehr:

                Vielleicht hat ja jemand eine Idee.

                Bitte das Docker Log komplett posten. Insbesondere im Kopf stehe ein paar relevante Infos.
                7cc2e438-5d26-4bd6-a955-52f470350265-grafik.png

                Die Zeitzone im Container passt nicht.

                P 1 Reply Last reply Reply Quote 0
                • P
                  photographix @crunchip last edited by

                  @crunchip

                  die Samsung SSD hatte ich auch erst vermutet aber da darauf dann alle Container Laufen würde das den gestörten Iobroker nicht erklären.

                  Der Iobroker hat bei mir 1,5 GB Ram zugewiesen bekommen. Sollte der Ram (sonst bei 1 bis 1.2 GB) nicht passen würde Docker den ganzen Container beenden. Bei mir läuft aber der Iobroker im Container nicht.

                  Ich hab den Container verworfen und mit den persistenten Date Volume neu gepullt.

                  Leider endet es wieder bei

                  Cannot send diag info: timeout of 4000ms exceeded
                  /bin/sh: 1: hcitool: not found
                  
                  1 Reply Last reply Reply Quote 0
                  • P
                    photographix @Marc Berg last edited by

                    @marc-berg

                     
                    --------------------------------------------------------------------------------
                    -------------------------     2023-12-01 14:06:51      -------------------------
                    --------------------------------------------------------------------------------
                    -----                                                                      -----
                    ----- ██╗  ██████╗  ██████╗  ██████╗   ██████╗  ██╗  ██╗ ███████╗ ██████╗  -----
                    ----- ██║ ██╔═══██╗ ██╔══██╗ ██╔══██╗ ██╔═══██╗ ██║ ██╔╝ ██╔════╝ ██╔══██╗ -----
                    ----- ██║ ██║   ██║ ██████╔╝ ██████╔╝ ██║   ██║ █████╔╝  █████╗   ██████╔╝ -----
                    ----- ██║ ██║   ██║ ██╔══██╗ ██╔══██╗ ██║   ██║ ██╔═██╗  ██╔══╝   ██╔══██╗ -----
                    ----- ██║ ╚██████╔╝ ██████╔╝ ██║  ██║ ╚██████╔╝ ██║  ██╗ ███████╗ ██║  ██║ -----
                    ----- ╚═╝  ╚═════╝  ╚═════╝  ╚═╝  ╚═╝  ╚═════╝  ╚═╝  ╚═╝ ╚══════╝ ╚═╝  ╚═╝ -----
                    -----                                                                      -----
                    -----              Welcome to your ioBroker Docker container!              -----
                    -----                    Startupscript is now running!                     -----
                    -----                          Please be patient!                          -----
                    --------------------------------------------------------------------------------
                     
                    --------------------------------------------------------------------------------
                    -----                          System Information                          -----
                    -----                    arch:                aarch64                      -----
                    -----                    hostname:            iobroker                     -----
                    -----                                                                      -----
                    -----                          Version Information                         -----
                    -----                    image:               v9.0.1                       -----
                    -----                    build:               2023-11-22T05:46:43+00:00    -----
                    -----                    node:                v18.18.2                     -----
                    -----                    npm:                 9.8.1                        -----
                    -----                                                                      -----
                    -----                        Environment Variables                         -----
                    -----                    PACKAGES:            nano                         -----
                    -----                    SETGID:              1000                         -----
                    -----                    SETUID:              1000                         -----
                    -----                    USBDEVICES:          /dev/ttyUSB0                 -----
                    --------------------------------------------------------------------------------
                     
                    --------------------------------------------------------------------------------
                    -----                   Step 1 of 5: Preparing container                   -----
                    --------------------------------------------------------------------------------
                     
                    Updating Linux packages on first run... Done.
                     
                     
                    PACKAGES is set. Installing the following additional Linux packages: nano
                     
                    nano is not installed. Installing... Done.
                     
                     
                    Registering maintenance script as command... Done.
                     
                    --------------------------------------------------------------------------------
                    -----             Step 2 of 5: Detecting ioBroker installation             -----
                    --------------------------------------------------------------------------------
                     
                    Existing installation of ioBroker detected in "/opt/iobroker".
                     
                    --------------------------------------------------------------------------------
                    -----             Step 3 of 5: Checking ioBroker installation              -----
                    --------------------------------------------------------------------------------
                     
                    (Re)setting permissions (This might take a while! Please be patient!)... Done.
                     
                    Checking Database connection... Done.
                     
                    Hostname in ioBroker matches the hostname of this container.
                    No action required.
                     
                    --------------------------------------------------------------------------------
                    -----                Step 4 of 5: Applying special settings                -----
                    --------------------------------------------------------------------------------
                     
                    Some adapters have special requirements/ settings which can be activated by the use of environment variables.
                    For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/).
                     
                    USBDEVICES is set.
                    Setting permissions for "/dev/ttyUSB0"... Done.
                     
                     
                    --------------------------------------------------------------------------------
                    -----                    Step 5 of 5: ioBroker startup                     -----
                    --------------------------------------------------------------------------------
                     
                    Starting ioBroker... 
                     
                    ##### #### ### ## # iobroker.js-controller log output # ## ### #### #####
                    host.iobroker check instance "system.adapter.admin.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.influxdb.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.javascript.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.javascript.1" for host "iobroker"
                    host.iobroker check instance "system.adapter.telegram.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.whatsapp-cmb.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.whatsapp-cmb.1" for host "iobroker"
                    host.iobroker check instance "system.adapter.hm-rega.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.hm-rpc.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.hm-rpc.1" for host "iobroker"
                    host.iobroker check instance "system.adapter.hm-rpc.2" for host "iobroker"
                    host.iobroker check instance "system.adapter.mihome-vacuum.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.openweathermap.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.ping.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.shelly.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.tr-064.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.backitup.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.cloud.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.daswetter.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.discovery.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.dwd.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.energiefluss-erweitert.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.fullcalendar.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.info.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.iot.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.jarvis.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.jeelink.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.lovelace.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.material.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.nina.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.rflink.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.simple-api.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.snmp.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.socketio.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.statistics.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.tankerkoenig.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.text2command.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.tradfri.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.valloxmv.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.viessmannapi.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis-bars.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis-fancyswitch.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis-google-fonts.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis-hqwidgets.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis-material-webfont.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis-materialdesign.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis-metro.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis-players.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis-weather.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.vis.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.web-speedy.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.web.0" for host "iobroker"
                    host.iobroker check instance "system.adapter.wiffi-wz.0" for host "iobroker"
                    Cannot get NPM version: timeout
                    Send diag info: {"uuid":"628fab6a-6228-357a-2ff5-17ee90fe0903","language":"de","country":"Germany","hosts":[{"version":"5.0.16","platform":"Javascript/Node.js","type":"linux"}],"node":"v18.19.0","arch":"arm64","docker":true,"adapters":{"admin":{"version":"6.12.0","platform":"Javascript/Node.js"},"backitup":{"version":"2.8.7","platform":"Javascript/Node.js"},"cloud":{"version":"4.4.1","platform":"Javascript/Node.js"},"daswetter":{"version":"3.1.10","platform":"Javascript/Node.js"},"devices":{"version":"1.1.5","platform":"Javascript/Node.js"},"discovery":{"version":"4.2.0","platform":"Javascript/Node.js"},"dwd":{"version":"2.8.5","platform":"Javascript/Node.js"},"energiefluss-erweitert":{"version":"0.0.2-alpha.20","platform":"Javascript/Node.js"},"fullcalendar":{"version":"2.2.6","platform":"Javascript/Node.js"},"hm-rega":{"version":"4.0.0","platform":"Javascript/Node.js"},"hm-rpc":{"version":"1.15.19","platform":"Javascript/Node.js"},"hmm":{"version":"1.0.1","platform":"Javascript/Node.js"},"icons-material-svg":{"version":"0.1.0","platform":"javascript/Node.js"},"icons-mfd-svg":{"version":"1.1.0","platform":"Javascript/Node.js"},"influxdb":{"version":"3.2.0","platform":"Javascript/Node.js"},"info":{"version":"2.0.0","platform":"Javascript/Node.js"},"iot":{"version":"2.0.11","platform":"Javascript/Node.js"},"jarvis":{"version":"3.1.8","platform":"Javascript/Node.js"},"javascript":{"version":"7.1.6","platform":"Javascript/Node.js"},"jeelink":{"version":"1.2.3","platform":"Javascript/Node.js"},"lovelace":{"version":"3.0.1","platform":"Javascript/Node.js"},"material":{"version":"1.3.1","platform":"Javascript/Node.js"},"mihome-vacuum":{"version":"4.1.0","platform":"Javascript/Node.js"},"mikrotik":{"version":"1.0.16","platform":"Javascript/Node.js"},"minuvis":{"version":"2.2.0","platform":"Javascript/Node.js"},"nina":{"version":"0.0.25","platform":"Javascript/Node.js"},"openweathermap":{"version":"0.4.5","platform":"Javascript/Node.js"},"pi-hole":{"version":"1.2.3","platform":"Javascript/Node.js"},"ping":{"version":"1.6.2","platform":"Javascript/Node.js"},"rflink":{"version":"2.1.6","platform":"Javascript/Node.js"},"shelly":{"version":"6.6.1","platform":"Javascript/Node.js"},"simple-api":{"version":"2.7.2","platform":"Javascript/Node.js"},"snips":{"version":"1.5.0","platform":"Javascript/Node.js"},"snmp":{"version":"3.1.0","platform":"Javascript/Node.js"},"socketio":{"version":"6.6.0","platform":"Javascript/Node.js"},"sourceanalytix":{"version":"0.4.8-alpha.0","platform":"Javascript/Node.js"},"statistics":{"version":"2.4.0","platform":"Javascript/Node.js"},"tankerkoenig":{"version":"3.3.7","platform":"Javascript/Node.js"},"telegram":{"version":"2.0.1","platform":"Javascript/Node.js"},"terminal":{"version":"0.2.1","platform":"Javascript/Node.js"},"text2command":{"version":"3.0.2","platform":"Javascript/Node.js"},"tr-064":{"version":"4.2.18","platform":"Javascript/Node.js"},"tradfri":{"version":"3.1.3","platform":"Javascript/Node.js"},"valloxmv":{"version":"1.2.0","platform":"Javascript/Node.js"},"viessmannapi":{"version":"2.3.0","platform":"Javascript/Node.js"},"vis":{"version":"1.4.16","platform":"Javascript/Node.js"},"vis-bars":{"version":"0.1.4","platform":"Javascript/Node.js"},"vis-fancyswitch":{"version":"1.1.0","platform":"Javascript/Node.js"},"vis-google-fonts":{"version":"1.0.4","platform":"Javascript/Node.js"},"vis-hqwidgets":{"version":"1.4.0","platform":"Javascript/Node.js"},"vis-material-advanced":{"version":"1.7.2","platform":"Javascript/Node.js"},"vis-material-webfont":{"version":"0.0.3","platform":"Javascript/Node.js"},"vis-materialdesign":{"version":"0.5.7","platform":"Javascript/Node.js"},"vis-metro":{"version":"1.2.0","platform":"Javascript/Node.js"},"vis-players":{"version":"0.1.6","platform":"Javascript/Node.js"},"vis-weather":{"version":"2.5.6","platform":"Javascript/Node.js"},"web":{"version":"6.1.10","platform":"Javascript/Node.js"},"web-speedy":{"version":"0.2.0","platform":"Javascript/Node.js"},"whatsapp-cmb":{"version":"0.2.3","platform":"Javascript/Node.js"},"wiffi-wz":{"version":"2.2.1","platform":"Javascript/Node.js"},"ws":{"version":"2.5.8","platform":"Javascript/Node.js"}},"statesType":"jsonl","objectsType":"jsonl","noInstances":56,"noCompactInstances":0,"model":"Cortex-A72","cpus":4,"mem":3990155264,"ostype":"Linux","vis":64}
                    Cannot send diag info: timeout of 4000ms exceeded
                    /bin/sh: 1: hcitool: not found
                    
                    Marc Berg 1 Reply Last reply Reply Quote 0
                    • Marc Berg
                      Marc Berg Most Active @photographix last edited by Marc Berg

                      @photographix

                      Mich verwundert etwas (0.0.0.0):

                      States database error: connect ECONNREFUSED 0.0.0.0:9000
                      Objects database error: connect ECONNREFUSED 0.0.0.0:9001
                      

                      Mach mal im Container

                      iob setup custom
                      

                      und zeig mal die Ausgabe

                      P 1 Reply Last reply Reply Quote 0
                      • P
                        photographix @Marc Berg last edited by

                        @marc-berg sagte in IObroker funktioniert seit einer Woche nicht mehr:

                        iob setup custom

                        root@iobroker:/opt/iobroker# iob setup custom
                        Current configuration:
                        - Objects database:
                          - Type: jsonl
                          - Host/Unix Socket: 0.0.0.0
                          - Port: 9001
                        - States database:
                          - Type: jsonl
                          - Host/Unix Socket: 0.0.0.0
                          - Port: 9000
                        - Data Directory: ../../iobroker-data/
                        - Host name: iobroker
                        
                        Type of objects DB [(j)sonl, (f)ile, (r)edis, ...], default [jsonl]:
                        
                        
                        Marc Berg 1 Reply Last reply Reply Quote 0
                        • Marc Berg
                          Marc Berg Most Active @photographix last edited by

                          @photographix

                          stell da mal "127.0.0.1" statt "0.0.0.0" ein.

                          OliverIO P 2 Replies Last reply Reply Quote 0
                          • OliverIO
                            OliverIO @Marc Berg last edited by OliverIO

                            @marc-berg
                            @photographix

                            bei docker lieber die bereitgestellten environment variablen verwenden.
                            dann sind die parameter entweder durch den aufruf oder im docker-compose für später dokumentiert.
                            alles was auf kommandozeile ausgeführt wird, ist beim nächsten re-create wieder weg
                            https://github.com/buanet/ioBroker.docker/blob/main/docs/README_docker_hub_iobroker.md#configure-iobroker-application

                            allerdings sollte der standard schon bei 127.0.0.1 sein.
                            evtl pfuschelt da die alte konfiguration da mit rein?

                            P 1 Reply Last reply Reply Quote 0
                            • P
                              photographix @Marc Berg last edited by

                              @marc-berg sagte in IObroker funktioniert seit einer Woche nicht mehr:

                              127.0.0.1

                              root@iobroker:/opt/iobroker# iob setup custom
                              Current configuration:
                              - Objects database:
                                - Type: jsonl
                                - Host/Unix Socket: 127.0.0.1
                                - Port: 9001
                              - States database:
                                - Type: jsonl
                                - Host/Unix Socket: 127.0.0.1
                                - Port: 9000
                              - Data Directory: ../../iobroker-data/
                              - Host name: iobroker
                              
                              Type of objects DB [(j)sonl, (f)ile, (r)edis, ...], default [jsonl]:
                              
                              
                              

                              iobroker startet neu

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

                                @oliverio
                                ist alles im yaml 😉

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

                                  @photographix
                                  also docker-compose
                                  docker-compose ist in yaml

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

                                    @oliverio
                                    genau

                                    1 Reply Last reply Reply Quote 0
                                    • P
                                      photographix @photographix last edited by

                                      @photographix

                                      also iob diag hängt sich heute auch schon wieder weg.

                                      *** iob diag is starting up, please wait ***
                                      Uncaught Rejection: Error: States DB is not allowed to start in the current Multihost environment
                                          at Redis.<anonymous> (/opt/iobroker/node_modules/@iobroker/db-states-redis/build/lib/states/statesInRedisClient.js:459:23)
                                          at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                                      
                                      

                                      ich habe aber weder Multihost noch redis in Nutzung

                                      Marc Berg crunchip 2 Replies Last reply Reply Quote 0
                                      • Marc Berg
                                        Marc Berg Most Active @photographix last edited by

                                        @photographix sagte in IObroker funktioniert seit einer Woche nicht mehr:

                                        also iob diag hängt sich heute auch schon wieder weg.

                                        Keine Idee mehr. Da scheint etwas mehr nicht rund zu laufen. Ich würde einen frischen Container aufsetzen, Backup einspielen, fertig.

                                        P 1 Reply Last reply Reply Quote 1
                                        • P
                                          photographix @Marc Berg last edited by photographix

                                          @marc-berg
                                          wie kann ich das Backup innerhalb des Containers zurückspielen. (iob backup restore?) die GUI geht ja nicht.

                                          Mit "Frischen Container aufsetzen" meinst du auch das Data Volume löschen?

                                          Marc Berg 1 Reply Last reply Reply Quote 0
                                          • Marc Berg
                                            Marc Berg Most Active @photographix last edited by

                                            @photographix sagte in IObroker funktioniert seit einer Woche nicht mehr:

                                            wie kann ich das Backup innerhalb des Containers zurückspielen. (iob backup restore?) die GUI geht ja nicht.

                                            In einem frischen Container würde die Gui wieder gehen 🙂

                                            Mit "Frischen Container aufsetzen" meinst du auch das Data Volume löschen?

                                            Ja, so würde ich das machen. Das gesamte Verzeichis löschen und nur die Backup-Datei reinlegen. Diese wird dann beim ersten Start in /backups verschoben. Danach des Restore per Gui oder

                                            iob m restore
                                            

                                            starten.

                                            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

                                            420
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            23
                                            1335
                                            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