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. ioBroker Allgemein
  4. Docker Container restart iobroker per script

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

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

Docker Container restart iobroker per script

Scheduled Pinned Locked Moved ioBroker Allgemein
62 Posts 11 Posters 7.7k Views 9 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.
  • F fastfoot

    @glasfaser said in restart iobroker per script?:

    Mit dem hier geänderten Script von mir , kannst du den Container neustarten .

    das ist wesentlich eleganter als meine Lösung, beschränkt die Anwendung aber leider auf einen Restart unter Synology NAS. Mal sehen ob sich für QNAP auch so etwas finden lässt :-)

    O Offline
    O Offline
    oFbEQnpoLKKl6mbY5e13
    wrote on last edited by
    #25

    @fastfoot
    Ja, bitte! :+1: :grimacing:

    1 Reply Last reply
    0
    • F fastfoot

      @glasfaser said in restart iobroker per script?:

      Mit dem hier geänderten Script von mir , kannst du den Container neustarten .

      das ist wesentlich eleganter als meine Lösung, beschränkt die Anwendung aber leider auf einen Restart unter Synology NAS. Mal sehen ob sich für QNAP auch so etwas finden lässt :-)

      GlasfaserG Offline
      GlasfaserG Offline
      Glasfaser
      wrote on last edited by
      #26

      @fastfoot

      eventuell dort etwas dabei ?

      https://qnap-dev.github.io/container-station-api/container.html

      Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

      1 Reply Last reply
      0
      • GlasfaserG Offline
        GlasfaserG Offline
        Glasfaser
        wrote on last edited by
        #27

        @fastfoot

        Laut DOKU

        Example request of Docker
        
        $ curl -sq -XPUT -b cookies.txt \
            http://${QIP}:${QPORT}/containerstation/api/v1/container/docker/<container_id>/restart
        

        Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

        F 1 Reply Last reply
        1
        • GlasfaserG Glasfaser

          @fastfoot

          Laut DOKU

          Example request of Docker
          
          $ curl -sq -XPUT -b cookies.txt \
              http://${QIP}:${QPORT}/containerstation/api/v1/container/docker/<container_id>/restart
          
          F Offline
          F Offline
          fastfoot
          wrote on last edited by
          #28

          @glasfaser said in restart iobroker per script?:

          @fastfoot

          Laut DOKU

          Example request of Docker
          
          $ curl -sq -XPUT -b cookies.txt \
              http://${QIP}:${QPORT}/containerstation/api/v1/container/docker/<container_id>/restart
          

          Danke! Ein sehr guter starting point, bekomme aber immer einen Authorization error :-) weiss auch noch nicht was es mit der cookies.txt auf sich hat, aber das bekomme ich hin

          iobroker läuft unter Docker auf QNAP TS-451+
          SkriptRecovery: https://forum.iobroker.net/post/930558

          F 1 Reply Last reply
          0
          • F fastfoot

            @glasfaser said in restart iobroker per script?:

            @fastfoot

            Laut DOKU

            Example request of Docker
            
            $ curl -sq -XPUT -b cookies.txt \
                http://${QIP}:${QPORT}/containerstation/api/v1/container/docker/<container_id>/restart
            

            Danke! Ein sehr guter starting point, bekomme aber immer einen Authorization error :-) weiss auch noch nicht was es mit der cookies.txt auf sich hat, aber das bekomme ich hin

            F Offline
            F Offline
            fastfoot
            wrote on last edited by
            #29

            @fastfoot said in restart iobroker per script?:

            ..., bekomme aber immer einen Authorization error :-) weiss auch noch nicht was es mit der cookies.txt auf sich hat, aber das bekomme ich hin

            man sollte auch einloggen :-) Funktioniert astrein, morgen oder so gibts ein kleines Skript, dann klappt der Restart auch auf der QNAP. Nicht dass ich das bräuchte, aber denkbar wäre jetzt auch eine VIS mit einer Übersicht aller Container etc... wird alles als JSON geliefert, freu...

            iobroker läuft unter Docker auf QNAP TS-451+
            SkriptRecovery: https://forum.iobroker.net/post/930558

            O 1 Reply Last reply
            0
            • F fastfoot

              @fastfoot said in restart iobroker per script?:

              ..., bekomme aber immer einen Authorization error :-) weiss auch noch nicht was es mit der cookies.txt auf sich hat, aber das bekomme ich hin

              man sollte auch einloggen :-) Funktioniert astrein, morgen oder so gibts ein kleines Skript, dann klappt der Restart auch auf der QNAP. Nicht dass ich das bräuchte, aber denkbar wäre jetzt auch eine VIS mit einer Übersicht aller Container etc... wird alles als JSON geliefert, freu...

              O Offline
              O Offline
              oFbEQnpoLKKl6mbY5e13
              wrote on last edited by
              #30

              @fastfoot
              Fantastisch! :+1:

              F 1 Reply Last reply
              0
              • O oFbEQnpoLKKl6mbY5e13

                @fastfoot
                Fantastisch! :+1:

                F Offline
                F Offline
                fastfoot
                wrote on last edited by fastfoot
                #31

                @ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:

                @fastfoot
                Fantastisch! :+1:

                nun ja, von den Infos bin ich nicht soo sehr begeistert, aber immerhin. Ich frage ja aber auch nur die Containerinfos ab. Der Restart funktioniert einwandfrei, bin gespannt ob das auf anderen QNAP-Systemen auch so klappt. Ich habe die in den Dokus genannte curl Methode mit axios umgesetzt, weshalb das in der JS-Instanz eingetragen werden muss. Die Datenpunkte für die Tabelle und den Restart werden automatisch unter 0_userdata.0.QNAP angelegt. Vor dem Start sind User und Passwort sowie die IP Adresse und der Port der QNAP einzutragen. Happy Restart!
                qnap1.PNG

                /**
                * Zweck:           Infos über und Restart von Docker Containern auf QNAP NAS
                * Date:            13.09.2021
                * Author:          fastfoot
                * Forum:           https://forum.iobroker.net/topic/40916/restart-iobroker-per-script/31?_=1610918563284
                * Infos:           https://qnap-dev.github.io/container-station-api/container.html#list-containers
                * myHome
                */
                const axios = require('axios').default; // Muss in JS-Instanz unter NPM-Module eingetragen werden
                const dbg = !true;
                const username = 'admin';               // user mit Adminrechten auf der QNAP
                const password = 'ein_Passwort';        // Passwort für admin oder user der Admingruppe
                const server = 'qnapnas';               // Hostname oder IP der QNAP NAS
                //const server = '192.168.178.3';
                const port = '8080';                    // Port der QNAP NAS
                let fakeId = 'xxx';                     // FakeID, wird später ersetzt
                const containerName = 'iobroker';       //Containername, welcher neugestartet werden soll
                const urlLogin = `http://${server}:${port}/container-station/api/v1/login`;  // Anmelde-URL
                const urlInfo = `http://${server}:${port}/container-station/api/v1/container`; // Container Infos
                const urlRestart = `http://${server}:${port}/container-station/api/v1/container/docker/${fakeId}/restart`;
                const idBase = '0_userdata.0.QNAP';
                const idInfo = `${idBase}.info`;                // Originalantwort der API
                const idRestart = `${idBase}.Restart`;          // DP zum Auslösen des Restart
                const idJson = `${idBase}.json`;                // DP für Infos über Container
                let firstRun = true;
                
                setInterval(main,2000);
                
                on({id: idRestart, change:'any'},async () => {
                   if(dbg) log('Restart')
                   //restart(containerName);
                })
                
                async function main() {
                   let json = [];
                   firstRun = await createDatapoints();
                   let session = await login(urlLogin, username, password);
                   if(dbg) log(session)
                   let container = await getInfos(urlInfo, session);
                   setState(idInfo,JSON.stringify(container,null,4));
                   container.forEach((rec)=>{
                       let memory = 0, 
                           cpu = 0;
                       if('memory' in rec) memory = Math.round(rec.memory/1024/1024*1000)/1000;
                       if('cpu' in rec) cpu = rec.cpu * 100;
                       json.push({
                           Name: rec.name,
                           Image: rec.image,
                           Memory:  memory,
                           CPU: cpu,
                           State: rec.state
                           //Id: rec.id,
                       })
                   })
                   setState(idJson, JSON.stringify(json,null,4));
                }
                
                async function login(url,username,password) {
                   let session;
                   let data = await axios.post(url,{username,password});
                   if(data.status == 200){
                       session = data.headers['set-cookie'][0].split(';')[0];
                   }
                   return session;
                }
                
                async function getInfos(url, session) {
                   let data = (await axios.get(url, {headers: {Cookie: session}}));
                   if(data.status == 200){
                       return data.data;
                   }
                }
                
                async function restart(containerName) {
                   let session = await login(urlLogin, username, password);
                   let container = await getInfos(urlInfo, session);
                
                   container.forEach(async (rec)=> {
                       if(rec.name == containerName) {
                           let url = urlRestart.replace(fakeId,rec.id);
                           if(!firstRun) {
                               let data = await axios.put(url,'',{headers: {Cookie: session}});
                               if(dbg) log(data.data);
                           }
                       }
                   })
                }
                // create data points if not existing
                async function createDatapoints() {
                   let dp,
                       idKey,
                       firstRun = false;
                   
                   const stateAttributes = {
                       "Restart":{"name":"Container Restart","type":"boolean","role":"button","read":true,"write":true,"desc":"von Skript erstellt","def":false},
                       "info":{"name":"Info original","type":"string","role":"state","read":true,"write":true,"desc":"von Skript erstellt","def": ""},
                       "json":{"name":"Info Tabelle","type":"string","role":"state","read":true,"write":true,"desc":"von Skript erstellt","def":""}
                   }
                
                   for(let key in stateAttributes) {
                
                       idKey = idBase + '.' + key;
                
                       if (!(await existsStateAsync(idKey))) {
                           dp = stateAttributes[key];
                           firstRun = true;
                           await createStateAsync(idKey, dp);
                       }
                   }
                
                   return firstRun;
                
                }
                
                

                iobroker läuft unter Docker auf QNAP TS-451+
                SkriptRecovery: https://forum.iobroker.net/post/930558

                O F 2 Replies Last reply
                1
                • F fastfoot

                  @ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:

                  @fastfoot
                  Fantastisch! :+1:

                  nun ja, von den Infos bin ich nicht soo sehr begeistert, aber immerhin. Ich frage ja aber auch nur die Containerinfos ab. Der Restart funktioniert einwandfrei, bin gespannt ob das auf anderen QNAP-Systemen auch so klappt. Ich habe die in den Dokus genannte curl Methode mit axios umgesetzt, weshalb das in der JS-Instanz eingetragen werden muss. Die Datenpunkte für die Tabelle und den Restart werden automatisch unter 0_userdata.0.QNAP angelegt. Vor dem Start sind User und Passwort sowie die IP Adresse und der Port der QNAP einzutragen. Happy Restart!
                  qnap1.PNG

                  /**
                  * Zweck:           Infos über und Restart von Docker Containern auf QNAP NAS
                  * Date:            13.09.2021
                  * Author:          fastfoot
                  * Forum:           https://forum.iobroker.net/topic/40916/restart-iobroker-per-script/31?_=1610918563284
                  * Infos:           https://qnap-dev.github.io/container-station-api/container.html#list-containers
                  * myHome
                  */
                  const axios = require('axios').default; // Muss in JS-Instanz unter NPM-Module eingetragen werden
                  const dbg = !true;
                  const username = 'admin';               // user mit Adminrechten auf der QNAP
                  const password = 'ein_Passwort';        // Passwort für admin oder user der Admingruppe
                  const server = 'qnapnas';               // Hostname oder IP der QNAP NAS
                  //const server = '192.168.178.3';
                  const port = '8080';                    // Port der QNAP NAS
                  let fakeId = 'xxx';                     // FakeID, wird später ersetzt
                  const containerName = 'iobroker';       //Containername, welcher neugestartet werden soll
                  const urlLogin = `http://${server}:${port}/container-station/api/v1/login`;  // Anmelde-URL
                  const urlInfo = `http://${server}:${port}/container-station/api/v1/container`; // Container Infos
                  const urlRestart = `http://${server}:${port}/container-station/api/v1/container/docker/${fakeId}/restart`;
                  const idBase = '0_userdata.0.QNAP';
                  const idInfo = `${idBase}.info`;                // Originalantwort der API
                  const idRestart = `${idBase}.Restart`;          // DP zum Auslösen des Restart
                  const idJson = `${idBase}.json`;                // DP für Infos über Container
                  let firstRun = true;
                  
                  setInterval(main,2000);
                  
                  on({id: idRestart, change:'any'},async () => {
                     if(dbg) log('Restart')
                     //restart(containerName);
                  })
                  
                  async function main() {
                     let json = [];
                     firstRun = await createDatapoints();
                     let session = await login(urlLogin, username, password);
                     if(dbg) log(session)
                     let container = await getInfos(urlInfo, session);
                     setState(idInfo,JSON.stringify(container,null,4));
                     container.forEach((rec)=>{
                         let memory = 0, 
                             cpu = 0;
                         if('memory' in rec) memory = Math.round(rec.memory/1024/1024*1000)/1000;
                         if('cpu' in rec) cpu = rec.cpu * 100;
                         json.push({
                             Name: rec.name,
                             Image: rec.image,
                             Memory:  memory,
                             CPU: cpu,
                             State: rec.state
                             //Id: rec.id,
                         })
                     })
                     setState(idJson, JSON.stringify(json,null,4));
                  }
                  
                  async function login(url,username,password) {
                     let session;
                     let data = await axios.post(url,{username,password});
                     if(data.status == 200){
                         session = data.headers['set-cookie'][0].split(';')[0];
                     }
                     return session;
                  }
                  
                  async function getInfos(url, session) {
                     let data = (await axios.get(url, {headers: {Cookie: session}}));
                     if(data.status == 200){
                         return data.data;
                     }
                  }
                  
                  async function restart(containerName) {
                     let session = await login(urlLogin, username, password);
                     let container = await getInfos(urlInfo, session);
                  
                     container.forEach(async (rec)=> {
                         if(rec.name == containerName) {
                             let url = urlRestart.replace(fakeId,rec.id);
                             if(!firstRun) {
                                 let data = await axios.put(url,'',{headers: {Cookie: session}});
                                 if(dbg) log(data.data);
                             }
                         }
                     })
                  }
                  // create data points if not existing
                  async function createDatapoints() {
                     let dp,
                         idKey,
                         firstRun = false;
                     
                     const stateAttributes = {
                         "Restart":{"name":"Container Restart","type":"boolean","role":"button","read":true,"write":true,"desc":"von Skript erstellt","def":false},
                         "info":{"name":"Info original","type":"string","role":"state","read":true,"write":true,"desc":"von Skript erstellt","def": ""},
                         "json":{"name":"Info Tabelle","type":"string","role":"state","read":true,"write":true,"desc":"von Skript erstellt","def":""}
                     }
                  
                     for(let key in stateAttributes) {
                  
                         idKey = idBase + '.' + key;
                  
                         if (!(await existsStateAsync(idKey))) {
                             dp = stateAttributes[key];
                             firstRun = true;
                             await createStateAsync(idKey, dp);
                         }
                     }
                  
                     return firstRun;
                  
                  }
                  
                  

                  O Offline
                  O Offline
                  oFbEQnpoLKKl6mbY5e13
                  wrote on last edited by
                  #32

                  @fastfoot
                  Wahnsinn! Vielen, vielen Dank!

                  2021-01-18 20:09:22.686 - info: host.iobroker-d stopInstance system.adapter.javascript.0 (force=false, process=true)
                  2021-01-18 20:09:22.697 - info: host.iobroker-d stopInstance system.adapter.javascript.0 send kill signal
                  2021-01-18 20:09:22.698 - info: javascript.0 (5079) Got terminate signal TERMINATE_YOURSELF
                  

                  Daten sind auch alle da! Da mache ich mir doch glatt auch so eine View.

                  Nach dem Start des Skripts wurde sofort neu gestartet. Normal?

                  (TS-453 Pro)

                  F 1 Reply Last reply
                  0
                  • O oFbEQnpoLKKl6mbY5e13

                    @fastfoot
                    Wahnsinn! Vielen, vielen Dank!

                    2021-01-18 20:09:22.686 - info: host.iobroker-d stopInstance system.adapter.javascript.0 (force=false, process=true)
                    2021-01-18 20:09:22.697 - info: host.iobroker-d stopInstance system.adapter.javascript.0 send kill signal
                    2021-01-18 20:09:22.698 - info: javascript.0 (5079) Got terminate signal TERMINATE_YOURSELF
                    

                    Daten sind auch alle da! Da mache ich mir doch glatt auch so eine View.

                    Nach dem Start des Skripts wurde sofort neu gestartet. Normal?

                    (TS-453 Pro)

                    F Offline
                    F Offline
                    fastfoot
                    wrote on last edited by
                    #33

                    @ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:

                    Nach dem Start des Skripts wurde sofort neu gestartet. Normal?

                    Nein, nicht normal. Das wird eigentlich durch die Variable firstRun verhindert, jedenfalls beim Erstellen der Datenpunkte passierte das und dann habe ich das eingebaut und es hat funktioniert.

                    Passiert das bei jedem Neustart des Skripts oder war das eine einmalige Sache? Falls Letzteres passiert es beim Erstellen des Restart-DP und sollte durch die Variable verhindert werden. Gerade getestet und funktioniert wie beschrieben. Falls das bei dir anders ist, kannst du das on() in einen Timeout packen, dann sollte er auch nicht beim Erstellen gleich triggern.

                    setTimeout(()=>{
                        on({id: idRestart, change:'any'},async () => {
                            if(dbg) log('Restart')
                            restart(containerName);
                        })
                    },2000)
                    

                    iobroker läuft unter Docker auf QNAP TS-451+
                    SkriptRecovery: https://forum.iobroker.net/post/930558

                    O 2 Replies Last reply
                    0
                    • F fastfoot

                      @ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:

                      Nach dem Start des Skripts wurde sofort neu gestartet. Normal?

                      Nein, nicht normal. Das wird eigentlich durch die Variable firstRun verhindert, jedenfalls beim Erstellen der Datenpunkte passierte das und dann habe ich das eingebaut und es hat funktioniert.

                      Passiert das bei jedem Neustart des Skripts oder war das eine einmalige Sache? Falls Letzteres passiert es beim Erstellen des Restart-DP und sollte durch die Variable verhindert werden. Gerade getestet und funktioniert wie beschrieben. Falls das bei dir anders ist, kannst du das on() in einen Timeout packen, dann sollte er auch nicht beim Erstellen gleich triggern.

                      setTimeout(()=>{
                          on({id: idRestart, change:'any'},async () => {
                              if(dbg) log('Restart')
                              restart(containerName);
                          })
                      },2000)
                      
                      O Offline
                      O Offline
                      oFbEQnpoLKKl6mbY5e13
                      wrote on last edited by
                      #34

                      @fastfoot
                      War eine einmalige Sache. :+1:

                      1 Reply Last reply
                      0
                      • F fastfoot

                        @ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:

                        Nach dem Start des Skripts wurde sofort neu gestartet. Normal?

                        Nein, nicht normal. Das wird eigentlich durch die Variable firstRun verhindert, jedenfalls beim Erstellen der Datenpunkte passierte das und dann habe ich das eingebaut und es hat funktioniert.

                        Passiert das bei jedem Neustart des Skripts oder war das eine einmalige Sache? Falls Letzteres passiert es beim Erstellen des Restart-DP und sollte durch die Variable verhindert werden. Gerade getestet und funktioniert wie beschrieben. Falls das bei dir anders ist, kannst du das on() in einen Timeout packen, dann sollte er auch nicht beim Erstellen gleich triggern.

                        setTimeout(()=>{
                            on({id: idRestart, change:'any'},async () => {
                                if(dbg) log('Restart')
                                restart(containerName);
                            })
                        },2000)
                        
                        O Offline
                        O Offline
                        oFbEQnpoLKKl6mbY5e13
                        wrote on last edited by
                        #35

                        @fastfoot
                        Was müsste man tun, wenn man jetzt noch einen anderen Container neu starten möchte?

                        F 1 Reply Last reply
                        0
                        • O oFbEQnpoLKKl6mbY5e13

                          @fastfoot
                          Was müsste man tun, wenn man jetzt noch einen anderen Container neu starten möchte?

                          F Offline
                          F Offline
                          fastfoot
                          wrote on last edited by
                          #36

                          @ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:

                          @fastfoot
                          Was müsste man tun, wenn man jetzt noch einen anderen Container neu starten möchte?

                          Die Variable containerName aus einem DP auslesen, anstatt fix festzulegen. Dann muss aber auch das const durch let ersetzt werden. Beim Erstellen des DP als default den Standardnamen angeben und die Zuweisung nach Aufruf von createDatapoints(). In der VIS dann setzen mit Buttons oder mit einem Select von MDW oder was es da sonst noch gibt

                          iobroker läuft unter Docker auf QNAP TS-451+
                          SkriptRecovery: https://forum.iobroker.net/post/930558

                          O 1 Reply Last reply
                          1
                          • F fastfoot

                            @ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:

                            @fastfoot
                            Was müsste man tun, wenn man jetzt noch einen anderen Container neu starten möchte?

                            Die Variable containerName aus einem DP auslesen, anstatt fix festzulegen. Dann muss aber auch das const durch let ersetzt werden. Beim Erstellen des DP als default den Standardnamen angeben und die Zuweisung nach Aufruf von createDatapoints(). In der VIS dann setzen mit Buttons oder mit einem Select von MDW oder was es da sonst noch gibt

                            O Offline
                            O Offline
                            oFbEQnpoLKKl6mbY5e13
                            wrote on last edited by
                            #37

                            @fastfoot sagte in restart iobroker per script?:

                            Die Variable containerName aus einem DP auslesen, anstatt fix festzulegen.

                            Natürlich! :man-facepalming:

                            Dann muss aber auch das const durch let ersetzt werden. Beim Erstellen des DP als default den Standardnamen angeben und die Zuweisung nach Aufruf von createDatapoints(). In der VIS dann setzen mit Buttons oder mit einem Select von MDW oder was es da sonst noch gibt

                            Okay, danke!

                            1 Reply Last reply
                            0
                            • F fastfoot

                              @ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:

                              @fastfoot
                              Fantastisch! :+1:

                              nun ja, von den Infos bin ich nicht soo sehr begeistert, aber immerhin. Ich frage ja aber auch nur die Containerinfos ab. Der Restart funktioniert einwandfrei, bin gespannt ob das auf anderen QNAP-Systemen auch so klappt. Ich habe die in den Dokus genannte curl Methode mit axios umgesetzt, weshalb das in der JS-Instanz eingetragen werden muss. Die Datenpunkte für die Tabelle und den Restart werden automatisch unter 0_userdata.0.QNAP angelegt. Vor dem Start sind User und Passwort sowie die IP Adresse und der Port der QNAP einzutragen. Happy Restart!
                              qnap1.PNG

                              /**
                              * Zweck:           Infos über und Restart von Docker Containern auf QNAP NAS
                              * Date:            13.09.2021
                              * Author:          fastfoot
                              * Forum:           https://forum.iobroker.net/topic/40916/restart-iobroker-per-script/31?_=1610918563284
                              * Infos:           https://qnap-dev.github.io/container-station-api/container.html#list-containers
                              * myHome
                              */
                              const axios = require('axios').default; // Muss in JS-Instanz unter NPM-Module eingetragen werden
                              const dbg = !true;
                              const username = 'admin';               // user mit Adminrechten auf der QNAP
                              const password = 'ein_Passwort';        // Passwort für admin oder user der Admingruppe
                              const server = 'qnapnas';               // Hostname oder IP der QNAP NAS
                              //const server = '192.168.178.3';
                              const port = '8080';                    // Port der QNAP NAS
                              let fakeId = 'xxx';                     // FakeID, wird später ersetzt
                              const containerName = 'iobroker';       //Containername, welcher neugestartet werden soll
                              const urlLogin = `http://${server}:${port}/container-station/api/v1/login`;  // Anmelde-URL
                              const urlInfo = `http://${server}:${port}/container-station/api/v1/container`; // Container Infos
                              const urlRestart = `http://${server}:${port}/container-station/api/v1/container/docker/${fakeId}/restart`;
                              const idBase = '0_userdata.0.QNAP';
                              const idInfo = `${idBase}.info`;                // Originalantwort der API
                              const idRestart = `${idBase}.Restart`;          // DP zum Auslösen des Restart
                              const idJson = `${idBase}.json`;                // DP für Infos über Container
                              let firstRun = true;
                              
                              setInterval(main,2000);
                              
                              on({id: idRestart, change:'any'},async () => {
                                 if(dbg) log('Restart')
                                 //restart(containerName);
                              })
                              
                              async function main() {
                                 let json = [];
                                 firstRun = await createDatapoints();
                                 let session = await login(urlLogin, username, password);
                                 if(dbg) log(session)
                                 let container = await getInfos(urlInfo, session);
                                 setState(idInfo,JSON.stringify(container,null,4));
                                 container.forEach((rec)=>{
                                     let memory = 0, 
                                         cpu = 0;
                                     if('memory' in rec) memory = Math.round(rec.memory/1024/1024*1000)/1000;
                                     if('cpu' in rec) cpu = rec.cpu * 100;
                                     json.push({
                                         Name: rec.name,
                                         Image: rec.image,
                                         Memory:  memory,
                                         CPU: cpu,
                                         State: rec.state
                                         //Id: rec.id,
                                     })
                                 })
                                 setState(idJson, JSON.stringify(json,null,4));
                              }
                              
                              async function login(url,username,password) {
                                 let session;
                                 let data = await axios.post(url,{username,password});
                                 if(data.status == 200){
                                     session = data.headers['set-cookie'][0].split(';')[0];
                                 }
                                 return session;
                              }
                              
                              async function getInfos(url, session) {
                                 let data = (await axios.get(url, {headers: {Cookie: session}}));
                                 if(data.status == 200){
                                     return data.data;
                                 }
                              }
                              
                              async function restart(containerName) {
                                 let session = await login(urlLogin, username, password);
                                 let container = await getInfos(urlInfo, session);
                              
                                 container.forEach(async (rec)=> {
                                     if(rec.name == containerName) {
                                         let url = urlRestart.replace(fakeId,rec.id);
                                         if(!firstRun) {
                                             let data = await axios.put(url,'',{headers: {Cookie: session}});
                                             if(dbg) log(data.data);
                                         }
                                     }
                                 })
                              }
                              // create data points if not existing
                              async function createDatapoints() {
                                 let dp,
                                     idKey,
                                     firstRun = false;
                                 
                                 const stateAttributes = {
                                     "Restart":{"name":"Container Restart","type":"boolean","role":"button","read":true,"write":true,"desc":"von Skript erstellt","def":false},
                                     "info":{"name":"Info original","type":"string","role":"state","read":true,"write":true,"desc":"von Skript erstellt","def": ""},
                                     "json":{"name":"Info Tabelle","type":"string","role":"state","read":true,"write":true,"desc":"von Skript erstellt","def":""}
                                 }
                              
                                 for(let key in stateAttributes) {
                              
                                     idKey = idBase + '.' + key;
                              
                                     if (!(await existsStateAsync(idKey))) {
                                         dp = stateAttributes[key];
                                         firstRun = true;
                                         await createStateAsync(idKey, dp);
                                     }
                                 }
                              
                                 return firstRun;
                              
                              }
                              
                              

                              F Offline
                              F Offline
                              fastfoot
                              wrote on last edited by
                              #38

                              @fastfoot sagte in Docker Container restart iobroker per script:

                              nun ja, von den Infos bin ich nicht soo sehr begeistert, aber immerhin. Ich frage ja aber auch nur die Containerinfos ab. Der Restart funktioniert einwandfrei, bin gespannt ob das auf anderen QNAP-Systemen auch so klappt. Ich habe die in den Dokus genannte curl Methode mit axios umgesetzt, weshalb das in der JS-Instanz eingetragen werden muss. Die Datenpunkte für die Tabelle und den Restart werden automatisch unter 0_userdata.0.QNAP angelegt. Vor dem Start sind User und Passwort sowie die IP Adresse und der Port der QNAP einzutragen. Happy Restart!

                              Mit dem neuesten Update 2.4 der QNAP Containerstation hat es die verwendete REST API zerschossen, wer also das Skript hier nutzt, sollte nicht updaten und auf einen Fix warten, kann mir nicht vorstellen dass es diesen nicht geben wird. Wer ausserdem weiss wie man die Containerstation downgraden kann, bitte mal melden :-)

                              iobroker läuft unter Docker auf QNAP TS-451+
                              SkriptRecovery: https://forum.iobroker.net/post/930558

                              O F 2 Replies Last reply
                              0
                              • F fastfoot

                                @fastfoot sagte in Docker Container restart iobroker per script:

                                nun ja, von den Infos bin ich nicht soo sehr begeistert, aber immerhin. Ich frage ja aber auch nur die Containerinfos ab. Der Restart funktioniert einwandfrei, bin gespannt ob das auf anderen QNAP-Systemen auch so klappt. Ich habe die in den Dokus genannte curl Methode mit axios umgesetzt, weshalb das in der JS-Instanz eingetragen werden muss. Die Datenpunkte für die Tabelle und den Restart werden automatisch unter 0_userdata.0.QNAP angelegt. Vor dem Start sind User und Passwort sowie die IP Adresse und der Port der QNAP einzutragen. Happy Restart!

                                Mit dem neuesten Update 2.4 der QNAP Containerstation hat es die verwendete REST API zerschossen, wer also das Skript hier nutzt, sollte nicht updaten und auf einen Fix warten, kann mir nicht vorstellen dass es diesen nicht geben wird. Wer ausserdem weiss wie man die Containerstation downgraden kann, bitte mal melden :-)

                                O Offline
                                O Offline
                                oFbEQnpoLKKl6mbY5e13
                                wrote on last edited by
                                #39

                                @fastfoot
                                Danke für die Info.

                                1 Reply Last reply
                                0
                                • F fastfoot

                                  @fastfoot sagte in Docker Container restart iobroker per script:

                                  nun ja, von den Infos bin ich nicht soo sehr begeistert, aber immerhin. Ich frage ja aber auch nur die Containerinfos ab. Der Restart funktioniert einwandfrei, bin gespannt ob das auf anderen QNAP-Systemen auch so klappt. Ich habe die in den Dokus genannte curl Methode mit axios umgesetzt, weshalb das in der JS-Instanz eingetragen werden muss. Die Datenpunkte für die Tabelle und den Restart werden automatisch unter 0_userdata.0.QNAP angelegt. Vor dem Start sind User und Passwort sowie die IP Adresse und der Port der QNAP einzutragen. Happy Restart!

                                  Mit dem neuesten Update 2.4 der QNAP Containerstation hat es die verwendete REST API zerschossen, wer also das Skript hier nutzt, sollte nicht updaten und auf einen Fix warten, kann mir nicht vorstellen dass es diesen nicht geben wird. Wer ausserdem weiss wie man die Containerstation downgraden kann, bitte mal melden :-)

                                  F Offline
                                  F Offline
                                  fastfoot
                                  wrote on last edited by
                                  #40

                                  Das Skript läuft jetzt wieder, die URL hatte sich geändert. Somit kann ich endlich die neueste Container-Station APP nutzten.

                                  iobroker läuft unter Docker auf QNAP TS-451+
                                  SkriptRecovery: https://forum.iobroker.net/post/930558

                                  1 Reply Last reply
                                  1
                                  • B Offline
                                    B Offline
                                    bug77
                                    wrote on last edited by
                                    #41

                                    bei mir funktioniert das Script leider nicht.

                                    Nachdem ich den Link im Script geändert habe in

                                    http://${server}:${port}/containerstation/api/v1/login
                                    

                                    funktioniert die Abfrage.

                                    Wenn ich aber Restart mache, passiert nichts, auch im Log steht nichts.

                                    Habe User / Pass / IP / Containername (name oder Abbbild name?), FakeID bleibt xxx?,

                                    F 2 Replies Last reply
                                    0
                                    • B bug77

                                      bei mir funktioniert das Script leider nicht.

                                      Nachdem ich den Link im Script geändert habe in

                                      http://${server}:${port}/containerstation/api/v1/login
                                      

                                      funktioniert die Abfrage.

                                      Wenn ich aber Restart mache, passiert nichts, auch im Log steht nichts.

                                      Habe User / Pass / IP / Containername (name oder Abbbild name?), FakeID bleibt xxx?,

                                      F Offline
                                      F Offline
                                      fastfoot
                                      wrote on last edited by
                                      #42

                                      @bug77 stimmt denn der Containername mit Zeile 17 überein?

                                      iobroker läuft unter Docker auf QNAP TS-451+
                                      SkriptRecovery: https://forum.iobroker.net/post/930558

                                      B 1 Reply Last reply
                                      0
                                      • F fastfoot

                                        @bug77 stimmt denn der Containername mit Zeile 17 überein?

                                        B Offline
                                        B Offline
                                        bug77
                                        wrote on last edited by
                                        #43

                                        @fastfoot ja habe sowohl den Container Namen, als auch die Container ID probiert.
                                        Er liest alles ein, sehe alle Container als html, aber auf restart wird nicht reagiert

                                        F 1 Reply Last reply
                                        0
                                        • B bug77

                                          bei mir funktioniert das Script leider nicht.

                                          Nachdem ich den Link im Script geändert habe in

                                          http://${server}:${port}/containerstation/api/v1/login
                                          

                                          funktioniert die Abfrage.

                                          Wenn ich aber Restart mache, passiert nichts, auch im Log steht nichts.

                                          Habe User / Pass / IP / Containername (name oder Abbbild name?), FakeID bleibt xxx?,

                                          F Offline
                                          F Offline
                                          fastfoot
                                          wrote on last edited by
                                          #44

                                          @bug77 sagte in Docker Container restart iobroker per script:

                                          Nachdem ich den Link im Script geändert habe in

                                          jetzt muss da ein Bindestrich rein

                                          iobroker läuft unter Docker auf QNAP TS-451+
                                          SkriptRecovery: https://forum.iobroker.net/post/930558

                                          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
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          327

                                          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