Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Blockly Fehlermeldungen bereinigen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Blockly Fehlermeldungen bereinigen

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

      @tedesco1968 sagte: Um 23:56 werden die 32kWh richtig geschrieben

      Das gepostete Blockly triggert um 23:58 Uhr.
      Um zu testen, welches Skript welchen Wert schreibt, verwende ein Testskript mit einem Debug-Trigger auf diesen Datenpunkt.

      Blockly_Debug.JPG

      T 1 Reply Last reply Reply Quote 0
      • T
        tedesco1968 @paul53 last edited by

        @paul53 said in Blockly Fehlermeldungen bereinigen:

        @tedesco1968 sagte: Um 23:56 werden die 32kWh richtig geschrieben

        Das gepostete Blockly triggert um 23:58 Uhr.
        Um zu testen, welches Skript welchen Wert schreibt, verwende ein Testskript mit einem Debug-Trigger auf diesen Datenpunkt.

        Blockly_Debug.JPG

        Hallo Paul,

        also ich baue dein Testskript nach (genau so wie deins? ) mit den Datenpunkt Januar.

        Was meinst du mit Debug-Trigger? Sorry verstehe ich nicht.

        Gruß
        Antonio

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

          @tedesco1968 sagte: Was meinst du mit Debug-Trigger?

          Das gezeigte Blockly ist ein Debug-Trigger, der auf Aktualisierung triggert und nahezu den kompletten Datenpunkt-Zustand ausgibt: Wert, Quelle - bei Skripten den Skriptnamen und ob bestätigt.

          T 2 Replies Last reply Reply Quote 0
          • T
            tedesco1968 @paul53 last edited by

            @paul53 said in Blockly Fehlermeldungen bereinigen:

            @tedesco1968 sagte: Was meinst du mit Debug-Trigger?

            Das gezeigte Blockly ist ein Debug-Trigger, der auf Aktualisierung triggert und nahezu den kompletten Datenpunkt-Zustand ausgibt: Wert, Quelle - bei Skripten den Skriptnamen und ob bestätigt.

            Hallo Paul,

            🙂 OK Sorry, übrigen den Zeit Trigger im Blocly habe ich heute morgen auf 23:58 gestellt, wo ich manuell den Wert wieder berichtigt habe.

            Gruß
            Antonio

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

              @tedesco1968 sagte: wie das script weiß wenn Monatsende ist.

              Monatsende ist, wenn morgen (um 0:01 Uhr) der 1. ist.

              T 1 Reply Last reply Reply Quote 1
              • T
                tedesco1968 @paul53 last edited by

                @paul53 said in Blockly Fehlermeldungen bereinigen:

                @tedesco1968 sagte: wie das script weiß wenn Monatsende ist.

                Monatsende ist, wenn morgen (um 0:01 Uhr) der 1. ist.

                Hallo Paul,

                OK, das heisst das hat mit dem Datumsobjekt was zu tun, wird dieses am Monatsende um 0:00 Uhr = null? Habe das mit dem Datumsobjekt noch nicht ganz verstanden.

                Gruß
                Antonio

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

                  @tedesco1968 sagte: das hat mit dem Datumsobjekt was zu tun

                  Das Datumsobjekt enthält die ms seit 1.1.1970 0:00 Uhr UTC. Addiert man um 23:59 Uhr 120000 ms (2 Minuten) dazu, hat man das Datumsobjekt von morgen 0:01 Uhr.

                  T 1 Reply Last reply Reply Quote 0
                  • T
                    tedesco1968 @paul53 last edited by

                    @paul53 said in Blockly Fehlermeldungen bereinigen:

                    @tedesco1968 sagte: das hat mit dem Datumsobjekt was zu tun

                    Das Datumsobjekt enthält die ms seit 1.1.1970 0:00 Uhr UTC. Addiert man um 23:59 Uhr 120000 ms (2 Minuten) dazu, hat man das Datumsobjekt von morgen 0:01 Uhr.

                    Hallo Paul,

                    das mit dem 0:01 hatte ich schon verstanden, das ist aber jeden Tag, somit weiß das Script das der Tag vergangen ist, wie weiß das script aber das der Monat zu ende ist, das verstehe ich nicht.

                    Gruß
                    Antonio

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

                      @tedesco1968 sagte: wie weiß das script aber das der Monat zu ende ist

                      Das Datumobjekt von morgen 0:01 Uhr wird nach "Monatsdatum" konvertiert. Wenn das Monatsdatum 1 ist, ist morgen der 1., also heute der letzte Tag des monats.

                      T 1 Reply Last reply Reply Quote 0
                      • T
                        tedesco1968 @paul53 last edited by

                        @paul53 said in Blockly Fehlermeldungen bereinigen:

                        @tedesco1968 sagte: wie weiß das script aber das der Monat zu ende ist

                        Das Datumobjekt von morgen 0:01 Uhr wird nach "Monatsdatum" konvertiert. Wenn das Monatsdatum 1 ist, ist morgen der 1., also heute der letzte Tag des monats.

                        Hallo Paul,

                        mann oh mann, wer soll so etwas wissen 🙂 ?

                        Danke dir

                        Gruß
                        Antonio

                        1 Reply Last reply Reply Quote 0
                        • T
                          tedesco1968 @paul53 last edited by tedesco1968

                          @paul53 said in Blockly Fehlermeldungen bereinigen:

                          @tedesco1968 sagte: Was meinst du mit Debug-Trigger?

                          Das gezeigte Blockly ist ein Debug-Trigger, der auf Aktualisierung triggert und nahezu den kompletten Datenpunkt-Zustand ausgibt: Wert, Quelle - bei Skripten den Skriptnamen und ob bestätigt.

                          Guten Morgen Paul,

                          schaue dir mal die LOG Einträge an:

                          2023-01-11 23:56:00.178  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 36Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.189  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 40Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.199  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 44Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.212  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 48Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.225  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 52Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.236  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 56Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.251  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 60Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.274  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 64Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.276  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 40Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.277  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 44Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.284  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 48Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.297  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 52Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:56:00.303  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 178Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigttrue
                          2023-01-11 23:58:00.093  - warn: javascript.0 (30683) script.js.tonis_projekte.antonio.Strom-Monat_2023: 1
                          182
                          2023-01-11 23:58:00.155  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 182Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigtfalse
                          

                          und 182 steht jetzt im Datenpunkt,
                          2023-01-12 10_21_06-objects - raspberrypi.png
                          auch der Datenpunkt "Strombezug_Gesamt_Jahr" mit 72 ist falsch müsste 36 sein.

                          2023-01-12 10_24_42-objects - raspberrypi.png

                          Wie kann sowas zustande kommen?

                          Gruß
                          Antonio

                          Codierknecht 1 Reply Last reply Reply Quote 0
                          • Codierknecht
                            Codierknecht Developer Most Active @tedesco1968 last edited by

                            @tedesco1968 sagte in Blockly Fehlermeldungen bereinigen:

                            und 182 steht jetzt im Datenpunkt,

                            Ist doch richtig. Allerdings in rot - weil unbestätigt.
                            Die letzte Zeile im Log sagt ja genau das:

                            2023-01-11 23:58:00.155  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 182Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigtfalse
                            
                            T 1 Reply Last reply Reply Quote 0
                            • T
                              tedesco1968 @Codierknecht last edited by tedesco1968

                              @codierknecht said in Blockly Fehlermeldungen bereinigen:

                              @tedesco1968 sagte in Blockly Fehlermeldungen bereinigen:

                              und 182 steht jetzt im Datenpunkt,

                              Ist doch richtig. Allerdings in rot - weil unbestätigt.
                              Die letzte Zeile im Log sagt ja genau das:

                              2023-01-11 23:58:00.155  - info: javascript.0 (30683) script.js.tonis_projekte.antonio.debug_trigger: Wert: 182Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigtfalse
                              

                              Hallo Codierknecht,

                              richtig?? der Zeitrigger in meinem Blockly steht steht auf 23:58 Uhr, der richtige Wert müsste 36 sein, wo kommen die andere Werte her um 23:56 und zig millisekunden?

                              Hier ein auschnitt des Blockly:

                              2023-01-12 12_35_45-javascript - raspberrypi.png

                              Unbestätigt weil ich zum ausprobieren den Steuere Wert genommen habe normalerweise nehm ich immer Aktualisiere Wert.

                              Gruß
                              Antonio

                              Codierknecht paul53 2 Replies Last reply Reply Quote 0
                              • Codierknecht
                                Codierknecht Developer Most Active @tedesco1968 last edited by

                                @tedesco1968
                                Ich beziehe mich hier erstmal nur auf Deine Aussage:

                                und 182 steht jetzt im Datenpunkt,

                                Und das ist gemäß dem Auszug aus dem Log ja scheinbar korrekt.
                                Was man nämlich nicht sieht: Welcher Trigger feuert denn da die Debug-Ausgabe?
                                Und in welchen DP soll da geschrieben werden?
                                Für mich sieht das so aus, als würde das was da als Wert ankommt in den DP Januar geschrieben werden.

                                T 1 Reply Last reply Reply Quote 0
                                • T
                                  tedesco1968 @Codierknecht last edited by

                                  @codierknecht said in Blockly Fehlermeldungen bereinigen:

                                  @tedesco1968
                                  Ich beziehe mich hier erstmal nur auf Deine Aussage:

                                  und 182 steht jetzt im Datenpunkt,

                                  Und das ist gemäß dem Auszug aus dem Log ja scheinbar korrekt.
                                  Was man nämlich nicht sieht: Welcher Trigger feuert denn da die Debug-Ausgabe?
                                  Und in welchen DP soll da geschrieben werden?
                                  Für mich sieht das so aus, als würde das was da als Wert ankommt in den DP Januar geschrieben werden.

                                  Hallo Codierknecht,

                                  danke das du dir die Zeit nimmst.

                                  Ja, es geht um den Datenpunkt Januar, in dieser müsste um 23:58 gestern Abend der Wert 36 geschrieben werden, der Tag davor 32 + der Tageswert von 4, den Wert 32 habe ich manuell Gestern Morgen reingeschrieben (da irgendetwas nicht richtig funktioniert).
                                  Das komplette Blockly steht ein paar Posts weiter oben.

                                  Die Debug Ausgabe wird von einem Script gesteuert das mir Paul aus diesem Grund gegeben hat und den Datenpunkt Januar abhorcht :).

                                  Woher kommen aber diese Werte um 23:56:00.178 bis 23:56:00.303 ???
                                  Im LOG sieht man doch eindeutig das es vom gleichen Script kommt, der wird aber um 23:58 getriggert, wie geht das????

                                  Gruß
                                  Antonio

                                  Codierknecht 1 Reply Last reply Reply Quote 0
                                  • Codierknecht
                                    Codierknecht Developer Most Active @tedesco1968 last edited by

                                    @tedesco1968 sagte in Blockly Fehlermeldungen bereinigen:

                                    und den Datenpunkt Januar abhorcht

                                    Dann passen zumindest schon mal Log und Wert zusammen.

                                    Bin gerade dabei ein Blockly zu basteln.
                                    Dauert aber ein bisschen - falls @paul53 nicht mal wieder schneller ist 😉

                                    Codierknecht 1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 @tedesco1968 last edited by

                                      @tedesco1968 sagte: Hier ein auschnitt des Blockly:

                                      Das ist offenbar nur ein Teil des Blockly. Um 23:56 passiert auch etwas. Vielleicht haben sich noch Blöcke hinter den sichtbaren Blöcken versteckt? In der Javascript-Ansicht sieht man das komplette Skript.

                                      T 1 Reply Last reply Reply Quote 0
                                      • Codierknecht
                                        Codierknecht Developer Most Active @Codierknecht last edited by

                                        Also mein Blockly würde so aussehen:
                                        2a3b9104-dc04-42c0-9980-d9e1c0aa890a-grafik.png
                                        Der Name des DP für den Monat wird dynamisch anhand des Tagesdatums ermittelt.
                                        Der Name des DP für den Jahresverbrauch ist ja fix.

                                        In beiden DP wird einfach der vorhandene Wert um den Tagesverbrauch erhöht.

                                        Nicht berücksichtigt ist hier der Jahreswechsel.
                                        Am 31.12. oder am 1.1. eines jeden Jahres müssten die neuen Datenpunkte angelegt werden.

                                        T 1 Reply Last reply Reply Quote 0
                                        • T
                                          tedesco1968 @paul53 last edited by

                                          @paul53 said in Blockly Fehlermeldungen bereinigen:

                                          @tedesco1968 sagte: Hier ein auschnitt des Blockly:

                                          Das ist offenbar nur ein Teil des Blockly. Um 23:56 passiert auch etwas. Vielleicht haben sich noch Blöcke hinter den sichtbaren Blöcken versteckt? In der Javascript-Ansicht sieht man das komplette Skript.

                                          Hallo Paul,

                                          damit wäre ja das Problem gelöst, leider ist das nicht so, ich sehe auch da nur ein Zeittrigger (Schedule) anbei das Blokly in JavaScript:

                                          var Strombezug_gesamt_Jahr, M_C3_A4rz, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember, Februar, Januar;
                                          
                                          
                                          schedule("58 23 * * *", async function () {
                                            if ((new Date().getFullYear()) == 2023) {
                                              Strombezug_gesamt_Jahr = 0;
                                              Strombezug_gesamt_Jahr = getState("0_userdata.0.Strombezug_2023.Stombezug_Gesamt_Jahr").val;
                                              setState("0_userdata.0.Strombezug_2023.Stombezug_Gesamt_Jahr"/*Stombezug Gesamt Jahr*/, (parseFloat(Strombezug_gesamt_Jahr) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                              console.error(([(new Date().getFullYear()),'\n',getState("0_userdata.0.Strombezug_2023.Stombezug_Gesamt_Jahr").val].join('')));
                                            }
                                            if ((new Date().getMonth() + 1) == 1) {
                                              Januar = 0;
                                              Januar = getState("0_userdata.0.Strombezug_2023.Januar").val;
                                              setState("0_userdata.0.Strombezug_2023.Januar"/*Januar*/, (parseFloat(Januar) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val));
                                              console.warn(([(new Date().getMonth() + 1),'\n',getState("0_userdata.0.Strombezug_2023.Januar").val].join('')));
                                            } else if ((new Date().getMonth() + 1) == 2) {
                                              Februar = 0;
                                              Februar = getState("0_userdata.0.Strombezug_2023.Februar").val;
                                              setState("0_userdata.0.Strombezug_2023.Februar"/*Februar*/, (parseFloat(Februar) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 3) {
                                              M_C3_A4rz = 0;
                                              M_C3_A4rz = getState("0_userdata.0.Strombezug_2023.März").val;
                                              setState("0_userdata.0.Strombezug_2023.März"/*März*/, (parseFloat(M_C3_A4rz) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 4) {
                                              April = 0;
                                              April = getState("0_userdata.0.Strombezug_2023.April").val;
                                              setState("0_userdata.0.Strombezug_2023.April"/*April*/, (parseFloat(April) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 5) {
                                              Mai = 0;
                                              Mai = getState("0_userdata.0.Strombezug_2023.Mai").val;
                                              setState("0_userdata.0.Strombezug_2023.Mai"/*Mai*/, (parseFloat(Mai) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 6) {
                                              Juni = 0;
                                              Juni = getState("0_userdata.0.Strombezug_2023.Juni").val;
                                              setState("0_userdata.0.Strombezug_2023.Juni"/*Juni*/, (parseFloat(Juni) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 7) {
                                              Juli = 0;
                                              Juli = getState("0_userdata.0.Strombezug_2023.Juli").val;
                                              setState("0_userdata.0.Strombezug_2023.Juli"/*Juli*/, (parseFloat(Juli) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 8) {
                                              August = 0;
                                              August = getState("0_userdata.0.Strombezug_2023.August").val;
                                              setState("0_userdata.0.Strombezug_2023.August"/*August*/, (parseFloat(August) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 9) {
                                              September = 0;
                                              September = getState("0_userdata.0.Strombezug_2023.September").val;
                                              setState("0_userdata.0.Strombezug_2023.September"/*September*/, (parseFloat(September) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 10) {
                                              Oktober = 0;
                                              Oktober = getState("0_userdata.0.Strombezug_2023.Oktober").val;
                                              setState("0_userdata.0.Strombezug_2023.Oktober"/*Oktober*/, (parseFloat(Oktober) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 11) {
                                              November = 0;
                                              November = getState("0_userdata.0.Strombezug_2023.November").val;
                                              setState("0_userdata.0.Strombezug_2023.November"/*November*/, (parseFloat(November) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            } else if ((new Date().getMonth() + 1) == 12) {
                                              Dezember = 0;
                                              Dezember = getState("0_userdata.0.Strombezug_2023.Dezember").val;
                                              setState("0_userdata.0.Strombezug_2023.Dezember"/*Dezember*/, (parseFloat(Dezember) + getState("EigeneObjekte.0.Zähler_verbrauch_Tag").val), true);
                                            }
                                          });
                                          

                                          Gruß
                                          Tedesco

                                          1 Reply Last reply Reply Quote 0
                                          • T
                                            tedesco1968 @Codierknecht last edited by

                                            @codierknecht said in Blockly Fehlermeldungen bereinigen:

                                            Also mein Blockly würde so aussehen:
                                            2a3b9104-dc04-42c0-9980-d9e1c0aa890a-grafik.png
                                            Der Name des DP für den Monat wird dynamisch anhand des Tagesdatums ermittelt.
                                            Der Name des DP für den Jahresverbrauch ist ja fix.

                                            In beiden DP wird einfach der vorhandene Wert um den Tagesverbrauch erhöht.

                                            Nicht berücksichtigt ist hier der Jahreswechsel.
                                            Am 31.12. oder am 1.1. eines jeden Jahres müssten die neuen Datenpunkte angelegt werden.

                                            Hallo Codierknecht,

                                            ja 🙂 , wenn du ein paar Posts zurückgehst kannst du sehen das mir Paul schon so etwas für meinen PV Ertrag gezeigt hat, diese habe ich auch schon implementiert.

                                            Dieses Blockly werde ich irgendwann auch so ähnlich machen, wenn ich mal Zeit habe. Dann mache ich das über aut. Datenpunktgenerierung und aut. Datenübernahme und JavaSript Funktionen, sieht man auch schon etliche Posts vorher.

                                            Bloß dieses komische verhalten in meinem einfaches Script kann ich nicht nachvollziehen.

                                            Gruß
                                            Antonio

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            438
                                            Online

                                            32.0k
                                            Users

                                            80.5k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            60
                                            3090
                                            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