Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. MacPo

    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

    M
    • Profile
    • Following 0
    • Followers 0
    • Topics 5
    • Posts 31
    • Best 4
    • Groups 1

    MacPo

    @MacPo

    4
    Reputation
    14
    Profile views
    31
    Posts
    0
    Followers
    0
    Following
    Joined Last Online
    Location Bad Vilbel

    MacPo Follow
    Starter

    Best posts made by MacPo

    • RE: FullyBrowser (12191) updateDeviceERROR

      Bei mir sind auch die Meldungen updateDeviceERROR gekommen, wenn das Display deaktiviert ist. Beim Stöbern in den Einstellungen, sind mit die erweiterten Einstellungen von WLAN und dort der WLAN-Energiesparmodus aufgefallen. Den habe ich nun deaktiviert und werde berichten, ob damit die Meldung ausbleibt.

      posted in ioBroker Allgemein
      M
      MacPo
    • RE: Nach Update js-controller macht host.raspberrypi Fehler

      @thomas-braun
      Bei mir ist genau das gleiche Verhalten. Die Fehlermeldung von echarts ist beim Start vom js-controller nach dem Update von 6.0.9 auf 6.0.11 erschienen.

      2024-08-29 17:03:44.064  - info: host.broker01 iobroker rebuild echarts --debug
      2024-08-29 17:03:44.670  - info: host.broker01 iobroker Rebuilding native module "echarts" ...
      2024-08-29 17:03:46.850  - info: host.broker01 iobroker rebuilt dependencies successfully
      2024-08-29 17:03:46.872  - info: host.broker01 iobroker
      2024-08-29 17:03:46.873  - info: host.broker01 iobroker Rebuilding native modules done
      2024-08-29 17:03:47.880  - info: host.broker01 iobroker exit 0
      2024-08-29 17:03:59.213  - info: host.broker01 instance system.adapter.echarts.0 in version "1.7.2" started with pid 3643197
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]: node:internal/modules/cjs/loader:1148
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]:   throw err;
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]:   ^
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]: Error: Cannot find module '@iobroker/adapter-core'
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]: Require stack:
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]: - /opt/iobroker/node_modules/iobroker.echarts/main.js
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._resolveFilename (node:internal/modules/cjs/loader:1145:15)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._load (node:internal/modules/cjs/loader:986:27)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module.require (node:internal/modules/cjs/loader:1233:19)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at require (node:internal/modules/helpers:179:18)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Object.<anonymous> (/opt/iobroker/node_modules/iobroker.echarts/main.js:12:21)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._compile (node:internal/modules/cjs/loader:1358:14)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module.load (node:internal/modules/cjs/loader:1208:32)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._load (node:internal/modules/cjs/loader:1024:12)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12) {
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:   code: 'MODULE_NOT_FOUND',
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:   requireStack: [ '/opt/iobroker/node_modules/iobroker.echarts/main.js' ]
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]: }
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]: Node.js v20.16.0
      2024-08-29 17:03:59.348  - error: host.broker01 instance system.adapter.echarts.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
      2024-08-29 17:03:59.348  - info: host.broker01 Rebuild for adapter system.adapter.echarts.0 not successful in 3 tries. Adapter will not be restarted again. Please execute "npm install --production" in adapter directory manually.
      
      posted in ioBroker Allgemein
      M
      MacPo
    • RE: Nach Update js-controller macht host.raspberrypi Fehler

      @st-be Für das Problem gibt es schon ein Ticket in GitHub https://github.com/ioBroker/ioBroker.echarts/issues/680
      Mit der Installation von 1.9.0 (noch nicht im stable) funktioniert der Adapter auch bei mir wieder.

      hgschwibbe created this issue in ioBroker/ioBroker.echarts

      closed ECharts instance does not start after host update to version 6.0.9. #680

      posted in ioBroker Allgemein
      M
      MacPo
    • RE: Nach Update js-controller macht host.raspberrypi Fehler

      @spicer

      Mit der V1.9.0 ist unterhalb des Charts (zBsp Datenquellen) das Fenster leer.

      Bei mir funktioniert die Version 1.9.0. Wenn die Version 1.8.4 bei Dir funktioniert, ist das doch super.

      Auch bei mir kommt die Meldung bei dem Backitup Adapter, wenn ich die Oberfläche öffne. Die Sicherungen sind aber weiterhin durchgeführt worden.
      Nachdem ich auf die Version 3.0.20 aktualisiert habe, bleibt die Fehlermeldung aus. Wahrscheinlich ist es durch dependencies updated behoben worden.

      posted in ioBroker Allgemein
      M
      MacPo

    Latest posts made by MacPo

    • RE: Test Adapter Device-Watcher v2.x.x GitHub/Latest

      Da der Device Watcher auch bei mir die Sonos Boxen als Offline betrachtet, habe ich mal einen Test durchgeführt. Der Zeitstempel vom Datenpunkt alive = true wird auch aktualisiert, wenn die Box ausgeschaltet ist und zum Beispiel eine andere Box bedient wird. Beim Sonos Adapter gibt es schon ein entsprechenden Eintrag https://github.com/ioBroker/ioBroker.sonos/issues/252

      padman74 created this issue in ioBroker/ioBroker.sonos

      open Adapter does not update alive status #252

      posted in Tester
      M
      MacPo
    • RE: Nach Update js-controller macht host.raspberrypi Fehler

      @spicer

      Mit der V1.9.0 ist unterhalb des Charts (zBsp Datenquellen) das Fenster leer.

      Bei mir funktioniert die Version 1.9.0. Wenn die Version 1.8.4 bei Dir funktioniert, ist das doch super.

      Auch bei mir kommt die Meldung bei dem Backitup Adapter, wenn ich die Oberfläche öffne. Die Sicherungen sind aber weiterhin durchgeführt worden.
      Nachdem ich auf die Version 3.0.20 aktualisiert habe, bleibt die Fehlermeldung aus. Wahrscheinlich ist es durch dependencies updated behoben worden.

      posted in ioBroker Allgemein
      M
      MacPo
    • RE: Nach Update js-controller macht host.raspberrypi Fehler

      @st-be Für das Problem gibt es schon ein Ticket in GitHub https://github.com/ioBroker/ioBroker.echarts/issues/680
      Mit der Installation von 1.9.0 (noch nicht im stable) funktioniert der Adapter auch bei mir wieder.

      hgschwibbe created this issue in ioBroker/ioBroker.echarts

      closed ECharts instance does not start after host update to version 6.0.9. #680

      posted in ioBroker Allgemein
      M
      MacPo
    • RE: Nach Update js-controller macht host.raspberrypi Fehler

      @thomas-braun
      Bei mir ist genau das gleiche Verhalten. Die Fehlermeldung von echarts ist beim Start vom js-controller nach dem Update von 6.0.9 auf 6.0.11 erschienen.

      2024-08-29 17:03:44.064  - info: host.broker01 iobroker rebuild echarts --debug
      2024-08-29 17:03:44.670  - info: host.broker01 iobroker Rebuilding native module "echarts" ...
      2024-08-29 17:03:46.850  - info: host.broker01 iobroker rebuilt dependencies successfully
      2024-08-29 17:03:46.872  - info: host.broker01 iobroker
      2024-08-29 17:03:46.873  - info: host.broker01 iobroker Rebuilding native modules done
      2024-08-29 17:03:47.880  - info: host.broker01 iobroker exit 0
      2024-08-29 17:03:59.213  - info: host.broker01 instance system.adapter.echarts.0 in version "1.7.2" started with pid 3643197
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]: node:internal/modules/cjs/loader:1148
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]:   throw err;
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]:   ^
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]: Error: Cannot find module '@iobroker/adapter-core'
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]: Require stack:
      2024-08-29 17:03:59.347  - error: host.broker01 Caught by controller[0]: - /opt/iobroker/node_modules/iobroker.echarts/main.js
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._resolveFilename (node:internal/modules/cjs/loader:1145:15)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._load (node:internal/modules/cjs/loader:986:27)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module.require (node:internal/modules/cjs/loader:1233:19)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at require (node:internal/modules/helpers:179:18)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Object.<anonymous> (/opt/iobroker/node_modules/iobroker.echarts/main.js:12:21)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._compile (node:internal/modules/cjs/loader:1358:14)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module.load (node:internal/modules/cjs/loader:1208:32)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Module._load (node:internal/modules/cjs/loader:1024:12)
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12) {
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:   code: 'MODULE_NOT_FOUND',
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]:   requireStack: [ '/opt/iobroker/node_modules/iobroker.echarts/main.js' ]
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]: }
      2024-08-29 17:03:59.348  - error: host.broker01 Caught by controller[0]: Node.js v20.16.0
      2024-08-29 17:03:59.348  - error: host.broker01 instance system.adapter.echarts.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
      2024-08-29 17:03:59.348  - info: host.broker01 Rebuild for adapter system.adapter.echarts.0 not successful in 3 tries. Adapter will not be restarted again. Please execute "npm install --production" in adapter directory manually.
      
      posted in ioBroker Allgemein
      M
      MacPo
    • RE: Zigbee - Licht und Lichtwecker...

      @arteck Aktuell verwende ich transition_time mit 3.600 (10min) für meinen Lichtwecker...

      Ich werde nochmal andere Birnen testen.

      posted in ioBroker Allgemein
      M
      MacPo
    • RE: Zigbee - Licht und Lichtwecker...

      Hat jemand ähnliche Erfahrungen? Ich bin über jeden Tipp dankbar, wie z.B. beim Ein-/Ausschalten immer die transition_time berücksichtigt wird...

      posted in ioBroker Allgemein
      M
      MacPo
    • RE: Zigbee - Licht und Lichtwecker...

      Nun komme ich endlich dazu, ein paar Infos von meinem aktuellen Zwischenstand zu schreiben:
      Wenn man die Eigenschaft send_payload nutzen möchte, muss man die speziellen Wertebereiche von den Zigbee-Objekte berücksichtigen. Die anderen Eigenschaften wie brightness haben neutrale Werte wie hier zum Beispiel in Prozent.
      Es sollte nicht gleichzeitig brightness und state gesetzt werden, dass hat bei mir zu unerwarteten Verhalten geführt. Für das Ausschalten reicht es aus, wenn man die Helligkeit auf 0 setzt. Beim Einschalten oder ändern des Lichts kann man die Eigenschaften color, colortemp und brightness direkt nacheinander setzen, ohne dass es zu Problemen kommt.
      Dennoch wird beim Ein-/Ausschalten die Schaltzeit nur je nach Model (auch vom gleichen Hersteller) berücksichtigt. Bei Änderungen des Lichts hingegen immer.
      Allgemein werden andere Eigenschaften nicht implizit aktualisiert, so dass zum Beispiel brightness_move mit -10 am Ende zu einem sehr schwachen Licht führt, aber die Eigenschaft brightness immer noch bei 100 steht. device_query habe ich aktiviert.

      posted in ioBroker Allgemein
      M
      MacPo
    • RE: [Projekt] Adapter: ioBroker.loxone

      Moin,

      ich möchte gerne die Info, ob die Tür von einem Rollo geöffnet ist, in meiner Vis darstellen.
      f8ba4640-6bf7-4d9f-b85e-2c063e2a9198-image.png
      Leider finde ich keine passende Eigenschaft für die Info. autoState und deviceState sind bei meinen Rollos alle auf 2.
      7b9c3c98-241e-4f03-821a-5d579bcc6abe-image.png
      Hat jemand die Info schon gefunden?

      Hat jemand vielleicht eine Beschreibung für die Eigenschaft autoAllowed ?

      Gibt es irgendwo eine Beschreibung für alle Eigenschaften, die im ioBroker dargestellt werden?

      posted in ioBroker Allgemein
      M
      MacPo
    • RE: Zigbee - Licht und Lichtwecker...

      @djmarc75 Ich hatte mir es noch überlegt...

      const transitionLicht = 1;
      
      on({id: "javascript.0.loxone.lichtSchreibtisch", change: "ne", ack: false}, function (obj){ licht(String(obj.id), 'zigbee.0.00158d0001234567', obj.state.val); });
      
      /**
      * Setzt das Licht und setze AKN für das 
      * @param {string} javascriptObjekt  Objekt Id in ioBroker für das Aknowledge
      * @param {string} zigbeeObjekt      Zigbee-Objekt mit dem Licht
      * @param {object} lichtWert         Lichtwert
      */
      function licht(javascriptObjekt, zigbeeObjekt, lichtWert) {
          //Setze die allgemeine Transitionszeit für Licht.
          var aktuelleTransitionszeit = getState(zigbeeObjekt + '.transition_time').val;
          if (aktuelleTransitionszeit != transitionLicht) {
              setState(zigbeeObjekt + '.transition_time', transitionLicht);
          }
      
          var istFarbe = String(Array.prototype.slice.apply($(zigbeeObjekt + ".color"))).length != 0;
      
          if (istFarbe) {
              lichtRgb(zigbeeObjekt, String(lichtWert));
          } else {
              lichtSw(zigbeeObjekt, String(lichtWert));
          }
          setState(javascriptObjekt, lichtWert, true);
      }
      
      /**
      * Setzt das Licht für eine weiße Birne
      * @param {string} zigbeeObjekt    ZigbeeObjektId
      * @param {string} wert            Lichtwert
      */
      function lichtSw(zigbeeObjekt, wert) {
          var loxStr = String(wert);
      
          if (loxStr.length == 0) {
              logs('debug', 'Übergebender Wert leer - Abbruch');
              return;
          }
      
          //Loxone Lichtlevel 0% bis 100%
          var lichtLevel = parseInt(loxStr) || 0;
          setState(zigbeeObjekt + '.brightness', lichtLevel);
      }
      
      /**
      * Setzt das Licht für eine farbige Birne
      * @param {string} zigbeeObjekt    ZigbeeObjektId
      * @param {string} wert            Lichtwert (bei 2xxxxxxxx weiß, sonst RGB)
      */
      function lichtRgb(zigbeeObjekt, wert) {
          logs('trace', 'Start');
      
          var loxStr = String(wert);
          var loxStrLen = loxStr.length;
          if (loxStrLen == 0) {
              logs('debug', 'Übergebender Wert leer - Abbruch');
              return;
          } else {
              logs('debug', 'Übergebender Wert: ' + loxStr);
          }
      
          if (loxStr.substring(0, 1) == '2' && loxStrLen == 9) {  
              //Weiss
              var lichtLevel = parseInt(loxStr.substring(2, 5)) || 0;
              var lichtTemp = parseInt(loxStr.substring(5, 9)) || 0;
      
              if (lichtLevel == 0) {
                  logs('debug', 'LichtRgb - Weiss: ' + zigbeeObjekt + ' ausschalten');
                  setState(zigbeeObjekt + '.brightness', lichtLevel);
              } else {
                  //Loxone Lichttemperatur: 6500 Kelvin kalt bis 2700 Kelvin warm
                  //Zigbee Lichttemperatur:  150             bis  500
                  //Umrechnung: 665 - ((Kelvin / 10) - 120) -> 785 - (Kelvin / 10)
                  lichtTemp = Math.round(785 - (lichtTemp / 10));
                  setState(zigbeeObjekt + '.colortemp', lichtTemp);
                  setState(zigbeeObjekt + '.brightness', lichtLevel);
              }
          } else {  
              //RGB
              var colorRedParse = 0;
              var colorGreenParse = 0;
              var colorBlueParse = 0;
      
              if (loxStrLen <= 3) {
                  colorRedParse = parseInt(loxStr.substring(0, 3)) || 0;
              } else if (loxStrLen <= 6) {
                  colorRedParse = parseInt(loxStr.substring(loxStrLen - 3, loxStrLen)) || 0;
                  colorGreenParse = parseInt(loxStr.substring(0, loxStrLen - 3)) || 0;
              } else if (loxStrLen <= 9) {
                  colorRedParse = parseInt(loxStr.substring(loxStrLen - 3, loxStrLen)) || 0;
                  colorGreenParse = parseInt(loxStr.substring(loxStrLen - 6, loxStrLen - 3)) || 0;
                  colorBlueParse = parseInt(loxStr.substring(0, loxStrLen - 6)) || 0;
              } else {
                  logs('error', 'LichtRgb - Rgb: ' + zigbeeObjekt + ': Unerwartet Länge übergebender Wert - Abbruch');
                  return;
              }
              // Loxone liefert Rot, Grün und Blau als 0 bis 100%
              var colorRed = Math.round(255 / 100 * colorRedParse);
              var colorGreen = Math.round(255 / 100 * colorGreenParse);
              var colorBlue = Math.round(255 / 100 * colorBlueParse);
      
              var level = Math.round(Math.max(colorRed, colorGreen, colorBlue)) / 2.55;
      
              var red = colorRed / 255;
              var green = colorGreen / 255;
              var blue = colorBlue / 255;
              red = (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92);
              green = (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92);
              blue = (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92);
              logs('debug', 'red: ' + red + ' / green: ' + green + ' / blue: ' + blue + ' / level: ' + level);
      
              var X = red * 0.664511 + green * 0.154324 + blue * 0.162028;
              var Y = red * 0.283881 + green * 0.668433 + blue * 0.047685;
              var Z = red * 0.000088 + green * 0.072310 + blue * 0.986039;
      
              var divisor = colorRed + colorGreen + colorBlue;
              if (divisor == 0) {
                  logs('debug', 'LichtRgb - Rgb: ' + zigbeeObjekt + ' ausschalten');
                  setState(zigbeeObjekt + '.brightness', 0);
              } else {
                  var x = X / divisor;
                  var y = Y / divisor;
                  
                  var zigbeeColor = '#' + ('0' + colorRed.toString(16)).slice(-2) + ('0' + colorGreen.toString(16)).slice(-2) + ('0' + colorBlue.toString(16)).slice(-2);
                  setState(zigbeeObjekt + '.color', zigbeeColor);
                  setState(zigbeeObjekt + '.brightness', level);
              }
          }
      }
      
      posted in ioBroker Allgemein
      M
      MacPo
    • Zigbee - Licht und Lichtwecker...

      Hallo zusammen,

      ich versuche seit einiger Zeit verzweifelt meine Lichtsteuerung in den Griff zu bekommen. Irgendwie scheine ich etwas grundlegendes falsch zu machen. Daher hier meine Probleme und Fragen. Ich nutze den Sonoff Stick mit dem Zigbee Adapter.

      Aktuelle Situation

      Ich habe einige Zigbee FoH Schalter mit denen ich weiße und farbige Zigbee Birnen von Philips und Tint mit Javascript schalte. D.h. wenn Schalter gedrückt wird, dann schalte das Licht an oder setze eine andere Lichtfarbe. Zusätzlich habe ich einen Lichtwecker, der über 10 Minuten die Zigbee Birnen langsam heller werden lassen. Schön wäre es, wenn der Übergang für das An- bzw. Ausschalten, dem Farbwechsel oder dem Wechsel von Farbe zu Weiß etwa 1 Sekunde braucht.

      Technische Umsetzung

      Beim Ein- bzw. Ausschalten prüfe ich am Anfang transition_time und setze es auf 1 falls notwendig.

      Einschalten
      Falls es sich um eine farbige Birne handelt, setze ich bei weißem Licht als erstes colortemp sonst color mit der übergebenen Lichttemperatur bzw. -farbe. Mit dem Setzen von brightness auf 100, schalte ich die Birne an.

      Ausschalten
      Um die Birne auszuschalten, setze ich brightness einfach auf 0.

      Lichtwecker
      Für den Lichtwecker setze ich zuerst transition_time, dann colortemp und zuletzt brightness.

      Probleme

      Beim Einschalten kommt es ab und zu vor, dass das Licht nicht von farbig zu weiß bzw. umgekehrt wechselt. Auch wird beim Einschalten die transition_time nicht berücksichtigt, d.h. es springt an.
      Da ich die Vermutung hatte, bei den zwei oder drei "Aktionen" per setState eins verschluckt wird, habe ich versucht mit payload die Werte zu setzen. Bei brightness handelt es sich auf einmal um einen absoluten Wert und die Werte im Objektbaum werden nicht aktualisiert. Dies ist gerade beim Lichtwecker unschön, da ich in Abhängigkeit vom Licht andere Aktionen durchführen möchte, hier diese nicht aktualisiert wurden.

      Hat jemand die ähnliche Erfahrungen? Wie habt ihr sie gelöst? Wie schaltet Ihr Euer Licht?

      posted in ioBroker Allgemein
      M
      MacPo
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo