Navigation

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

    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 2
    • Posts 33
    • Best 0
    • Groups 0

    marphDE

    @marphDE

    0
    Reputation
    14
    Profile views
    33
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    marphDE Follow

    Latest posts made by marphDE

    • RE: SayIT über Sonos?

      Hallo,

      das Thema ist zwar schon etwas älter aber dennoch für mich gerade aktuell.

      Mein Script funktioniert soweit, würde aber gerne weitere Sonos Boxen hinzufügen ohne für jede einzelne eine Variable erstellen zu müssen,

      geht sowas etwas dynamischer z.B. mit einer Aufzählung ?

      Würde mich als Anfänger sehr über eine Hilfe anhand meine Scripts freuen.

      hier der Code:

      var idSayIt = "sayit.0.tts.text"; // Hier die SayIt Text ID
      var idSonos = "sonos.0.root.10_1_1_30." // Hier die Sonos Id
      var curList = getState(idSonos+"current_title").val; //Momentanen Sender speichern
      var curVol = getState(idSonos+"volume").val.toString(); //Momentane Lautstärke speichern
      
      function esklingelt() {
       var idSonosplay = getState (idSonos+"state_simple").val; //Status des Speakers einlesen
      
      //Wenn Radio läuft
         if (idSonosplay === true) {
      
          sendTo('sonos', 'send', '55;http://10.1.1.3:8082/sayit.0/tts.userfiles/dingdong.mp3');
          setState (idSayIt, "35; Es hat geklingelt "); //Sayit Ausgabe
      
          setTimeout(function () {
              setStateDelayed ("sonos.0.root.10_1_1_30.favorites_set", curList); //nach 7 Sekunden gespeicherten Sender wieder starten
              }, 7000);
      
              return; //Beim Durchlauf wird die Funktion verlassen
      
      //Wenn Radio nicht läuft
         } else if (idSonosplay === false)
         setState("sonos.0.root.10_1_1_30.volume", curVol); //Lautstärke wird wieder auf den vorherigen Wert gesetzt
      
          sendTo('sonos', 'send', '55;http://10.1.1.3:8082/sayit.0/tts.userfiles/dingdong.mp3');
          setState (idSayIt, "35; Es hat geklingelt "); //Sayit Ausgabe
         }
      
      on({id: "hm-rpc.0.OEQ2237852.1.PRESS_SHORT"/*Taster_Haustuer_Klingel.PRESS_SHORT*/, val: true}, esklingelt); //bei kurzem Tastendruck "esklingelt" aufrufen
      on({id: "hm-rpc.0.OEQ2237852.1.PRESS_CONT"/*Taster_Haustuer_Klingel.PRESS_LONG*/, val: true}, esklingelt);   //bei langem Tastendruck "esklingelt" aufrufen
      
      

      Vielen Dank.

      posted in ioBroker Allgemein
      M
      marphDE
    • RE: Skript LOWBAT

      vielen Dank, hat super funktioniert. 😄

      posted in Skripten / Logik
      M
      marphDE
    • RE: Skript LOWBAT

      Hallo,

      danke erstmal für das Script.

      Bei mir funktioniert das zählen der "möglichenLOWBAT" leider nicht.

      Kann mir bitte jemand helfen den Fehler zu finden.

      4060_bildschirmfoto_2018-02-09_um_23.42.04.png

      ! ! createState('zählenLowbat.moeglicheLOWBAT', 0); // wenn benötigt: Anzahl der vorhandenen LOWBAT createState('zählenLowbat.anzahlLOWBAT', 0); // wenn benötigt: Anzahl der vorhandenen LOWBAT createState('zählenLowbat.textLOWBAT', " "); // Anzahl LOWBAT, die an sind als Variable unter Javascript.0 anlegen ! var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT]'); ! function countLowbat(obj) { // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0 var moeglicheLOWBAT = 0; var anzahlLOWBAT = 0; var textLOWBAT = []; ! if (obj) { log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val); // Info im Log, welcher Zustand sich geändert hat } else { log('Ausgelöst bei Timer'); } ! cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT var status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) var obj = getObject(id); if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt textLOWBAT.push(obj.common.name); // Zu Array hinzufügen } log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status); ++anzahlLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status }); ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben log("Text: " + textLOWBAT); log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " + anzahlLOWBAT); ! // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState("zählenLowbat.textLOWBAT", textLOWBAT.join(', ')); // Schreibt die aktuelle Namen der Geräte mit LOWBAT Meldung setState("zählenLowbat.anzahlLOWBAT", textLOWBAT.length); // Schreibt die aktuelle Anzahl der Geräte im System setState("zählenLowbat.moeglicheLOWBAT", moeglicheLOWBAT); // Schreibt die aktuelle Anzahl der vorhandene Geräte } ! cacheSelectorLOWBAT.on(function(obj) { // bei Zustandänderung *. LOWBAT in allen Gewerken countLowbat(obj); }); schedule("*/10 * * * *", function () { //oder!! soll entweder ausgelöst werden alle 10 Minuten log("===>Will be triggered every 60 minutes!"); countLowbat(); }); !

      posted in Skripten / Logik
      M
      marphDE
    • RE: Bewegungsmelder mit Hue und Sonos

      Leider habe ich es noch nicht geschafft eine funktionierende Lösung auf die Beine zu stellen.

      :roll: 😐

      posted in Skripten / Logik
      M
      marphDE
    • RE: [gelöst] Blockly Licht über Bewegungsmelder, Dauerlicht über Taster

      auch das hatte ich bereits, allerdings kam ich dabei null weiter und habe es nun mit diesem Script hier versucht.

      Ich wollte einfach Licht und Sonos per BWM einschalten, aber nur dann wenn es nicht bereits vorher manuell angeschalten war.

      Bzw. 1. Wenn an -> Keine Änderrung per BWM (muss manuell ausgeschalten werden).

      2. Wenn aus -> Bewegungsmelder schaltet Licht und Sonos ein (wird automatisch ausgeschalten)

      hier der Link dazu: http://forum.iobroker.net/viewtopic.php … ilit=Sonos

      posted in Skripten / Logik
      M
      marphDE
    • RE: [gelöst] Blockly Licht über Bewegungsmelder, Dauerlicht über Taster

      was mache ich denn falsch bzw. wie könnte ich das umsetzen ?

      posted in Skripten / Logik
      M
      marphDE
    • RE: [gelöst] Blockly Licht über Bewegungsmelder, Dauerlicht über Taster

      habe ich getan, leider bleibt die Lampe an auch wenn der BWM bereits auf false steht.

      posted in Skripten / Logik
      M
      marphDE
    • RE: [gelöst] Blockly Licht über Bewegungsmelder, Dauerlicht über Taster

      habe das Script auch mal so nachgebaut, allerdings mit der Ausnahme das ich keine Taster zum auswerten der manuellen Schaltung nutze sondern einfach den momentanen Status der Lampe auswerte um zu entscheiden ob manuell geschalten oder nicht.

      Leider geht bei mir die Lampe anscheinen nicht mehr aus nach den 3 Minuten.

      Wenn der Bewegugsmelder auslöst sehe ich im Log auch 2 aufeinander folgende Meldungen wie folgt:

      hue.0	2018-02-06 20:58:02.780	info	final lightState for Philips_hue.Regal_Bad:{"bri":254,"on":true,"level":100}
      zwave.0	2018-02-06 20:57:55.345	info	Update zwave.0.NODE2
      hue.0	2018-02-06 20:57:54.817	info	final lightState for Philips_hue.Regal_Bad:{"bri":254,"on":true,"level":100}
      javascript.0	2018-02-06 20:57:36.702	info	script.js.Bad.Skript1: registered 8 subscriptions and 1 schedule
      
      

      4060_bildschirmfoto_2018-02-06_um_21.24.47.png

      Kann mir jemand helfen ?

      Lg,

      Martin

      posted in Skripten / Logik
      M
      marphDE
    • RE: Bewegungsmelder mit Hue und Sonos

      Danke für die super Hilfe Heiko.

      Es schaltet sich bei Bewegung zumindest erstmal alles ein.

      Leider geht es trotzdem wieder aus und lässt sich nicht gleich wieder durch Bewegung aktivieren.

      Das Script schaltet definitiv nach dem eingestellten Timeout von 2 Minuten ab, auch wenn Bewegung ist.

      posted in Skripten / Logik
      M
      marphDE
    • RE: Bewegungsmelder mit Hue und Sonos

      habe das jetzt script jetzt mal so umgebaut, leider geht nun überhaupt kein Licht/Radio an.

      irgendwas mache ich doch hier falsch.

      4060_bildschirmfoto_2018-01-20_um_19.02.56.png
      4060_bildschirmfoto_2018-01-20_um_19.03.14.png

      Export:

      ! ````
      <xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="~_jTRd2uEjv6BtxPG%fx" x="-13" y="13"><mutation items="1"></mutation>
      <field name="CONDITION">any</field>

      <value name="OID0"><shadow type="field_oid" id="g54nI7K}1QilT[uDuw|^"><field name="oid">zwave.0.NODE2.ALARM.Burglar_1</field></shadow></value> 
      <statement name="STATEMENT"><block type="controls_if" id="mR`+!yPdR6x#HZIUOGB]"><value name="IF0"><block type="logic_compare" id=",(1+%Q#FS=,;J[.8MUf)"><field name="OP">GT</field>
              <value name="A"><block type="get_value" id="}NMjHF,YZy#H?JmqV/{s"><field name="ATTR">val</field>
                  <field name="OID">zwave.0.NODE2.ALARM.Burglar_1</field></block></value> 
              <value name="B"><block type="math_number" id="EqNu{/|gvV#BjB6sq2!U"><field name="NUM">0</field></block></value></block></value> 
          <statement name="DO0"><block type="timeouts_cleartimeout" id="9!el-]bKQLrumd*D]b1:"><field name="NAME">Licht_und_Musik_aus</field>
              <next><block type="controls_if" id="r(n(?1ooC@}*dg.hb.^("><value name="IF0"><block type="logic_operation" id="8x/85[6ht1Wp?=C^Bbb]"><field name="OP">AND</field>
                      <value name="A"><block type="time_compare" id="FXx1B]c4%R8#[h:Q+qCt"><mutation end_time="false"></mutation>
                          <field name="OPTION">>=</field>
                          <field name="START_TIME">15:35</field></block></value> 
                      <value name="B"><block type="time_compare" id="W0L,nK%HQ+*:y]Pkw(E)"><mutation end_time="false"></mutation>
                          <field name="OPTION"><</field>
                          <field name="START_TIME">22:00</field></block></value></block></value> 
                  <statement name="DO0"><block type="controls_if" id="|6yqMrq{ljIAzuAyMXT2"><value name="IF0"><block type="logic_compare" id="d||!UL/+[`_X6B#y[t(~"><field name="OP">EQ</field>
                          <value name="A"><block type="variables_get" id="=MB+UltFU@,Q0Qlq:Jm["><field name="VAR">Musik_durch_BWM</field></block></value> 
                          <value name="B"><block type="logic_operation" id="OaMK()A~D+?r?,ujry;V"><field name="OP">OR</field>
                              <value name="A"><block type="logic_boolean" id="{+U?[)h0Lyi)-o0MfUk~"><field name="BOOL">TRUE</field></block></value> 
                              <value name="B"><block type="logic_compare" id=";:;uyP_6||mFe-),la/0"><field name="OP">NEQ</field>
                                  <value name="A"><block type="get_value" id="tnX,zOR3cMUH:~@pn3LU"><field name="ATTR">val</field>
                                      <field name="OID">sonos.0.root.10_0_0_61.state</field></block></value> 
                                  <value name="B"><block type="text" id="DEb[(D8PC}S8E8Zjj!NV"><field name="TEXT">play</field></block></value></block></value></block></value></block></value> 
                      <statement name="DO0"><block type="controls_if" id="W4.xuE(zh(hpoO3wIhgN"><value name="IF0"><block type="logic_compare" id="X/]m[y9y9(Rk^{hELL2V"><field name="OP">EQ</field>
                              <value name="A"><block type="variables_get" id=",igPlR]2m|A#?)^T#TGp"><field name="VAR">Musik_durch_BWM</field></block></value> 
                              <value name="B"><block type="logic_boolean" id="#xzxv},Xr!Wxn.D(V]oh"><field name="BOOL">FALSE</field></block></value></block></value> 
                          <statement name="DO0"><block type="variables_set" id=".k;M~55c]/RoO#*ALA`{"><field name="VAR">Musik_durch_BWM</field>
                              <value name="VALUE"><block type="logic_boolean" id="|GLvhY,9D@f,,8}8QCRM"><field name="BOOL">TRUE</field></block></value></block></statement> 
                          <next><block type="control" id="XB/H3U!K90wtF[7|vbQ9"><mutation delay_input="false"></mutation>
                              <field name="OID">sonos.0.root.10_0_0_61.volume</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE"><block type="math_number" id="(mhD+dAVVQVFv%YJTSoD"><field name="NUM">12</field></block></value> 
                              <next><block type="control" id="nl98VkAw|z,C(emzqnj!"><mutation delay_input="false"></mutation>
                                  <field name="OID">sonos.0.root.10_0_0_61.state</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE"><block type="text" id="+vXq}[4M]dA+)4i@3z%]"><field name="TEXT">play</field></block></value> 
                                  <next><block type="control" id="OkL0pgQZ9`AJjQSPW#hH"><mutation delay_input="false"></mutation>
                                      <field name="OID">sonos.0.root.10_0_0_61.favorites_set</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE"><block type="text" id="8|r]Y/R+ek~x#31fIu,P"><field name="TEXT">94.3 RS2</field></block></value> 
                                      <next><block type="control" id="qQ;MkWLC:,z,R5!S0wa."><mutation delay_input="false"></mutation>
                                          <field name="OID">sonos.0.root.10_0_0_61.stop</field>
                                          <field name="WITH_DELAY">FALSE</field>
                                          <value name="VALUE"><block type="logic_boolean" id="aZojuBdcU[bwg:4e2qyF"><field name="BOOL">FALSE</field></block></value> 
                                          <next><block type="control" id="iq0Sb}MvKL^iu:eM{`/y"><mutation delay_input="false"></mutation>
                                              <field name="OID">sonos.0.root.10_0_0_61.play</field>
                                              <field name="WITH_DELAY">FALSE</field>
                                              <value name="VALUE"><block type="logic_boolean" id="[Z`0CFHd?tS?dPg!LQi8"><field name="BOOL">TRUE</field></block></value> 
                                              <next><block type="control" id="6buX@Sdq!ibXvl94Upi,"><mutation delay_input="true"></mutation>
                                                  <field name="OID">sonos.0.root.10_0_0_61.state</field>
                                                  <field name="WITH_DELAY">TRUE</field>
                                                  <field name="DELAY_MS">5</field>
                                                  <field name="UNIT">min</field>
                                                  <field name="CLEAR_RUNNING">TRUE</field>
                                                  <value name="VALUE"><block type="text" id="@WZWY+M@Gt;BG|p=1nzk"><field name="TEXT">stop</field></block></value> 
                                                  <next><block type="control" id="v7b2,e:fQG!bAI1;?6;}"><mutation delay_input="true"></mutation>
                                                      <field name="OID">sonos.0.root.10_0_0_61.stop</field>
                                                      <field name="WITH_DELAY">TRUE</field>
                                                      <field name="DELAY_MS">5</field>
                                                      <field name="UNIT">min</field>
                                                      <field name="CLEAR_RUNNING">TRUE</field>
                                                      <value name="VALUE"><block type="logic_boolean" id="5W%zBmmorL.Yw(Rq0dT9"><field name="BOOL">TRUE</field></block></value> 
                                                      <next><block type="control" id="r?~AGLc9![dhMQ#P!GUt"><mutation delay_input="true"></mutation>
                                                          <field name="OID">sonos.0.root.10_0_0_61.play</field>
                                                          <field name="WITH_DELAY">TRUE</field>
                                                          <field name="DELAY_MS">5</field>
                                                          <field name="UNIT">min</field>
                                                          <field name="CLEAR_RUNNING">TRUE</field>
                                                          <value name="VALUE"><block type="logic_boolean" id="z^?F.0o4/K-iK_Ey/;%k"><field name="BOOL">FALSE</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></statement> 
                  <next><block type="controls_if" id="g]X2ch:E`b5r~fWTf_uH"><value name="IF0"><block type="logic_compare" id="ka@,mcr|HqLDmoz)!M=="><field name="OP">LT</field>
                          <value name="A"><block type="get_value" id="T{:U-zon~czyj9n|e![a"><field name="ATTR">val</field>
                              <field name="OID">zwave.0.NODE2.SENSOR_MULTILEVEL.Luminance_1</field></block></value> 
                          <value name="B"><block type="math_number" id="cLpWZSzugm|}d5q|cV[J"><field name="NUM">8</field></block></value></block></value> 
                      <statement name="DO0"><block type="controls_if" id="nT~K|+!t@y{^9WZ^q~:7"><value name="IF0"><block type="logic_compare" id="UmV3*_|f/8!ng.`R-4Ap"><field name="OP">EQ</field>
                              <value name="A"><block type="variables_get" id="B6O9i@jnx#+DX;PB2v2E"><field name="VAR">Licht_durch_BWM</field></block></value> 
                              <value name="B"><block type="logic_operation" id="UH`m)hy)A^5,h*XfA=2h"><field name="OP">OR</field>
                                  <value name="A"><block type="logic_boolean" id=")xfyHQGY+rpogwN8ixp!"><field name="BOOL">TRUE</field></block></value> 
                                  <value name="B"><block type="logic_compare" id="b9~6hg:oigB(?*[F^RR]"><field name="OP">EQ</field>
                                      <value name="A"><block type="get_value" id="g.VPx`kDLPza?lk=~uuN"><field name="ATTR">val</field>
                                          <field name="OID">hue.0.Philips_hue.Regal_Bad.on</field></block></value> 
                                      <value name="B"><block type="logic_boolean" id="Yg`lNrC%5%0ru{va|E[3"><field name="BOOL">FALSE</field></block></value></block></value></block></value></block></value> 
                          <statement name="DO0"><block type="controls_if" id="mAEP8mA|r@5V=P_0ukiu"><value name="IF0"><block type="logic_compare" id="Wz=fguf2ck]Q,id#ynJg"><field name="OP">EQ</field>
                                  <value name="A"><block type="variables_get" id="OBawk:X[5Prliz*N=Eb{"><field name="VAR">Licht_durch_BWM</field></block></value> 
                                  <value name="B"><block type="logic_boolean" id="s9R?@666qEoEszv.fXO`"><field name="BOOL">FALSE</field></block></value></block></value> 
                              <statement name="DO0"><block type="variables_set" id="^sHWV(LmiRJ6nl-dTtl^"><field name="VAR">Licht_durch_BWM</field>
                                  <value name="VALUE"><block type="logic_boolean" id="^3`BbwC!zs(j~gw6Qt5|"><field name="BOOL">TRUE</field></block></value></block></statement> 
                              <next><block type="control" id="G=qPrmHO5l+z^ZJE),L%"><mutation delay_input="false"></mutation>
                                  <field name="OID">hue.0.Philips_hue.Regal_Bad.on</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE"><block type="logic_boolean" id=".#=F^vP7ok^u}8eq]a-#"><field name="BOOL">TRUE</field></block></value> 
                                  <next><block type="control" id="[[!wWvXc~6!UX4WMU6N~"><mutation delay_input="true"></mutation>
                                      <field name="OID">hue.0.Philips_hue.Regal_Bad.on</field>
                                      <field name="WITH_DELAY">TRUE</field>
                                      <field name="DELAY_MS">5</field>
                                      <field name="UNIT">min</field>
                                      <field name="CLEAR_RUNNING">TRUE</field>
                                      <value name="VALUE"><block type="logic_boolean" id="h*ei|yucD)K}rUfzUvl1"><field name="BOOL">FALSE</field></block></value></block></next></block></next></block></statement></block></statement></block></next></block></next></block></statement> 
          <next><block type="controls_if" id="ENf_66UQK0e%V~!(`j0v"><value name="IF0"><block type="logic_compare" id="K90!{t2MSXCcP4Mi6ik2"><field name="OP">EQ</field>
                  <value name="A"><block type="get_value" id="8/3Dd:ZpJ:J1H(Sc)(:i"><field name="ATTR">val</field>
                      <field name="OID">zwave.0.NODE2.ALARM.Burglar_1</field></block></value> 
                  <value name="B"><block type="math_number" id="B@h!M6l0+NoJyU)1x}mS"><field name="NUM">0</field></block></value></block></value> 
              <statement name="DO0"><block type="timeouts_settimeout" id="%RFowrkD6(Wcesw/WKy9"><field name="NAME">Licht_und_Musik_aus</field>
                  <field name="DELAY">5</field>
                  <field name="UNIT">min</field>
                  <statement name="STATEMENT"><block type="controls_if" id="uCHQOW?=Y@|HbQh+oLz;"><value name="IF0"><block type="logic_compare" id="Uko)*pmq6Kjbk|;c%?wm"><field name="OP">EQ</field>
                          <value name="A"><block type="variables_get" id="[jdSnXDRLZ`QT^+#O!Pg"><field name="VAR">Licht_durch_BWM</field></block></value> 
                          <value name="B"><block type="logic_boolean" id="8]BS})zA=rM]BHO|{UA;"><field name="BOOL">TRUE</field></block></value></block></value> 
                      <statement name="DO0"><block type="variables_set" id="i_j-Z.a_~CYy*bWDuoe="><field name="VAR">Licht_durch_BWM</field>
                          <value name="VALUE"><block type="logic_boolean" id="o-f.2Vb-pr[/GS1i%:S*"><field name="BOOL">FALSE</field></block></value></block></statement> 
                      <next><block type="controls_if" id="l#CPa!|xtwz8pC/:]ol!"><value name="IF0"><block type="logic_compare" id="),.LF[@9Fk2I^fUQS27s"><field name="OP">EQ</field>
                              <value name="A"><block type="variables_get" id="Bs`W-TX!5~0T2~pEJHw4"><field name="VAR">Musik_durch_BWM</field></block></value> 
                              <value name="B"><block type="logic_boolean" id="uxNFWebVF:d]!!0c=5bb"><field name="BOOL">TRUE</field></block></value></block></value> 
                          <statement name="DO0"><block type="variables_set" id="GBcIz6cpA6QG/!4!}hLG"><field name="VAR">Musik_durch_BWM</field>
                              <value name="VALUE"><block type="logic_boolean" id="o4H.M#@!(-7D=r#?g(`T"><field name="BOOL">FALSE</field></block></value></block></statement></block></next></block></statement></block></statement></block></next></block></statement></block></xml> 
      

      ! ````

      posted in Skripten / Logik
      M
      marphDE
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo