Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Servicemeldungen - All inclusive für Homematic -

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Servicemeldungen - All inclusive für Homematic -

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

      @Knallochse die Frage wäre wie die Geräte bei Dir geschrieben sind? Ich vermute HmIP?

      Den Batterieteil habe ich zum großen Teil von einem Homematic Script übernommen. Dort scheint entweder Groß- Kleinschreibung egal oder anders gewesen zu sein. Deshalb muss das einmalig passend korrigiert werden.

      @mameier1234 Super. Danke für die Lösung. Kann Telegramm generell nicht mit html umgehen? Falls nein muss ich mal gucken. Wie man das lösen kann. Ggf. kann man ja die html Sachen rausfiltern...

      Auf jeden Fall ist die grundsätzliche Einbindung von Telegramm relativ einfach. Irgendwie binde ich es dann mal ein....

      Steff 1 Reply Last reply Reply Quote 0
      • Knallochse
        Knallochse last edited by Knallochse

        'HmIP-SWDO', 'HMIP-SWDO',
        'HmIP-WTH', 'HMIP-WTH', 'HMIP-SWDO-I', 'HmIP-SWDO-I',

        Habe die Schreibweise bei mir mal Fett markiert
        Wurde bei mir in der Logausgabe deines Sript´s angezeigt,
        deshalb habe ich es einfach ergänzt

        1 Reply Last reply Reply Quote 0
        • dslraser
          dslraser Forum Testing Most Active last edited by

          so sieht der Blockly Baustein mit HTML aus
          Screenshot_20190212-223658_Firefox.jpg

          1 Reply Last reply Reply Quote 1
          • Steff
            Steff @cash last edited by

            @cash sagte in Servicemeldungen - All inclusive für Homematic -:

            @mameier1234 Super. Danke für die Lösung. Kann Telegramm generell nicht mit html umgehen? Falls nein muss ich mal gucken. Wie man das lösen kann. Ggf. kann man ja die html Sachen rausfiltern...

            Auf jeden Fall ist die grundsätzliche Einbindung von Telegramm relativ einfach. Irgendwie binde ich es dann mal ein....

            Soviel ich weiß kann Telegram Text nur in <b>bold</b> und <i>italic</i> darstellen.
            Farbe geht IMHO (noch?) nicht - Schade!

            Gruß Steffen

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

              Erst mal Danke für das Script!
              Folgende Fehler sind mir noch bei aufgefallen (bzw. hat das Script mit "Bitte melden" ausgegeben):

                  var lr3x1 = ['HM-RC-4-2', 'HM-RC-4-3', 'HM-RC-Key4-2', 'HM-RC-Key4-3', 'HM-RC-Sec4-2', 'HM-RC-Sec4-3', 'HM-Sec-RHS-2', 'HM-Sec-SCo', 'HmIP-KRC4', 'HmIP-KRCA', 'HmIP-RC8', 'HmIP-SRH', 'HmIP-SWDO', ' HmIP-DBB'];
              

              HmIP-SWDO gehört komplett groß geschrieben (HMIP-SWDO).
              das Leerzeichen vor HmIP-DBB entfernen.

              also richtig:

                  var lr3x1 = ['HM-RC-4-2', 'HM-RC-4-3', 'HM-RC-Key4-2', 'HM-RC-Key4-3', 'HM-RC-Sec4-2', 'HM-RC-Sec4-3', 'HM-Sec-RHS-2', 'HM-Sec-SCo', 'HmIP-KRC4', 'HmIP-KRCA', 'HmIP-RC8', 'HmIP-SRH', 'HMIP-SWDO', 'HmIP-DBB'];
              

              HM-LC-Sw1-DR fehlt bei "var ohne" (ist ein Funk-Schaltaktor 1-fach, Hutschienenmontage)
              HmIP-MP3P gehört zu "var ohne" wenn über Netzgerät versorgt, falls mit Batterien versorgt bräuchte es dafür noch eine entsprechende Erweiterung des Scripts für lr14x3 ("3x LR14/C").

              Gruß Sabine

              1 Reply Last reply Reply Quote 0
              • cash
                cash Most Active last edited by

                @SabinT Danke für die Info werde ich in der nächsten Version eintragen.

                @all neues Update auf GitHub. Bezüglich Batterien habe ich etwas verändert. Jetzt sollte die Schreibweise egal sein 🙂 Bitte mal testen.

                Telegram ist eingebaut. Einfach oben im Script sendpush = false und sendtelegram = true. Wie immer auf write_state achten und es ggf auf false setzen wenn Ihr es nicht nutzt.

                Wenn die Infos im Netz stimmen sollten html Tags die Telegram nicht kennt (also alle in meinen Script) von denen gefiltert werden mit dem pare_mode: 'HTML'. Bitte also testen. Falls es nicht gefiltert wird habe ich schon zwei Lösungen die ich einbauen könnte.

                dslraser 1 Reply Last reply Reply Quote 0
                • dslraser
                  dslraser Forum Testing Most Active @cash last edited by dslraser

                  @cash
                  die INT sind virtuelle Heizgruppen (die brauchen da eigentlich nicht erscheinen)
                  Zwei fehlende Batterietypen.

                  javascript.0	2019-02-13 17:31:30.447	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: registered 382 subscriptions and 0 schedules
                  javascript.0	2019-02-13 17:31:30.446	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Es gibt: 37 Geräte mit dem Datenpunkt SABOTAGE.
                  javascript.0	2019-02-13 17:31:30.440	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Keine Geräte gefunden mit dem Datenpunkt FAULT_REPORTING.
                  javascript.0	2019-02-13 17:31:30.439	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Es gibt: 55 Geräte mit dem Datenpunkt ERROR_CODE.
                  javascript.0	2019-02-13 17:31:30.430	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Keine Geräte gefunden mit dem Datenpunkt ERROR.
                  javascript.0	2019-02-13 17:31:30.429	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Es gibt: 2 Geräte mit dem Datenpunkt DEVICE_IN_BOOTLOADER.
                  javascript.0	2019-02-13 17:31:30.429	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Es gibt: 72 Geräte mit dem Datenpunkt UPDATE_PENDING.
                  javascript.0	2019-02-13 17:31:30.415	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Es gibt: 73 Geräte mit dem Datenpunkt CONFIG_PENDING.
                  javascript.0	2019-02-13 17:31:30.399	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Es gibt: 3 Geräte mit dem Datenpunkt STICKY_UNREACH.
                  javascript.0	2019-02-13 17:31:30.398	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Es gibt: 73 Geräte mit dem Datenpunkt UNREACH.
                  javascript.0	2019-02-13 17:31:30.384	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Es gibt: 64 Geräte mit dem Datenpunkt LOW_BAT.
                  javascript.0	2019-02-13 17:31:30.384	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Bitte melden: Heizung Gästezimmer INT0000005 (INT0000005) --- HmIP-HEATING --- Batterietyp fehlt im Script
                  javascript.0	2019-02-13 17:31:30.384	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Bitte melden: Heizung Flur INT0000004 (INT0000004) --- HmIP-HEATING --- Batterietyp fehlt im Script
                  javascript.0	2019-02-13 17:31:30.383	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Bitte melden: Heizung Badezimmer INT0000003 (INT0000003) --- HmIP-HEATING --- Batterietyp fehlt im Script
                  javascript.0	2019-02-13 17:31:30.383	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Bitte melden: Heizung Schlafzimmer INT0000002 (INT0000002) --- HmIP-HEATING --- Batterietyp fehlt im Script
                  javascript.0	2019-02-13 17:31:30.383	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Bitte melden: Heizung Wohnzimmer INT0000001 (INT0000001) --- HmIP-HEATING --- Batterietyp fehlt im Script
                  javascript.0	2019-02-13 17:31:30.382	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Bitte melden: Bewegungsmelder 55 Gäste WC Tür (0014D8A98A0FE2) --- HmIP-SMI55 --- Batterietyp fehlt im Script
                  javascript.0	2019-02-13 17:31:30.380	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Bitte melden: Bewegungsmelder 55 Kellertreppe (0014D8A98A1529) --- HmIP-SMI55 --- Batterietyp fehlt im Script
                  javascript.0	2019-02-13 17:31:30.367	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Bitte melden: Bewegungsmelder 55 Keller Flur (0014D8A98A172A) --- HmIP-SMI55 --- Batterietyp fehlt im Script
                  javascript.0	2019-02-13 17:31:30.366	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Bitte melden: Haustürklingel_Dev (001498A99877DA) --- HmIP-DBB --- Batterietyp fehlt im Script
                  javascript.0	2019-02-13 17:31:30.363	info	script.js.08Statusabfragen.Alle_Meldungen_neu1: Es gibt: 3 Geräte mit dem Datenpunkt LOWBAT.
                  javascript.0	2019-02-13 17:31:30.324	info	Start javascript script.js.08Statusabfragen.Alle_Meldungen_neu1
                  
                  1 Reply Last reply Reply Quote 0
                  • cash
                    cash Most Active last edited by

                    Mir ist zwar klar das die Heizungsgruppen nicht erscheinen müssen. Das Problem ist eq3. Wozu gibt es den Datenpunkt LOWBAt bzw LOW_BAT dort. Das macht keinen Sinn. ich werde die Geräte aufnehmen.

                    Bei den anderen wäre es übrogens nett wennIhr direkt dabei schreibt welche Batterien benötigt werden. Dann habe ich es leichter. SabineT hat das z. B. sehr gut gemacht 🙂

                    Werde es mit der nächsten Version aufnehmen.

                    1 Reply Last reply Reply Quote 0
                    • J
                      JensBHB last edited by

                      Tolles Script. Läuft bei mir soweit wie erwartet. Mit Ausnahme von Telegram, aber das spinnt bei mir zur Zeit.

                      Es fehlen zwei Batterieangaben:

                      Funk-Wandtaster 2-fach - HM-PB-2-FM (2xLR03)
                      Funk-Tür-Fensterkontakt - HM-Sec-SC-2 (2xLR44) (Hast Du im Script, allerdings fehlt ein Komma.

                      1 Reply Last reply Reply Quote 0
                      • E
                        eMd last edited by

                        
                        javascript.0	2019-02-14 10:51:43.635	error	at ContextifyScript.Script.runInContext (vm.js:59:29)
                        javascript.0	2019-02-14 10:51:43.635	error	at script.js.common.ServiceTest:2149:5
                        javascript.0	2019-02-14 10:51:43.634	error	at ERROR_CODE (script.js.common.ServiceTest:1649:29)
                        javascript.0	2019-02-14 10:51:43.634	error	at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:564:29)
                        javascript.0	2019-02-14 10:51:43.634	error	at script.js.common.ServiceTest:1653:53
                        javascript.0	2019-02-14 10:51:43.634	error	TypeError: Cannot read property 'substr' of undefined
                        javascript.0	2019-02-14 10:51:43.634	error	^
                        javascript.0	2019-02-14 10:51:43.634	error	var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':'));
                        javascript.0	2019-02-14 10:51:43.634	error	script.js.common.ServiceTest: script.js.common.ServiceTest:1653
                        javascript.0	2019-02-14 10:51:43.631	info	script.js.common.ServiceTest: Keine Geräte gefunden mit dem Datenpunkt ERROR.
                        javascript.0	2019-02-14 10:51:43.630	info	script.js.common.ServiceTest: Es gibt: 2 Geräte mit dem Datenpunkt DEVICE_IN_BOOTLOADER.
                        javascript.0	2019-02-14 10:51:43.629	info	script.js.common.ServiceTest: Es gibt: 2 Geräte mit dem Datenpunkt UPDATE_PENDING.
                        javascript.0	2019-02-14 10:51:43.626	info	script.js.common.ServiceTest: Es gibt: 2 Geräte mit dem Datenpunkt CONFIG_PENDING.
                        javascript.0	2019-02-14 10:51:43.624	info	script.js.common.ServiceTest: Es gibt: 2 Geräte mit dem Datenpunkt STICKY_UNREACH.
                        javascript.0	2019-02-14 10:51:43.622	info	script.js.common.ServiceTest: Es gibt: 2 Geräte mit dem Datenpunkt UNREACH.
                        javascript.0	2019-02-14 10:51:43.620	info	script.js.common.ServiceTest: Keine Geräte gefunden mit dem Datenpunkt LOW_BAT.
                        javascript.0	2019-02-14 10:51:43.619	info	script.js.common.ServiceTest: Es gibt: 2 Geräte mit dem Datenpunkt LOWBAT.
                        

                        Meine Fehler nach dem ersten speichern. er findet nur die beiden Geräte in hm-rpc.0, die in hm-rpc.1 findet er nicht, da sind aber noch 3 TFK und 2 Heizungsthermostate...und die fehlermeldung ist seltsam weil keine namen bei mir ausgegeben werden wie in deinem ersten beitrag...

                        1 Reply Last reply Reply Quote 0
                        • cash
                          cash Most Active last edited by

                          Welche Version vom Script hast Du laufen lassen? Welche Konfig verwendet? Debug = true? write_state = false?
                          Welche Versionen von den Homematic- Adaptern?
                          Du hast ein Gerät mit ERROR_CODE der Probleme macht. Such mal unter Objetke nach ERROR_CODE und zeig mal die Geräte und den Kanal 0. Das er Geräte nicht findet kann eigentlich nicht sein. Deshalb Debug = true. Falls Geräte fehlen brauche ich eine Info auf welcher Instanz und welchen Kanal. Die TFK müssten unter ERROR auftauchen oder sind es HmIP-Geräte? Dann hängt es mit der Fehlermeldung zusammen.

                          1 Reply Last reply Reply Quote 0
                          • N
                            Nordischerjung last edited by

                            Moin,

                            super Script, danke. Welchen Datenpunkt Text ahbe ich denn um es als Meldung auf Vis anzuzeigen? Oder habe ich es übersehen?

                            1 Reply Last reply Reply Quote 0
                            • cash
                              cash Most Active last edited by

                              Den musst Du selber anlegen und in der Config definieren aber es gibt eine Einschränkung. Es wird immer nur die letzte Meldung angezeigt. Push ist sinnvoller

                              1 Reply Last reply Reply Quote 0
                              • cash
                                cash Most Active last edited by

                                Neue Version auf GitHub. Ich habe die gemeldeten Batterien nachgepflegt. Da ich seit gestern auch meine ersten IP-Geräte habe konnte ich den ersten ERROR_CODE auch übersetzen.

                                Ich habe u. a. den Wassermelder gekauft. Bei diesen gibt es die Servicemeldung ERROR_NON_FLAT_POSITIONING_ALARM. Dieser Punkt war nicht in meinen Script trotzdem bekam ich eine Push und zwar vom ERROR_CODE. Somit scheint es das ich garnicht alle Servicemeldungen aufnehmen muss sofern diese bei IP-Geräten auch über ERROR_CODE gemeldeten werden bzw bei normalen HM-Geräten eben über ERROR. Solltet Ihr also mal eine Push bekommen wo z. B. Wassermelder - ERROR_CODE mot dem Wert 1 und Ihr wisst was es bedeutet bitte Info an mich damit ich es mit ins Script aufnehmen kann. Beim nächsten mal lautet die Push dann Wassermelder - wurde bewegt.

                                Da ich gestern z. B. auch bei zwei Wandthermostaten das Update durchgeführt habe war mein Script gestern groß in Aktion. Es wurden sämtlichen Meldungen zuverlässig gepusht. Und auch die bestätigbaren Kommunikationsstörungen werden zuverlässig erledigt. Insgesamt bin ich derzeit ganz zufrieden mit dem Script.

                                Hat jemand schon Telegram testen können?

                                Homer.J. 1 Reply Last reply Reply Quote 0
                                • Homer.J.
                                  Homer.J. @cash last edited by

                                  @cash Hab das Script mit Telegram am laufen bei der Ausgabe wenn ein Fehler Auftritt steht das im Log.

                                  2019-02-16 19:53:15.646 - error: telegram.0 Cannot send message [chatId - 648984023]: Error: ETELEGRAM: 400 Bad Request: can't parse entities: Unsupported start tag "font" at byte offset 42

                                  Grüße

                                  1 Reply Last reply Reply Quote 0
                                  • cash
                                    cash Most Active last edited by

                                    Ok. Dann weiß ich was zu tun ist. Morgen wird da wahscheinlich aber eher nichts werden. Ich denke Dienstag Abend werde ich den Fehler korrigieren.

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

                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: (002018A9975614) --- HmIP-eTRV-B --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: (002018A9975631) --- HmIP-eTRV-B --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: (002018A997440E) --- HmIP-eTRV-B --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: ABR Tuer (001558A9976C8E) --- HmIP-SWDM --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: SLZ Fenster Rechts (001558A9978695) --- HmIP-SWDM --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: Fenster frei 2 (001558A9976DCE) --- HmIP-SWDM --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: (002018A9974404) --- HmIP-eTRV-B --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: Fenster frei 1 (001558A9978674) --- HmIP-SWDM --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: (002018A9975639) --- HmIP-eTRV-B --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: SLZ Fenster Links (001558A9978679) --- HmIP-SWDM --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: (002018A9975627) --- HmIP-eTRV-B --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Bitte melden: BUE Tuer (001558A997868E) --- HmIP-SWDM --- Batterietyp fehlt im Script
                                      script.js.Telegram.Homematic_Servicemeldungen: Es gibt: 11 Geräte mit dem Datenpunkt LOWBAT.
                                      1 Reply Last reply Reply Quote 0
                                      • cash
                                        cash Most Active last edited by

                                        Es wäre nett wenn Du noch kurz schreibst welche Batterien benötigt werden...

                                        S 1 Reply Last reply Reply Quote 0
                                        • cash
                                          cash Most Active last edited by

                                          Ein weiteres Update. Diesmal sollte Telegram dann hoffentlich funktionieren. Bitte mal testen und kurzes Feedback.

                                          Batterieliste habe ich natürlich auch aktualisiert.

                                          dslraser 1 Reply Last reply Reply Quote 0
                                          • dslraser
                                            dslraser Forum Testing Most Active @cash last edited by

                                            @cash
                                            sieht gut aus, nun warte ich mal auf Meldungen ☺

                                            javascript.0	2019-02-19 18:06:24.099	info	script.js.08Statusabfragen.Alle_Meldungen: registered 382 subscriptions and 0 schedules
                                            javascript.0	2019-02-19 18:06:24.099	info	script.js.08Statusabfragen.Alle_Meldungen: Es gibt: 37 Geräte mit dem Datenpunkt SABOTAGE.
                                            javascript.0	2019-02-19 18:06:24.089	info	script.js.08Statusabfragen.Alle_Meldungen: Keine Geräte gefunden mit dem Datenpunkt FAULT_REPORTING.
                                            javascript.0	2019-02-19 18:06:24.088	info	script.js.08Statusabfragen.Alle_Meldungen: Es gibt: 55 Geräte mit dem Datenpunkt ERROR_CODE.
                                            javascript.0	2019-02-19 18:06:24.078	info	script.js.08Statusabfragen.Alle_Meldungen: Keine Geräte gefunden mit dem Datenpunkt ERROR.
                                            javascript.0	2019-02-19 18:06:24.077	info	script.js.08Statusabfragen.Alle_Meldungen: Es gibt: 2 Geräte mit dem Datenpunkt DEVICE_IN_BOOTLOADER.
                                            javascript.0	2019-02-19 18:06:24.075	info	script.js.08Statusabfragen.Alle_Meldungen: Es gibt: 72 Geräte mit dem Datenpunkt UPDATE_PENDING.
                                            javascript.0	2019-02-19 18:06:24.060	info	script.js.08Statusabfragen.Alle_Meldungen: Es gibt: 73 Geräte mit dem Datenpunkt CONFIG_PENDING.
                                            javascript.0	2019-02-19 18:06:24.045	info	script.js.08Statusabfragen.Alle_Meldungen: Es gibt: 3 Geräte mit dem Datenpunkt STICKY_UNREACH.
                                            javascript.0	2019-02-19 18:06:24.043	info	script.js.08Statusabfragen.Alle_Meldungen: Es gibt: 73 Geräte mit dem Datenpunkt UNREACH.
                                            javascript.0	2019-02-19 18:06:24.027	info	script.js.08Statusabfragen.Alle_Meldungen: Es gibt: 64 Geräte mit dem Datenpunkt LOW_BAT.
                                            javascript.0	2019-02-19 18:06:24.000	info	script.js.08Statusabfragen.Alle_Meldungen: Es gibt: 3 Geräte mit dem Datenpunkt LOWBAT.
                                            javascript.0	2019-02-19 18:06:23.906	info	Start javascript script.js.08Statusabfragen.Alle_Meldungen
                                            javascript.0	2019-02-19 18:06:23.891	info	Stop script script.js.08Statusabfragen.Alle_Meldungen
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            537
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            93
                                            1038
                                            231039
                                            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