Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. History überarbeitet

    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

    History überarbeitet

    This topic has been deleted. Only users with topic management privileges can see it.
    • eric2905
      eric2905 last edited by

      So, update ist durch.

      Direkt nach dem Start kamen nochmal einige Meldungen :

      ` > sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rega.0.41482

      sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.POWER

      […]

      sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.TEMPERATURE

      sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.HUMIDITY

      sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of system.host.cubietruck.load

      sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of system.host.cubietruck.mem

      sql.0 2015-12-06 18:39:08 info sql.0 Connected to sqlite

      sql.0 2015-12-06 18:39:07 info sql.0 starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.sql

      host-cubietruck 2015-12-06 18:38:59 info instance system.adapter.sql.0 started with pid 5980

      host-cubietruck 2015-12-06 18:38:56 info instance system.adapter.sql.0 terminated with code 0 (OK)

      sql-0 2015-12-06 18:38:56 info terminating

      host-cubietruck 2015-12-06 18:38:56 info stopInstance system.adapter.sql.0 killing pid 5965

      host-cubietruck 2015-12-06 18:38:56 info stopInstance system.adapter.sql.0

      host-cubietruck 2015-12-06 18:38:56 info object change system.adapter.sql.0

      sql-0 2015-12-06 18:38:45 error Cannot delete DELETE FROM ts_number WHERE id=21 AND ts < 1449337080;: Error: SQLITE_BUSY: database is locked

      sql-0 2015-12-06 18:38:40 error Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(1, 1449423508000, 20, 1, 1, 0);: Error: SQLITE_BUSY: database is locked

      sql-0 2015-12-06 18:38:20 warn Cannot get index of 'hm-rpc.0.IEQ0150728.1.TEMPERATURE': Error: SQLITE_BUSY: database is locked

      sql-0 2015-12-06 18:38:20 error Cannot select SELECT id, type FROM datapoints WHERE name='hm-rpc.0.IEQ0150728.1.TEMPERATURE';: Error: SQLITE_BUSY: database is locked

      host-cubietruck 2015-12-06 18:38:17 info Update repository 'default' under 'conf/sources-dist.json'

      sql-0 2015-12-06 18:38:00 info Connected to sqlite

      sql-0 2015-12-06 18:38:00 info enabled logging of hm-rega.0.41482

      sql-0 2015-12-06 18:38:00 info enabled logging of hm-rpc.0.xxxxxxxxxx.1.POWER

      […]

      sql-0 2015-12-06 18:38:00 info enabled logging of system.host.cubietruck.load

      sql-0 2015-12-06 18:38:00 info enabled logging of system.host.cubietruck.mem

      sql-0 2015-12-06 18:38:00 info starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.sql

      host-cubietruck 2015-12-06 18:37:51 info instance system.adapter.sql.0 started with pid 5965

      host-cubietruck 2015-12-06 18:37:51 info 'system.adapter.sql.0' enabled

      host-cubietruck 2015-12-06 18:37:51 info object change system.adapter.sql.0 `

      und kurz darauf wieder diese Meldungen:

      ` > sql.0 2015-12-06 18:44:41 warn sql.0 Cannot get index of 'hm-rpc.0.xxxxxxxxxx.3.TEMPERATURE': Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:44:41 error sql.0 Cannot select SELECT id, type FROM datapoints WHERE name='hm-rpc.0.LEQ0773872.3.TEMPERATURE';: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:42:49 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=11 AND ts < 1449337320;: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:42:48 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=8 AND ts < 1449337320;: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:42:34 warn sql.0 Cannot get index of 'hm-rpc.0.xxxxxxxxxx.3.TEMPERATURE': Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:42:34 error sql.0 Cannot select SELECT id, type FROM datapoints WHERE name='hm-rpc.0.LEQ0773872.3.TEMPERATURE';: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:41:40 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=17 AND ts < 1449337261;: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:40:43 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=14 AND ts < 1449337200;: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:40:42 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=6 AND ts < 1449337201;: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:40:41 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=23 AND ts < 1449337201;: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:40:25 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=33 AND ts < 1449337201;: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:40:13 warn sql.0 Cannot get index of 'hm-rpc.0.xxxxxxxxxx.3.TEMPERATURE': Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:40:13 error sql.0 Cannot select SELECT id, type FROM datapoints WHERE name='hm-rpc.0.xxxxxxxxxx.3.TEMPERATURE';: Error: SQLITE_BUSY: database is locked

      sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rega.0.41482

      sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.POWER

      sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.TEMPERATURE `

      Irgendwas klemmt da noch.

      Es läuft auch sonst nichts mit SQL auf dem Cubietruck - der macht nichts anderes als ioBroker.

      Gruß,

      Eric

      PS:

      Wenn ich versuche, Flot zu installieren, meckert die Installation am Ende, das die Version des History-Adapters >= 0.2.0 sein soll (error 30).

      Ich habe die Version 0.1.3 drauf.

      Hab ich irgendwas überlesen?

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

        @Bluefox:

        Kannst du mit andren Clients dadrauf zugegriffen?

        Ich habe so verstanden, dass MySQL auf dem anderen Rechner läuft. Kannst du vom ioBroker Rechner auf MySQL mit normalem Client zugreifen? `
        ja, kann ich (mit mysql -u xxxx -h 192.168.0.61 -p) , allerdings habe ich jetzt auf dem iobroker testserver ein eigener mysql-server eingerichtet, über localhost müsste es eigentlich problemlos laufen.

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

          Hallo,

          Habe das Update durchgeführt.
          ` > sql.0 Cannot delete DELETE FROM ts_number WHERE id=172 AND ts < 1417897381;: Error: SQLITE_BUSY: database is locked

          sql.0 2015-12-06 21:23:23 error sql.0 Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES(112, 1449433400000, 0, 1, 4, 0);: Error: SQLITE_BUSY: database is locked

          sql.0 2015-12-06 21:23:23 error sql.0 Cannot delete DELETE FROM ts_bool WHERE id=111 AND ts < 1417897380;: Error: SQLITE_BUSY: database is locked

          sql.0 2015-12-06 21:23:23 error sql.0 Cannot delete DELETE FROM ts_bool WHERE id=110 AND ts < 1417897380;: Error: SQLITE_BUSY: database is locked

          sql.0 2015-12-06 21:23:21 error sql.0 Cannot select SELECT id, type FROM datapoints WHERE name='ping.0.raspberrypi.192_168_1_11';: Error: SQLITE_BUSY: database is locked `

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

            Hallo,

            ich hatte jetzt auch einmal den Zugriffsfehler:

            ` > sql.0 2015-12-06 21:23:05 error sql.0 Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(10, 1449433373000, 271.35, 1, 1, 0);: Error: SQLITE_BUSY: database is locked

            sql.0 2015-12-06 21:23:04 debug sql.0 INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(1, 1449433373000, 28, 1, 1, 0); `

            Und ich denke, man sieht hier im Vergleich mit dem unmittelbar zuvor (erfolgreich) ausgeführten Statement dass der Grund dafür ist, dass der zweite Datensatz hier mit einem bereits existierenden Timestamp eingefügt werden soll. Die Fehlermeldung "Database locked" ist da natürlich ziemlich irreführend 😉

            @Bluefox: Ich hab's mir zwar im Code mal angeschaut wie Du den Timestamp generierst, aber da sind meine JS-Kenntnisse noch zu rudimentär um herauszufinden warum der doppelt generiert wird :oops:

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

              Kannst du den .timeout auf 11000 setzen?

              Der Pi kann scheinbar nur Sekunden Sleeps und könnte damit ein Problem haben.

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

                @Thisoft:

                Hallo,

                ich hatte jetzt auch einmal den Zugriffsfehler:

                ` > sql.0 2015-12-06 21:23:05 error sql.0 Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(10, 1449433373000, 271.35, 1, 1, 0);: Error: SQLITE_BUSY: database is locked

                sql.0 2015-12-06 21:23:04 debug sql.0 INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(1, 1449433373000, 28, 1, 1, 0); `

                Und ich denke, man sieht hier im Vergleich mit dem unmittelbar zuvor (erfolgreich) ausgeführten Statement dass der Grund dafür ist, dass der zweite Datensatz hier mit einem bereits existierenden Timestamp eingefügt werden soll. Die Fehlermeldung "Database locked" ist da natürlich ziemlich irreführend 😉

                @Bluefox: Ich hab's mir zwar im Code mal angeschaut wie Du den Timestamp generierst, aber da sind meine JS-Kenntnisse noch zu rudimentär um herauszufinden warum der doppelt generiert wird :oops: `

                Kann es daran liegen, dass der Pi keine Millisekunden liefert?

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

                  @sissiwup:

                  Kann es daran liegen, dass der Pi keine Millisekunden liefert? `
                  Bei mir läuft ioBroker nicht auf einem Raspberry Pi, sondern auf einem Cubietruck.

                  Oder meinst Du grundsätzlich die ARM-Plattform?

                  Gruß,

                  Eric

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

                    @sissiwup:

                    Kannst du den .timeout auf 11000 setzen? `
                    Hab den Wert beim SQL-Adapter geändert - Meldungen ("cannot delete" und "cannot insert") kommen weiterhin.

                    Oder meintest Du am jeweiligen Objekt selber?

                    Gruß,

                    Eric

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

                      Ja, es liegt offensichtlich an den fehlenden Millisekunden. Aber nicht nur auf dem Pi - ich arbeite mit Windows.

                      Ich habe mich aber jetzt noch mal in den Code reingekniet und empfehle Dir folgendes zu testen - wenn Du Dir's zutraust.

                      Und zwar musst Du in der Datei "..\iobroker\node_modules\iobroker.sql\main.js" die Zeile 552:

                      state.ts = parseInt(state.ts, 10) * 1000 + (parseInt(state.ms, 10) || 0);
                      

                      durch die folgende ersetzen:

                          state.ts = parseInt(Date.now());
                      

                      Dann die Datei speichern und den SQL-Adapter neustarten. Dann dürfte es keine doppelten Timestamps mehr geben (und ich hoffe dass ich damit nichts anderes durcheinanderbringe - aber wir sind ja hier noch in der Beta 😉 )

                      Gruß Thilo

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

                        Probiere ich morgen früh aus.

                        Gruß,

                        Eric

                        Edit:

                        Nee, bin neugierig - mache es jetzt

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

                          Verbindung an MySQL klappt bei mir nur so:

                          609_bildschirmfoto_2015-12-06_um_22.56.02.png

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

                            Fehler mit mysql:

                            ` > sql.0 2015-12-06 22:57:27 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(53, 1449439045000, VD-12, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'VD' in 'field list'

                            sql.0 2015-12-06 22:57:27 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(50, 1449439045000, W, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'W' in 'field list'

                            sql.0 2015-12-06 22:57:27 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(48, 1449439045000, Windstille, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'Windstille' in 'field list' `

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

                              Hat Fehler ausgeworfen:

                              ` > sql.0 2015-12-06 22:59:12 debug inMem message * hm-rega.0.37329

                              sql.0 2015-12-06 22:59:11 debug inMem message * hm-rega.0.37325

                              sql.0 2015-12-06 22:59:11 debug inMem message * hm-rega.0.37324

                              sql.0 2015-12-06 22:59:11 debug inMem message * hm-rega.0.37153

                              sql.0 2015-12-06 22:59:11 debug inMem message * hm-rega.0.36778

                              […]

                              sql.0 2015-12-06 22:59:11 info sql.0 enabled logging of system.host.cubietruck.load

                              sql.0 2015-12-06 22:59:11 info sql.0 enabled logging of system.host.cubietruck.mem

                              sql.0 2015-12-06 22:59:10 info sql.0 Connected to sqlite

                              sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}

                              sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE ts_bool (id INTEGER, ts INTEGER, val BOOLEAN, ack BOOLEAN, _from INTEGER, q INTEGER, PRIMARY KEY(id, ts));

                              sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}

                              sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE ts_string (id INTEGER, ts INTEGER, val TEXT, ack BOOLEAN, _from INTEGER, q INTEGER, PRIMARY KEY(id, ts));

                              sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}

                              sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE ts_number (id INTEGER, ts INTEGER, val REAL, ack BOOLEAN, _from INTEGER, q INTEGER, PRIMARY KEY(id, ts));

                              sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}

                              sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE datapoints (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,name TEXT,type INTEGER);

                              sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}

                              sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE sources (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT);

                              sql.0 2015-12-06 22:59:10 info sql.0 starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.sql

                              cubietruck 2015-12-06 22:59:01 info host.cubietruck instance system.adapter.sql.0 started with pid 7364

                              cubietruck 2015-12-06 22:59:01 info host.cubietruck 'system.adapter.sql.0' enabled

                              cubietruck 2015-12-06 22:59:01 info host.cubietruck object change system.adapter.sql.0 `

                              Bin wieder auf Original zurück.

                              Gruß,

                              Eric

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

                                @sissiwup: Das ist der gleiche Fehler wie bei uns - bei Dir sogar dreimal der gleiche Timestamp.

                                @eric: Ja, jetzt wo DU's sagst - die hat er bei mir auch geworfen. Sind aber IMO nicht weiter schlimm. Sagt ja bloß aus dass er die bereits existierenden Tabellen in der Db nicht nochmal anlegen kann. Kommen ja auch nur beim Starten des Adapters. Ich lass die Änderung bei mir drin und teste ob der andere Fehler wieder auftaucht. Vielleicht schau ich auch morgen nochmal ob ich dahinterkomme warum jetzt dieser Fehler auftaucht. Wahrscheinlich ist aber bis dahin Bluefox sowieso schneller 😉

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

                                  Eh, bin gerade etwas verwirrt …

                                  Seit dem Test habe ich keine Fehler mehr im Log .... alle INSERTs usw. gehen durch .... wie gesagt, bin wieder auf die Original-Version der main.js zurückgegangen (und hab auch den Adapter neu gestartet) ....

                                  Gruß,

                                  Eric

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

                                    Hallo,

                                    ` > hm-rpc.1 2015-12-07 01:24:54 info hm-rpc.1 xmlrpc -> listDevices 0

                                    sql.0 2015-12-07 01:20:54 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(53, 1449447653333, VD-12, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'VD' in 'field list'

                                    sql.0 2015-12-07 01:20:53 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(52, 1449447652908, 01:00:01 07.12.2015, 1, 3, 0);: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; c

                                    sql.0 2015-12-07 01:20:53 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(50, 1449447652664, SW, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'SW' in 'field list'

                                    sql.0 2015-12-07 01:20:53 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(48, 1449447652486, Windstille, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'Windstille' in 'field list'

                                    sql.0 2015-12-07 01:20:38 info sql.0 enabled logging of hm-rpc.0.MEQ0288793.1.STATE `

                                    Hier scheint der String nicht korrekt gequotet zu werden ' fehlen.

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

                                      MySQL:

                                      MySQL auf ioBroker

                                      apt-get install mysql-server mysql-client

                                      mysql -uroot -p

                                      CREATE USER 'iobroker‘@’%’ IDENTIFIED BY 'iobroker';

                                      GRANT ALL PRIVILEGES ON * . * TO 'iobroker'@'%';

                                      FLUSH PRIVILEGES;

                                      In /etc/mysql

                                      my.cnf: bind auf ip-Adresse umstellen (dann klappt es auch mit den Nachbarn) 😉

                                      Achtung: iobroker ist so ein "admin". Bei Bedarf weniger Rechte einrichten.

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

                                        lib/mysql.js anpassen:

                                        exports.insert = function (index, state, from, db) {
                                            if (db === 'ts_string') state.val = "'" + state.val + "'";
                                            return "INSERT INTO iobroker." + db + " (id, ts, val, ack, _from, q) VALUES(" + index + ", " + state.ts + ", " + state.val + ", " + (state.ack ? 1 : 0) + ", " + (from || 0) + ", " + state.q + ");";
                                        };
                                        
                                        

                                        Neu ist die Zeile mit dem "if"

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

                                          Hmmm, mySQL installieren …

                                          Ich denke, ich warte erst mal auf Bluefox - vielleicht hat er ja eine einfache Idee / Lösung.

                                          Gruß,

                                          Eric

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

                                            @sissiwup:

                                            Verbindung an MySQL klappt bei mir nur so:

                                            filename="Bildschirmfoto 2015-12-06 um 22.56.02.png" index="0">~~ `

                                            das wars, bei mir klappt die Verbindung endlich auch, wer hätte vermutet, dass gar kein Port angegeben werden darf. (vielleicht wird default zusätzlich auch ausgegeben, wenn im Feld was steht?)

                                            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

                                            968
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            18
                                            149
                                            36583
                                            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