Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Cannot redeclare block-scoped variable

    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.

    Cannot redeclare block-scoped variable

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

      @hub01 sagte in Cannot redeclare block-scoped variable:

      einige Skripte

      Wie heißen denn die Scripte in denen das auftritt?

      Hast Du globale Scripte im Einsatz?

      BTW: Du bist sicher, dass Du in einigen Monaten noch weißt, was sich hinter cUeBe1PhAnl, cUeBe1PhLad usw. verbirgt? Sprechende Variablennamen fressen kein Brot 😉
      https://dev.to/gervaisamoah/a-guide-to-clean-code-the-power-of-good-names-3f6i

      R H 2 Replies Last reply Reply Quote 0
      • R
        Ralf 2 @Codierknecht last edited by

        @hub01
        Handelt es sich im JavaScript oder um TypeScript?
        TypeScript schaut auf ggf. alle Scripte und wirft dann diese Meldung (oder manchmal auch nicht).
        Man kann die Meldung ignorieren, oder ein Export davor setzen:

        export const cUeBe1PhAnl = 1200;
        export const cUeBe1PhLad =  230;
        

        Ich setze in meinen Scripten gerne in doIt() als Function für die Hauptfunction ein, auch das wird immer wieder angemeckert, auch hier hilf ein export vor der deklaration der Function.

        OliverIO 1 Reply Last reply Reply Quote 1
        • OliverIO
          OliverIO @hub01 last edited by OliverIO

          @hub01

          wo hast du diese ausgaben herauskopiert? im javascriptadapter steht das so eigentlich nicht drin
          im iobroker log ebenfalls nicht

          wenn du mit vscode arbeitest, dann gibt es da so eine globalsuche

          oder im javascriptadapter die suche, die über alle skripte nach deinem variablennamen sucht.
          const (Konstante) variablen dürfen nicht wieder beschrieben werden, also wenn du irgendwo

          cUeBe1PhAnl = 123
          

          findest, dann ist das der Fehler.
          oder du änderst const einfach in let um

          1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO @Ralf 2 last edited by

            @ralf-2 sagte in Cannot redeclare block-scoped variable:

            TypeScript schaut auf ggf. alle Scripte und wirft dann diese Meldung (oder manchmal auch nicht).

            typescript erkennt ob man eine const variable wieder beschreiben möchte und wählt dann für den transpilierten code die richtige deklaration bzw zeigt einen fehler an.

            1 Reply Last reply Reply Quote 0
            • H
              hub01 @Thomas Braun last edited by

              @thomas-braun sagte in Cannot redeclare block-scoped variable:

              @hub01

              Logisch, der user darf die Verzeichnisse nicht betreten.

              Dann ist find keine Möglichkeit, die Files zu finden?
              Oder gibt es da noch einen Parameter, oder einen anderen Weg?

              OliverIO Thomas Braun 2 Replies Last reply Reply Quote 0
              • OliverIO
                OliverIO @hub01 last edited by

                @hub01

                das weiß ich nicht.
                du hast meine fragen noch nicht beantwortet, wo du das rauskopiert hast.

                1 Reply Last reply Reply Quote 0
                • H
                  hub01 @Codierknecht last edited by

                  @codierknecht sagte in Cannot redeclare block-scoped variable:

                  @hub01 sagte in Cannot redeclare block-scoped variable:

                  einige Skripte

                  Wie heißen denn die Scripte in denen das auftritt?

                  Hast Du globale Scripte im Einsatz?

                  BTW: Du bist sicher, dass Du in einigen Monaten noch weißt, was sich hinter cUeBe1PhAnl, cUeBe1PhLad usw. verbirgt? Sprechende Variablennamen fressen kein Brot 😉
                  https://dev.to/gervaisamoah/a-guide-to-clean-code-the-power-of-good-names-3f6i

                  Die Scripte lauten „PV Werte“, „PV Überschussladen“ usw.
                  Keine globalen Scripte.
                  Alle Skripte liegen in einem Ordner „HS_Skripte“.
                  Ob dieser Ordner global ist, kann ich nicht erkennen.

                  Ich kennzeichne jede Konstante und Variable mit einem Kommentar.
                  Zu meiner Zeit war Speicher knapp und ich tu mich so leichter beim Lesen vom Script.

                  //                                  // benötigter Überschuss [W]:
                  //                                  // --------------------------------------------
                  const cUeBe1PhAnl = 1200;           // 1phasig Anlauf                    (>230V*6A)
                  const cUeBe1PhLad =  230;           // 1phasig Hochschalten               (230V*1A)
                  const cUeBe1PhHyst = 100;           // 1phasig Hysterese
                  const cUeBe3PhAnl = 4250;           // 3phasig Anlauf                  (>3*230V*6A)
                  const cUeBe3PhLad =  690;           // 3phasig Hochschalten             (3*230V*1A)
                  const cUeBe3PhHyst = 150;           // 3phasig Hysterese
                  const cUeBeUm     = 1150;           // Umschaltung 1->3Ph (1x16A->3x7A) 5A ( 5,00A)
                  
                  H Codierknecht 2 Replies Last reply Reply Quote 0
                  • Thomas Braun
                    Thomas Braun Most Active @hub01 last edited by

                    @hub01 sagte in Cannot redeclare block-scoped variable:

                    Dann ist find keine Möglichkeit, die Files zu finden?

                    find ist DIE Möglichkeit files zu finden.

                    Zur Not halt mit root-Rechten ausführen.

                    1 Reply Last reply Reply Quote 0
                    • H
                      hub01 @hub01 last edited by

                      @hub01
                      weitere Antworten:

                      Es sind JavaScripts

                      Die beiden Meldungen hatte ich so nicht eingestellt.
                      Die wurden nachträglich (wohl aus Versehen) in Code-Tags gesetzt.

                      Die Konstanten werden nicht in mehreren Scripts verwendet und auch nicht neu beschrieben.
                      Aber es gibt ältere Versionen meiner Scripts, die aber nicht laufen.
                      Könnten davon die Meldungen kommen?

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

                        @hub01 sagte in Cannot redeclare block-scoped variable:

                        Ich kennzeichne jede Konstante und Variable mit einem Kommentar.

                        471acc6a-9668-422e-8c77-3eda64a7c7db-image.png
                        Der Mann gilt als einer der Mitentwickler von C. Der sollte es wissen 😉

                        Bei sowas wie

                        const UEBERSCHUSS_1PHASIG_ANLAUF = 1200;
                        const UEBERSCHUSS_1PHASIG_LADEN =  230;
                        const UEBERSCHUSS_1PHASIG_HYSTERESE = 100;
                        const UEBERSCHUSS_3PHASIG_ANLAUF = 4250;
                        const UEBERSCHUSS_3PHASIG_LADEN =  690;
                        const UEBERSCHUSS_3PHASIG_HYSTERESE = 150;
                        const UEBERSCHUSS_UMSCHALTEN = 1150;
                        

                        spart man sich den Blick auf die Deklaration. Da weiß man in jeder Codezeile gleich, um was es geht.

                        Zu meiner Zeit war Speicher knapp

                        Zu meiner auch. Bei Microcontrollern ist er es z.T. immer noch.
                        Aber hier braucht ja der Kommentar mehr Speicher als ein sinnvoller Name.
                        Und im Compilat sind das eh nur Adressen. Die sind immer gleich lang - egal wie lang der Name einer Variablen oder Konstanten sein mag.

                        Aber bitte nicht als Belehrung verstehen. Das macht jeder wie er meint.
                        Ich selbst habe das auch Jahrzehnte lang eher knapp gehalten und beiße mir auch bei meinem Team die Zähne aus. Da komme ich mir ein bisschen vor wie Don Quichote 😉
                        Irgendwann kommt man dann dahinter, dass sich Code bei klarer Benamsung einfach viel besser lesen lässt ... ohne jegliche Kommentare.

                        Ich würde da aber nicht so weit gehen wie Uncle Bob:
                        b93f439e-e4f5-422f-a051-792a05aaeed9-image.png

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

                          @codierknecht

                          da gibt es schöne regeln zur code quality, die sich automatisiert messen lassen
                          oder durch linting überprüfen lassen.

                          • Markiere den Anfang und das Ende von Kontrollstrukturen mithilfe von Einrückungen und platziere den Code dazwischen.
                          • Beschränke dich auf wenige Zeilen.
                          • Vermeide lange Funktionen – ein professioneller Entwickler stimmt zu, dass eine Funktion jeweils nur eine einzelne Aufgabe erfüllen sollte.
                          • Verwende präzise Namenskonventionen.
                          • Halte Zeilen kurz – offensichtlich bevorzugen Menschen kürzere Zeilen, egal ob vertikal oder horizontal.
                          • Nutze das DRY-Prinzip (Don’t Repeat Yourself). Du solltest denselben Code nicht im selben Skript wiederholt einsetzen, sondern wiederkehrende Aufgaben automatisieren.
                          • Schreibe SQL-Schlüsselwörter und -Funktionen in Großbuchstaben, um sie von Spalten- und Tabellennamen zu unterscheiden.
                          • Vermeide tiefe Verschachtelungen.
                          • Hinterlasse Kommentare und setze Prioritäten bei der Dokumentation.
                          H Codierknecht 2 Replies Last reply Reply Quote 1
                          • H
                            hub01 @OliverIO last edited by

                            Ist vermutlich eine Umgewöhnungssache.

                            Wie gesagt, tu ich mich mit Kommentaren leichter.
                            Die kann ich kurz, aber verständlich halten, ohne die Syntax der Programmiersprache zu berücksichtigen.
                            Wenn ich die Kommentare anschaue, weiß ich schnell, was der Code macht.

                            if ((LadeAnsteuerung == VonVisu_Ansteuerung_EIN && Wallbox_Freigabe && Wallbox_Kommunikation_IO)) {
                                if (VonVisu_3PhasenLaden_zulaessig && Ueberschuss_vorhanden_3Phasen_Anlauf>Ueberschuss_benoetigt_3Phasen_Anlauf) {
                                ...
                                }
                            
                                else if (VonVisu_1PhasenLaden_zulaessig && Ueberschuss_vorhanden_1Phasen_Anlauf>Ueberschuss_benoetigt_1Phasen_Anlauf) {
                                ...
                                }
                            
                            if ((iLAnst==cAnstEin && bWBFrg && bWBKommIO)) {        // Einschalten?  Freigabe?  WB-Kommunikation iO?
                                if (b3PhZul && iUeVorh3PhAnl>cUeBe3PhAnl) {         // 3Phasen zulässig?  3Ph-Anlauf-Überschuss vorhanden?
                                ...                                                 //   starte 3-phasig
                                }                                                   //   usw.
                            
                                else if (b1PhZul && iUeVorh1PhAnl>cUeBe1PhAnl) {    // 1Phasen zulässig?  1Ph-Anlauf-Überschuss vorhanden?        
                                ...                                                 //   starte 1-phasig
                                }
                            
                            Codierknecht 1 Reply Last reply Reply Quote 0
                            • Codierknecht
                              Codierknecht Developer Most Active @hub01 last edited by

                              @hub01 sagte in Cannot redeclare block-scoped variable:

                              Ist vermutlich eine Umgewöhnungssache.

                              Ist es! Das dauert möglicherweise Jahre.

                              Hat man sich aber einmal daran gewöhnt, will man's nicht mehr anders haben.
                              Als Einzelkämpfer dient das lediglich den eigenen Idealen (und der Lesbarkeit nach Monaten oder Jahren).
                              Aber spätestens wenn's um Adapter-Code geht und Dir die Reviewer jede zweite Codezeile um die Ohren hauen, gewöhnt man sich ganz schnell daran 😁

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

                                @oliverio
                                OT: Die Coding-Conventions in meinem Team umfassen einige Bildschirmseiten.
                                Der größte Teil davon wird in der Continuous-Integration-Pipeline als allererstes automatisch geprüft.
                                Wird gegen die Regeln verstoßen, bricht CI ab und das ganze Team erhält 'ne nette Mail. Das übt 😀

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

                                  @codierknecht
                                  Sehr gut
                                  Wobei ich eher ein Fan davon wäre das das jeder einzelne sofort sieht und nicht erst aus einer Pipeline.

                                  Aus diesem Grund habe ich den repochecker auch erweitert das er auch lokal prüft.
                                  Seither ist die Anzahl der rebuilds und daraus resultierende folgefehler (versionsnummer kann nicht auf npm gefunden werden) gesunken.

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

                                    @oliverio sagte in Cannot redeclare block-scoped variable:

                                    Wobei ich eher ein Fan davon wäre das das jeder einzelne sofort sieht und nicht erst aus einer Pipeline.

                                    Wenn er das an seinem Code vorher testet, wird er natürlich darauf gestoßen.
                                    Vergisst man aber gerne mal.

                                    H 1 Reply Last reply Reply Quote 0
                                    • H
                                      hub01 @Codierknecht last edited by

                                      lassen wir mal das Thema Programmierstil beiseite,

                                      ich finde die beiden Files noch immer nicht (auch nicht als root),
                                      und weiß noch nicht, warum die Meldungen manchmal angezeigt werden und manchmal nicht.

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

                                        @hub01
                                        Du könntest mal versuchen, das ignorieren zu lassen.

                                        // @ts-ignore
                                        const cUeBe1PhAnl = 1200;
                                        
                                        OliverIO H 2 Replies Last reply Reply Quote 1
                                        • OliverIO
                                          OliverIO @Codierknecht last edited by

                                          @codierknecht
                                          Das schaltet nur die transpiler aber nicht runtime Meldungen aus.

                                          Aber wie oben schon gesagt ist mir immer noch schleierhaft wo er die Meldungen herauskopiert hat. Aber nach seinem Post sind die wohl nicht von ihm und die hat irgendwer ergänzt.
                                          Oder hab ich was falsch verstanden?

                                          H 1 Reply Last reply Reply Quote 0
                                          • T
                                            ticaki Developer @hub01 last edited by

                                            @hub01 sagte in Cannot redeclare block-scoped variable:

                                            lassen wir mal das Thema Programmierstil beiseite,

                                            ich finde die beiden Files noch immer nicht (auch nicht als root),
                                            und weiß noch nicht, warum die Meldungen manchmal angezeigt werden und manchmal nicht.

                                            Dann verrate doch mal wo genau die Meldungen herkommen.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            511
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            36
                                            1161
                                            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