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.7k

  • 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.
  • 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
          • J.A.R.V.I.S.J J.A.R.V.I.S.

            @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 Offline
            AxelF1977A Offline
            AxelF1977
            schrieb am zuletzt editiert von AxelF1977
            #115

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

            @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');

            Erledigt,

            folgende error zeigt der Log noch, aber es werden weniger

            javascript.0	2020-05-03 21:18:00.732	error	(6892) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
            javascript.0	2020-05-03 21:18:00.732	error	(6892) at maybeClose (internal/child_process.js:982:16)
            javascript.0	2020-05-03 21:18:00.732	error	(6892) at ChildProcess.EventEmitter.emit (domain.js:448:20)
            javascript.0	2020-05-03 21:18:00.732	error	(6892) at ChildProcess.emit (events.js:198:13)
            javascript.0	2020-05-03 21:18:00.731	error	(6892) at ChildProcess.exithandler (child_process.js:285:7)
            javascript.0	2020-05-03 21:18:00.731	error	(6892) at script.js.System.Updates:381:59
            javascript.0	2020-05-03 21:18:00.730	error	(6892) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
            javascript.0	2020-05-03 21:16:28.340	error	(3977) at Pipe._handle.close (net.js:607:12)
            javascript.0	2020-05-03 21:16:28.340	error	(3977) at Socket.EventEmitter.emit (domain.js:448:20)
            javascript.0	2020-05-03 21:16:28.340	error	(3977) at Socket.emit (events.js:198:13)
            javascript.0	2020-05-03 21:16:28.340	error	(3977) at Socket.stream.socket.on (internal/child_process.js:389:11)
            javascript.0	2020-05-03 21:16:28.340	error	(3977) at maybeClose (internal/child_process.js:982:16)
            javascript.0	2020-05-03 21:16:28.340	error	(3977) at ChildProcess.EventEmitter.emit (domain.js:448:20)
            javascript.0	2020-05-03 21:16:28.340	error	(3977) at ChildProcess.emit (events.js:198:13)
            javascript.0	2020-05-03 21:16:28.340	error	(3977) at ChildProcess.exithandler (child_process.js:285:7)
            javascript.0	2020-05-03 21:16:28.340	error	(3977) at script.js.System.Updates:381:59
            javascript.0	2020-05-03 21:16:28.340	error	(3977) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
            javascript.0	2020-05-03 21:16:12.023	error	(3405) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
            javascript.0	2020-05-03 21:16:12.023	error	(3405) at maybeClose (internal/child_process.js:982:16)
            javascript.0	2020-05-03 21:16:12.022	error	(3405) at ChildProcess.EventEmitter.emit (domain.js:448:20)
            javascript.0	2020-05-03 21:16:12.022	error	(3405) at ChildProcess.emit (events.js:198:13)
            javascript.0	2020-05-03 21:16:12.022	error	(3405) at ChildProcess.exithandler (child_process.js:285:7)
            javascript.0	2020-05-03 21:16:12.022	error	(3405) at script.js.System.Updates:381:59
            javascript.0	2020-05-03 21:16:12.022	error	(3405) 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

            wendy2702W 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 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');

              Erledigt,

              folgende error zeigt der Log noch, aber es werden weniger

              javascript.0	2020-05-03 21:18:00.732	error	(6892) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
              javascript.0	2020-05-03 21:18:00.732	error	(6892) at maybeClose (internal/child_process.js:982:16)
              javascript.0	2020-05-03 21:18:00.732	error	(6892) at ChildProcess.EventEmitter.emit (domain.js:448:20)
              javascript.0	2020-05-03 21:18:00.732	error	(6892) at ChildProcess.emit (events.js:198:13)
              javascript.0	2020-05-03 21:18:00.731	error	(6892) at ChildProcess.exithandler (child_process.js:285:7)
              javascript.0	2020-05-03 21:18:00.731	error	(6892) at script.js.System.Updates:381:59
              javascript.0	2020-05-03 21:18:00.730	error	(6892) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
              javascript.0	2020-05-03 21:16:28.340	error	(3977) at Pipe._handle.close (net.js:607:12)
              javascript.0	2020-05-03 21:16:28.340	error	(3977) at Socket.EventEmitter.emit (domain.js:448:20)
              javascript.0	2020-05-03 21:16:28.340	error	(3977) at Socket.emit (events.js:198:13)
              javascript.0	2020-05-03 21:16:28.340	error	(3977) at Socket.stream.socket.on (internal/child_process.js:389:11)
              javascript.0	2020-05-03 21:16:28.340	error	(3977) at maybeClose (internal/child_process.js:982:16)
              javascript.0	2020-05-03 21:16:28.340	error	(3977) at ChildProcess.EventEmitter.emit (domain.js:448:20)
              javascript.0	2020-05-03 21:16:28.340	error	(3977) at ChildProcess.emit (events.js:198:13)
              javascript.0	2020-05-03 21:16:28.340	error	(3977) at ChildProcess.exithandler (child_process.js:285:7)
              javascript.0	2020-05-03 21:16:28.340	error	(3977) at script.js.System.Updates:381:59
              javascript.0	2020-05-03 21:16:28.340	error	(3977) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
              javascript.0	2020-05-03 21:16:12.023	error	(3405) at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
              javascript.0	2020-05-03 21:16:12.023	error	(3405) at maybeClose (internal/child_process.js:982:16)
              javascript.0	2020-05-03 21:16:12.022	error	(3405) at ChildProcess.EventEmitter.emit (domain.js:448:20)
              javascript.0	2020-05-03 21:16:12.022	error	(3405) at ChildProcess.emit (events.js:198:13)
              javascript.0	2020-05-03 21:16:12.022	error	(3405) at ChildProcess.exithandler (child_process.js:285:7)
              javascript.0	2020-05-03 21:16:12.022	error	(3405) at script.js.System.Updates:381:59
              javascript.0	2020-05-03 21:16:12.022	error	(3405) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
              
              wendy2702W Online
              wendy2702W Online
              wendy2702
              schrieb am zuletzt editiert von
              #116

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

              System.Updates

              Das Script auch bearbeitet?

              Bitte keine Fragen per PN, die gehören ins Forum!

              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

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

                @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 Offline
                AxelF1977A Offline
                AxelF1977
                schrieb am zuletzt editiert von AxelF1977
                #117

                @wendy2702 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:

                System.Updates

                Das Script auch bearbeitet?

                In dem Script habe ich diese stellen bearbeitet, wie von @J-A-R-V-I-S empfohlen

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

                Im Script selber gibt es folgenden error

                21:47:25.279	error	javascript.0 (30954) script.js.System.Updates: TypeError: Cannot read property 'toString' of null
                21:47:25.279	error	javascript.0 (30954) at script.js.System.Updates:381:59
                21:47:25.323	error	host.ioBrokerPC Caught by controller[0]: at script.js.System.Updates:381:59
                

                01ef1a01-9700-4a4b-a08f-50b61e07f445-image.png

                ÜBRIGENS: sobald dieses Script Updates deaktiviert ist, läuft alles. Wahnsinn, nur wegen diesem einen Script.

                Das kam hier aus dem Forum

                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
                • 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
                  #118

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

                  stdout.match(/^online: (.+)/gm).toString()

                  Dann ändere diese Stelle bitte auch noch ab

                  var aktivRepoUrl = stdout.match(/^online: (.+)/gm).toString().replace(aktivRepo+": ","");
                  

                  in

                  var aktivRepoUrl = (stdout.match(/^online: (.+)/gm) || '').toString().replace(aktivRepo+": ","");
                  
                  AxelF1977A 1 Antwort Letzte Antwort
                  1
                  • 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:

                    stdout.match(/^online: (.+)/gm).toString()

                    Dann ändere diese Stelle bitte auch noch ab

                    var aktivRepoUrl = stdout.match(/^online: (.+)/gm).toString().replace(aktivRepo+": ","");
                    

                    in

                    var aktivRepoUrl = (stdout.match(/^online: (.+)/gm) || '').toString().replace(aktivRepo+": ","");
                    
                    AxelF1977A Offline
                    AxelF1977A Offline
                    AxelF1977
                    schrieb am zuletzt editiert von
                    #119

                    @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:

                    stdout.match(/^online: (.+)/gm).toString()

                    Dann ändere diese Stelle bitte auch noch ab

                    var aktivRepoUrl = stdout.match(/^online: (.+)/gm).toString().replace(aktivRepo+": ","");
                    

                    in

                    var aktivRepoUrl = (stdout.match(/^online: (.+)/gm) || '').toString().replace(aktivRepo+": ","");
                    

                    Hab ich gemacht, aber Fehler bleiben immer noch bestehen. Das ist ja zum verrückt werden mit dem Script. Ich finde es nur gerade nicht auf die Schnelle im Forum wieder.

                    22:11:24.239	error	javascript.0 (12632) script.js.System.Updates: TypeError: Cannot read property '1' of null
                    22:11:24.239	error	javascript.0 (12632) at script.js.System.Updates:412:39
                    22:11:24.288	error	host.ioBrokerPC Caught by controller[0]: at script.js.System.Updates:412:39
                    

                    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 sagte in Scripte laufen nicht mehr seit Update auf JS-Controler 3.0x:

                      stdout.match(/^online: (.+)/gm).toString()

                      Dann ändere diese Stelle bitte auch noch ab

                      var aktivRepoUrl = stdout.match(/^online: (.+)/gm).toString().replace(aktivRepo+": ","");
                      

                      in

                      var aktivRepoUrl = (stdout.match(/^online: (.+)/gm) || '').toString().replace(aktivRepo+": ","");
                      

                      Hab ich gemacht, aber Fehler bleiben immer noch bestehen. Das ist ja zum verrückt werden mit dem Script. Ich finde es nur gerade nicht auf die Schnelle im Forum wieder.

                      22:11:24.239	error	javascript.0 (12632) script.js.System.Updates: TypeError: Cannot read property '1' of null
                      22:11:24.239	error	javascript.0 (12632) at script.js.System.Updates:412:39
                      22:11:24.288	error	host.ioBrokerPC Caught by controller[0]: at script.js.System.Updates:412:39
                      
                      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 J.A.R.V.I.S.
                      #120

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

                      script.js.System.Updates:412:39

                      Hier steht auch immer die Zeile, in der der Fehler auftritt, in diesem Fall Zeile 412.

                      Setz da mal folgendes hin, um den Fehler abzufangen:

                      var arrInstall = /: (\S+) +- (\d+\.\d+\.\d+)/g.exec(arrAdapter[i]);
                       
                      if (arrInstall && arrInstall.length >= 3) {
                                  installJSON.push({
                                      adapter:    arrInstall[1],
                                      version:    arrInstall[2]
                                  });
                      } 
                      

                      Mir scheint als hätte da jemand ein Skript geschrieben, im guten Glauben, dass er immer die richtigen Werte erhält und deshalb nicht prüft.

                      Naja, im Js-controller 3 werden die Fehler nicht mehr ignoriert.

                      AxelF1977A 1 Antwort Letzte Antwort
                      2
                      • 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:412:39

                        Hier steht auch immer die Zeile, in der der Fehler auftritt, in diesem Fall Zeile 412.

                        Setz da mal folgendes hin, um den Fehler abzufangen:

                        var arrInstall = /: (\S+) +- (\d+\.\d+\.\d+)/g.exec(arrAdapter[i]);
                         
                        if (arrInstall && arrInstall.length >= 3) {
                                    installJSON.push({
                                        adapter:    arrInstall[1],
                                        version:    arrInstall[2]
                                    });
                        } 
                        

                        Mir scheint als hätte da jemand ein Skript geschrieben, im guten Glauben, dass er immer die richtigen Werte erhält und deshalb nicht prüft.

                        Naja, im Js-controller 3 werden die Fehler nicht mehr ignoriert.

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

                        @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:412:39

                        Hier steht auch immer die Zeile, in der der Fehler auftritt, in diesem Fall Zeile 412.

                        Setz da mal folgendes hin, um den Fehler abzufangen:

                        var arrInstall = /: (\S+) +- (\d+\.\d+\.\d+)/g.exec(arrAdapter[i]);
                         
                        if (arrInstall && arrInstall.length >= 3) {
                                    installJSON.push({
                                        adapter:    arrInstall[1],
                                        version:    arrInstall[2]
                                    });
                        } 
                        

                        Mir scheint als hätte da jemand ein Skript geschrieben, im guten Glauben, dass er immer die richtigen Werte erhält und deshalb nicht prüft.

                        Naja, im Js-controller 3 werden die Fehler nicht mehr ignoriert.

                        Das hat auf jeden Fall was verändert. Mein anderen Scripte gehen jetzt, auch mit js-controller 3. Wie als wenn ich das Script deaktiviert habe. Top, Danke.

                        Eine kleine Ausgabe hat das Script noch. Nicht mehr im Log, "nur noch" im Script selber

                        22:24:15.728	warn	javascript.0 (28978) script.js.System.Updates: []
                        22:24:15.729	warn	javascript.0 (28978) script.js.System.Updates: keine Daten für Adapter in der Installation vorhanden
                        22:24:15.730	warn	javascript.0 (28978) at script.js.System.Updates:354:9
                        22:24:15.730	error	javascript.0 (28978) script.js.System.Updates: setForeignState: undefined is not a valid state value
                        22:24:15.730	warn	javascript.0 (28978) script.js.System.Updates: Anzahl Adapter mit Fehler (Cannot read or parse): 0
                        

                        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

                        AxelF1977A 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:412:39

                          Hier steht auch immer die Zeile, in der der Fehler auftritt, in diesem Fall Zeile 412.

                          Setz da mal folgendes hin, um den Fehler abzufangen:

                          var arrInstall = /: (\S+) +- (\d+\.\d+\.\d+)/g.exec(arrAdapter[i]);
                           
                          if (arrInstall && arrInstall.length >= 3) {
                                      installJSON.push({
                                          adapter:    arrInstall[1],
                                          version:    arrInstall[2]
                                      });
                          } 
                          

                          Mir scheint als hätte da jemand ein Skript geschrieben, im guten Glauben, dass er immer die richtigen Werte erhält und deshalb nicht prüft.

                          Naja, im Js-controller 3 werden die Fehler nicht mehr ignoriert.

                          Das hat auf jeden Fall was verändert. Mein anderen Scripte gehen jetzt, auch mit js-controller 3. Wie als wenn ich das Script deaktiviert habe. Top, Danke.

                          Eine kleine Ausgabe hat das Script noch. Nicht mehr im Log, "nur noch" im Script selber

                          22:24:15.728	warn	javascript.0 (28978) script.js.System.Updates: []
                          22:24:15.729	warn	javascript.0 (28978) script.js.System.Updates: keine Daten für Adapter in der Installation vorhanden
                          22:24:15.730	warn	javascript.0 (28978) at script.js.System.Updates:354:9
                          22:24:15.730	error	javascript.0 (28978) script.js.System.Updates: setForeignState: undefined is not a valid state value
                          22:24:15.730	warn	javascript.0 (28978) script.js.System.Updates: Anzahl Adapter mit Fehler (Cannot read or parse): 0
                          
                          AxelF1977A Offline
                          AxelF1977A Offline
                          AxelF1977
                          schrieb am zuletzt editiert von
                          #122

                          Ich verneige mich an dieser Stelle vor dem unglaublichen Wissen das hier versammelt ist.

                          Danke für Eure Hilfe.

                          Echt der Wahnsinn

                          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

                            Sonst hat niemand Probleme mit seinen Skripten nach den Updates?

                            joergfrdeJ Offline
                            joergfrdeJ Offline
                            joergfrde
                            schrieb am zuletzt editiert von
                            #123

                            @AxelF1977 Ich habe auch ein Problem mit meinen Scripten. Keine Benachrichtung durch Telegram. Ich habe allerdings noch die 10ner Version von node und nodejs. Telegram hat das neueste Update.

                            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:

                              script.js.System.Updates:412:39

                              Hier steht auch immer die Zeile, in der der Fehler auftritt, in diesem Fall Zeile 412.

                              Setz da mal folgendes hin, um den Fehler abzufangen:

                              var arrInstall = /: (\S+) +- (\d+\.\d+\.\d+)/g.exec(arrAdapter[i]);
                               
                              if (arrInstall && arrInstall.length >= 3) {
                                          installJSON.push({
                                              adapter:    arrInstall[1],
                                              version:    arrInstall[2]
                                          });
                              } 
                              

                              Mir scheint als hätte da jemand ein Skript geschrieben, im guten Glauben, dass er immer die richtigen Werte erhält und deshalb nicht prüft.

                              Naja, im Js-controller 3 werden die Fehler nicht mehr ignoriert.

                              Das hat auf jeden Fall was verändert. Mein anderen Scripte gehen jetzt, auch mit js-controller 3. Wie als wenn ich das Script deaktiviert habe. Top, Danke.

                              Eine kleine Ausgabe hat das Script noch. Nicht mehr im Log, "nur noch" im Script selber

                              22:24:15.728	warn	javascript.0 (28978) script.js.System.Updates: []
                              22:24:15.729	warn	javascript.0 (28978) script.js.System.Updates: keine Daten für Adapter in der Installation vorhanden
                              22:24:15.730	warn	javascript.0 (28978) at script.js.System.Updates:354:9
                              22:24:15.730	error	javascript.0 (28978) script.js.System.Updates: setForeignState: undefined is not a valid state value
                              22:24:15.730	warn	javascript.0 (28978) script.js.System.Updates: Anzahl Adapter mit Fehler (Cannot read or parse): 0
                              
                              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 J.A.R.V.I.S.
                              #124

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

                              22:24:15.730 warn javascript.0 (28978) at script.js.System.Updates:354:9
                              22:24:15.730 error javascript.0 (28978) script.js.System.Updates: setForeignState: undefined is not a valid state value

                              Dort wird versucht ein undefined in einen State zu schreiben, aus diesem Grund wird der Fehler geworfen.

                              Je nachdem, ob du den Wert ersetzen möchtest, oder einfach bei dem lässt, der er derzeit ist, hast du zwei Möglichkeiten.

                              Wert auch bei undefined (allerdings dann leer) neu schreiben:

                              setState(idAdapterNotInRepoJSON,writeJson(notInRepoJson || {}));
                              

                              Wert bei Fehler beim alten Wert lassen:

                              notInRepoJson && setState(idAdapterNotInRepoJSON,writeJson(notInRepoJson));
                              
                              1 Antwort Letzte Antwort
                              0
                              • AxelF1977A AxelF1977

                                Ich verneige mich an dieser Stelle vor dem unglaublichen Wissen das hier versammelt ist.

                                Danke für Eure Hilfe.

                                Echt der Wahnsinn

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

                                @AxelF1977
                                Irgendwie ist mir nicht ganz klar, warum deine Probleme mit dem js-controller Update zu tun haben sollten... :-( In deinen Logs ist kein Crash des javascript Adapters zu sehen, nur, dass er die Fehler in deinen Skripten moniert. Das sollte aber unabhängig von der js-controller Version sein (die Fehler in deinen Skripten müssen in jeder Versionskonstellation zu Problemen geführt haben).
                                Könntest du da nochmal in deine alten Logs gucken, ob der javascript adapter tatsächlich einmal abgestürzt ist? (Gerne kannst du mir das Log auch als Datei schicken, dann guck ich es mir an).

                                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
                                  Irgendwie ist mir nicht ganz klar, warum deine Probleme mit dem js-controller Update zu tun haben sollten... :-( In deinen Logs ist kein Crash des javascript Adapters zu sehen, nur, dass er die Fehler in deinen Skripten moniert. Das sollte aber unabhängig von der js-controller Version sein (die Fehler in deinen Skripten müssen in jeder Versionskonstellation zu Problemen geführt haben).
                                  Könntest du da nochmal in deine alten Logs gucken, ob der javascript adapter tatsächlich einmal abgestürzt ist? (Gerne kannst du mir das Log auch als Datei schicken, dann guck ich es mir an).

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

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

                                  @AxelF1977
                                  Irgendwie ist mir nicht ganz klar, warum deine Probleme mit dem js-controller Update zu tun haben sollten... :-( In deinen Logs ist kein Crash des javascript Adapters zu sehen, nur, dass er die Fehler in deinen Skripten moniert. Das sollte aber unabhängig von der js-controller Version sein (die Fehler in deinen Skripten müssen in jeder Versionskonstellation zu Problemen geführt haben).
                                  Könntest du da nochmal in deine alten Logs gucken, ob der javascript adapter tatsächlich einmal abgestürzt ist? (Gerne kannst du mir das Log auch als Datei schicken, dann guck ich es mir an).

                                  Vielen Dank.

                                  Der aktuelle Log ist jetzt sauber. Die Veränderungen an den Scripten, bei denen mir @J-A-R-V-I-S geholfen hat, haben am Ende der erhofften Erfolg gebracht. @Thomas-Braun hat mir geholfen das System zu bereinigen.
                                  Am Ende werden es alle Maßnahmen gewesen sein.

                                  Du hattest mir das auch logisch erklärt, wie der neue Controller mit Fehlern umgeht.

                                  jedenfalls läuft gerade alles wie es soll

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

                                  840

                                  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