Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. [Experimentell] JS-Controller compact mode

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    23
    1
    1.3k

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

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

[Experimentell] JS-Controller compact mode

Scheduled Pinned Locked Moved Entwicklung
47 Posts 14 Posters 10.6k Views 7 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • BluefoxB Offline
    BluefoxB Offline
    Bluefox
    wrote on last edited by Bluefox
    #1

    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
    1
    • AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      wrote on last edited by
      #2

      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> 
      

      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

      1 Reply Last reply
      0
      • apollon77A Offline
        apollon77A Offline
        apollon77
        wrote on last edited by
        #3

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

        Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

        • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
        • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
        1 Reply Last reply
        0
        • apollon77A Offline
          apollon77A Offline
          apollon77
          wrote on last edited by
          #4

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

          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
          1 Reply Last reply
          0
          • MicM Offline
            MicM Offline
            Mic
            Developer
            wrote on last edited by
            #5

            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
            0
            • apollon77A Offline
              apollon77A Offline
              apollon77
              wrote on last edited by
              #6

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

              Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

              • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
              • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
              1 Reply Last reply
              0
              • MicM Offline
                MicM Offline
                Mic
                Developer
                wrote on last edited by
                #7

                :) 8-)

                1 Reply Last reply
                0
                • arteckA Offline
                  arteckA Offline
                  arteck
                  Developer Most Active
                  wrote on last edited by
                  #8

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

                  zigbee hab ich, zwave auch, nuc's genauso und HA auch

                  1 Reply Last reply
                  0
                  • apollon77A Offline
                    apollon77A Offline
                    apollon77
                    wrote on last edited by
                    #9

                    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

                    Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                    • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                    • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                    1 Reply Last reply
                    0
                    • AlCalzoneA Offline
                      AlCalzoneA Offline
                      AlCalzone
                      Developer
                      wrote on last edited by
                      #10

                      @arteck:

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

                      Aktuell nicht, soll aber noch behoben werden.

                      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                      1 Reply Last reply
                      0
                      • J Offline
                        J Offline
                        Jan1
                        wrote on last edited by
                        #11

                        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
                        0
                        • apollon77A Offline
                          apollon77A Offline
                          apollon77
                          wrote on last edited by
                          #12

                          Uups auch nicht Absicht. Sage es bluefox.

                          Gesendet vom Handy …

                          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                          1 Reply Last reply
                          0
                          • J Offline
                            J Offline
                            Jan1
                            wrote on last edited by
                            #13

                            Alles klar und danke für die Info.

                            1 Reply Last reply
                            0
                            • apollon77A Offline
                              apollon77A Offline
                              apollon77
                              wrote on last edited by
                              #14

                              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.

                              Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                              • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                              • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                              1 Reply Last reply
                              0
                              • apollon77A Offline
                                apollon77A Offline
                                apollon77
                                wrote on last edited by
                                #15

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

                                Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                                • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                                • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                                1 Reply Last reply
                                0
                                • apollon77A Offline
                                  apollon77A Offline
                                  apollon77
                                  wrote on last edited by
                                  #16

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

                                  Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                                  • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                                  • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                                  1 Reply Last reply
                                  0
                                  • S Offline
                                    S Offline
                                    SchuetzeSchulz
                                    wrote on last edited by
                                    #17

                                    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
                                    0
                                    • blauholstenB Offline
                                      blauholstenB Offline
                                      blauholsten
                                      Developer
                                      wrote on last edited by
                                      #18

                                      … er geschrieben dann überlegt :oops:

                                      Entwickler vom: - Viessman Adapter
                                      - Alarm Adapter

                                      1 Reply Last reply
                                      0
                                      • B Offline
                                        B Offline
                                        BasGo
                                        wrote on last edited by
                                        #19

                                        @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
                                        0
                                        • S Offline
                                          S Offline
                                          SchuetzeSchulz
                                          wrote on last edited by
                                          #20

                                          @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
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          601

                                          Online

                                          32.5k

                                          Users

                                          81.7k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe