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. ioBroker Allgemein
  4. Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
js-controler 3.0xskripteupdatejavascriptblocklyjavascript adapter
126 Beiträge 14 Kommentatoren 12.3k Aufrufe 7 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.
  • Thomas BraunT Thomas Braun

    Die Diskussion über die Verwendung des ersten Users als 'sudoer' und inaktivem root gab es intensiv mit Aufkommen der ersten Version von ubuntu. Die haben das soweit ich weiß als erste umfassend so gemacht. Mittlerweile macht Debian (von dem ubuntu ja abstammt) das aber aus guten Gründen auch so. Das ganze ist aber Debian-typisch heiß diskutiert worden.

    J Offline
    J Offline
    Jan1
    schrieb am zuletzt editiert von
    #95

    @Thomas-Braun
    Ja aber diese Gründe erschließen sich einem Linux Laien aber eben nicht, wenn nur in dem ständig darauf hingewiesen wird ohne dass mal ein Beispiel kommt, bei dem der Groschen fällt. Egal, wird eh gerade zu OT das ganze, wobei mich es wirklich an einem einfachen Beispiel erklärt interessieren würde, wo es für den normalen User gefährlicher wird.

    Thomas BraunT 1 Antwort Letzte Antwort
    0
    • wendy2702W wendy2702

      Mal gesehen das schon auf zwei Fehler im Script hingewiesen wurde.

      Ist das mal untersucht worden oder besteht nach dem downgrade überhaupt noch Interesse?

      AxelF1977A Offline
      AxelF1977A Offline
      AxelF1977
      schrieb am zuletzt editiert von
      #96

      @wendy2702 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

      Mal gesehen das schon auf zwei Fehler im Script hingewiesen wurde.

      Ist das mal untersucht worden oder besteht nach dem downgrade überhaupt noch Interesse?

      Es besteht auf jeden Fall Interesse.

      Ich habe jetzt nur die Befürchtung, dass das endlos gehen wirtd, also weil ich sehr viele Scripte habe, die bis auf die Blockly per Copy und Paste aus dem Forum kommen.

      Aber gerne würde ich das weiter ergründen.

      Ich poste gerne nochmal den gesamten Log der Javascript Instanz. Nur error oder alles? Damit die Fehler identifiziert werden können. Dann gerne die Scriptzeilen, um zu gucken was es denn ist.

      Der Rest sind für mich jetzt hier alles bömische Dörfer :open_mouth:

      ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

      1 Antwort Letzte Antwort
      0
      • J Jan1

        @Thomas-Braun
        Ja aber diese Gründe erschließen sich einem Linux Laien aber eben nicht, wenn nur in dem ständig darauf hingewiesen wird ohne dass mal ein Beispiel kommt, bei dem der Groschen fällt. Egal, wird eh gerade zu OT das ganze, wobei mich es wirklich an einem einfachen Beispiel erklärt interessieren würde, wo es für den normalen User gefährlicher wird.

        Thomas BraunT Online
        Thomas BraunT Online
        Thomas Braun
        Most Active
        schrieb am zuletzt editiert von
        #97

        @Jan1 https://wiki.debian.org/sudo

        Linux-Werkzeugkasten:
        https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
        NodeJS Fixer Skript:
        https://forum.iobroker.net/topic/68035/iob-node-fix-skript
        iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

        J 1 Antwort Letzte Antwort
        0
        • Thomas BraunT Thomas Braun

          @Jan1 https://wiki.debian.org/sudo

          J Offline
          J Offline
          Jan1
          schrieb am zuletzt editiert von
          #98

          @Thomas-Braun
          kannte ich bereits, aber viel schlauer hats mich nicht gemacht. Problem ist auch, dass sich ein Laie unterm normalen User sehr schnell angewöhnt, eh alles mit sudo auszuführen und ich denke, da sollte man eher mal drauf hinweisen, dass das eben auch ne blöde Idee ist.

          1 Antwort Letzte Antwort
          0
          • GarfonsoG Offline
            GarfonsoG Offline
            Garfonso
            Developer
            schrieb am zuletzt editiert von
            #99

            Ich kann mir einen Grund vorstellen, warum es mit JS-Controller 2.x läuft und mit 3.x Probleme gibt. Ab js-controller 3.x führen Fehler, die auftreten und nicht behandelt werden zum beenden des Adapters.
            Das Fehler in einzelnen Skripten den javascript adapter crashen, finde ich dabei allerdings nicht so prickelnd. Hm.

            Ultimativer Lovelace Leitfaden: https://forum.iobroker.net/topic/35937/der-ultimative-iobroker-lovelace-leitfaden-dokumentation

            Lovelace UI Beispiele: https://forum.iobroker.net/topic/35950/zeigt-her-eure-lovelace-visualisierung

            AxelF1977A 1 Antwort Letzte Antwort
            0
            • GarfonsoG Garfonso

              Ich kann mir einen Grund vorstellen, warum es mit JS-Controller 2.x läuft und mit 3.x Probleme gibt. Ab js-controller 3.x führen Fehler, die auftreten und nicht behandelt werden zum beenden des Adapters.
              Das Fehler in einzelnen Skripten den javascript adapter crashen, finde ich dabei allerdings nicht so prickelnd. Hm.

              AxelF1977A Offline
              AxelF1977A Offline
              AxelF1977
              schrieb am zuletzt editiert von
              #100

              @Garfonso sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

              Ich kann mir einen Grund vorstellen, warum es mit JS-Controller 2.x läuft und mit 3.x Probleme gibt. Ab js-controller 3.x führen Fehler, die auftreten und nicht behandelt werden zum beenden des Adapters.

              Das klingt nach dem was bei mir passiert

              @Garfonso sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

              Das Fehler in einzelnen Skripten den javascript adapter crashen, finde ich dabei allerdings nicht so prickelnd. Hm.

              Ich auch nicht. Aber wir grenzen ja das Problem ein. Alte Scripte, die jetzt Fehlerhaft sind.

              ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

              J.A.R.V.I.S.J 1 Antwort Letzte Antwort
              0
              • AxelF1977A AxelF1977

                @Garfonso sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                Ich kann mir einen Grund vorstellen, warum es mit JS-Controller 2.x läuft und mit 3.x Probleme gibt. Ab js-controller 3.x führen Fehler, die auftreten und nicht behandelt werden zum beenden des Adapters.

                Das klingt nach dem was bei mir passiert

                @Garfonso sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                Das Fehler in einzelnen Skripten den javascript adapter crashen, finde ich dabei allerdings nicht so prickelnd. Hm.

                Ich auch nicht. Aber wir grenzen ja das Problem ein. Alte Scripte, die jetzt Fehlerhaft sind.

                J.A.R.V.I.S.J Offline
                J.A.R.V.I.S.J Offline
                J.A.R.V.I.S.
                Developer
                schrieb am zuletzt editiert von
                #101

                @AxelF1977 wenn du einmal die fehlerhaften Skripte (ausgenommen Blocky) hier posten könntest, dann könnte man da mal draufschauen.

                AxelF1977A 1 Antwort Letzte Antwort
                0
                • J.A.R.V.I.S.J J.A.R.V.I.S.

                  @AxelF1977 wenn du einmal die fehlerhaften Skripte (ausgenommen Blocky) hier posten könntest, dann könnte man da mal draufschauen.

                  AxelF1977A Offline
                  AxelF1977A Offline
                  AxelF1977
                  schrieb am zuletzt editiert von
                  #102

                  @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                  @AxelF1977 wenn du einmal die fehlerhaften Skripte (ausgenommen Blocky) hier posten könntest, dann könnte man da mal draufschauen.

                  "Nur" die wo es error gibt im log oder auch warnings?

                  ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

                  GarfonsoG 1 Antwort Letzte Antwort
                  0
                  • AxelF1977A AxelF1977

                    @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                    @AxelF1977 wenn du einmal die fehlerhaften Skripte (ausgenommen Blocky) hier posten könntest, dann könnte man da mal draufschauen.

                    "Nur" die wo es error gibt im log oder auch warnings?

                    GarfonsoG Offline
                    GarfonsoG Offline
                    Garfonso
                    Developer
                    schrieb am zuletzt editiert von Garfonso
                    #103

                    @AxelF1977
                    fang mal mit error an. ;-)
                    Am besten die, die oben in den logs die Fehler erzeugt haben.

                    Ultimativer Lovelace Leitfaden: https://forum.iobroker.net/topic/35937/der-ultimative-iobroker-lovelace-leitfaden-dokumentation

                    Lovelace UI Beispiele: https://forum.iobroker.net/topic/35950/zeigt-her-eure-lovelace-visualisierung

                    AxelF1977A 1 Antwort Letzte Antwort
                    0
                    • GarfonsoG Garfonso

                      @AxelF1977
                      fang mal mit error an. ;-)
                      Am besten die, die oben in den logs die Fehler erzeugt haben.

                      AxelF1977A Offline
                      AxelF1977A Offline
                      AxelF1977
                      schrieb am zuletzt editiert von AxelF1977
                      #104

                      @Garfonso sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                      @AxelF1977
                      fang mal mit error an. ;-)
                      Am besten die, die oben in den logs die Fehler erzeugt haben.

                      ok, zu diesen Fehlern

                      javascript.0	2020-05-03 18:19:35.039	error	(28611) at script.js.Schwellwerte.Schwellwerte:754:1
                      javascript.0	2020-05-03 18:19:35.039	error	(28611) at dpAnlegen (script.js.Schwellwerte.Schwellwerte:684:9)
                      javascript.0	2020-05-03 18:19:35.039	error	(28611) ReferenceError: logs is not defined
                      javascript.0	2020-05-03 18:19:35.039	error	(28611) ^
                      javascript.0	2020-05-03 18:19:35.039	error	(28611) logs(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                      javascript.0	2020-05-03 18:19:35.038	error	(28611) script.js.Schwellwerte.Schwellwerte: script.js.Schwellwerte.Schwellwerte:684
                      

                      ist dass das Script

                      // todo: onAnlegen() Funktion in Funktion
                      
                      var loglevel = "warn";  // Loglevel des Scriptes (debug,info,warn,error) - benutzt die Funktion logs()
                      
                      var pfad = "Schwellwerte.";
                      
                      
                      // -----------------------------------------------------------------------------
                      // Datenpunkte, für die Schwellwerte angelegt werden sollen
                      // -----------------------------------------------------------------------------
                      
                      // datenpunkt:  Name des Datenpunkt für die Schwellwerte
                      // liste:       Verweis auf die entspechende Schwellwerteliste in diesem Script
                      
                      
                      var schwellwerte = {
                          "hm-rpc.3.0001D8A98C373C.6.POWER" : {
                              "datenpunkt": "Strom.Fernseher.Nik",
                              "liste":      "wattFernseherNik"
                          },
                          "hm-rpc.2.LEQ0847294.4.ACTUAL_TEMPERATURE"/*Nik Klima.TEMPERATURE*/ : {
                              "datenpunkt": "Klima.Temperatur.Nik",
                              "liste":      "raumKlimaTemperatur"
                          },
                          "hm-rpc.2.KEQ0509273.4.ACTUAL_TEMPERATURE"/*Küche Klima.TEMPERATURE*/ : {
                              "datenpunkt": "Klima.Temperatur.Küche",
                              "liste":      "raumKlimaTemperatur"
                          },
                          "hm-rpc.2.LEQ0999580.1.TEMPERATURE"/*Theo:1.TEMPERATURE*/ : {
                              "datenpunkt": "Klima.Temperatur.Theo",
                              "liste":      "raumKlimaTemperatur"
                          },
                          "hm-rpc.2.MEQ1587955.4.ACTUAL_TEMPERATURE"/*Wohnzimmer Klima.TEMPERATURE*/ : {
                              "datenpunkt": "Klima.Temperatur.Wohnzimmer",
                              "liste":      "raumKlimaTemperatur"
                          },
                          "hm-rpc.2.OEQ0578299.1.TEMPERATURE"/*Schlafzimmer Klima:1.TEMPERATURE*/ : {
                              "datenpunkt": "Klima.Temperatur.Schlafzimmer",
                              "liste":      "raumKlimaTemperatur"
                          },
                          "hm-rpc.2.OEQ0578951.1.TEMPERATURE"/*Bad Klima.TEMPERATURE*/ : {
                              "datenpunkt": "Klima.Temperatur.Bad",
                              "liste":      "raumKlimaTemperatur"
                          },
                          "hm-rpc.2.OEQ0578951.1.HUMIDITY"/*Bad Klima.HUMIDITY*/ : {
                              "datenpunkt": "Klima.Luftfeuchtigkeit.Bad",
                              "liste":      "raumKlimaLuftfeuchtigkeit"
                          },
                          "hm-rpc.2.OEQ0578299.1.HUMIDITY"/*Schlafzimmer Klima:1.HUMIDITY*/ : {
                              "datenpunkt": "Klima.Luftfeuchtigkeit.Schlafzimmer",
                              "liste":      "raumKlimaLuftfeuchtigkeit"
                          },
                          "hm-rpc.2.LEQ0999580.1.HUMIDITY"/*Theo Klima.HUMIDITY*/ : {
                              "datenpunkt": "Klima.Luftfeuchtigkeit.Theo",
                              "liste":      "raumKlimaLuftfeuchtigkeit"
                          },
                          "hm-rpc.2.OEQ1016368.1.TEMPERATURE"/*Balkon gr. Klima:1.TEMPERATURE*/ : {
                              "datenpunkt": "Klima.Temperatur.Balkon",
                              "liste":      "draussenKlimaTemperatur"
                          },
                          "hm-rpc.2.OEQ1016368.1.HUMIDITY"/*Balkon gr. Klima:1.HUMIDITY*/ : {
                              "datenpunkt": "Klima.Luftfeuchtigkeit.Balkon",
                              "liste":      "raumKlimaLuftfeuchtigkeit"
                          },
                          "hm-rpc.2.OEQ0700027.1.HUMIDITY"/*Küche Klima.HUMIDITY*/ : {
                              "datenpunkt": "Klima.Luftfeuchtigkeit.Küche",
                              "liste":      "raumKlimaLuftfeuchtigkeit"
                          },
                          "hm-rpc.2.OEQ0699199.1.HUMIDITY"/*Nik Klima.HUMIDITY*/ : {
                              "datenpunkt": "Klima.Luftfeuchtigkeit.Nik",
                              "liste":      "raumKlimaLuftfeuchtigkeit"
                          },
                          "hm-rpc.2.OEQ0699871.1.HUMIDITY"/*Wohnzimmer Klima.HUMIDITY*/ : {
                              "datenpunkt": "Klima.Luftfeuchtigkeit.Wohnzimmer",
                              "liste":      "raumKlimaLuftfeuchtigkeit"
                          }            
                      };
                      
                      
                      
                      //load2core
                      
                      
                      // -----------------------------------------------------------------------------
                      // Schwellwertelisten
                      // -----------------------------------------------------------------------------
                      
                      
                      
                      var liste = {
                          "raumKlimaTemperatur": {
                              "obereGrenzeBezeichnung":   "sehr heiss",
                              "obereGrenzeZahl":          4,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            15,
                                      "bezeichnung":     "kalt",
                                      "zahl":            -2,
                                      "color":           "white",
                                      "backgroundColor": "dodgerblue"
                                  },
                                  {"wert":            18,
                                      "bezeichnung":     "kühl",
                                      "zahl":            -1,
                                      "color":           "black",
                                      "backgroundColor": "deepskyblue"
                                  },
                                  {"wert":            22,
                                      "bezeichnung":     "normal",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                      
                                  },
                                  {"wert":            24,
                                      "bezeichnung":     "warm",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "limegreen"
                      
                                  },
                                  {"wert":            26,
                                      "bezeichnung":     "warm",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                      
                                  },
                                  {"wert":            30,
                                      "bezeichnung":     "sehr warm",
                                      "zahl":            3,
                                      "color":           "black",
                                      "backgroundColor": "orangered"
                                  }
                              ]
                          },
                          "raumKlimaLuftfeuchtigkeit": {
                              "obereGrenzeBezeichnung":   "Schimmel",
                              "obereGrenzeZahl":          3,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "dodgerblue",
                              "schwellwerte": [
                                  {"wert":            37,
                                      "bezeichnung":     "trocken",
                                      "zahl":            -1,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  },
                                  {"wert":            60,
                                      "bezeichnung":     "normal",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            70,
                                      "bezeichnung":     "feucht",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "deepskyblue"
                      
                                  }
                              ]
                          },
                          "draussenKlimaTemperatur": {
                              "obereGrenzeBezeichnung":   "sehr heiss",
                              "obereGrenzeZahl":          3,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "orangered",
                              "schwellwerte": [
                                  {"wert":            0,
                                      "bezeichnung":     "eisig",
                                      "zahl":            -2,
                                      "color":           "white",
                                      "backgroundColor": "dodgerblue"
                                  },
                                  {"wert":            4,
                                      "bezeichnung":     "kalt",
                                      "zahl":            -1,
                                      "color":           "black",
                                      "backgroundColor": "deepskyblue"
                                  },
                                  {"wert":            12,
                                      "bezeichnung":     "kühl",
                                      "zahl":            -1,
                                      "color":           "black",
                                      "backgroundColor": "#94fff4"
                                  },            
                                  {"wert":            18,
                                      "bezeichnung":     "lauwarm",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "#9dfd9d"
                                  },
                                  {"wert":            24,
                                      "bezeichnung":     "kühl",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "limegreen"
                                  },
                                  {"wert":            30,
                                      "bezeichnung":     "warm",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                      
                                  },
                                  {"wert":            35,
                                      "bezeichnung":     "warm",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                      
                                  }
                              ]
                          },
                          "wattFernseherNik": {
                              "obereGrenzeBezeichnung":   "Fernseher an",
                              "obereGrenzeZahl":          3,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            0,
                                      "bezeichnung":     "Alles aus",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            20,
                                      "bezeichnung":     "Standby OK",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "limegreen"
                                  },
                                  {"wert":            50,
                                      "bezeichnung":     "Standby ohne Sub",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            100,
                                      "bezeichnung":     "TV aus, Sub noch an",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  }
                              ]
                          },
                          "wattUSV": {
                              "obereGrenzeBezeichnung":   "hoher Verbrauch",
                              "obereGrenzeZahl":          3,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            0,
                                      "bezeichnung":     "Alles aus",
                                      "zahl":            -1,
                                      "color":           "white",
                                      "backgroundColor": "red"
                                  },
                                  {"wert":            60,
                                      "bezeichnung":     "optimierter Verbrauch",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            80,
                                      "bezeichnung":     "niedriger Verbrauch",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "limegreen"
                                  },
                                  {"wert":            110,
                                      "bezeichnung":     "normaler Verrauch",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            120,
                                      "bezeichnung":     "erhöhter Verbrauch",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  }
                              ]
                          },
                          "wattSonos": {
                              "obereGrenzeBezeichnung":   "hoher Verbrauch",
                              "obereGrenzeZahl":          3,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            0,
                                      "bezeichnung":     "Sonos aus",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            9,
                                      "bezeichnung":     "Standby",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            20,
                                      "bezeichnung":     "Sonos ist an",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  }
                              ]
                          },
                          "wattEsxi": {
                              "obereGrenzeBezeichnung":   "sehr hoch",
                              "obereGrenzeZahl":          3,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            13,
                                      "bezeichnung":     "normal",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            14,
                                      "bezeichnung":     "erhöht",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            15,
                                      "bezeichnung":     "hoch",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  }
                              ]
                          },
                          "sonosVol": {
                              "obereGrenzeBezeichnung":   "sehr laut",
                              "obereGrenzeZahl":          5,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            0,
                                      "bezeichnung":     "aus",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            9,
                                      "bezeichnung":     "leise",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "limegreen"
                                  },
                                  {"wert":            40,
                                      "bezeichnung":     "normal",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "rgb(204,204,204)"
                                  },
                                  {"wert":            50,
                                      "bezeichnung":     "etwas lauter",
                                      "zahl":            3,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            60,
                                      "bezeichnung":     "laut",
                                      "zahl":            4,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  }
                              ]
                          },
                          "windstaerke": {
                              "obereGrenzeBezeichnung":   "Orkan",
                              "obereGrenzeZahl":          12,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            1,
                                      "bezeichnung":     "Windstill",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "rgb(204,204,204)"
                                  },
                                  {"wert":            5,
                                      "bezeichnung":     "leiser Zug",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "rgb(204,204,204)"
                                  },
                                  {"wert":            11,
                                      "bezeichnung":     "leichte Briese",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "rgb(204,204,204)"
                                  },
                                  {"wert":            19,
                                      "bezeichnung":     "schwacher Wind",
                                      "zahl":            3,
                                      "color":           "black",
                                      "backgroundColor": "rgb(204,204,204)"
                                  },
                                  {"wert":            28,
                                      "bezeichnung":     "mäßiger Wind",
                                      "zahl":            4,
                                      "color":           "black",
                                      "backgroundColor": "rgb(204,204,204)"
                                  },
                                  {"wert":            38,
                                      "bezeichnung":     "frischer Wind",
                                      "zahl":            5,
                                      "color":           "black",
                                      "backgroundColor": "rgb(204,204,204)"
                                  },
                                  {"wert":            49,
                                      "bezeichnung":     "starker Wind",
                                      "zahl":            6,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            61,
                                      "bezeichnung":     "steifer Wind",
                                      "zahl":            7,
                                      "color":           "black",
                                      "backgroundColor": "gold"
                                  },
                                  {"wert":            74,
                                      "bezeichnung":     "stürmischer Wind",
                                      "zahl":            8,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  },
                                  {"wert":            88,
                                      "bezeichnung":     "Sturm",
                                      "zahl":            9,
                                      "color":           "black",
                                      "backgroundColor": "darkorange"
                                  },
                                  {"wert":            102,
                                      "bezeichnung":     "schwerer Sturm",
                                      "zahl":            10,
                                      "color":           "black",
                                      "backgroundColor": "red"
                                  },
                                  {"wert":            88,
                                      "bezeichnung":     "orkanartiger Sturm",
                                      "zahl":            11,
                                      "color":           "white",
                                      "backgroundColor": "darkorange"
                                  }
                              ]
                          },
                          "hdFreiProzent": {
                              "obereGrenzeBezeichnung":   "voll",
                              "obereGrenzeZahl":          4,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            85,
                                      "bezeichnung":     "viel frei",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            90,
                                      "bezeichnung":     "gut",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "limegreen"
                                  },
                                  {"wert":            95,
                                      "bezeichnung":     "erhöht",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            98,
                                      "bezeichnung":     "fast voll",
                                      "zahl":            3,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  }
                              ]
                          },
                          "uv-index": {
                              "obereGrenzeBezeichnung":   "UV Index nicht bekannt",
                              "obereGrenzeZahl":          0,
                              "ogColor":                  "gray",
                              "ogBackgroundColor":        "rgb(204,204,204)",
                              "schwellwerte": [
                                  {"wert":            2,
                                      "bezeichnung":     "keine bis gering, UV Schutz nicht erforderlich",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "rgb(204,204,204)"
                                  },
                                  {"wert":            5,
                                      "bezeichnung":     "mittel, UV Schutz sehr empfehlenswert",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "rgb(204,204,204)"
                                  },
                                  {"wert":            7,
                                      "bezeichnung":     "hoch, UV Schutz erforderlich",
                                      "zahl":            2,
                                      "color":           "red",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            10,
                                      "bezeichnung":     "sehr hoch, UV Schutz unbedingt erforderlich",
                                      "zahl":            3,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  },
                                  {"wert":            99,
                                      "bezeichnung":     "extrem, UV Schutz ist ein muss",
                                      "zahl":            4,
                                      "color":           "white",
                                      "backgroundColor": "red"
                                  }
                              ]
                          },
                          "updates": {
                              "obereGrenzeBezeichnung":   "viele Updates",
                              "obereGrenzeZahl":          4,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            0,
                                      "bezeichnung":     "Alles aktuell",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            3,
                                      "bezeichnung":     "Update verfügbar",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            5,
                                      "bezeichnung":     "updates verfügbar",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  },
                                  {"wert":            10,
                                      "bezeichnung":     "mehrere updates",
                                      "zahl":            3,
                                      "color":           "black",
                                      "backgroundColor": "darkorange"
                                  }
                              ]
                          },
                          "load2core": {
                              "obereGrenzeBezeichnung":   "Überlast",
                              "obereGrenzeZahl":          5,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            0.5,
                                      "bezeichnung":     "Last niedrig",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            1.0,
                                      "bezeichnung":     "Last norrmal",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "limegreen"
                                  },
                                  {"wert":            1.2,
                                      "bezeichnung":     "erhöhte Last",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            1.6,
                                      "bezeichnung":     "Hohe Last",
                                      "zahl":            3,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  },
                                  {"wert":            2.0,
                                      "bezeichnung":     "sehr hohe Last",
                                      "zahl":            4,
                                      "color":           "black",
                                      "backgroundColor": "darkorange"
                                  }
                              ]
                          },
                          "load1core": {
                              "obereGrenzeBezeichnung":   "Überlast",
                              "obereGrenzeZahl":          5,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            0.4,
                                      "bezeichnung":     "Last niedrig",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  },
                                  {"wert":            0.6,
                                      "bezeichnung":     "Last norrmal",
                                      "zahl":            1,
                                      "color":           "black",
                                      "backgroundColor": "limegreen"
                                  },
                                  {"wert":            0.7,
                                      "bezeichnung":     "erhöhte Last",
                                      "zahl":            2,
                                      "color":           "black",
                                      "backgroundColor": "yellow"
                                  },
                                  {"wert":            0.8,
                                      "bezeichnung":     "Hohe Last",
                                      "zahl":            3,
                                      "color":           "black",
                                      "backgroundColor": "orange"
                                  },
                                  {"wert":            1.0,
                                      "bezeichnung":     "sehr hohe Last",
                                      "zahl":            4,
                                      "color":           "black",
                                      "backgroundColor": "darkorange"
                                  }
                              ]
                          },
                          "alarme": {
                              "obereGrenzeBezeichnung":   "Alarme stehen an",
                              "obereGrenzeZahl":          1,
                              "ogColor":                  "white",
                              "ogBackgroundColor":        "red",
                              "schwellwerte": [
                                  {"wert":            0,
                                      "bezeichnung":     "keine Alarme",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  }
                              ]
                          },
                          "gruenGelb": {
                              "obereGrenzeBezeichnung":   "erhöht",
                              "obereGrenzeZahl":          1,
                              "ogColor":                  "black",
                              "ogBackgroundColor":        "yellow",
                              "schwellwerte": [
                                  {"wert":            0,
                                      "bezeichnung":     "normal",
                                      "zahl":            0,
                                      "color":           "black",
                                      "backgroundColor": "lime"
                                  }
                              ]
                          }
                      };
                      
                      /*
                       UV-Index
                       Gefährdung (UV-Gefahrenindex
                       Schutzmaßnahmen
                       0-2	keine bis gering	nicht erforderlich
                       3-5	mittel	sehr empfehlenswert
                       6-7	hoch	erforderlich
                       8-10	sehr hoch	unbedingt erforderlich
                       ab 11	extrem	sind ein Muss
                       */
                      
                      
                      
                      function dpAnlegen() {
                          for (var geraet in schwellwerte) {
                              createState(pfad + schwellwerte[geraet].datenpunkt + ".text","initalisiert");
                              createState(pfad + schwellwerte[geraet].datenpunkt + ".zahl",0);
                              createState(pfad + schwellwerte[geraet].datenpunkt + ".color","black");
                              createState(pfad + schwellwerte[geraet].datenpunkt + ".backgroundColor","silver");
                              logs(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                          }
                      }
                      
                      
                      //var reg = new RegExp("^javascript\\.\\d+\\." + hueSzenenApapterPfad.replace('.', '\\.') + ".*\\.szene");
                      //on(reg , function (obj) {
                      
                      function setSchwellwerte(obj) {
                                  if(liste[schwellwerte[obj.id].liste]){
                                      //log("Liste: " + schwellwerte[obj.id].liste);
                      
                                      logs("Anzahl Schwellwerte: " + liste[schwellwerte[obj.id].liste].schwellwerte.length),"debug";
                                      //var schwellwerteListe = liste
                                      var bezeichnung =       liste[schwellwerte[obj.id].liste].obereGrenzeBezeichnung;
                                      var zahl =              liste[schwellwerte[obj.id].liste].obereGrenzeZahl;
                                      var color =             liste[schwellwerte[obj.id].liste].ogColor;
                                      var backgroundColor =   liste[schwellwerte[obj.id].liste].ogBackgroundColor;
                                      var test = 9999;
                                      for (var i = 0; i < liste[schwellwerte[obj.id].liste].schwellwerte.length; i++) {
                                          if (obj.state.val <= liste[schwellwerte[obj.id].liste].schwellwerte[i].wert) {
                                              bezeichnung = liste[schwellwerte[obj.id].liste].schwellwerte[i].bezeichnung;
                                              zahl = liste[schwellwerte[obj.id].liste].schwellwerte[i].zahl;
                                              test = liste[schwellwerte[obj.id].liste].schwellwerte[i].wert;
                                              color = liste[schwellwerte[obj.id].liste].schwellwerte[i].color;
                                              backgroundColor = liste[schwellwerte[obj.id].liste].schwellwerte[i].backgroundColor;
                                              break;
                                          }
                                      }
                                      setState(pfad + schwellwerte[obj.id].datenpunkt + ".text",bezeichnung);
                                      setState(pfad + schwellwerte[obj.id].datenpunkt + ".zahl",zahl);
                                      setState(pfad + schwellwerte[obj.id].datenpunkt + ".color",color);
                                      setState(pfad + schwellwerte[obj.id].datenpunkt + ".backgroundColor",backgroundColor);
                                      //logs (schwellwerte[obj.id].datenpunkt + " - State: " + obj.state.val + " ist kleiner/gleich: " + test + " - Bezeichnung: " + bezeichnung + " - Zahl: "+ zahl, "debug");
                                  } else {
                                      log("Schwellwertliste für " + obj.id + " nicht vorhanden","error");
                                  }
                      }
                      
                      
                      // TODO: die Subscription nicht im Loop anlegen!
                      
                      function onAnlegen() {
                          for (var geraet in schwellwerte) {
                              logs("Schedule angelegt: " + geraet,"debug");
                      
                              on({id: geraet}, function(obj) {
                                  //log(obj.id + ": " + obj.state.val);
                                  setSchwellwerte(obj);
                              });
                          }
                      }
                      
                      function getSchwellwerte() {
                          for (var geraet in schwellwerte) {
                              var val = getState(geraet).val;
                              var obj = { 
                                  "id":geraet,
                                  "state": {
                                          "val":val
                                  }
                              };
                              setSchwellwerte(obj);
                          }
                      }
                      
                      
                      // main - Hauptprogramm (wird beim Scriptstart ausgeführt)
                      // =============================================================================
                      
                      dpAnlegen(); // Datenpunkte anlegen
                      onAnlegen(); // Subscribes  anlegen
                      
                      
                      function main() {
                          // Hauptprogramm
                          getSchwellwerte();
                      }
                      setTimeout(main, 500);
                      

                      Ich würde die Scripte nach und nach posten, wenn die Fehler weg sind das nächste. Sonst komme ich da durcheinander.

                      Danke nochmal an alle für die riesen Hilfe!

                      ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

                      J.A.R.V.I.S.J 1 Antwort Letzte Antwort
                      0
                      • AxelF1977A AxelF1977

                        @Garfonso sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                        @AxelF1977
                        fang mal mit error an. ;-)
                        Am besten die, die oben in den logs die Fehler erzeugt haben.

                        ok, zu diesen Fehlern

                        javascript.0	2020-05-03 18:19:35.039	error	(28611) at script.js.Schwellwerte.Schwellwerte:754:1
                        javascript.0	2020-05-03 18:19:35.039	error	(28611) at dpAnlegen (script.js.Schwellwerte.Schwellwerte:684:9)
                        javascript.0	2020-05-03 18:19:35.039	error	(28611) ReferenceError: logs is not defined
                        javascript.0	2020-05-03 18:19:35.039	error	(28611) ^
                        javascript.0	2020-05-03 18:19:35.039	error	(28611) logs(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                        javascript.0	2020-05-03 18:19:35.038	error	(28611) script.js.Schwellwerte.Schwellwerte: script.js.Schwellwerte.Schwellwerte:684
                        

                        ist dass das Script

                        // todo: onAnlegen() Funktion in Funktion
                        
                        var loglevel = "warn";  // Loglevel des Scriptes (debug,info,warn,error) - benutzt die Funktion logs()
                        
                        var pfad = "Schwellwerte.";
                        
                        
                        // -----------------------------------------------------------------------------
                        // Datenpunkte, für die Schwellwerte angelegt werden sollen
                        // -----------------------------------------------------------------------------
                        
                        // datenpunkt:  Name des Datenpunkt für die Schwellwerte
                        // liste:       Verweis auf die entspechende Schwellwerteliste in diesem Script
                        
                        
                        var schwellwerte = {
                            "hm-rpc.3.0001D8A98C373C.6.POWER" : {
                                "datenpunkt": "Strom.Fernseher.Nik",
                                "liste":      "wattFernseherNik"
                            },
                            "hm-rpc.2.LEQ0847294.4.ACTUAL_TEMPERATURE"/*Nik Klima.TEMPERATURE*/ : {
                                "datenpunkt": "Klima.Temperatur.Nik",
                                "liste":      "raumKlimaTemperatur"
                            },
                            "hm-rpc.2.KEQ0509273.4.ACTUAL_TEMPERATURE"/*Küche Klima.TEMPERATURE*/ : {
                                "datenpunkt": "Klima.Temperatur.Küche",
                                "liste":      "raumKlimaTemperatur"
                            },
                            "hm-rpc.2.LEQ0999580.1.TEMPERATURE"/*Theo:1.TEMPERATURE*/ : {
                                "datenpunkt": "Klima.Temperatur.Theo",
                                "liste":      "raumKlimaTemperatur"
                            },
                            "hm-rpc.2.MEQ1587955.4.ACTUAL_TEMPERATURE"/*Wohnzimmer Klima.TEMPERATURE*/ : {
                                "datenpunkt": "Klima.Temperatur.Wohnzimmer",
                                "liste":      "raumKlimaTemperatur"
                            },
                            "hm-rpc.2.OEQ0578299.1.TEMPERATURE"/*Schlafzimmer Klima:1.TEMPERATURE*/ : {
                                "datenpunkt": "Klima.Temperatur.Schlafzimmer",
                                "liste":      "raumKlimaTemperatur"
                            },
                            "hm-rpc.2.OEQ0578951.1.TEMPERATURE"/*Bad Klima.TEMPERATURE*/ : {
                                "datenpunkt": "Klima.Temperatur.Bad",
                                "liste":      "raumKlimaTemperatur"
                            },
                            "hm-rpc.2.OEQ0578951.1.HUMIDITY"/*Bad Klima.HUMIDITY*/ : {
                                "datenpunkt": "Klima.Luftfeuchtigkeit.Bad",
                                "liste":      "raumKlimaLuftfeuchtigkeit"
                            },
                            "hm-rpc.2.OEQ0578299.1.HUMIDITY"/*Schlafzimmer Klima:1.HUMIDITY*/ : {
                                "datenpunkt": "Klima.Luftfeuchtigkeit.Schlafzimmer",
                                "liste":      "raumKlimaLuftfeuchtigkeit"
                            },
                            "hm-rpc.2.LEQ0999580.1.HUMIDITY"/*Theo Klima.HUMIDITY*/ : {
                                "datenpunkt": "Klima.Luftfeuchtigkeit.Theo",
                                "liste":      "raumKlimaLuftfeuchtigkeit"
                            },
                            "hm-rpc.2.OEQ1016368.1.TEMPERATURE"/*Balkon gr. Klima:1.TEMPERATURE*/ : {
                                "datenpunkt": "Klima.Temperatur.Balkon",
                                "liste":      "draussenKlimaTemperatur"
                            },
                            "hm-rpc.2.OEQ1016368.1.HUMIDITY"/*Balkon gr. Klima:1.HUMIDITY*/ : {
                                "datenpunkt": "Klima.Luftfeuchtigkeit.Balkon",
                                "liste":      "raumKlimaLuftfeuchtigkeit"
                            },
                            "hm-rpc.2.OEQ0700027.1.HUMIDITY"/*Küche Klima.HUMIDITY*/ : {
                                "datenpunkt": "Klima.Luftfeuchtigkeit.Küche",
                                "liste":      "raumKlimaLuftfeuchtigkeit"
                            },
                            "hm-rpc.2.OEQ0699199.1.HUMIDITY"/*Nik Klima.HUMIDITY*/ : {
                                "datenpunkt": "Klima.Luftfeuchtigkeit.Nik",
                                "liste":      "raumKlimaLuftfeuchtigkeit"
                            },
                            "hm-rpc.2.OEQ0699871.1.HUMIDITY"/*Wohnzimmer Klima.HUMIDITY*/ : {
                                "datenpunkt": "Klima.Luftfeuchtigkeit.Wohnzimmer",
                                "liste":      "raumKlimaLuftfeuchtigkeit"
                            }            
                        };
                        
                        
                        
                        //load2core
                        
                        
                        // -----------------------------------------------------------------------------
                        // Schwellwertelisten
                        // -----------------------------------------------------------------------------
                        
                        
                        
                        var liste = {
                            "raumKlimaTemperatur": {
                                "obereGrenzeBezeichnung":   "sehr heiss",
                                "obereGrenzeZahl":          4,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            15,
                                        "bezeichnung":     "kalt",
                                        "zahl":            -2,
                                        "color":           "white",
                                        "backgroundColor": "dodgerblue"
                                    },
                                    {"wert":            18,
                                        "bezeichnung":     "kühl",
                                        "zahl":            -1,
                                        "color":           "black",
                                        "backgroundColor": "deepskyblue"
                                    },
                                    {"wert":            22,
                                        "bezeichnung":     "normal",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                        
                                    },
                                    {"wert":            24,
                                        "bezeichnung":     "warm",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "limegreen"
                        
                                    },
                                    {"wert":            26,
                                        "bezeichnung":     "warm",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                        
                                    },
                                    {"wert":            30,
                                        "bezeichnung":     "sehr warm",
                                        "zahl":            3,
                                        "color":           "black",
                                        "backgroundColor": "orangered"
                                    }
                                ]
                            },
                            "raumKlimaLuftfeuchtigkeit": {
                                "obereGrenzeBezeichnung":   "Schimmel",
                                "obereGrenzeZahl":          3,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "dodgerblue",
                                "schwellwerte": [
                                    {"wert":            37,
                                        "bezeichnung":     "trocken",
                                        "zahl":            -1,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    },
                                    {"wert":            60,
                                        "bezeichnung":     "normal",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            70,
                                        "bezeichnung":     "feucht",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "deepskyblue"
                        
                                    }
                                ]
                            },
                            "draussenKlimaTemperatur": {
                                "obereGrenzeBezeichnung":   "sehr heiss",
                                "obereGrenzeZahl":          3,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "orangered",
                                "schwellwerte": [
                                    {"wert":            0,
                                        "bezeichnung":     "eisig",
                                        "zahl":            -2,
                                        "color":           "white",
                                        "backgroundColor": "dodgerblue"
                                    },
                                    {"wert":            4,
                                        "bezeichnung":     "kalt",
                                        "zahl":            -1,
                                        "color":           "black",
                                        "backgroundColor": "deepskyblue"
                                    },
                                    {"wert":            12,
                                        "bezeichnung":     "kühl",
                                        "zahl":            -1,
                                        "color":           "black",
                                        "backgroundColor": "#94fff4"
                                    },            
                                    {"wert":            18,
                                        "bezeichnung":     "lauwarm",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "#9dfd9d"
                                    },
                                    {"wert":            24,
                                        "bezeichnung":     "kühl",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "limegreen"
                                    },
                                    {"wert":            30,
                                        "bezeichnung":     "warm",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                        
                                    },
                                    {"wert":            35,
                                        "bezeichnung":     "warm",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                        
                                    }
                                ]
                            },
                            "wattFernseherNik": {
                                "obereGrenzeBezeichnung":   "Fernseher an",
                                "obereGrenzeZahl":          3,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            0,
                                        "bezeichnung":     "Alles aus",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            20,
                                        "bezeichnung":     "Standby OK",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "limegreen"
                                    },
                                    {"wert":            50,
                                        "bezeichnung":     "Standby ohne Sub",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            100,
                                        "bezeichnung":     "TV aus, Sub noch an",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    }
                                ]
                            },
                            "wattUSV": {
                                "obereGrenzeBezeichnung":   "hoher Verbrauch",
                                "obereGrenzeZahl":          3,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            0,
                                        "bezeichnung":     "Alles aus",
                                        "zahl":            -1,
                                        "color":           "white",
                                        "backgroundColor": "red"
                                    },
                                    {"wert":            60,
                                        "bezeichnung":     "optimierter Verbrauch",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            80,
                                        "bezeichnung":     "niedriger Verbrauch",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "limegreen"
                                    },
                                    {"wert":            110,
                                        "bezeichnung":     "normaler Verrauch",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            120,
                                        "bezeichnung":     "erhöhter Verbrauch",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    }
                                ]
                            },
                            "wattSonos": {
                                "obereGrenzeBezeichnung":   "hoher Verbrauch",
                                "obereGrenzeZahl":          3,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            0,
                                        "bezeichnung":     "Sonos aus",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            9,
                                        "bezeichnung":     "Standby",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            20,
                                        "bezeichnung":     "Sonos ist an",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    }
                                ]
                            },
                            "wattEsxi": {
                                "obereGrenzeBezeichnung":   "sehr hoch",
                                "obereGrenzeZahl":          3,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            13,
                                        "bezeichnung":     "normal",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            14,
                                        "bezeichnung":     "erhöht",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            15,
                                        "bezeichnung":     "hoch",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    }
                                ]
                            },
                            "sonosVol": {
                                "obereGrenzeBezeichnung":   "sehr laut",
                                "obereGrenzeZahl":          5,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            0,
                                        "bezeichnung":     "aus",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            9,
                                        "bezeichnung":     "leise",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "limegreen"
                                    },
                                    {"wert":            40,
                                        "bezeichnung":     "normal",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "rgb(204,204,204)"
                                    },
                                    {"wert":            50,
                                        "bezeichnung":     "etwas lauter",
                                        "zahl":            3,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            60,
                                        "bezeichnung":     "laut",
                                        "zahl":            4,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    }
                                ]
                            },
                            "windstaerke": {
                                "obereGrenzeBezeichnung":   "Orkan",
                                "obereGrenzeZahl":          12,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            1,
                                        "bezeichnung":     "Windstill",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "rgb(204,204,204)"
                                    },
                                    {"wert":            5,
                                        "bezeichnung":     "leiser Zug",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "rgb(204,204,204)"
                                    },
                                    {"wert":            11,
                                        "bezeichnung":     "leichte Briese",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "rgb(204,204,204)"
                                    },
                                    {"wert":            19,
                                        "bezeichnung":     "schwacher Wind",
                                        "zahl":            3,
                                        "color":           "black",
                                        "backgroundColor": "rgb(204,204,204)"
                                    },
                                    {"wert":            28,
                                        "bezeichnung":     "mäßiger Wind",
                                        "zahl":            4,
                                        "color":           "black",
                                        "backgroundColor": "rgb(204,204,204)"
                                    },
                                    {"wert":            38,
                                        "bezeichnung":     "frischer Wind",
                                        "zahl":            5,
                                        "color":           "black",
                                        "backgroundColor": "rgb(204,204,204)"
                                    },
                                    {"wert":            49,
                                        "bezeichnung":     "starker Wind",
                                        "zahl":            6,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            61,
                                        "bezeichnung":     "steifer Wind",
                                        "zahl":            7,
                                        "color":           "black",
                                        "backgroundColor": "gold"
                                    },
                                    {"wert":            74,
                                        "bezeichnung":     "stürmischer Wind",
                                        "zahl":            8,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    },
                                    {"wert":            88,
                                        "bezeichnung":     "Sturm",
                                        "zahl":            9,
                                        "color":           "black",
                                        "backgroundColor": "darkorange"
                                    },
                                    {"wert":            102,
                                        "bezeichnung":     "schwerer Sturm",
                                        "zahl":            10,
                                        "color":           "black",
                                        "backgroundColor": "red"
                                    },
                                    {"wert":            88,
                                        "bezeichnung":     "orkanartiger Sturm",
                                        "zahl":            11,
                                        "color":           "white",
                                        "backgroundColor": "darkorange"
                                    }
                                ]
                            },
                            "hdFreiProzent": {
                                "obereGrenzeBezeichnung":   "voll",
                                "obereGrenzeZahl":          4,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            85,
                                        "bezeichnung":     "viel frei",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            90,
                                        "bezeichnung":     "gut",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "limegreen"
                                    },
                                    {"wert":            95,
                                        "bezeichnung":     "erhöht",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            98,
                                        "bezeichnung":     "fast voll",
                                        "zahl":            3,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    }
                                ]
                            },
                            "uv-index": {
                                "obereGrenzeBezeichnung":   "UV Index nicht bekannt",
                                "obereGrenzeZahl":          0,
                                "ogColor":                  "gray",
                                "ogBackgroundColor":        "rgb(204,204,204)",
                                "schwellwerte": [
                                    {"wert":            2,
                                        "bezeichnung":     "keine bis gering, UV Schutz nicht erforderlich",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "rgb(204,204,204)"
                                    },
                                    {"wert":            5,
                                        "bezeichnung":     "mittel, UV Schutz sehr empfehlenswert",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "rgb(204,204,204)"
                                    },
                                    {"wert":            7,
                                        "bezeichnung":     "hoch, UV Schutz erforderlich",
                                        "zahl":            2,
                                        "color":           "red",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            10,
                                        "bezeichnung":     "sehr hoch, UV Schutz unbedingt erforderlich",
                                        "zahl":            3,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    },
                                    {"wert":            99,
                                        "bezeichnung":     "extrem, UV Schutz ist ein muss",
                                        "zahl":            4,
                                        "color":           "white",
                                        "backgroundColor": "red"
                                    }
                                ]
                            },
                            "updates": {
                                "obereGrenzeBezeichnung":   "viele Updates",
                                "obereGrenzeZahl":          4,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            0,
                                        "bezeichnung":     "Alles aktuell",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            3,
                                        "bezeichnung":     "Update verfügbar",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            5,
                                        "bezeichnung":     "updates verfügbar",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    },
                                    {"wert":            10,
                                        "bezeichnung":     "mehrere updates",
                                        "zahl":            3,
                                        "color":           "black",
                                        "backgroundColor": "darkorange"
                                    }
                                ]
                            },
                            "load2core": {
                                "obereGrenzeBezeichnung":   "Überlast",
                                "obereGrenzeZahl":          5,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            0.5,
                                        "bezeichnung":     "Last niedrig",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            1.0,
                                        "bezeichnung":     "Last norrmal",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "limegreen"
                                    },
                                    {"wert":            1.2,
                                        "bezeichnung":     "erhöhte Last",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            1.6,
                                        "bezeichnung":     "Hohe Last",
                                        "zahl":            3,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    },
                                    {"wert":            2.0,
                                        "bezeichnung":     "sehr hohe Last",
                                        "zahl":            4,
                                        "color":           "black",
                                        "backgroundColor": "darkorange"
                                    }
                                ]
                            },
                            "load1core": {
                                "obereGrenzeBezeichnung":   "Überlast",
                                "obereGrenzeZahl":          5,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            0.4,
                                        "bezeichnung":     "Last niedrig",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    },
                                    {"wert":            0.6,
                                        "bezeichnung":     "Last norrmal",
                                        "zahl":            1,
                                        "color":           "black",
                                        "backgroundColor": "limegreen"
                                    },
                                    {"wert":            0.7,
                                        "bezeichnung":     "erhöhte Last",
                                        "zahl":            2,
                                        "color":           "black",
                                        "backgroundColor": "yellow"
                                    },
                                    {"wert":            0.8,
                                        "bezeichnung":     "Hohe Last",
                                        "zahl":            3,
                                        "color":           "black",
                                        "backgroundColor": "orange"
                                    },
                                    {"wert":            1.0,
                                        "bezeichnung":     "sehr hohe Last",
                                        "zahl":            4,
                                        "color":           "black",
                                        "backgroundColor": "darkorange"
                                    }
                                ]
                            },
                            "alarme": {
                                "obereGrenzeBezeichnung":   "Alarme stehen an",
                                "obereGrenzeZahl":          1,
                                "ogColor":                  "white",
                                "ogBackgroundColor":        "red",
                                "schwellwerte": [
                                    {"wert":            0,
                                        "bezeichnung":     "keine Alarme",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    }
                                ]
                            },
                            "gruenGelb": {
                                "obereGrenzeBezeichnung":   "erhöht",
                                "obereGrenzeZahl":          1,
                                "ogColor":                  "black",
                                "ogBackgroundColor":        "yellow",
                                "schwellwerte": [
                                    {"wert":            0,
                                        "bezeichnung":     "normal",
                                        "zahl":            0,
                                        "color":           "black",
                                        "backgroundColor": "lime"
                                    }
                                ]
                            }
                        };
                        
                        /*
                         UV-Index
                         Gefährdung (UV-Gefahrenindex
                         Schutzmaßnahmen
                         0-2	keine bis gering	nicht erforderlich
                         3-5	mittel	sehr empfehlenswert
                         6-7	hoch	erforderlich
                         8-10	sehr hoch	unbedingt erforderlich
                         ab 11	extrem	sind ein Muss
                         */
                        
                        
                        
                        function dpAnlegen() {
                            for (var geraet in schwellwerte) {
                                createState(pfad + schwellwerte[geraet].datenpunkt + ".text","initalisiert");
                                createState(pfad + schwellwerte[geraet].datenpunkt + ".zahl",0);
                                createState(pfad + schwellwerte[geraet].datenpunkt + ".color","black");
                                createState(pfad + schwellwerte[geraet].datenpunkt + ".backgroundColor","silver");
                                logs(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                            }
                        }
                        
                        
                        //var reg = new RegExp("^javascript\\.\\d+\\." + hueSzenenApapterPfad.replace('.', '\\.') + ".*\\.szene");
                        //on(reg , function (obj) {
                        
                        function setSchwellwerte(obj) {
                                    if(liste[schwellwerte[obj.id].liste]){
                                        //log("Liste: " + schwellwerte[obj.id].liste);
                        
                                        logs("Anzahl Schwellwerte: " + liste[schwellwerte[obj.id].liste].schwellwerte.length),"debug";
                                        //var schwellwerteListe = liste
                                        var bezeichnung =       liste[schwellwerte[obj.id].liste].obereGrenzeBezeichnung;
                                        var zahl =              liste[schwellwerte[obj.id].liste].obereGrenzeZahl;
                                        var color =             liste[schwellwerte[obj.id].liste].ogColor;
                                        var backgroundColor =   liste[schwellwerte[obj.id].liste].ogBackgroundColor;
                                        var test = 9999;
                                        for (var i = 0; i < liste[schwellwerte[obj.id].liste].schwellwerte.length; i++) {
                                            if (obj.state.val <= liste[schwellwerte[obj.id].liste].schwellwerte[i].wert) {
                                                bezeichnung = liste[schwellwerte[obj.id].liste].schwellwerte[i].bezeichnung;
                                                zahl = liste[schwellwerte[obj.id].liste].schwellwerte[i].zahl;
                                                test = liste[schwellwerte[obj.id].liste].schwellwerte[i].wert;
                                                color = liste[schwellwerte[obj.id].liste].schwellwerte[i].color;
                                                backgroundColor = liste[schwellwerte[obj.id].liste].schwellwerte[i].backgroundColor;
                                                break;
                                            }
                                        }
                                        setState(pfad + schwellwerte[obj.id].datenpunkt + ".text",bezeichnung);
                                        setState(pfad + schwellwerte[obj.id].datenpunkt + ".zahl",zahl);
                                        setState(pfad + schwellwerte[obj.id].datenpunkt + ".color",color);
                                        setState(pfad + schwellwerte[obj.id].datenpunkt + ".backgroundColor",backgroundColor);
                                        //logs (schwellwerte[obj.id].datenpunkt + " - State: " + obj.state.val + " ist kleiner/gleich: " + test + " - Bezeichnung: " + bezeichnung + " - Zahl: "+ zahl, "debug");
                                    } else {
                                        log("Schwellwertliste für " + obj.id + " nicht vorhanden","error");
                                    }
                        }
                        
                        
                        // TODO: die Subscription nicht im Loop anlegen!
                        
                        function onAnlegen() {
                            for (var geraet in schwellwerte) {
                                logs("Schedule angelegt: " + geraet,"debug");
                        
                                on({id: geraet}, function(obj) {
                                    //log(obj.id + ": " + obj.state.val);
                                    setSchwellwerte(obj);
                                });
                            }
                        }
                        
                        function getSchwellwerte() {
                            for (var geraet in schwellwerte) {
                                var val = getState(geraet).val;
                                var obj = { 
                                    "id":geraet,
                                    "state": {
                                            "val":val
                                    }
                                };
                                setSchwellwerte(obj);
                            }
                        }
                        
                        
                        // main - Hauptprogramm (wird beim Scriptstart ausgeführt)
                        // =============================================================================
                        
                        dpAnlegen(); // Datenpunkte anlegen
                        onAnlegen(); // Subscribes  anlegen
                        
                        
                        function main() {
                            // Hauptprogramm
                            getSchwellwerte();
                        }
                        setTimeout(main, 500);
                        

                        Ich würde die Scripte nach und nach posten, wenn die Fehler weg sind das nächste. Sonst komme ich da durcheinander.

                        Danke nochmal an alle für die riesen Hilfe!

                        J.A.R.V.I.S.J Offline
                        J.A.R.V.I.S.J Offline
                        J.A.R.V.I.S.
                        Developer
                        schrieb am zuletzt editiert von
                        #105

                        @AxelF1977

                        ersetz mal bitte folgendes in Zeile 684:

                        logs(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                        

                        durch

                        log(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                        
                        AxelF1977A 1 Antwort Letzte Antwort
                        1
                        • J.A.R.V.I.S.J J.A.R.V.I.S.

                          @AxelF1977

                          ersetz mal bitte folgendes in Zeile 684:

                          logs(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                          

                          durch

                          log(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                          
                          AxelF1977A Offline
                          AxelF1977A Offline
                          AxelF1977
                          schrieb am zuletzt editiert von
                          #106

                          @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                          @AxelF1977

                          ersetz mal bitte folgendes in Zeile 684:

                          logs(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                          

                          durch

                          log(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                          

                          Erledigt, nun kommen im Log noch andere Meldungen dazu

                          javascript.0	2020-05-03 20:02:56.770	error	(31056) at Script.runInContext (vm.js:133:20)
                          javascript.0	2020-05-03 20:02:56.770	error	(31056) at script.js.Schwellwerte.Schwellwerte:755:1
                          javascript.0	2020-05-03 20:02:56.770	error	(31056) at onAnlegen (script.js.Schwellwerte.Schwellwerte:728:9)
                          javascript.0	2020-05-03 20:02:56.770	error	(31056) ReferenceError: logs is not defined
                          javascript.0	2020-05-03 20:02:56.770	error	(31056) ^
                          javascript.0	2020-05-03 20:02:56.770	error	(31056) logs("Schedule angelegt: " + geraet,"debug");
                          javascript.0	2020-05-03 20:02:56.770	error	(31056) script.js.Schwellwerte.Schwellwerte: script.js.Schwellwerte.Schwellwerte:728
                          

                          ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

                          J.A.R.V.I.S.J 1 Antwort Letzte Antwort
                          0
                          • AxelF1977A AxelF1977

                            @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                            @AxelF1977

                            ersetz mal bitte folgendes in Zeile 684:

                            logs(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                            

                            durch

                            log(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug");
                            

                            Erledigt, nun kommen im Log noch andere Meldungen dazu

                            javascript.0	2020-05-03 20:02:56.770	error	(31056) at Script.runInContext (vm.js:133:20)
                            javascript.0	2020-05-03 20:02:56.770	error	(31056) at script.js.Schwellwerte.Schwellwerte:755:1
                            javascript.0	2020-05-03 20:02:56.770	error	(31056) at onAnlegen (script.js.Schwellwerte.Schwellwerte:728:9)
                            javascript.0	2020-05-03 20:02:56.770	error	(31056) ReferenceError: logs is not defined
                            javascript.0	2020-05-03 20:02:56.770	error	(31056) ^
                            javascript.0	2020-05-03 20:02:56.770	error	(31056) logs("Schedule angelegt: " + geraet,"debug");
                            javascript.0	2020-05-03 20:02:56.770	error	(31056) script.js.Schwellwerte.Schwellwerte: script.js.Schwellwerte.Schwellwerte:728
                            
                            J.A.R.V.I.S.J Offline
                            J.A.R.V.I.S.J Offline
                            J.A.R.V.I.S.
                            Developer
                            schrieb am zuletzt editiert von
                            #107

                            @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                            javascript.0 2020-05-03 20:02:56.770 error (31056) ReferenceError: logs is not defined

                            Du musst logs überall durch log ersetzen.

                            AxelF1977A 1 Antwort Letzte Antwort
                            0
                            • J.A.R.V.I.S.J J.A.R.V.I.S.

                              @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                              javascript.0 2020-05-03 20:02:56.770 error (31056) ReferenceError: logs is not defined

                              Du musst logs überall durch log ersetzen.

                              AxelF1977A Offline
                              AxelF1977A Offline
                              AxelF1977
                              schrieb am zuletzt editiert von
                              #108

                              @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                              @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                              javascript.0 2020-05-03 20:02:56.770 error (31056) ReferenceError: logs is not defined

                              Du musst logs überall durch log ersetzen.

                              Ist erledigt. Das Log gibt jetzt keine Fehler error Meldungen mehr aus. Allerdings auch keine, die nicht dieses Script betrafen.

                              Da waren ja etliche andere

                              ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

                              Thomas BraunT J 2 Antworten Letzte Antwort
                              0
                              • AxelF1977A AxelF1977

                                @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                javascript.0 2020-05-03 20:02:56.770 error (31056) ReferenceError: logs is not defined

                                Du musst logs überall durch log ersetzen.

                                Ist erledigt. Das Log gibt jetzt keine Fehler error Meldungen mehr aus. Allerdings auch keine, die nicht dieses Script betrafen.

                                Da waren ja etliche andere

                                Thomas BraunT Online
                                Thomas BraunT Online
                                Thomas Braun
                                Most Active
                                schrieb am zuletzt editiert von
                                #109

                                Jetzt kommen die JS-Helden zur Hilfe... Da muss ich mich ausklinken, da bin ich zu doof für. :-)

                                Linux-Werkzeugkasten:
                                https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
                                NodeJS Fixer Skript:
                                https://forum.iobroker.net/topic/68035/iob-node-fix-skript
                                iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

                                1 Antwort Letzte Antwort
                                0
                                • AxelF1977A AxelF1977

                                  @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                  @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                  javascript.0 2020-05-03 20:02:56.770 error (31056) ReferenceError: logs is not defined

                                  Du musst logs überall durch log ersetzen.

                                  Ist erledigt. Das Log gibt jetzt keine Fehler error Meldungen mehr aus. Allerdings auch keine, die nicht dieses Script betrafen.

                                  Da waren ja etliche andere

                                  J Offline
                                  J Offline
                                  Jan1
                                  schrieb am zuletzt editiert von
                                  #110

                                  @AxelF1977
                                  Einer der Gründe, warum ich nur ungern fertige Scripte bei mir im Einsatz habe. Ich habe da einfach zu wenig Plan was die machen um mir selber bei Problemen helfen zu können. Aber schön wenn bei Dir das Problem nun auch erledigt ist, da früher oder später wohl eh auf 3 hoch solltest.

                                  AxelF1977A 1 Antwort Letzte Antwort
                                  0
                                  • J Jan1

                                    @AxelF1977
                                    Einer der Gründe, warum ich nur ungern fertige Scripte bei mir im Einsatz habe. Ich habe da einfach zu wenig Plan was die machen um mir selber bei Problemen helfen zu können. Aber schön wenn bei Dir das Problem nun auch erledigt ist, da früher oder später wohl eh auf 3 hoch solltest.

                                    AxelF1977A Offline
                                    AxelF1977A Offline
                                    AxelF1977
                                    schrieb am zuletzt editiert von AxelF1977
                                    #111

                                    So, ich bin jetzt nochmal auf den js-Controller 3 hoch,

                                    und, wieder geht nichts... Scheint leider doch mehr zu sein

                                    folgende error tauchen jetzt wieder auf

                                    javascript.0	2020-05-03 20:51:52.503	error	(5830) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                    javascript.0	2020-05-03 20:51:52.503	error	(5830) at maybeClose (internal/child_process.js:982:16)
                                    javascript.0	2020-05-03 20:51:52.503	error	(5830) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                    javascript.0	2020-05-03 20:51:52.503	error	(5830) at ChildProcess.emit (events.js:198:13)
                                    javascript.0	2020-05-03 20:51:52.503	error	(5830) at ChildProcess.exithandler (child_process.js:285:7)
                                    javascript.0	2020-05-03 20:51:52.503	error	(5830) at script.js.System.Updates:381:59
                                    javascript.0	2020-05-03 20:51:52.503	error	(5830) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                    javascript.0	2020-05-03 20:51:50.686	error	(5830) script.js.Heos.Heos: [Heos] Error: connect ECONNREFUSED 192.168.178.50:1255
                                    javascript.0	2020-05-03 20:51:49.493	error	(5830) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                    javascript.0	2020-05-03 20:51:37.149	error	(5336) at Pipe._handle.close (net.js:607:12)
                                    javascript.0	2020-05-03 20:51:37.149	error	(5336) at Socket.EventEmitter.emit (domain.js:448:20)
                                    javascript.0	2020-05-03 20:51:37.149	error	(5336) at Socket.emit (events.js:198:13)
                                    javascript.0	2020-05-03 20:51:37.149	error	(5336) at Socket.stream.socket.on (internal/child_process.js:389:11)
                                    javascript.0	2020-05-03 20:51:37.149	error	(5336) at maybeClose (internal/child_process.js:982:16)
                                    javascript.0	2020-05-03 20:51:37.149	error	(5336) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                    javascript.0	2020-05-03 20:51:37.149	error	(5336) at ChildProcess.emit (events.js:198:13)
                                    javascript.0	2020-05-03 20:51:37.149	error	(5336) at ChildProcess.exithandler (child_process.js:285:7)
                                    javascript.0	2020-05-03 20:51:37.148	error	(5336) at script.js.System.Updates:381:59
                                    javascript.0	2020-05-03 20:51:37.148	error	(5336) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                    javascript.0	2020-05-03 20:51:34.528	error	(5336) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                    javascript.0	2020-05-03 20:51:21.826	error	(4829) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                    javascript.0	2020-05-03 20:51:21.826	error	(4829) at maybeClose (internal/child_process.js:982:16)
                                    javascript.0	2020-05-03 20:51:21.826	error	(4829) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                    javascript.0	2020-05-03 20:51:21.826	error	(4829) at ChildProcess.emit (events.js:198:13)
                                    javascript.0	2020-05-03 20:51:21.826	error	(4829) at ChildProcess.exithandler (child_process.js:285:7)
                                    javascript.0	2020-05-03 20:51:21.826	error	(4829) at script.js.System.Updates:381:59
                                    javascript.0	2020-05-03 20:51:21.826	error	(4829) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                    javascript.0	2020-05-03 20:51:18.690	error	(4829) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                    javascript.0	2020-05-03 20:51:06.391	error	(4317) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                    javascript.0	2020-05-03 20:51:06.391	error	(4317) at maybeClose (internal/child_process.js:982:16)
                                    javascript.0	2020-05-03 20:51:06.390	error	(4317) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                    javascript.0	2020-05-03 20:51:06.390	error	(4317) at ChildProcess.emit (events.js:198:13)
                                    javascript.0	2020-05-03 20:51:06.390	error	(4317) at ChildProcess.exithandler (child_process.js:285:7)
                                    javascript.0	2020-05-03 20:51:06.390	error	(4317) at script.js.System.Updates:381:59
                                    javascript.0	2020-05-03 20:51:06.389	error	(4317) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                    javascript.0	2020-05-03 20:51:03.205	error	(4317) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                    javascript.0	2020-05-03 20:50:51.076	error	(4040) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                    javascript.0	2020-05-03 20:50:51.076	error	(4040) at maybeClose (internal/child_process.js:982:16)
                                    javascript.0	2020-05-03 20:50:51.076	error	(4040) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                    javascript.0	2020-05-03 20:50:51.075	error	(4040) at ChildProcess.emit (events.js:198:13)
                                    javascript.0	2020-05-03 20:50:51.075	error	(4040) at ChildProcess.exithandler (child_process.js:285:7)
                                    javascript.0	2020-05-03 20:50:51.075	error	(4040) at script.js.System.Updates:381:59
                                    javascript.0	2020-05-03 20:50:51.075	error	(4040) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                    javascript.0	2020-05-03 20:50:49.258	error	(4040) script.js.Heos.Heos: [Heos] parseResponse: Unexpected end of JSON input
                                    javascript.0	2020-05-03 20:50:48.007	error	(4040) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                    javascript.0	2020-05-03 20:50:35.639	error	(3541) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                    javascript.0	2020-05-03 20:50:35.639	error	(3541) at maybeClose (internal/child_process.js:982:16)
                                    javascript.0	2020-05-03 20:50:35.639	error	(3541) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                    javascript.0	2020-05-03 20:50:35.639	error	(3541) at ChildProcess.emit (events.js:198:13)
                                    javascript.0	2020-05-03 20:50:35.638	error	(3541) at ChildProcess.exithandler (child_process.js:285:7)
                                    javascript.0	2020-05-03 20:50:35.638	error	(3541) at script.js.System.Updates:381:59
                                    javascript.0	2020-05-03 20:50:35.638	error	(3541) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                    

                                    ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

                                    J.A.R.V.I.S.J 1 Antwort Letzte Antwort
                                    0
                                    • AxelF1977A AxelF1977

                                      So, ich bin jetzt nochmal auf den js-Controller 3 hoch,

                                      und, wieder geht nichts... Scheint leider doch mehr zu sein

                                      folgende error tauchen jetzt wieder auf

                                      javascript.0	2020-05-03 20:51:52.503	error	(5830) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                      javascript.0	2020-05-03 20:51:52.503	error	(5830) at maybeClose (internal/child_process.js:982:16)
                                      javascript.0	2020-05-03 20:51:52.503	error	(5830) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                      javascript.0	2020-05-03 20:51:52.503	error	(5830) at ChildProcess.emit (events.js:198:13)
                                      javascript.0	2020-05-03 20:51:52.503	error	(5830) at ChildProcess.exithandler (child_process.js:285:7)
                                      javascript.0	2020-05-03 20:51:52.503	error	(5830) at script.js.System.Updates:381:59
                                      javascript.0	2020-05-03 20:51:52.503	error	(5830) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                      javascript.0	2020-05-03 20:51:50.686	error	(5830) script.js.Heos.Heos: [Heos] Error: connect ECONNREFUSED 192.168.178.50:1255
                                      javascript.0	2020-05-03 20:51:49.493	error	(5830) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                      javascript.0	2020-05-03 20:51:37.149	error	(5336) at Pipe._handle.close (net.js:607:12)
                                      javascript.0	2020-05-03 20:51:37.149	error	(5336) at Socket.EventEmitter.emit (domain.js:448:20)
                                      javascript.0	2020-05-03 20:51:37.149	error	(5336) at Socket.emit (events.js:198:13)
                                      javascript.0	2020-05-03 20:51:37.149	error	(5336) at Socket.stream.socket.on (internal/child_process.js:389:11)
                                      javascript.0	2020-05-03 20:51:37.149	error	(5336) at maybeClose (internal/child_process.js:982:16)
                                      javascript.0	2020-05-03 20:51:37.149	error	(5336) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                      javascript.0	2020-05-03 20:51:37.149	error	(5336) at ChildProcess.emit (events.js:198:13)
                                      javascript.0	2020-05-03 20:51:37.149	error	(5336) at ChildProcess.exithandler (child_process.js:285:7)
                                      javascript.0	2020-05-03 20:51:37.148	error	(5336) at script.js.System.Updates:381:59
                                      javascript.0	2020-05-03 20:51:37.148	error	(5336) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                      javascript.0	2020-05-03 20:51:34.528	error	(5336) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                      javascript.0	2020-05-03 20:51:21.826	error	(4829) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                      javascript.0	2020-05-03 20:51:21.826	error	(4829) at maybeClose (internal/child_process.js:982:16)
                                      javascript.0	2020-05-03 20:51:21.826	error	(4829) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                      javascript.0	2020-05-03 20:51:21.826	error	(4829) at ChildProcess.emit (events.js:198:13)
                                      javascript.0	2020-05-03 20:51:21.826	error	(4829) at ChildProcess.exithandler (child_process.js:285:7)
                                      javascript.0	2020-05-03 20:51:21.826	error	(4829) at script.js.System.Updates:381:59
                                      javascript.0	2020-05-03 20:51:21.826	error	(4829) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                      javascript.0	2020-05-03 20:51:18.690	error	(4829) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                      javascript.0	2020-05-03 20:51:06.391	error	(4317) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                      javascript.0	2020-05-03 20:51:06.391	error	(4317) at maybeClose (internal/child_process.js:982:16)
                                      javascript.0	2020-05-03 20:51:06.390	error	(4317) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                      javascript.0	2020-05-03 20:51:06.390	error	(4317) at ChildProcess.emit (events.js:198:13)
                                      javascript.0	2020-05-03 20:51:06.390	error	(4317) at ChildProcess.exithandler (child_process.js:285:7)
                                      javascript.0	2020-05-03 20:51:06.390	error	(4317) at script.js.System.Updates:381:59
                                      javascript.0	2020-05-03 20:51:06.389	error	(4317) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                      javascript.0	2020-05-03 20:51:03.205	error	(4317) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                      javascript.0	2020-05-03 20:50:51.076	error	(4040) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                      javascript.0	2020-05-03 20:50:51.076	error	(4040) at maybeClose (internal/child_process.js:982:16)
                                      javascript.0	2020-05-03 20:50:51.076	error	(4040) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                      javascript.0	2020-05-03 20:50:51.075	error	(4040) at ChildProcess.emit (events.js:198:13)
                                      javascript.0	2020-05-03 20:50:51.075	error	(4040) at ChildProcess.exithandler (child_process.js:285:7)
                                      javascript.0	2020-05-03 20:50:51.075	error	(4040) at script.js.System.Updates:381:59
                                      javascript.0	2020-05-03 20:50:51.075	error	(4040) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                      javascript.0	2020-05-03 20:50:49.258	error	(4040) script.js.Heos.Heos: [Heos] parseResponse: Unexpected end of JSON input
                                      javascript.0	2020-05-03 20:50:48.007	error	(4040) script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
                                      javascript.0	2020-05-03 20:50:35.639	error	(3541) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                                      javascript.0	2020-05-03 20:50:35.639	error	(3541) at maybeClose (internal/child_process.js:982:16)
                                      javascript.0	2020-05-03 20:50:35.639	error	(3541) at ChildProcess.EventEmitter.emit (domain.js:448:20)
                                      javascript.0	2020-05-03 20:50:35.639	error	(3541) at ChildProcess.emit (events.js:198:13)
                                      javascript.0	2020-05-03 20:50:35.638	error	(3541) at ChildProcess.exithandler (child_process.js:285:7)
                                      javascript.0	2020-05-03 20:50:35.638	error	(3541) at script.js.System.Updates:381:59
                                      javascript.0	2020-05-03 20:50:35.638	error	(3541) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                                      
                                      J.A.R.V.I.S.J Offline
                                      J.A.R.V.I.S.J Offline
                                      J.A.R.V.I.S.
                                      Developer
                                      schrieb am zuletzt editiert von
                                      #112

                                      @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                      script.js.System.Updates: TypeError: Cannot read property 'toString' of null

                                      Da scheint irgendwo ein null oder undefined zu sein, das du nicht abfängst. Zeig mal das Skript her.

                                      @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                      script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.

                                      Zeig auch bitte das Skript einmal.

                                      AxelF1977A 1 Antwort Letzte Antwort
                                      0
                                      • J.A.R.V.I.S.J J.A.R.V.I.S.

                                        @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                        script.js.System.Updates: TypeError: Cannot read property 'toString' of null

                                        Da scheint irgendwo ein null oder undefined zu sein, das du nicht abfängst. Zeig mal das Skript her.

                                        @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                        script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.

                                        Zeig auch bitte das Skript einmal.

                                        AxelF1977A Offline
                                        AxelF1977A Offline
                                        AxelF1977
                                        schrieb am zuletzt editiert von
                                        #113

                                        @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                        @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                        script.js.System.Updates: TypeError: Cannot read property 'toString' of null

                                        Da scheint irgendwo ein null oder undefined zu sein, das du nicht abfängst. Zeig mal das Skript her.

                                        // fragt die angebotenen Updates von ioBroker ab
                                        // Abfrage dauert etwas (ca. 1 Minute)
                                        //
                                        // Repository muss in den ioBroker Einstellungen richtig gepflegt sein
                                         
                                        // Übersicht der ioBroker Consolen-Kommandos:
                                        // https://github.com/ioBroker/ioBroker/wiki/Console-commands
                                         
                                        var master          = true; // true: Parse Fehler und Adapter, die nciht in der Repo sind werden mit in der Update-Liste ausgegeben
                                         
                                        var logOn           = true; // Logausgabe im Skript
                                        var forecreation    = false; // true: Datenpunkte werden überschrieben (ween z.B. Bezeichnungen geändert wurden)
                                         
                                         
                                        var pfad            = "Systeminfos.iobroker" + "."; // Pfad in dem die Datenpunkte angelegt werden
                                         
                                         
                                        // #### ab hier kann bei Änderungen der Code in die Slaves kopiert werden ####
                                         
                                        // Datenpunktnamen:
                                        var idListOK            = pfad + 'update_liste_verfuegbar';
                                        var idUpdateList        = pfad + "update_liste";
                                        var idUpdateCount       = pfad + "Adapter_updates";
                                        var idStatusTime        = pfad + "status_datum";
                                        var idAvailableCount    = pfad + "Adapter_verfuegbar";
                                        var idInstalledCount    = pfad + "Adapter_installiert";
                                        var idAktivRepo         = pfad + "Repo_aktiv";
                                        var idAktivRepoUrl      = pfad + "Repo_url";
                                        var idHostUpdate        = pfad + "Host_Update_verfuegbar";
                                        var idBeta              = pfad + "Adapter_Anzahl_Betaversionen";
                                        var idparseErr          = pfad + "Adapter_Anzahl_Parse_Error";
                                        var idAdapterGesamt     = pfad + "Adapter_installiert_gesamt";
                                        var idAdapterGesamtJSON = pfad + "Adapter_installiert_gesamt_json";
                                        var idAdapterErrorJSON  = pfad + "Adapter_mit_parse_error_json";
                                        var idAdapterNotInRepoJSON  = pfad + "Adapter_nicht_in_Repo_json";
                                         
                                        // regelmässige Wiederholungen der Abfrage
                                        var cronStr         = "57 */2 * * *";
                                         
                                        var abfrageUpdates       = 'iobroker update';
                                        var abfrageRepo          = 'iobroker repo';
                                        var abfrageAdapter       = 'iobroker list adapters';
                                         
                                         
                                         
                                        // -----------------------------------------------------------------------------
                                         
                                         
                                        createState(idListOK, false, forecreation, {
                                             name: 'iobroker update Liste konnte gelesen werden',
                                             desc: 'iobroker update Liste konnte gelesen werden',
                                             type: 'boolean',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idUpdateList, "initalisiert", forecreation, {
                                             name: 'Liste der verfügbaren Updates aus Repo',
                                             desc: 'Liste der verfügbaren Updates aus Repo',
                                             type: 'string',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idUpdateCount, 0, forecreation, {
                                             name: 'Anzahl verfügbarer Updates aus Repo',
                                             desc: 'Anzahl verfügbarer Updates der installierten Adapter aus Repo',
                                             type: 'number',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idAvailableCount, 0, forecreation, {
                                             name: 'Anzahl verfügbarer Adapter im Repo',
                                             desc: 'Anzahl verfügbarer Adapter im Repo',
                                             type: 'number',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idInstalledCount, 0, forecreation, {
                                             name: 'Anzahl installierter Adapter aus Repo',
                                             desc: 'Anzahl installierter Adapter aus Repo',
                                             type: 'number',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idStatusTime, now(), forecreation, {
                                             name: 'Zeitpunkt der letzten Statusabfrage',
                                             desc: 'Zeitpunkt der letzten Statusabfrage',
                                             type: 'string',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idAktivRepo, "initalisiert", forecreation, {
                                             name: 'Als aktiv eingestelltes Repo',
                                             desc: 'Als aktiv eingestelltes Repo',
                                             type: 'string',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idAktivRepoUrl, "initalisiert", forecreation, {
                                             name: 'url des aktiven Repo',
                                             desc: 'url des aktiven Repo',
                                             type: 'string',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idHostUpdate, false, forecreation, {
                                             name: 'iobroker Host update verfügbar',
                                             desc: 'iobroker Host update verfügbar',
                                             type: 'boolean',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idBeta, 0, forecreation, {
                                             name: 'Anzahl installierte Betaversionen',
                                             desc: 'Anzahl installierte Betaversionen',
                                             type: 'number',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idAdapterGesamt, 0, forecreation, {
                                             name: 'Anzahl installierter Adapter gesamt (Repo und Sonstige)',
                                             desc: 'Anzahl installierter Adapter gesamt (Repo und Sonstige)',
                                             type: 'number',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idAdapterGesamtJSON, "initalisiert", forecreation, {
                                             name: 'Liste der installierten Adapter gesamt (Repo und Sonstige)',
                                             desc: 'Liste der installierten Adapter gesamt (Repo und Sonstige)',
                                             type: 'string',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idparseErr, 0, forecreation, {
                                             name: 'Anzahl Adapter mit Parse Error',
                                             desc: 'Anzahl Adapter mit Parse Error (Cannot read or parse)',
                                             type: 'number',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idAdapterErrorJSON, "initalisiert", forecreation, {
                                             name: 'Liste der Adapter mit Parse Error',
                                             desc: 'Liste der Adapter mit Parse Error (cannot read or parse)',
                                             type: 'string',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                        createState(idAdapterNotInRepoJSON, "initalisiert", forecreation, {
                                             name: 'Liste der installierten Adapter, die nicht in der Repo sind',
                                             desc: 'Liste der installierten Adapter, die nicht in der Repo sind',
                                             type: 'string',
                                             unit: '',
                                             role: 'value'
                                        });
                                         
                                         
                                        // -----------------------------------------------------------------------------
                                         
                                        function now() {
                                            return formatDate(new Date(), "hh:mm:ss, YYYY-MM-DD");
                                        }
                                         
                                        function writeJson(json) {
                                            return JSON.stringify(json);    // JSON in String umwandeln, damit das JSON in einem Datenpunkt geschrieben werden kann
                                        }
                                         
                                        function readJson(dp) {                     // lese ein JSON aus einem Datenpunkt
                                            var json = getState(dp).val;
                                            if (json === "") return [];
                                            try {
                                                list = JSON.parse(json);
                                            } catch (ex) {
                                                list = [];
                                            }
                                            if(!list) list = [];
                                            return list;
                                        }
                                         
                                        function checkBeta(installiertStr,updateStr) {
                                            var installiertArr = /(\d+).(\d+).(\d+)/g.exec(installiertStr);
                                            var updateArr      = /(\d+).(\d+).(\d+)/g.exec(updateStr);
                                            var i;
                                            for ( i=1; i<4; i++ ) {
                                                if(parseInt(updateArr[i]) < parseInt(installiertArr[i])) return true;
                                                if(parseInt(updateArr[i]) > parseInt(installiertArr[i])) return false;
                                            }
                                            return false;
                                        }
                                         
                                        function findAdapter(json,name) {
                                            for (var i=0; i < json.length; i++) {
                                                if (json[i].adapter == name) return true;
                                            }
                                            return false;
                                        }
                                         
                                        function checkInRepo(repoJson,installJson) {
                                            if(installJson === 'undefined' || installJson === null || installJson.length < 1) {
                                                log("keine Daten für Adapter in der Installation vorhanden","warn");
                                                return;
                                            }
                                            if(repoJson === 'undefined' || repoJson === null || repoJson.length < 1) {
                                                log("keine Daten für Adapter in der Repo vorhanden","warn");
                                                return;
                                            }
                                            var adapterNichtInRepoJson = [];
                                            for ( i=0; i<installJson.length; i++ ) {
                                                if(!findAdapter(repoJson,installJson[i].adapter)) {
                                                    adapterNichtInRepoJson.push({
                                                        adapter:    installJson[i].adapter,
                                                        update:     "-",
                                                        version:    installJson[i].version,
                                                        beta:       "nicht in Repo"
                                                    });
                                                }
                                            }
                                            return adapterNichtInRepoJson;
                                        }
                                         
                                         
                                        // fragt die möglichen Updates ab
                                        function abfrageConsoleUpdates() {
                                            exec(abfrageUpdates, function(err, stdout, stderr) {
                                                if(logOn) log("Abfrage: "+abfrageUpdates);
                                                if (err) {
                                                    log("Fehler ioBroker Statusabfrage: " + err,"error");
                                                    return;
                                                }
                                                var out = stdout.toString();
                                                //log(out);
                                                if(out.match("Error: 404: Not Found") || out.match("Cannot download json")) {
                                                    setState(idUpdateList,"ioBroker Repository nicht gefunden");
                                                    log("ioBroker Repository nicht gefunden","warn");
                                                    setState(idListOK,false);
                                                    return;
                                                }
                                                var arrInstalled    = out.match(/.+installed.+\n/g);
                                                var arrUpdates      = out.match(/Adapter.+Updateable.+\n/g);
                                                var arrContrUpdate  = out.match(/Controller.+Updateable.+\n/g);
                                                var arrAvailable    = out.match(/Adapter /g);
                                                var arrRepo         = out.match(/Adapter.+: \d+\.\d+\.\d+/g);
                                                var arrParseErr     = out.match(/Cannot read or parse.+\n/g);
                                                
                                         
                                                var updates         = 0;
                                                var ContrUpdate     = 0;
                                                var installiert     = -1;
                                                var verfuegbar      = -1;
                                                var updateJson      = [];
                                                var repoJson        = [];
                                                var parsErrJson     = [];
                                                var beta            = 0;
                                                var parseErr        = 0;
                                                
                                                var i;
                                                
                                                if(typeof arrInstalled !== 'undefined' && arrInstalled !== null && arrInstalled.length > 0) installiert = arrInstalled.length;
                                                if(typeof arrUpdates !== 'undefined' && arrUpdates !== null && arrUpdates.length > 0)  updates = arrUpdates.length;
                                                if(typeof arrContrUpdate !== 'undefined' && arrContrUpdate !== null && arrContrUpdate.length > 0)  ContrUpdate = 1;
                                                if(typeof arrAvailable !== 'undefined' && arrAvailable !== null && arrAvailable.length > 0) verfuegbar = arrAvailable.length;
                                                if(typeof arrParseErr !== 'undefined' && arrParseErr !== null && arrParseErr.length > 0) parseErr = arrParseErr.length;
                                         
                                                // ermittelt Adapter, die einen Fehler (parse error) erzeugt haben
                                                // Beispiel:
                                                // Cannot read or parse /opt/iobroker/node_modules/iobroker.js-controller/lib/../node_modules/iobroker.daswetter/io-package.json: SyntaxError: Unexpected token 
                                                if(parseErr > 0) {
                                                    for ( i=0; i<parseErr; i++ ) {
                                                        var arrParseErrLine = /Cannot read or parse.+\/(.+)\/io-.+:.(.+)\n/g.exec(arrParseErr[i]);
                                         
                                                        parsErrJson.push({
                                                            adapter:    arrParseErrLine[1],
                                                            update:     "-",
                                                            error:      arrParseErrLine[2],
                                                            beta:       "parse error"
                                                        });
                                                    }
                                                }
                                         
                                                if(logOn) log(writeJson(parsErrJson),"warn");
                                         
                                                // ermittelt das JSON für die im Repo enthaltenen Adapter
                                                for ( i=0; i<arrRepo.length; i++ ) {
                                                    var arrInRepo = /Adapter.+"(.+)".+(\d+\.\d+\.\d+)/g.exec(arrRepo[i]);
                                                    repoJson.push({
                                                        adapter:    arrInRepo[1],
                                                        version:    arrInRepo[2]
                                                    });
                                                }
                                         
                                         
                                                if(ContrUpdate > 0) {
                                                    if(logOn) log("** HOST Update verfügbar **");
                                                    if(logOn) log("arrContrUpdate: " + arrContrUpdate);
                                                    var arrController = /.+"(.+)".+(\d+.\d+.\d+).+(\d+.\d+.\d+)/g.exec(arrContrUpdate[0]);
                                                    if(logOn) log("arrController: " + arrController);
                                         
                                                    if(checkBeta(arrController[3],arrController[2])) beta = beta +1;
                                         
                                                    updateJson.push({
                                                        adapter:    arrController[1],
                                                        update:     arrController[2],
                                                        version:    arrController[3],
                                                        beta:       (checkBeta(arrController[3],arrController[2]) ? "beta" : "UPDATE")
                                                        
                                                    });
                                                    
                                                }
                                                
                                                if(updates > 0) {
                                                    for ( i=0; i<updates; i++ ) {
                                                        var arrUpdate = /.+"(.+)".+(\d+.\d+.\d+).+(\d+.\d+.\d+)/g.exec(arrUpdates[i]);
                                         
                                                        if(checkBeta(arrUpdate[3],arrUpdate[2])) beta = beta +1;
                                         
                                                        updateJson.push({
                                                            adapter:    arrUpdate[1],
                                                            update:     arrUpdate[2],
                                                            version:    arrUpdate[3],
                                                            beta:       (checkBeta(arrUpdate[3],arrUpdate[2]) ? "Beta" : "")
                                                        });
                                                    }
                                                }
                                                
                                                updates = updates + ContrUpdate - beta;
                                                
                                                var notInRepoJson = checkInRepo(repoJson,readJson(idAdapterGesamtJSON));
                                                
                                                setState(idUpdateCount      ,updates);
                                                setState(idAvailableCount   ,verfuegbar);
                                                setState(idInstalledCount   ,installiert);
                                                
                                                if(updateJson.length === 0) updateJson.push({adapter:"",update:"",version:""});
                                                
                                                setState(idUpdateList       ,(master ? writeJson(updateJson.concat(parsErrJson,notInRepoJson)) : writeJson(updateJson)));
                                                setState(idListOK           ,true);
                                                setState(idStatusTime       ,now());
                                                setState(idHostUpdate,      (ContrUpdate > 0 ? true : false));
                                                setState(idBeta,            beta);
                                                setState(idparseErr,        parseErr);
                                                setState(idAdapterErrorJSON,writeJson(parsErrJson));
                                                setState(idAdapterNotInRepoJSON,writeJson(notInRepoJson));
                                         
                                                log("Anzahl Adapter mit Fehler (Cannot read or parse): " + parseErr,"warn");
                                                if(logOn) log("Anzahl Adapter in Repo verfügbar:   " + verfuegbar);
                                                if(logOn) log("Anzahl Adapter aus Repo installiert: " + installiert);
                                                if(logOn) log("Anzahl Adapter mit Updates: " + updates);
                                                if(logOn) log("Anzahl Adapter als Beta installiert: " + beta);
                                                
                                            });
                                        }
                                         
                                        // fragt das aktive Repository ab
                                        function abfrageConsoleRepo() {
                                            exec(abfrageRepo, function(err, stdout, stderr) {
                                                if(logOn) log("Abfrage: "+abfrageRepo);
                                                if (err) {
                                                    log("Fehler ioBroker Statusabfrage: " + err,"error");
                                                    return;
                                                }
                                                var out = stdout.toString();
                                         
                                         
                                                if(logOn) log(stdout);
                                                var aktivRepo = stdout.match(/Active repo: (.+)/)[1];
                                                if(logOn) log("Aktive Repo: " + aktivRepo);
                                         
                                                var regex = new RegExp("^"+aktivRepo+": (.+)", "gm");
                                                var aktivRepoUrl = stdout.match(/^online: (.+)/gm).toString().replace(aktivRepo+": ","");
                                                if(logOn) log("Aktive Repo url: " + aktivRepoUrl);
                                         
                                                setState(idAktivRepo,aktivRepo);
                                                setState(idAktivRepoUrl,aktivRepoUrl);
                                         
                                            });
                                        }
                                         
                                         
                                         
                                        // fragt alle installiertenAdapter ab, auch die, die nicht in der Repo vorhanden sind
                                        function abfrageInstallierteAdapter() {
                                            exec(abfrageAdapter, function(err, stdout, stderr) {
                                                if(logOn) log("Abfrage: "+ abfrageAdapter);
                                                if (err) {
                                                    log("Fehler ioBroker Abfrage installierte Adapter: " + err,"error");
                                                    return;
                                                }
                                                var out = stdout.toString();
                                                //if(logOn) log(stdout);
                                         
                                                var arrAdapter  = out.match(/:.+\n/g);
                                                var installJSON = [];       
                                                       
                                                
                                                var i;
                                                for ( i=0; i<arrAdapter.length; i++ ) {
                                                    var arrInstall = /: (\S+) +- (\d+\.\d+\.\d+)/g.exec(arrAdapter[i]);
                                         
                                                    installJSON.push({
                                                        adapter:    arrInstall[1],
                                                        version:    arrInstall[2]
                                                    });
                                                }
                                                
                                        //        if(logOn) log("arrAdapter: " + arrAdapter);
                                                if(logOn) log("arrAdapter.length: " + arrAdapter.length);
                                        //        if(logOn) log("installJSON: " + writeJson(installJSON));
                                                
                                                setState(idAdapterGesamt,       arrAdapter.length);
                                                setState(idAdapterGesamtJSON,   writeJson(installJSON));
                                            });
                                        }
                                         
                                         
                                         
                                        function abfragen() {
                                            abfrageConsoleRepo();
                                            abfrageInstallierteAdapter();
                                            setTimeout(abfrageConsoleUpdates,2000);
                                        }
                                         
                                        // regelmässige Wiederholungen
                                        // -----------------------------------------------------------------------------
                                        schedule(cronStr, abfragen);
                                         
                                         
                                        // main
                                        // -----------------------------------------------------------------------------
                                        function main() {
                                            abfragen();
                                        }
                                         
                                         
                                        // Start Skript:
                                        // -----------------------------------------------------------------------------
                                         
                                        setTimeout(main,    500);
                                        

                                        @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                        @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                        script.js.System.Updates: TypeError: Cannot read property 'toString' of null

                                        @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                        script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.

                                        Zeig auch bitte das Skript einmal.

                                        import axios from "axios";
                                         
                                        // Hier den Hostnamen und Zugangsdaten eintragen, unter dem Valetudo erreichbar ist
                                        const roboHostname = "192.168.178.61";
                                        const valetudoAuth = {
                                        	username: 'valetudo-username',
                                        	password: 'valetudo-password'
                                        }
                                        // Hier den State eintragen, der den aktuellen Sauger-Status angibt
                                        const idVacuumState = "mihome-vacuum.0.info.state";
                                         
                                        const center: Point = [25600, 25600];
                                        // Koordiaten zählen von unten links (0,0) nach oben rechts (51200,51200)
                                        // Die folgenden Koordinaten gehen von nicht rotierter Karte (Winkel 0) aus
                                        const rooms: Record<string, Rectangle[]> = {
                                            "Küche": [[21600, 29100, 23500, 33100]],
                                            "Flur": [[18400, 24000, 22200, 27100], [19500, 27100, 21600, 30400]],
                                            "Wohnzimmer": [[17600, 20000, 21600, 24000], [21600, 19200, 24200, 23200]],
                                            "Schlafzimmer": [[24100, 23200, 26100, 27400], [22100, 23800, 24100, 27400]],
                                            "Bad": [[21500, 27500, 23200, 29000]],
                                        };
                                         
                                        // ===============================================================================
                                         
                                        type Rectangle = [number, number, number, number];
                                        type Point = [number, number];
                                         
                                        /** rotates a rectangle by 90° around the absolute origin */
                                        function rotate90([x1, y1, x2, y2]: Rectangle): Rectangle {
                                            return [-y2, x1, -y1, x2];
                                        }
                                         
                                        /** rotates a rectangle by 180° around the absolute origin */
                                        function rotate180([x1, y1, x2, y2]: Rectangle): Rectangle {
                                            return [-x2, -y2, -x1, -y1];
                                        }
                                         
                                        /** Rotates a rectangle around the given center by the given angle */
                                        function rotate(rect: Rectangle, center: Point, angle: number) {
                                            rect = [rect[0] - center[0], rect[1] - center[1], rect[2] - center[0], rect[3] - center[1]];
                                            if (angle % 180 === 90) {
                                                rect = rotate90(rect);
                                                angle -= 90;
                                            }
                                            if (angle === 180) {
                                                rect = rotate180(rect);
                                            }
                                            rect = [rect[0] + center[0], rect[1] + center[1], rect[2] + center[0], rect[3] + center[1]];
                                            return rect;
                                        }
                                         
                                        for (const room of Object.keys(rooms) as (keyof typeof rooms)[]) {
                                            createState(`Staubsauger.${room}`, {
                                                type: "boolean",
                                                read: true,
                                                write: true,
                                                role: "switch",
                                                name: `${room} saugen`,
                                            });
                                            on({ id: `javascript.${instance}.Staubsauger.${room}`, val: true, ack: false }, async () => {
                                                if (getState(idVacuumState).val !== 8) await cancelCurrentAction();
                                         
                                                if (getMapRotation() === -1 /* unbekannt */) {
                                                    // We need to test the map rotation
                                                    const rotation = await testMapRotation();
                                                    log(`Die Karte ist ${rotation !== 0 ? `um ${rotation}° ` : "nicht "}rotiert.`);
                                                    await rememberMapRotation(rotation);
                                                }
                                         
                                                // Now that we know how the map is rotated, we can clean the room
                                                cleanRoom(room);
                                            });
                                        }
                                         
                                        createState(`Staubsauger.stop`, {
                                            type: "boolean",
                                            read: true,
                                            write: true,
                                            role: "switch",
                                            name: `Staubsauger anhalten`,
                                        });
                                        on({ id: `javascript.${instance}.Staubsauger.stop`, val: true, ack: false }, () => {
                                            stopCleanup();
                                        });
                                         
                                        const idMapRotated = "Staubsauger.info.mapRotated";
                                        createState(idMapRotated, {
                                            type: "number",
                                            read: true,
                                            write: false,
                                            role: "indicator",
                                            states: {
                                                "-1": "unknown",
                                                "0": "Robo links vom Dock",
                                                "90": "Robo unten vom Dock",
                                                "180": "Robo rechts vom Dock",
                                                "270": "Robo oben vom Dock",
                                            },
                                            name: `Wie die Karte rotiert ist`,
                                        });
                                         
                                        /** 
                                         * Bestimmt die Kartenrotation wenn der Staubsauger neben dem Dock steht
                                         * 0 Grad bedeutet, der Sauger steht links
                                         */
                                        async function testMapRotation(): Promise<number> {
                                            log("Teste Kartenorientierung...");
                                            const { data: { charger, robot } } = await axios({
                                                url: `http://${roboHostname}/api/map/latest`,
                                                auth: valetudoAuth
                                            });
                                         
                                            // Valetudo zählt von oben links nach unten rechts, d.h. die Y-Koordinaten
                                            // sind entgegengesetzt der mathematischen Definition
                                            let c2r = [robot[0] - charger[0], charger[1] - robot[1]];
                                            const angle = Math.atan2(c2r[1], c2r[0]) * 180 / Math.PI;
                                            if (angle <= 45 && angle >= -45) {
                                                // Sauger steht rechts
                                                return 180;
                                            } else if (angle > 45 && angle < 135) {
                                                // Sauger steht oben
                                                return 270;
                                            } else if (angle < -45 && angle > -135) {
                                                // Sauger steht unten
                                                return 90;
                                            } else {
                                                return 0;
                                            }
                                        }
                                         
                                        function rememberMapRotation(rotation: number): Promise<void> {
                                            return setStateAsync(idMapRotated, rotation);
                                        }
                                        function getMapRotation(): number {
                                            return getState(idMapRotated).val;
                                        }
                                         
                                        // "Forget" map rotation when the vacuum starts charging
                                        on({ id: idVacuumState, val: 8 /* charging */ }, (obj) => {
                                            setState(idMapRotated, -1 /* unknown */);
                                            // And reset all control states
                                            for (const room of Object.keys(rooms) as (keyof typeof rooms)[]) {
                                                setState(`Staubsauger.${room}`, false, true);
                                            }
                                            setState(`Staubsauger.stop`, false, true);
                                        });
                                         
                                        async function beginCleanup(): Promise<void> {
                                        }
                                         
                                        async function cancelCurrentAction(): Promise<void> {
                                            setState("mihome-vacuum.0.control.pause", true);
                                            // wait for the "paused" status before going home
                                            await waitForPauseOrSleep();
                                        }
                                         
                                        async function stopCleanup(): Promise<void> {
                                            log(`Saugvorgang abgebrochen!`);
                                            setState(`Staubsauger.stop`, true, true);
                                         
                                            if (getState(idVacuumState).val !== 8) {
                                                await cancelCurrentAction();
                                         
                                                await setStateAsync('mihome-vacuum.0.control.home', true);
                                                // wait for the "charging" status before resolving
                                                await waitFor(idVacuumState, 8);
                                            }
                                         
                                            log(`Staubsauger ist in der Basis`);
                                         
                                            setState(`Staubsauger.stop`, false, true);
                                        }
                                         
                                        async function cleanRoom(room: keyof typeof rooms): Promise<void> {
                                            log(`Saugvorgang für ${room} gestartet!`);
                                            setState(`Staubsauger.${room}`, true, true);
                                         
                                            const mapRotation = getMapRotation();
                                            const originalCoords = rooms[room];
                                            log(`original coordinates: ${JSON.stringify(originalCoords)}`);
                                            const roomCoords = rooms[room].map(rect => rotate(rect, center, mapRotation));
                                            log(`rotated coordinates: ${JSON.stringify(roomCoords)}`);
                                         
                                            const coords = roomCoords[0];
                                            const targetCoords = [
                                                ((coords[0] + coords[2]) / 2).toFixed(0),
                                                ((coords[1] + coords[3]) / 2).toFixed(0),
                                            ]
                                         
                                            // go to center of first zone
                                            const gotoString = targetCoords.join(",");
                                            await setStateAsync("mihome-vacuum.0.control.goTo", gotoString);
                                            log(`Fahre zur Mitte von ${room}`);
                                            await wait(10000);
                                            await waitForPauseOrSleep();
                                         
                                            if (getState("Staubsauger.stop").val) return;
                                         
                                            const zoneCleanString = roomCoords.map(zone => {
                                                return "[" + zone.concat(1).map(coord => coord.toString()).join(",") + "]";
                                            }).join(",");
                                         
                                            log("Starte Zonenreinigung...");
                                            await setStateAsync("mihome-vacuum.0.control.zoneClean", zoneCleanString);
                                            // wait for the cleanup to finish
                                            await waitFor(idVacuumState, 6);
                                        }
                                         
                                        async function waitForPauseOrSleep(): Promise<void> {
                                            log("Warte auf Zustand schlafen oder Pause...");
                                            switch (getState(idVacuumState).val) {
                                                case 3:
                                                case 10:
                                                    log(" => Zustand bereits aktiv!");
                                                    return;
                                                default:
                                                    await Promise.race([
                                                        waitFor(idVacuumState, 10),
                                                        waitFor(idVacuumState, 3),
                                                    ]);
                                                    log(" => Zustand erreicht!");
                                            }
                                        }
                                         
                                        function wait(ms: number): Promise<void> {
                                            return new Promise(resolve => {
                                                setTimeout(resolve, ms);
                                            });
                                        }
                                         
                                        function waitFor(stateID: string, value: any): Promise<void> {
                                            return new Promise(resolve => {
                                                const handler = (obj: iobJS.ChangedStateObject) => {
                                                    if (obj.newState.val === value) {
                                                        unsubscribe(handler);
                                                        resolve();
                                                    }
                                                }
                                                subscribe(stateID, handler);
                                            })
                                        }
                                         
                                        function setStateAsync(id: string, state: any): Promise<void> {
                                            return new Promise(res => {
                                                setState(id, state, () => res());
                                            });
                                        }
                                        

                                        ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

                                        J.A.R.V.I.S.J 2 Antworten Letzte Antwort
                                        0
                                        • AxelF1977A AxelF1977

                                          @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                          @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                          script.js.System.Updates: TypeError: Cannot read property 'toString' of null

                                          Da scheint irgendwo ein null oder undefined zu sein, das du nicht abfängst. Zeig mal das Skript her.

                                          // fragt die angebotenen Updates von ioBroker ab
                                          // Abfrage dauert etwas (ca. 1 Minute)
                                          //
                                          // Repository muss in den ioBroker Einstellungen richtig gepflegt sein
                                           
                                          // Übersicht der ioBroker Consolen-Kommandos:
                                          // https://github.com/ioBroker/ioBroker/wiki/Console-commands
                                           
                                          var master          = true; // true: Parse Fehler und Adapter, die nciht in der Repo sind werden mit in der Update-Liste ausgegeben
                                           
                                          var logOn           = true; // Logausgabe im Skript
                                          var forecreation    = false; // true: Datenpunkte werden überschrieben (ween z.B. Bezeichnungen geändert wurden)
                                           
                                           
                                          var pfad            = "Systeminfos.iobroker" + "."; // Pfad in dem die Datenpunkte angelegt werden
                                           
                                           
                                          // #### ab hier kann bei Änderungen der Code in die Slaves kopiert werden ####
                                           
                                          // Datenpunktnamen:
                                          var idListOK            = pfad + 'update_liste_verfuegbar';
                                          var idUpdateList        = pfad + "update_liste";
                                          var idUpdateCount       = pfad + "Adapter_updates";
                                          var idStatusTime        = pfad + "status_datum";
                                          var idAvailableCount    = pfad + "Adapter_verfuegbar";
                                          var idInstalledCount    = pfad + "Adapter_installiert";
                                          var idAktivRepo         = pfad + "Repo_aktiv";
                                          var idAktivRepoUrl      = pfad + "Repo_url";
                                          var idHostUpdate        = pfad + "Host_Update_verfuegbar";
                                          var idBeta              = pfad + "Adapter_Anzahl_Betaversionen";
                                          var idparseErr          = pfad + "Adapter_Anzahl_Parse_Error";
                                          var idAdapterGesamt     = pfad + "Adapter_installiert_gesamt";
                                          var idAdapterGesamtJSON = pfad + "Adapter_installiert_gesamt_json";
                                          var idAdapterErrorJSON  = pfad + "Adapter_mit_parse_error_json";
                                          var idAdapterNotInRepoJSON  = pfad + "Adapter_nicht_in_Repo_json";
                                           
                                          // regelmässige Wiederholungen der Abfrage
                                          var cronStr         = "57 */2 * * *";
                                           
                                          var abfrageUpdates       = 'iobroker update';
                                          var abfrageRepo          = 'iobroker repo';
                                          var abfrageAdapter       = 'iobroker list adapters';
                                           
                                           
                                           
                                          // -----------------------------------------------------------------------------
                                           
                                           
                                          createState(idListOK, false, forecreation, {
                                               name: 'iobroker update Liste konnte gelesen werden',
                                               desc: 'iobroker update Liste konnte gelesen werden',
                                               type: 'boolean',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idUpdateList, "initalisiert", forecreation, {
                                               name: 'Liste der verfügbaren Updates aus Repo',
                                               desc: 'Liste der verfügbaren Updates aus Repo',
                                               type: 'string',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idUpdateCount, 0, forecreation, {
                                               name: 'Anzahl verfügbarer Updates aus Repo',
                                               desc: 'Anzahl verfügbarer Updates der installierten Adapter aus Repo',
                                               type: 'number',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idAvailableCount, 0, forecreation, {
                                               name: 'Anzahl verfügbarer Adapter im Repo',
                                               desc: 'Anzahl verfügbarer Adapter im Repo',
                                               type: 'number',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idInstalledCount, 0, forecreation, {
                                               name: 'Anzahl installierter Adapter aus Repo',
                                               desc: 'Anzahl installierter Adapter aus Repo',
                                               type: 'number',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idStatusTime, now(), forecreation, {
                                               name: 'Zeitpunkt der letzten Statusabfrage',
                                               desc: 'Zeitpunkt der letzten Statusabfrage',
                                               type: 'string',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idAktivRepo, "initalisiert", forecreation, {
                                               name: 'Als aktiv eingestelltes Repo',
                                               desc: 'Als aktiv eingestelltes Repo',
                                               type: 'string',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idAktivRepoUrl, "initalisiert", forecreation, {
                                               name: 'url des aktiven Repo',
                                               desc: 'url des aktiven Repo',
                                               type: 'string',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idHostUpdate, false, forecreation, {
                                               name: 'iobroker Host update verfügbar',
                                               desc: 'iobroker Host update verfügbar',
                                               type: 'boolean',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idBeta, 0, forecreation, {
                                               name: 'Anzahl installierte Betaversionen',
                                               desc: 'Anzahl installierte Betaversionen',
                                               type: 'number',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idAdapterGesamt, 0, forecreation, {
                                               name: 'Anzahl installierter Adapter gesamt (Repo und Sonstige)',
                                               desc: 'Anzahl installierter Adapter gesamt (Repo und Sonstige)',
                                               type: 'number',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idAdapterGesamtJSON, "initalisiert", forecreation, {
                                               name: 'Liste der installierten Adapter gesamt (Repo und Sonstige)',
                                               desc: 'Liste der installierten Adapter gesamt (Repo und Sonstige)',
                                               type: 'string',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idparseErr, 0, forecreation, {
                                               name: 'Anzahl Adapter mit Parse Error',
                                               desc: 'Anzahl Adapter mit Parse Error (Cannot read or parse)',
                                               type: 'number',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idAdapterErrorJSON, "initalisiert", forecreation, {
                                               name: 'Liste der Adapter mit Parse Error',
                                               desc: 'Liste der Adapter mit Parse Error (cannot read or parse)',
                                               type: 'string',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                          createState(idAdapterNotInRepoJSON, "initalisiert", forecreation, {
                                               name: 'Liste der installierten Adapter, die nicht in der Repo sind',
                                               desc: 'Liste der installierten Adapter, die nicht in der Repo sind',
                                               type: 'string',
                                               unit: '',
                                               role: 'value'
                                          });
                                           
                                           
                                          // -----------------------------------------------------------------------------
                                           
                                          function now() {
                                              return formatDate(new Date(), "hh:mm:ss, YYYY-MM-DD");
                                          }
                                           
                                          function writeJson(json) {
                                              return JSON.stringify(json);    // JSON in String umwandeln, damit das JSON in einem Datenpunkt geschrieben werden kann
                                          }
                                           
                                          function readJson(dp) {                     // lese ein JSON aus einem Datenpunkt
                                              var json = getState(dp).val;
                                              if (json === "") return [];
                                              try {
                                                  list = JSON.parse(json);
                                              } catch (ex) {
                                                  list = [];
                                              }
                                              if(!list) list = [];
                                              return list;
                                          }
                                           
                                          function checkBeta(installiertStr,updateStr) {
                                              var installiertArr = /(\d+).(\d+).(\d+)/g.exec(installiertStr);
                                              var updateArr      = /(\d+).(\d+).(\d+)/g.exec(updateStr);
                                              var i;
                                              for ( i=1; i<4; i++ ) {
                                                  if(parseInt(updateArr[i]) < parseInt(installiertArr[i])) return true;
                                                  if(parseInt(updateArr[i]) > parseInt(installiertArr[i])) return false;
                                              }
                                              return false;
                                          }
                                           
                                          function findAdapter(json,name) {
                                              for (var i=0; i < json.length; i++) {
                                                  if (json[i].adapter == name) return true;
                                              }
                                              return false;
                                          }
                                           
                                          function checkInRepo(repoJson,installJson) {
                                              if(installJson === 'undefined' || installJson === null || installJson.length < 1) {
                                                  log("keine Daten für Adapter in der Installation vorhanden","warn");
                                                  return;
                                              }
                                              if(repoJson === 'undefined' || repoJson === null || repoJson.length < 1) {
                                                  log("keine Daten für Adapter in der Repo vorhanden","warn");
                                                  return;
                                              }
                                              var adapterNichtInRepoJson = [];
                                              for ( i=0; i<installJson.length; i++ ) {
                                                  if(!findAdapter(repoJson,installJson[i].adapter)) {
                                                      adapterNichtInRepoJson.push({
                                                          adapter:    installJson[i].adapter,
                                                          update:     "-",
                                                          version:    installJson[i].version,
                                                          beta:       "nicht in Repo"
                                                      });
                                                  }
                                              }
                                              return adapterNichtInRepoJson;
                                          }
                                           
                                           
                                          // fragt die möglichen Updates ab
                                          function abfrageConsoleUpdates() {
                                              exec(abfrageUpdates, function(err, stdout, stderr) {
                                                  if(logOn) log("Abfrage: "+abfrageUpdates);
                                                  if (err) {
                                                      log("Fehler ioBroker Statusabfrage: " + err,"error");
                                                      return;
                                                  }
                                                  var out = stdout.toString();
                                                  //log(out);
                                                  if(out.match("Error: 404: Not Found") || out.match("Cannot download json")) {
                                                      setState(idUpdateList,"ioBroker Repository nicht gefunden");
                                                      log("ioBroker Repository nicht gefunden","warn");
                                                      setState(idListOK,false);
                                                      return;
                                                  }
                                                  var arrInstalled    = out.match(/.+installed.+\n/g);
                                                  var arrUpdates      = out.match(/Adapter.+Updateable.+\n/g);
                                                  var arrContrUpdate  = out.match(/Controller.+Updateable.+\n/g);
                                                  var arrAvailable    = out.match(/Adapter /g);
                                                  var arrRepo         = out.match(/Adapter.+: \d+\.\d+\.\d+/g);
                                                  var arrParseErr     = out.match(/Cannot read or parse.+\n/g);
                                                  
                                           
                                                  var updates         = 0;
                                                  var ContrUpdate     = 0;
                                                  var installiert     = -1;
                                                  var verfuegbar      = -1;
                                                  var updateJson      = [];
                                                  var repoJson        = [];
                                                  var parsErrJson     = [];
                                                  var beta            = 0;
                                                  var parseErr        = 0;
                                                  
                                                  var i;
                                                  
                                                  if(typeof arrInstalled !== 'undefined' && arrInstalled !== null && arrInstalled.length > 0) installiert = arrInstalled.length;
                                                  if(typeof arrUpdates !== 'undefined' && arrUpdates !== null && arrUpdates.length > 0)  updates = arrUpdates.length;
                                                  if(typeof arrContrUpdate !== 'undefined' && arrContrUpdate !== null && arrContrUpdate.length > 0)  ContrUpdate = 1;
                                                  if(typeof arrAvailable !== 'undefined' && arrAvailable !== null && arrAvailable.length > 0) verfuegbar = arrAvailable.length;
                                                  if(typeof arrParseErr !== 'undefined' && arrParseErr !== null && arrParseErr.length > 0) parseErr = arrParseErr.length;
                                           
                                                  // ermittelt Adapter, die einen Fehler (parse error) erzeugt haben
                                                  // Beispiel:
                                                  // Cannot read or parse /opt/iobroker/node_modules/iobroker.js-controller/lib/../node_modules/iobroker.daswetter/io-package.json: SyntaxError: Unexpected token 
                                                  if(parseErr > 0) {
                                                      for ( i=0; i<parseErr; i++ ) {
                                                          var arrParseErrLine = /Cannot read or parse.+\/(.+)\/io-.+:.(.+)\n/g.exec(arrParseErr[i]);
                                           
                                                          parsErrJson.push({
                                                              adapter:    arrParseErrLine[1],
                                                              update:     "-",
                                                              error:      arrParseErrLine[2],
                                                              beta:       "parse error"
                                                          });
                                                      }
                                                  }
                                           
                                                  if(logOn) log(writeJson(parsErrJson),"warn");
                                           
                                                  // ermittelt das JSON für die im Repo enthaltenen Adapter
                                                  for ( i=0; i<arrRepo.length; i++ ) {
                                                      var arrInRepo = /Adapter.+"(.+)".+(\d+\.\d+\.\d+)/g.exec(arrRepo[i]);
                                                      repoJson.push({
                                                          adapter:    arrInRepo[1],
                                                          version:    arrInRepo[2]
                                                      });
                                                  }
                                           
                                           
                                                  if(ContrUpdate > 0) {
                                                      if(logOn) log("** HOST Update verfügbar **");
                                                      if(logOn) log("arrContrUpdate: " + arrContrUpdate);
                                                      var arrController = /.+"(.+)".+(\d+.\d+.\d+).+(\d+.\d+.\d+)/g.exec(arrContrUpdate[0]);
                                                      if(logOn) log("arrController: " + arrController);
                                           
                                                      if(checkBeta(arrController[3],arrController[2])) beta = beta +1;
                                           
                                                      updateJson.push({
                                                          adapter:    arrController[1],
                                                          update:     arrController[2],
                                                          version:    arrController[3],
                                                          beta:       (checkBeta(arrController[3],arrController[2]) ? "beta" : "UPDATE")
                                                          
                                                      });
                                                      
                                                  }
                                                  
                                                  if(updates > 0) {
                                                      for ( i=0; i<updates; i++ ) {
                                                          var arrUpdate = /.+"(.+)".+(\d+.\d+.\d+).+(\d+.\d+.\d+)/g.exec(arrUpdates[i]);
                                           
                                                          if(checkBeta(arrUpdate[3],arrUpdate[2])) beta = beta +1;
                                           
                                                          updateJson.push({
                                                              adapter:    arrUpdate[1],
                                                              update:     arrUpdate[2],
                                                              version:    arrUpdate[3],
                                                              beta:       (checkBeta(arrUpdate[3],arrUpdate[2]) ? "Beta" : "")
                                                          });
                                                      }
                                                  }
                                                  
                                                  updates = updates + ContrUpdate - beta;
                                                  
                                                  var notInRepoJson = checkInRepo(repoJson,readJson(idAdapterGesamtJSON));
                                                  
                                                  setState(idUpdateCount      ,updates);
                                                  setState(idAvailableCount   ,verfuegbar);
                                                  setState(idInstalledCount   ,installiert);
                                                  
                                                  if(updateJson.length === 0) updateJson.push({adapter:"",update:"",version:""});
                                                  
                                                  setState(idUpdateList       ,(master ? writeJson(updateJson.concat(parsErrJson,notInRepoJson)) : writeJson(updateJson)));
                                                  setState(idListOK           ,true);
                                                  setState(idStatusTime       ,now());
                                                  setState(idHostUpdate,      (ContrUpdate > 0 ? true : false));
                                                  setState(idBeta,            beta);
                                                  setState(idparseErr,        parseErr);
                                                  setState(idAdapterErrorJSON,writeJson(parsErrJson));
                                                  setState(idAdapterNotInRepoJSON,writeJson(notInRepoJson));
                                           
                                                  log("Anzahl Adapter mit Fehler (Cannot read or parse): " + parseErr,"warn");
                                                  if(logOn) log("Anzahl Adapter in Repo verfügbar:   " + verfuegbar);
                                                  if(logOn) log("Anzahl Adapter aus Repo installiert: " + installiert);
                                                  if(logOn) log("Anzahl Adapter mit Updates: " + updates);
                                                  if(logOn) log("Anzahl Adapter als Beta installiert: " + beta);
                                                  
                                              });
                                          }
                                           
                                          // fragt das aktive Repository ab
                                          function abfrageConsoleRepo() {
                                              exec(abfrageRepo, function(err, stdout, stderr) {
                                                  if(logOn) log("Abfrage: "+abfrageRepo);
                                                  if (err) {
                                                      log("Fehler ioBroker Statusabfrage: " + err,"error");
                                                      return;
                                                  }
                                                  var out = stdout.toString();
                                           
                                           
                                                  if(logOn) log(stdout);
                                                  var aktivRepo = stdout.match(/Active repo: (.+)/)[1];
                                                  if(logOn) log("Aktive Repo: " + aktivRepo);
                                           
                                                  var regex = new RegExp("^"+aktivRepo+": (.+)", "gm");
                                                  var aktivRepoUrl = stdout.match(/^online: (.+)/gm).toString().replace(aktivRepo+": ","");
                                                  if(logOn) log("Aktive Repo url: " + aktivRepoUrl);
                                           
                                                  setState(idAktivRepo,aktivRepo);
                                                  setState(idAktivRepoUrl,aktivRepoUrl);
                                           
                                              });
                                          }
                                           
                                           
                                           
                                          // fragt alle installiertenAdapter ab, auch die, die nicht in der Repo vorhanden sind
                                          function abfrageInstallierteAdapter() {
                                              exec(abfrageAdapter, function(err, stdout, stderr) {
                                                  if(logOn) log("Abfrage: "+ abfrageAdapter);
                                                  if (err) {
                                                      log("Fehler ioBroker Abfrage installierte Adapter: " + err,"error");
                                                      return;
                                                  }
                                                  var out = stdout.toString();
                                                  //if(logOn) log(stdout);
                                           
                                                  var arrAdapter  = out.match(/:.+\n/g);
                                                  var installJSON = [];       
                                                         
                                                  
                                                  var i;
                                                  for ( i=0; i<arrAdapter.length; i++ ) {
                                                      var arrInstall = /: (\S+) +- (\d+\.\d+\.\d+)/g.exec(arrAdapter[i]);
                                           
                                                      installJSON.push({
                                                          adapter:    arrInstall[1],
                                                          version:    arrInstall[2]
                                                      });
                                                  }
                                                  
                                          //        if(logOn) log("arrAdapter: " + arrAdapter);
                                                  if(logOn) log("arrAdapter.length: " + arrAdapter.length);
                                          //        if(logOn) log("installJSON: " + writeJson(installJSON));
                                                  
                                                  setState(idAdapterGesamt,       arrAdapter.length);
                                                  setState(idAdapterGesamtJSON,   writeJson(installJSON));
                                              });
                                          }
                                           
                                           
                                           
                                          function abfragen() {
                                              abfrageConsoleRepo();
                                              abfrageInstallierteAdapter();
                                              setTimeout(abfrageConsoleUpdates,2000);
                                          }
                                           
                                          // regelmässige Wiederholungen
                                          // -----------------------------------------------------------------------------
                                          schedule(cronStr, abfragen);
                                           
                                           
                                          // main
                                          // -----------------------------------------------------------------------------
                                          function main() {
                                              abfragen();
                                          }
                                           
                                           
                                          // Start Skript:
                                          // -----------------------------------------------------------------------------
                                           
                                          setTimeout(main,    500);
                                          

                                          @J-A-R-V-I-S sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                          @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                          script.js.System.Updates: TypeError: Cannot read property 'toString' of null

                                          @AxelF1977 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                                          script.js.Robbi.Map_Valetudo_rotate: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.

                                          Zeig auch bitte das Skript einmal.

                                          import axios from "axios";
                                           
                                          // Hier den Hostnamen und Zugangsdaten eintragen, unter dem Valetudo erreichbar ist
                                          const roboHostname = "192.168.178.61";
                                          const valetudoAuth = {
                                          	username: 'valetudo-username',
                                          	password: 'valetudo-password'
                                          }
                                          // Hier den State eintragen, der den aktuellen Sauger-Status angibt
                                          const idVacuumState = "mihome-vacuum.0.info.state";
                                           
                                          const center: Point = [25600, 25600];
                                          // Koordiaten zählen von unten links (0,0) nach oben rechts (51200,51200)
                                          // Die folgenden Koordinaten gehen von nicht rotierter Karte (Winkel 0) aus
                                          const rooms: Record<string, Rectangle[]> = {
                                              "Küche": [[21600, 29100, 23500, 33100]],
                                              "Flur": [[18400, 24000, 22200, 27100], [19500, 27100, 21600, 30400]],
                                              "Wohnzimmer": [[17600, 20000, 21600, 24000], [21600, 19200, 24200, 23200]],
                                              "Schlafzimmer": [[24100, 23200, 26100, 27400], [22100, 23800, 24100, 27400]],
                                              "Bad": [[21500, 27500, 23200, 29000]],
                                          };
                                           
                                          // ===============================================================================
                                           
                                          type Rectangle = [number, number, number, number];
                                          type Point = [number, number];
                                           
                                          /** rotates a rectangle by 90° around the absolute origin */
                                          function rotate90([x1, y1, x2, y2]: Rectangle): Rectangle {
                                              return [-y2, x1, -y1, x2];
                                          }
                                           
                                          /** rotates a rectangle by 180° around the absolute origin */
                                          function rotate180([x1, y1, x2, y2]: Rectangle): Rectangle {
                                              return [-x2, -y2, -x1, -y1];
                                          }
                                           
                                          /** Rotates a rectangle around the given center by the given angle */
                                          function rotate(rect: Rectangle, center: Point, angle: number) {
                                              rect = [rect[0] - center[0], rect[1] - center[1], rect[2] - center[0], rect[3] - center[1]];
                                              if (angle % 180 === 90) {
                                                  rect = rotate90(rect);
                                                  angle -= 90;
                                              }
                                              if (angle === 180) {
                                                  rect = rotate180(rect);
                                              }
                                              rect = [rect[0] + center[0], rect[1] + center[1], rect[2] + center[0], rect[3] + center[1]];
                                              return rect;
                                          }
                                           
                                          for (const room of Object.keys(rooms) as (keyof typeof rooms)[]) {
                                              createState(`Staubsauger.${room}`, {
                                                  type: "boolean",
                                                  read: true,
                                                  write: true,
                                                  role: "switch",
                                                  name: `${room} saugen`,
                                              });
                                              on({ id: `javascript.${instance}.Staubsauger.${room}`, val: true, ack: false }, async () => {
                                                  if (getState(idVacuumState).val !== 8) await cancelCurrentAction();
                                           
                                                  if (getMapRotation() === -1 /* unbekannt */) {
                                                      // We need to test the map rotation
                                                      const rotation = await testMapRotation();
                                                      log(`Die Karte ist ${rotation !== 0 ? `um ${rotation}° ` : "nicht "}rotiert.`);
                                                      await rememberMapRotation(rotation);
                                                  }
                                           
                                                  // Now that we know how the map is rotated, we can clean the room
                                                  cleanRoom(room);
                                              });
                                          }
                                           
                                          createState(`Staubsauger.stop`, {
                                              type: "boolean",
                                              read: true,
                                              write: true,
                                              role: "switch",
                                              name: `Staubsauger anhalten`,
                                          });
                                          on({ id: `javascript.${instance}.Staubsauger.stop`, val: true, ack: false }, () => {
                                              stopCleanup();
                                          });
                                           
                                          const idMapRotated = "Staubsauger.info.mapRotated";
                                          createState(idMapRotated, {
                                              type: "number",
                                              read: true,
                                              write: false,
                                              role: "indicator",
                                              states: {
                                                  "-1": "unknown",
                                                  "0": "Robo links vom Dock",
                                                  "90": "Robo unten vom Dock",
                                                  "180": "Robo rechts vom Dock",
                                                  "270": "Robo oben vom Dock",
                                              },
                                              name: `Wie die Karte rotiert ist`,
                                          });
                                           
                                          /** 
                                           * Bestimmt die Kartenrotation wenn der Staubsauger neben dem Dock steht
                                           * 0 Grad bedeutet, der Sauger steht links
                                           */
                                          async function testMapRotation(): Promise<number> {
                                              log("Teste Kartenorientierung...");
                                              const { data: { charger, robot } } = await axios({
                                                  url: `http://${roboHostname}/api/map/latest`,
                                                  auth: valetudoAuth
                                              });
                                           
                                              // Valetudo zählt von oben links nach unten rechts, d.h. die Y-Koordinaten
                                              // sind entgegengesetzt der mathematischen Definition
                                              let c2r = [robot[0] - charger[0], charger[1] - robot[1]];
                                              const angle = Math.atan2(c2r[1], c2r[0]) * 180 / Math.PI;
                                              if (angle <= 45 && angle >= -45) {
                                                  // Sauger steht rechts
                                                  return 180;
                                              } else if (angle > 45 && angle < 135) {
                                                  // Sauger steht oben
                                                  return 270;
                                              } else if (angle < -45 && angle > -135) {
                                                  // Sauger steht unten
                                                  return 90;
                                              } else {
                                                  return 0;
                                              }
                                          }
                                           
                                          function rememberMapRotation(rotation: number): Promise<void> {
                                              return setStateAsync(idMapRotated, rotation);
                                          }
                                          function getMapRotation(): number {
                                              return getState(idMapRotated).val;
                                          }
                                           
                                          // "Forget" map rotation when the vacuum starts charging
                                          on({ id: idVacuumState, val: 8 /* charging */ }, (obj) => {
                                              setState(idMapRotated, -1 /* unknown */);
                                              // And reset all control states
                                              for (const room of Object.keys(rooms) as (keyof typeof rooms)[]) {
                                                  setState(`Staubsauger.${room}`, false, true);
                                              }
                                              setState(`Staubsauger.stop`, false, true);
                                          });
                                           
                                          async function beginCleanup(): Promise<void> {
                                          }
                                           
                                          async function cancelCurrentAction(): Promise<void> {
                                              setState("mihome-vacuum.0.control.pause", true);
                                              // wait for the "paused" status before going home
                                              await waitForPauseOrSleep();
                                          }
                                           
                                          async function stopCleanup(): Promise<void> {
                                              log(`Saugvorgang abgebrochen!`);
                                              setState(`Staubsauger.stop`, true, true);
                                           
                                              if (getState(idVacuumState).val !== 8) {
                                                  await cancelCurrentAction();
                                           
                                                  await setStateAsync('mihome-vacuum.0.control.home', true);
                                                  // wait for the "charging" status before resolving
                                                  await waitFor(idVacuumState, 8);
                                              }
                                           
                                              log(`Staubsauger ist in der Basis`);
                                           
                                              setState(`Staubsauger.stop`, false, true);
                                          }
                                           
                                          async function cleanRoom(room: keyof typeof rooms): Promise<void> {
                                              log(`Saugvorgang für ${room} gestartet!`);
                                              setState(`Staubsauger.${room}`, true, true);
                                           
                                              const mapRotation = getMapRotation();
                                              const originalCoords = rooms[room];
                                              log(`original coordinates: ${JSON.stringify(originalCoords)}`);
                                              const roomCoords = rooms[room].map(rect => rotate(rect, center, mapRotation));
                                              log(`rotated coordinates: ${JSON.stringify(roomCoords)}`);
                                           
                                              const coords = roomCoords[0];
                                              const targetCoords = [
                                                  ((coords[0] + coords[2]) / 2).toFixed(0),
                                                  ((coords[1] + coords[3]) / 2).toFixed(0),
                                              ]
                                           
                                              // go to center of first zone
                                              const gotoString = targetCoords.join(",");
                                              await setStateAsync("mihome-vacuum.0.control.goTo", gotoString);
                                              log(`Fahre zur Mitte von ${room}`);
                                              await wait(10000);
                                              await waitForPauseOrSleep();
                                           
                                              if (getState("Staubsauger.stop").val) return;
                                           
                                              const zoneCleanString = roomCoords.map(zone => {
                                                  return "[" + zone.concat(1).map(coord => coord.toString()).join(",") + "]";
                                              }).join(",");
                                           
                                              log("Starte Zonenreinigung...");
                                              await setStateAsync("mihome-vacuum.0.control.zoneClean", zoneCleanString);
                                              // wait for the cleanup to finish
                                              await waitFor(idVacuumState, 6);
                                          }
                                           
                                          async function waitForPauseOrSleep(): Promise<void> {
                                              log("Warte auf Zustand schlafen oder Pause...");
                                              switch (getState(idVacuumState).val) {
                                                  case 3:
                                                  case 10:
                                                      log(" => Zustand bereits aktiv!");
                                                      return;
                                                  default:
                                                      await Promise.race([
                                                          waitFor(idVacuumState, 10),
                                                          waitFor(idVacuumState, 3),
                                                      ]);
                                                      log(" => Zustand erreicht!");
                                              }
                                          }
                                           
                                          function wait(ms: number): Promise<void> {
                                              return new Promise(resolve => {
                                                  setTimeout(resolve, ms);
                                              });
                                          }
                                           
                                          function waitFor(stateID: string, value: any): Promise<void> {
                                              return new Promise(resolve => {
                                                  const handler = (obj: iobJS.ChangedStateObject) => {
                                                      if (obj.newState.val === value) {
                                                          unsubscribe(handler);
                                                          resolve();
                                                      }
                                                  }
                                                  subscribe(stateID, handler);
                                              })
                                          }
                                           
                                          function setStateAsync(id: string, state: any): Promise<void> {
                                              return new Promise(res => {
                                                  setState(id, state, () => res());
                                              });
                                          }
                                          
                                          J.A.R.V.I.S.J Offline
                                          J.A.R.V.I.S.J Offline
                                          J.A.R.V.I.S.
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #114

                                          @AxelF1977 ersetz im ersten Skript mal bitte alle var out = stdout.toString(); durch var out = stdout ? stdout.toString() : '';

                                          Und ersetze im zweiten mal die erste Zeile durch const axios = require('axios');

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          742

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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