Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Suche Script zur Konvertierung von Unicode auf UTF-8

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Suche Script zur Konvertierung von Unicode auf UTF-8

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @hg6806 last edited by

      @hg6806 sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

      wie der Code in der JS Funktion aussieht,

      hat @Codierknecht dir doch hier gezeigt

      @codierknecht sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

      f4bc90ca-8b16-4d3f-beda-9ca1206037c5-image.png

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

        @hg6806 sagte: Wie bringe ich den Datenpunkt der umgewandelt werden soll dort hinein?

        Blockly_temp.JPG

        1 Reply Last reply Reply Quote 1
        • hg6806
          hg6806 Most Active last edited by hg6806

          fd3c8d64-7166-4ea0-9e3d-f42ece4421ab-image.png

          In der Funktion steht lediglich:

          return unescape(text);
          

          Passiert aber nichts bei Aktualisierung des Status.

          Ich hätte jetzt eher damit gerechnet, dass im Code von der Funktion eher sowas stehen muss (mal von JSON abgesehen)

          //Datenpunkt mit MQTT-Informationen im json-Format auslesen
          json = (function () { try {return JSON.parse(getState("mqtt.0.home.OMG_ESP32_BLE.BTtoMQTT.E72E00D32042").val);} catch(e) {return {};}})();
          //json auslesen und Datenpunkte für Temperatur, Luftfeuchte und Batterie
          setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.Temperature", getAttr(json, 'tempc'));
          setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.Humidity", getAttr(json, 'hum'));
          setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.Battery", getAttr(json, 'batt'));
          setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.RSSI", getAttr(json, 'rssi'));
          //Log Ausgabe als return der Funktion
          return "MQTT MI_E72E00D32042 aktualisiert";
          
          Codierknecht 1 Reply Last reply Reply Quote 0
          • Codierknecht
            Codierknecht Developer Most Active @hg6806 last edited by

            @hg6806 sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

            Ich hätte jetzt eher damit gerechnet, dass im Code von der Funktion eher sowas stehen muss (mal von JSON abgesehen)

            Die Funktion nimmt lediglich den codierten Text entgegen und liefert das umcodierte Ergebnis zurück.
            Bau doch statt (oder zusätzlich) dem "aktualisiere" mal einen Debug-Block ein. Der schreibt das Ergebnis dann auch ins Log um das mal zu überprüfen.

            Asgothian 1 Reply Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @Codierknecht last edited by Asgothian

              @codierknecht sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

              @hg6806 sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

              Ich hätte jetzt eher damit gerechnet, dass im Code von der Funktion eher sowas stehen muss (mal von JSON abgesehen)

              Die Funktion nimmt lediglich den codierten Text entgegen und liefert das umcodierte Ergebnis zurück.
              Bau doch statt (oder zusätzlich) dem "aktualisiere" mal einen Debug-Block ein. Der schreibt das Ergebnis dann auch ins Log um das mal zu überprüfen.

              Du hast geschrieben das der State den Text beinhaltet, der in UTF8 wieder heraus geschrieben werden soll.

              Bau bitte 2 debug Bausteine ein:

              einmal vor dem Aktualisiere, und häng da den 'wert' rein
              einmal nach dem Aktualisiere, und häng da den gleichen Baustein rein wie im aktualisiere.

              Dann lass laufen, warte bis sich der Datenpunkt geändert hat und poste das hier. Dann können wir sehen:

              • was kommt im DP rein
              • was kommt aus der Funktion raus.

              A.

              1 Reply Last reply Reply Quote 1
              • hg6806
                hg6806 Most Active last edited by

                OK, ich danke euch!

                7581e0e8-8fb2-4a06-a9b5-a4f70e231879-image.png

                11.3.2025, 07:28:10.209	[info ]: javascript.0 (157280) Stopping script script.js.common.Auto+OpenWB.Charge-Werte_auslesen
                11.3.2025, 07:28:10.311	[info ]: javascript.0 (157280) Start JavaScript script.js.common.Auto+OpenWB.Charge-Werte_auslesen (Blockly)
                11.3.2025, 07:28:10.320	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: registered 5 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                11.3.2025, 07:28:32.169	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Die Ladung kann nicht gestartet werden, da die Einschaltschwelle nicht erreicht wird."
                11.3.2025, 07:28:32.169	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Die Ladung kann nicht gestartet werden, da die Einschaltschwelle nicht erreicht wird."
                11.3.2025, 07:29:12.253	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Control-Pilot-Unterbrechung f\u00fcr 4s."
                11.3.2025, 07:29:12.254	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Control-Pilot-Unterbrechung f\u00fcr 4s."
                11.3.2025, 07:29:21.712	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Ladevorgang wurde gestartet... (bei Problemen: Pr\u00fcfe bitte zuerst in den Einstellungen 'Ladeeinstellungen' und 'Konfiguration'.)"
                11.3.2025, 07:29:21.712	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Ladevorgang wurde gestartet... (bei Problemen: Pr\u00fcfe bitte zuerst in den Einstellungen 'Ladeeinstellungen' und 'Konfiguration'.)"
                

                Die Funktion läuft wohl nicht

                Asgothian 1 Reply Last reply Reply Quote 0
                • Asgothian
                  Asgothian Developer @hg6806 last edited by

                  @hg6806 du musst schon den funktionsblock in den 2. Debug hängen, nicht nur den “Wert” Block.

                  A.

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

                    So?

                    6c290704-8230-4615-8f30-b27d71d53d28-image.png

                    Ergebnis ist das Gleiche

                    11.3.2025, 07:54:11.184	[info ]: javascript.0 (157280) Stopping script script.js.common.Auto+OpenWB.Charge-Werte_auslesen
                    11.3.2025, 07:54:11.276	[info ]: javascript.0 (157280) Start JavaScript script.js.common.Auto+OpenWB.Charge-Werte_auslesen (Blockly)
                    11.3.2025, 07:54:11.285	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: registered 5 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    11.3.2025, 07:54:49.125	[info ]: javascript.0 (157280) Stopping script script.js.common.Auto+OpenWB.Charge-Werte_auslesen
                    11.3.2025, 07:54:49.263	[info ]: javascript.0 (157280) Start JavaScript script.js.common.Auto+OpenWB.Charge-Werte_auslesen (Blockly)
                    11.3.2025, 07:54:49.265	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: registered 5 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    11.3.2025, 07:55:32.315	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Die Ladung kann nicht gestartet werden, da die Einschaltschwelle nicht erreicht wird."
                    11.3.2025, 07:55:32.315	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Die Ladung kann nicht gestartet werden, da die Einschaltschwelle nicht erreicht wird."
                    11.3.2025, 07:56:01.958	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Control-Pilot-Unterbrechung f\u00fcr 4s."
                    11.3.2025, 07:56:01.958	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Control-Pilot-Unterbrechung f\u00fcr 4s."
                    11.3.2025, 07:56:12.509	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Keine Ladung, da der Lademodus Stop aktiv ist."
                    11.3.2025, 07:56:12.509	[info ]: javascript.0 (157280) script.js.common.Auto+OpenWB.Charge-Werte_auslesen: "Keine Ladung, da der Lademodus Stop aktiv ist."
                    
                    1 Reply Last reply Reply Quote 0
                    • hg6806
                      hg6806 Most Active last edited by

                      Habe als Ausgabe mal einen neuen Datenpunkt erzeugt, in den wird nun auch was geschrieben, jedoch auch unkodiert, also noch ohne Umlaute.

                      In den alten Ausgabepunkt konnte nichts geschrieben werden.
                      Weil er von OpenWB/MQTT erzeugt wurde?

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

                        @hg6806 sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

                        Die Funktion läuft wohl nicht

                        Naja - "laufen" tut die schon. Sie bringt nur nicht das gewünschte Ergebnis 😞

                        Dann halt erstmal die Holzhammer-Methode:

                            let result = text.replaceAll('\u00e4', 'ä');
                            result = result.replaceAll('\u00f6', 'ö');
                            result = result.replaceAll('\u00fc', 'ü');
                            result = result.replaceAll('\u00c4', 'Ä');
                            result = result.replaceAll('\u00c6', 'Ö');
                            result = result.replaceAll('\u00dc', 'Ü');
                            result = result.replaceAll('\u00df', 'ß');
                            return result;
                        
                        

                        Edit
                        Natürlich könnte man das auch generisch machen und alles was mit \u00 beginnt in den entsprechenden Code übersetzen.
                        Das dürfte aber von der Performance noch etwas ungünstiger sein.

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

                          @hg6806 sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

                          In den alten Ausgabepunkt konnte nichts geschrieben werden.
                          Weil er von OpenWB/MQTT erzeugt wurde?

                          In Datenpunkte die "einem Adapter gehören" schreibt man nur dann (und zwar ohne Ack-Flag), wenn der Adapter auch etwas damit anfangen kann. Also wenn er den Wert z.B. an ein Gerät übertragen soll etc.
                          Zum "Umformatieren" nimmt man entweder einen Alias (wenn man den Wert per Konvertierungsfunktion verarbeiten kann) oder einen eigenen DP in 0_userdata.0 (wenn der Wert per Script umformatiert werden muss).

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

                            Also, Funktion sieht jetzt so aus, wie vorgegeben:
                            fa99eec9-affa-454e-ab53-71ec02195740-image.png

                            Ergebnis ist noch immer ohne Umlaute.

                            @Codierknecht Ja, habe jetzt den DP in userdata

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

                              @hg6806
                              Poste hier mal bitte (in Code-Tags </>) nicht das was im Log steht, sondern den Inhalt des Original-DP aus OpenWB/MQTT.

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

                                @codierknecht

                                "Ladevorgang wurde gestartet... (bei Problemen: Pr\u00fcfe bitte zuerst in den Einstellungen 'Ladeeinstellungen' und 'Konfiguration'.)"
                                
                                Codierknecht 1 Reply Last reply Reply Quote 0
                                • Codierknecht
                                  Codierknecht Developer Most Active @hg6806 last edited by

                                  @hg6806
                                  Versuchs mal so:

                                      let result = text.replaceAll('\\u00e4', 'ä');
                                      result = result.replaceAll('\\u00f6', 'ö');
                                      result = result.replaceAll('\\u00fc', 'ü');
                                      result = result.replaceAll('\\u00c4', 'Ä');
                                      result = result.replaceAll('\\u00c6', 'Ö');
                                      result = result.replaceAll('\\u00dc', 'Ü');
                                      result = result.replaceAll('\\u00df', 'ß');
                                      return result;
                                  
                                  hg6806 1 Reply Last reply Reply Quote 0
                                  • hg6806
                                    hg6806 Most Active @Codierknecht last edited by

                                    @codierknecht sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

                                    let result = text.replaceAll('\u00e4', 'ä');
                                    result = result.replaceAll('\u00f6', 'ö');
                                    result = result.replaceAll('\u00fc', 'ü');
                                    result = result.replaceAll('\u00c4', 'Ä');
                                    result = result.replaceAll('\u00c6', 'Ö');
                                    result = result.replaceAll('\u00dc', 'Ü');
                                    result = result.replaceAll('\u00df', 'ß');
                                    return result;

                                    BINGO!

                                    Jetzt läuft es. Lag es evtl. an den Anführungszeichen im String?

                                    Vielen Dank allen!

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

                                      @hg6806 sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

                                      Lag es evtl. an den Anführungszeichen im String?

                                      Nein. Es lag daran, dass ein \ ein Steuerzeichen ist und im String "escaped" werden muss.

                                      Hier noch eine generische Variante:

                                        return text.replace(/\\u[0-9a-fA-F]{4}/gi, match => {
                                          return String.fromCharCode(parseInt(match.replace(/\\u/g, ""), 16));
                                        });
                                      
                                      hg6806 1 Reply Last reply Reply Quote 0
                                      • hg6806
                                        hg6806 Most Active @Codierknecht last edited by

                                        @codierknecht

                                        Ja, geht auch so. Danke nochmals!

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

                                          @hg6806 sagte in Suche Script zur Konvertierung von Unicode auf UTF-8:

                                          geht auch so

                                          Dann würde ich das bevorzugen.
                                          Die "Holzhammer-Methode" ist ja auf einige (7) spezifische Fälle beschränkt.
                                          Die generische Variante ist universeller.

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          655
                                          Online

                                          31.7k
                                          Users

                                          79.7k
                                          Topics

                                          1.3m
                                          Posts

                                          5
                                          28
                                          637
                                          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