Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [Experimentell] JS-Controller compact mode

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    [Experimentell] JS-Controller compact mode

    This topic has been deleted. Only users with topic management privileges can see it.
    • Bluefox
      Bluefox last edited by Bluefox

      Wir arbeiten gerade an neuem JS-Controller Mode - "Compact".

      In diesem Modus startet js-controller alle Adapter (die diesen Modus unterstützen) in dem selben Prozess wie js-controller.

      Dabei gewinnt man speicher, die für gemeinsame npm Module benutz wird, aber verliert an der Stabilität.

      Per Adapter spart man minimum 40MB RAM. Dieses Modus ist für die Systeme mit wenig Speicher gedacht. Z.b Raspi Zero mit 512 MB.

      Aktuell können und sollten nur die erfahrene Entwickler diesen Modus ausprobieren. Ich denke, ab März werden dann keine neue Adapter akzeptiert ohne Unterstützung für diesen Modus.

      Ich konnte ca. 8 Adapter in einer Stunde umbauen. Dafür muss man folgendes tun:

      1. io-package.json => common.compact = true setzen.

      2. main.js modifizieren

      War

           const adapter = new utils.Adapter({
                name: ...,
                stateChange: function () {...},
                ...
           });
      
      

      Ändern auf:

           let adapter;
           function startAdapter(options) {
                options = options || {};
                Object.assign(options, {
                     name: ...,
                     stateChange: function () {...},
                     ...
                });
                adapter = new utils.Adapter(options);
      
                return adapter;
           });
      
      

      Und ganz am Ende von der Datei:

      // If started as allInOne/compact mode => return function to create instance
      if (module && module.parent) {
          module.exports = startAdapter;
      } else {
          // or start the instance directly
          startAdapter();
      } 
      
      

      3. Alle process.exit ersetzen auf:

         adapter.terminate ? adapter.terminate() : process.exit()
      
      

      4. Um diesen Modus bei js-controller zu aktivieren sollte man in iobroker-data/iobroker.json => system.compact = true setzen. (wie hier https://github.com/ioBroker/ioBroker.js … t.json#L12)

      Natürlich diesen Modus unterstützt nur der js-controller vom git (branch master) : https://github.com/ioBroker/ioBroker.js ... /master

      Wenn Ihr Eure Adapter umgebaut habt bitte eine kurze Info in https://docs.google.com/spreadsheets/d/ ... sp=sharing eintragen. Hier auch bitte "Planned" reinschreiben wenn man einen/seinen Adapter startet und Status eintragen

      1 Reply Last reply Reply Quote 1
      • AlCalzone
        AlCalzone Developer last edited by

        Für TypeScript-Entwickler kann das Ganze so aussehen:

        2.: src/main.ts

        let adapter: ioBroker.Adapter;
        function startAdapter(options: Partial <iobroker.adapteroptions>= {}) {
        	return adapter = utils.adapter({
        		// Default options
        		...options,
        		// custom options
        		name: "my-adapter",
        		// ...
        	});
        }
        
        // ...
        
        if (module && module.parent) {
        	// Export startAdapter in compact mode
        	module.exports = startAdapter;
        } else {
        	// Otherwise start the adapter immediately
        	startAdapter();
        }</iobroker.adapteroptions> 
        
        1 Reply Last reply Reply Quote 0
        • apollon77
          apollon77 last edited by

          Wir nehmen übrigens auch seeeehr gern PRs für ioBroker Adapter an falls jemand schneller als Bluefox mit Umbauen ist ;-))

          Wer langeweile hat kann ggf durch http://download.iobroker.net/list.html# … =1&filter= gehen und von oben nach unten arbeiten 😉

          1 Reply Last reply Reply Quote 0
          • apollon77
            apollon77 last edited by

            Weitere Infos unter https://github.com/ioBroker/ioBroker.js … issues/290

            1 Reply Last reply Reply Quote 0
            • Mic
              Mic Developer last edited by

              Super, vielen Dank für diese Erweiterung!

              @Bluefox:

              In diesem Modus startet js-controller alle Adapter (die diesen Modus unterstützen) in dem selben Prozess wie js-controller. `
              Aus "Systemoptimierungs-Sicht" stellt sich mir hier noch die Frage, ob es zukünftig auch angedacht ist, einzelne Adapter auszuschließen zu können, also in separaten Prozessen zu betreiben, während man die "stabilen" Adapter im selben Prozess wie der JS-Controller laufen lässt…

              Dann wäre das nämlich auch eine tolle Option für User, deren Raspi an der Speicherobergrenze von 1 GB ist. Sie könnten dann die stabilen Adapter alle im selben Prozess halten, und die paar problematischen (falls es die gibt), die mal abschmieren, ausschließen...

              Nur so eine Idee...

              1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 last edited by

                Vllt … https://github.com/ioBroker/ioBroker.admin/issues/351 🙂

                Apollon77 created this issue in ioBroker/ioBroker.admin

                closed Add support for Compact mode #351

                1 Reply Last reply Reply Quote 0
                • Mic
                  Mic Developer last edited by

                  🙂 8-)

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

                    wird dann der einzelstart bzw restart eines Adapters noch gehen ??

                    1 Reply Last reply Reply Quote 0
                    • apollon77
                      apollon77 last edited by

                      Erst einmal muss man den compact Mode für den JS:Controller einschalten. Wenn er aus ist werden alle Adapter gestartet wie bisher auch. Also alle die VMs und genug RAM haben werden wohl das weiter so nutzen wie jetzt.

                      Mit dem oben verlinkten Admin-Issue und der Erweiterung darin könnte man dann pro Instanz auch bei aktiviertem compact-Mode entscheiden welche Instanz wie läuft. Und wenn man https://github.com/ioBroker/ioBroker.js … issues/303 noch macht wirds noch flexibler 🙂

                      Auf Low-Memory Systemen kann der compact Mode genutzt werden

                      1 Reply Last reply Reply Quote 0
                      • AlCalzone
                        AlCalzone Developer last edited by

                        @arteck:

                        wird dann der einzelstart bzw restart eines Adapters noch gehen ?? `

                        Aktuell nicht, soll aber noch behoben werden.

                        1 Reply Last reply Reply Quote 0
                        • J
                          Jan1 last edited by

                          Gleich mal ne Frage zur Version, ich habe gesehen, das im latest wieder js-controller 1.5.3 angeboten wird. Läuft die Version nun problemlos, oder sollte man da besser bei 1.4.2 bleiben?

                          1 Reply Last reply Reply Quote 0
                          • apollon77
                            apollon77 last edited by

                            Uups auch nicht Absicht. Sage es bluefox.

                            Gesendet vom Handy …

                            1 Reply Last reply Reply Quote 0
                            • J
                              Jan1 last edited by

                              Alles klar und danke für die Info.

                              1 Reply Last reply Reply Quote 0
                              • apollon77
                                apollon77 last edited by

                                For All: Ich habe eine Zeile oben im Initialen Post gefixt:

                                > typeof module !== undefined muss entweder typeof module !== "undefined" oder module != undefined oder einfach nur module sein.

                                1 Reply Last reply Reply Quote 0
                                • apollon77
                                  apollon77 last edited by

                                  Koordiniering der Implementierung in alle Adapter: https://docs.google.com/spreadsheets/d/ … sp=sharing

                                  1 Reply Last reply Reply Quote 0
                                  • apollon77
                                    apollon77 last edited by

                                    Update compact Mode: aktuellste GitHub Version 1.6.0 sollte stoppen von compact-adatern und auch prozess-umbenennen gefixt haben

                                    1 Reply Last reply Reply Quote 0
                                    • S
                                      SchuetzeSchulz last edited by

                                      Hallo zusammen,

                                      ich würde auch gern meine Adapter (lgtv, lgtv11, hp-ilo, enet) ändern.

                                      Allerdings habe ich den zu ändern Code

                                           const adapter = new utils.Adapter({
                                                name: ...,
                                                stateChange: function () {...},
                                                ...
                                           });
                                      
                                      

                                      So in keinen meiner Adapter drin. Alle meine Adapter sind vom Aufbau im Prinzip gleich. Kann da mal jemand schauen und mir sagen was ich wo ändern muss? Den Eintrag in der JSON sehe ich nicht als Problem.

                                      1 Reply Last reply Reply Quote 0
                                      • blauholsten
                                        blauholsten Developer last edited by

                                        … er geschrieben dann überlegt :oops:

                                        1 Reply Last reply Reply Quote 0
                                        • B
                                          BasGo last edited by

                                          @SchuetzeSchulz:

                                          Hallo zusammen,

                                          ich würde auch gern meine Adapter (lgtv, lgtv11, hp-ilo, enet) ändern.

                                          Allerdings habe ich den zu ändern Code

                                               const adapter = new utils.Adapter({
                                                    name: ...,
                                                    stateChange: function () {...},
                                                    ...
                                               });
                                          
                                          

                                          So in keinen meiner Adapter drin. Alle meine Adapter sind vom Aufbau im Prinzip gleich. Kann da mal jemand schauen und mir sagen was ich wo ändern muss? Den Eintrag in der JSON sehe ich nicht als Problem. `

                                          Kann dir gerne im Laufe des Tages mal deinen ioBroker.lgtv anpassen und dir einen PR schicken?

                                          Dort hast du z.B. in Zeile 161 sowas wie ..

                                          adapter.on('stateChange', function (id, state)
                                          { ... }
                                          

                                          .. und das müsste u.a. halt ersetzt werden. 8-)

                                          1 Reply Last reply Reply Quote 0
                                          • S
                                            SchuetzeSchulz last edited by

                                            @BasGo:

                                            Kann dir gerne im Laufe des Tages mal deinen ioBroker.lgtv anpassen und dir einen PR schicken? `

                                            Das wäre super. Dann würde ich das für die anderen Adapter übernehmen wollen.

                                            Vielen Dank schon mal im Voraus!

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            917
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            14
                                            47
                                            8025
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo