Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript Syntax Verstaendnisproblem

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

JavaScript Syntax Verstaendnisproblem

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
30 Beiträge 5 Kommentatoren 1.4k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • N NeueKlasse

    @codierknecht habe es gerade versucht, erst wenn die Funktion "on change" ausgeklammert ist funktionert es..
    oder gibt es eine bessere Methode? z.B einen alle 60sec loop?

    BananaJoeB Offline
    BananaJoeB Offline
    BananaJoe
    Most Active
    schrieb am zuletzt editiert von BananaJoe
    #15

    @neueklasse das ganze reagiert natürlich nur wenn sich etwas ändert. Vorher passiert nichts. Also der Wert des Datenpunktes muss sich verändern (du hast change angegeben). Der Wert muss erst z.B. 17 werden um dann wieder 18 zu werden

    Schreib mal folgendes in die Zeile vor dem if

    console.warn("obj.state.val: " + obj.state.val);
    

    Das gibt er dir dann eine Warnmeldung mit dem aktuellen Wert im Log aus, siehst du unten dann in Orange (oder im Log)

    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

    N 1 Antwort Letzte Antwort
    1
    • paul53P paul53

      @codierknecht sagte: Ein Vergleich zwischen einem Float 1 und einem Integer 1

      Javascript kennt keine Integer.

      CodierknechtC Offline
      CodierknechtC Offline
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von Codierknecht
      #16

      @paul53 sagte in JavaScript Syntax Verstaendnisproblem:

      Javascript kennt keine Integer.

      Eines meiner Probleme mit untypisierten Sprachen :grin:
      Ich könnte auch schreiben "doofe Sprache" ... aber dann gibt's wieder Haue. :innocent:

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      BananaJoeB 1 Antwort Letzte Antwort
      0
      • BananaJoeB BananaJoe

        @neueklasse das ganze reagiert natürlich nur wenn sich etwas ändert. Vorher passiert nichts. Also der Wert des Datenpunktes muss sich verändern (du hast change angegeben). Der Wert muss erst z.B. 17 werden um dann wieder 18 zu werden

        Schreib mal folgendes in die Zeile vor dem if

        console.warn("obj.state.val: " + obj.state.val);
        

        Das gibt er dir dann eine Warnmeldung mit dem aktuellen Wert im Log aus, siehst du unten dann in Orange (oder im Log)

        N Offline
        N Offline
        NeueKlasse
        schrieb am zuletzt editiert von
        #17

        @bananajoe ok, alles klar, gerade getestet, jetzt funktioniert alles wie es soll!

        gibt es die möglichkeit 2 States abzufragen?

        on({id: idRobotState || idResetButton, change: "ne"}, async function (obj) {
        
        if(obj.state.val == 18) || (obj.state.val == 1) {
        
        paul53P 1 Antwort Letzte Antwort
        0
        • CodierknechtC Codierknecht

          @paul53 sagte in JavaScript Syntax Verstaendnisproblem:

          Javascript kennt keine Integer.

          Eines meiner Probleme mit untypisierten Sprachen :grin:
          Ich könnte auch schreiben "doofe Sprache" ... aber dann gibt's wieder Haue. :innocent:

          BananaJoeB Offline
          BananaJoeB Offline
          BananaJoe
          Most Active
          schrieb am zuletzt editiert von
          #18

          @codierknecht sagte in JavaScript Syntax Verstaendnisproblem:

          @paul53 sagte in JavaScript Syntax Verstaendnisproblem:

          Javascript kennt keine Integer.

          Eines meiner Probleme mit untypisierten Sprachen :grin:
          Ich könnte auch schreiben "doofe Sprache" ... aber dann gibt's wieder Haue. :innocent:

          gib TypeScript eine Chance?

          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

          1 Antwort Letzte Antwort
          0
          • N NeueKlasse

            @bananajoe ok, alles klar, gerade getestet, jetzt funktioniert alles wie es soll!

            gibt es die möglichkeit 2 States abzufragen?

            on({id: idRobotState || idResetButton, change: "ne"}, async function (obj) {
            
            if(obj.state.val == 18) || (obj.state.val == 1) {
            
            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #19

            @neueklasse sagte: gibt es die möglichkeit 2 States abzufragen?

            Ja, dann aber nicht mit obj.state.val.

            on({id: [idRobotState, idResetButton], change: "ne"}, async function (obj) {
               if(getState(idRobotState).val == 18 || getState(idResetButton).val == 1) {
            

            oder

            on({id: [idRobotState, idResetButton], change: "ne"}, async function (obj) {
               if(obj.id == idRobotState && obj.state.val == 18 || obj.id == idResetButton && obj.state.val == 1) {
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            N 1 Antwort Letzte Antwort
            1
            • paul53P paul53

              @neueklasse sagte: gibt es die möglichkeit 2 States abzufragen?

              Ja, dann aber nicht mit obj.state.val.

              on({id: [idRobotState, idResetButton], change: "ne"}, async function (obj) {
                 if(getState(idRobotState).val == 18 || getState(idResetButton).val == 1) {
              

              oder

              on({id: [idRobotState, idResetButton], change: "ne"}, async function (obj) {
                 if(obj.id == idRobotState && obj.state.val == 18 || obj.id == idResetButton && obj.state.val == 1) {
              
              N Offline
              N Offline
              NeueKlasse
              schrieb am zuletzt editiert von NeueKlasse
              #20

              @paul53

              dann wird hierbei (beim ersten) das (obj) nichtmehr benoetigt? zumindestens wird es laut script nicht mehr abgefragt
              (grau)

              paul53P 1 Antwort Letzte Antwort
              0
              • N NeueKlasse

                @paul53

                dann wird hierbei (beim ersten) das (obj) nichtmehr benoetigt? zumindestens wird es laut script nicht mehr abgefragt
                (grau)

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #21

                @neueklasse sagte: dann wird hierbei das (obj) nichtmehr benoetigt?

                Wenn man getState() verwendet, wird obj nicht benötigt.
                Im nachträglichen 2. Beispiel wird obj benötigt. Das 2. Beispiel ist übrigens effizienter - auch wenn es nicht so aussieht.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                N 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @neueklasse sagte: dann wird hierbei das (obj) nichtmehr benoetigt?

                  Wenn man getState() verwendet, wird obj nicht benötigt.
                  Im nachträglichen 2. Beispiel wird obj benötigt. Das 2. Beispiel ist übrigens effizienter - auch wenn es nicht so aussieht.

                  N Offline
                  N Offline
                  NeueKlasse
                  schrieb am zuletzt editiert von NeueKlasse
                  #22

                  @paul53 das heisst man koennte das "on change" vereinfachen? das einfache weglassen von async function (obj) endet bei mir im Fehler. (beim ersten Beispiel)

                  paul53P CodierknechtC 2 Antworten Letzte Antwort
                  0
                  • N NeueKlasse

                    @paul53 das heisst man koennte das "on change" vereinfachen? das einfache weglassen von async function (obj) endet bei mir im Fehler. (beim ersten Beispiel)

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #23

                    @neueklasse sagte: vereinfachen?

                    Ja, dann aber so:

                    on([idRobotState, idResetButton], function () { // triggert bei Wertänderung eines DP
                       if(getState(idRobotState).val == 18 || getState(idResetButton).val == 1) {
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    N CodierknechtC 2 Antworten Letzte Antwort
                    0
                    • N NeueKlasse

                      @paul53 das heisst man koennte das "on change" vereinfachen? das einfache weglassen von async function (obj) endet bei mir im Fehler. (beim ersten Beispiel)

                      CodierknechtC Offline
                      CodierknechtC Offline
                      Codierknecht
                      Developer Most Active
                      schrieb am zuletzt editiert von
                      #24

                      @neueklasse sagte in JavaScript Syntax Verstaendnisproblem:

                      das einfache weglassen von async function (obj) endet bei mir im Fehler.

                      Das kannst Du selbstverständlich nicht einfach weglassen.
                      Wenn überhaupt, dann kannst Du lediglich das obj als Parameter der anonymen Methode weglassen.
                      Ich würde es aber nicht entfernen wollen - man kann ich auch "kaputt optimieren".
                      Das wird ja (zumindest nach meinem Verständnis) lediglich die Adresse eines Objektes übergeben. Die wegzulassen bringt jetzt nicht wirklich Vorteile.

                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                      HmIP|ZigBee|Tasmota|Unifi
                      Zabbix Certified Specialist
                      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                      1 Antwort Letzte Antwort
                      1
                      • paul53P paul53

                        @neueklasse sagte: vereinfachen?

                        Ja, dann aber so:

                        on([idRobotState, idResetButton], function () { // triggert bei Wertänderung eines DP
                           if(getState(idRobotState).val == 18 || getState(idResetButton).val == 1) {
                        
                        N Offline
                        N Offline
                        NeueKlasse
                        schrieb am zuletzt editiert von
                        #25

                        @paul53 Vereinfachen im Sinne von "kuerzen" wie du aber sagst ist das 2. Beispiel effizienter oder....... "richtiger"?

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • N NeueKlasse

                          @paul53 Vereinfachen im Sinne von "kuerzen" wie du aber sagst ist das 2. Beispiel effizienter oder....... "richtiger"?

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von
                          #26

                          @neueklasse sagte: 2. Beispiel effizienter oder....... "richtiger"?

                          Richtig sind beide. Im 2. Beispiel wird direkt auf eine bereits vorliegende Objekt-Variable zugegriffen und keine komplexe Funktion aufgerufen.

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          1 Antwort Letzte Antwort
                          0
                          • paul53P paul53

                            @neueklasse sagte: vereinfachen?

                            Ja, dann aber so:

                            on([idRobotState, idResetButton], function () { // triggert bei Wertänderung eines DP
                               if(getState(idRobotState).val == 18 || getState(idResetButton).val == 1) {
                            
                            CodierknechtC Offline
                            CodierknechtC Offline
                            Codierknecht
                            Developer Most Active
                            schrieb am zuletzt editiert von Codierknecht
                            #27

                            @paul53
                            Ist das wieder so eine JS-Eigenart, dass die als Parameter übergebene Methode keine bestimmte Signatur haben muss? Oder gibt's davon mehrere überladene Versionen?

                            Was bringt das weglassen von async .... und warum kann man auch das einfach weglassen?

                            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                            Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                            HmIP|ZigBee|Tasmota|Unifi
                            Zabbix Certified Specialist
                            Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                            paul53P 1 Antwort Letzte Antwort
                            0
                            • CodierknechtC Codierknecht

                              @paul53
                              Ist das wieder so eine JS-Eigenart, dass die als Parameter übergebene Methode keine bestimmte Signatur haben muss? Oder gibt's davon mehrere überladene Versionen?

                              Was bringt das weglassen von async .... und warum kann man auch das einfach weglassen?

                              paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von paul53
                              #28

                              @codierknecht sagte: async .... und warum kann man auch das einfach weglassen?

                              async benötigt man nur, wenn man innerhalb der Funktion mit await arbeiten will.

                              @codierknecht sagte in JavaScript Syntax Verstaendnisproblem:

                              die als Parameter übergebene Methode keine bestimmte Signatur haben muss? Oder gibt's davon mehrere überladene Versionen?

                              Ich verstehe nicht, was mit Signatur gemeint ist: Bin kein ITler.

                              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                              CodierknechtC 1 Antwort Letzte Antwort
                              0
                              • paul53P paul53

                                @codierknecht sagte: async .... und warum kann man auch das einfach weglassen?

                                async benötigt man nur, wenn man innerhalb der Funktion mit await arbeiten will.

                                @codierknecht sagte in JavaScript Syntax Verstaendnisproblem:

                                die als Parameter übergebene Methode keine bestimmte Signatur haben muss? Oder gibt's davon mehrere überladene Versionen?

                                Ich verstehe nicht, was mit Signatur gemeint ist: Bin kein ITler.

                                CodierknechtC Offline
                                CodierknechtC Offline
                                Codierknecht
                                Developer Most Active
                                schrieb am zuletzt editiert von
                                #29

                                @paul53
                                "Signatur" ist quasi der Aufbau der zu übergebenden Methode.
                                Wenn in meiner Welt als Parameter eine anonyme Methode übergeben werden kann, muss die bestimmte Eigenschaften haben. Also z.B. einen Parameter (eines bestimmten Typen) entgegennehmen.
                                Und in meiner (typisierten) Welt auch noch einen bestimmten Typen zurückgeben. Was ja in JS entfällt.
                                In meiner Welt ist also vorher festgelegt, dass die anonyme Methode einen Parameter (in diesem Fall vom Typ "Objekt") erwartet. Wird der nicht mitgeliefert, meckert mein Compiler.
                                Es sei denn, es gibt 2 überladene Versionen der Ereignisbehandlung (Trigger): Einmal mit und einmal ohne Parameter.

                                Mich wundert halt nur, warum man den Parameter einfach weglassen kann.
                                Dass das so einfach geht ist ja nicht unbedingt von Nachteil.

                                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                                Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                                HmIP|ZigBee|Tasmota|Unifi
                                Zabbix Certified Specialist
                                Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                                paul53P 1 Antwort Letzte Antwort
                                0
                                • CodierknechtC Codierknecht

                                  @paul53
                                  "Signatur" ist quasi der Aufbau der zu übergebenden Methode.
                                  Wenn in meiner Welt als Parameter eine anonyme Methode übergeben werden kann, muss die bestimmte Eigenschaften haben. Also z.B. einen Parameter (eines bestimmten Typen) entgegennehmen.
                                  Und in meiner (typisierten) Welt auch noch einen bestimmten Typen zurückgeben. Was ja in JS entfällt.
                                  In meiner Welt ist also vorher festgelegt, dass die anonyme Methode einen Parameter (in diesem Fall vom Typ "Objekt") erwartet. Wird der nicht mitgeliefert, meckert mein Compiler.
                                  Es sei denn, es gibt 2 überladene Versionen der Ereignisbehandlung (Trigger): Einmal mit und einmal ohne Parameter.

                                  Mich wundert halt nur, warum man den Parameter einfach weglassen kann.
                                  Dass das so einfach geht ist ja nicht unbedingt von Nachteil.

                                  paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von paul53
                                  #30

                                  @codierknecht sagte: Mich wundert halt nur, warum man den Parameter einfach weglassen kann.

                                  Warum nicht - wenn man ihn nicht benötigt.
                                  Der Parameter ist keine Referenz auf ein bereits bestehendes Objekt, sondern obj liefert neben dem statischen Datenpunkt-Objekt den Zustand, den vorherigen Zustand und weitere Informationen (u.a. deviceName, channelName). Das Weglassen spart also RAM.

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  1 Antwort Letzte Antwort
                                  0
                                  Antworten
                                  • In einem neuen Thema antworten
                                  Anmelden zum Antworten
                                  • Älteste zuerst
                                  • Neuste zuerst
                                  • Meiste Stimmen


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  662

                                  Online

                                  32.5k

                                  Benutzer

                                  81.7k

                                  Themen

                                  1.3m

                                  Beiträge
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                  ioBroker Community 2014-2025
                                  logo
                                  • Anmelden

                                  • Du hast noch kein Konto? Registrieren

                                  • Anmelden oder registrieren, um zu suchen
                                  • Erster Beitrag
                                    Letzter Beitrag
                                  0
                                  • Home
                                  • Aktuell
                                  • Tags
                                  • Ungelesen 0
                                  • Kategorien
                                  • Unreplied
                                  • Beliebt
                                  • GitHub
                                  • Docu
                                  • Hilfe