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

NEWS

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

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

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

Docker Container restart iobroker per script

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
62 Beiträge 11 Kommentatoren 7.0k Aufrufe 9 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.
  • A alka

    @fastfoot said in restart iobroker per script?:

    wie würdest du das tun?
    Beispiel einzeln in javascript.1 abschalten:

    setState('system.adapter.javascript.0.alive',false);
    setState('system.adapter.hm-rega.0.alive',false);
    

    anschließend, evtl mit timeout, wieder einschalten (die adapter jedoch nicht einzeln sondern entweder als Liste festlegen und abarbeiten oder sogar autom. einlesen

    F Offline
    F Offline
    fastfoot
    schrieb am zuletzt editiert von
    #21

    @alka said in restart iobroker per script?:

    @fastfoot said in restart iobroker per script?:

    wie würdest du das tun?
    Beispiel einzeln in javascript.1 abschalten:

    setState('system.adapter.javascript.0.alive',false);
    setState('system.adapter.hm-rega.0.alive',false);
    

    anschließend, evtl mit timeout, wieder einschalten (die adapter jedoch nicht einzeln sondern entweder als Liste festlegen und abarbeiten oder sogar autom. einlesen

    och, wie einfach. Dachte immer die alive-DP seien readonly. Ich würde dann aber über diese Restarts gehen anstatt den gesamten Container abzuschiessen, falls irgend möglich. Wäre auch für die Bediener userfreundlicher

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

    A 1 Antwort Letzte Antwort
    0
    • F fastfoot

      @alka said in restart iobroker per script?:

      @fastfoot said in restart iobroker per script?:

      wie würdest du das tun?
      Beispiel einzeln in javascript.1 abschalten:

      setState('system.adapter.javascript.0.alive',false);
      setState('system.adapter.hm-rega.0.alive',false);
      

      anschließend, evtl mit timeout, wieder einschalten (die adapter jedoch nicht einzeln sondern entweder als Liste festlegen und abarbeiten oder sogar autom. einlesen

      och, wie einfach. Dachte immer die alive-DP seien readonly. Ich würde dann aber über diese Restarts gehen anstatt den gesamten Container abzuschiessen, falls irgend möglich. Wäre auch für die Bediener userfreundlicher

      A Offline
      A Offline
      alka
      schrieb am zuletzt editiert von
      #22

      @fastfoot
      ja, zudem ich gerade herausgefunden habe wer/was mir dort Probleme bereitet hat:
      https://forum.iobroker.net/topic/40949/problem-fehler-in-mit-history-adapter
      dieses script ist aus verschiedenen Gründen notwendig, verhindert aber eine saubere Restart-Aktion

      1 Antwort Letzte Antwort
      0
      • GlasfaserG Offline
        GlasfaserG Offline
        Glasfaser
        schrieb am zuletzt editiert von Glasfaser
        #23

        @alka said in restart iobroker per script?:

        ich benötige eine Ein-Klick (bzw zwei-klick da ich ja auch schon beim alten eine Nachfrage drin hatte) Lösung, welche sich in der VIS befindet

        Sorry , habe den Thread übersehen das du geantwortet hast !

        Hier im Thread Script um Befehl auf Synology ausführen, habe ich per SSH Befehl Synology Hyperbackup gestartet.

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

        //Glasfaser  17.01.2021
        //
        //Synology Docker Container von ioBroker aus neustarten 
        //Im JS Adapter zusätzliche NPM-Module, den Eintrag: simple-ssh
        //im SSH Befehl name=iobroker : auf dein Containernamen ändern 
        //user root so lassen 
        
        
        
        on({id: "0_userdata.0.Test123", change: 'ne', val: true }, function (obj) {
        
        log ("--> Neustart Docker gestartet!");
        console.log('+++ Neustart Docker +++');
          setState('0_userdata.0.Test123', false);
          
        var SSH = require('simple-ssh');
        
        var ssh = new SSH({
           host: 'meineIP',
           user: 'root',
           pass: 'passwort'
        });
        
        ssh.exec('/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container version=1 method=restart name=iobroker', {
           out: function(stdout) {
               console.log(stdout);
               
        
           }
        }).start();
        
        }
        );
        

        EDIT:

        Könntest du den Thread Titel vielleicht ändern auf : Docker Container restart iobroker per script?

        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 Antwort Letzte Antwort
        0
        • GlasfaserG Glasfaser

          @alka said in restart iobroker per script?:

          ich benötige eine Ein-Klick (bzw zwei-klick da ich ja auch schon beim alten eine Nachfrage drin hatte) Lösung, welche sich in der VIS befindet

          Sorry , habe den Thread übersehen das du geantwortet hast !

          Hier im Thread Script um Befehl auf Synology ausführen, habe ich per SSH Befehl Synology Hyperbackup gestartet.

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

          //Glasfaser  17.01.2021
          //
          //Synology Docker Container von ioBroker aus neustarten 
          //Im JS Adapter zusätzliche NPM-Module, den Eintrag: simple-ssh
          //im SSH Befehl name=iobroker : auf dein Containernamen ändern 
          //user root so lassen 
          
          
          
          on({id: "0_userdata.0.Test123", change: 'ne', val: true }, function (obj) {
          
          log ("--> Neustart Docker gestartet!");
          console.log('+++ Neustart Docker +++');
            setState('0_userdata.0.Test123', false);
            
          var SSH = require('simple-ssh');
          
          var ssh = new SSH({
             host: 'meineIP',
             user: 'root',
             pass: 'passwort'
          });
          
          ssh.exec('/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container version=1 method=restart name=iobroker', {
             out: function(stdout) {
                 console.log(stdout);
                 
          
             }
          }).start();
          
          }
          );
          

          EDIT:

          Könntest du den Thread Titel vielleicht ändern auf : Docker Container restart iobroker per script?

          F Offline
          F Offline
          fastfoot
          schrieb am zuletzt editiert von
          #24

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

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

          O GlasfaserG 2 Antworten Letzte Antwort
          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 :-)

            O Abwesend
            O Abwesend
            oFbEQnpoLKKl6mbY5e13
            schrieb am zuletzt editiert von
            #25

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

            1 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • GlasfaserG Offline
                GlasfaserG Offline
                Glasfaser
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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 Abwesend
                      O Abwesend
                      oFbEQnpoLKKl6mbY5e13
                      schrieb am zuletzt editiert von
                      #30

                      @fastfoot
                      Fantastisch! :+1:

                      F 1 Antwort Letzte Antwort
                      0
                      • O oFbEQnpoLKKl6mbY5e13

                        @fastfoot
                        Fantastisch! :+1:

                        F Offline
                        F Offline
                        fastfoot
                        schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
                        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 Abwesend
                          O Abwesend
                          oFbEQnpoLKKl6mbY5e13
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          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
                            schrieb am zuletzt editiert von
                            #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 Antworten Letzte Antwort
                            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 Abwesend
                              O Abwesend
                              oFbEQnpoLKKl6mbY5e13
                              schrieb am zuletzt editiert von
                              #34

                              @fastfoot
                              War eine einmalige Sache. :+1:

                              1 Antwort Letzte Antwort
                              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 Abwesend
                                O Abwesend
                                oFbEQnpoLKKl6mbY5e13
                                schrieb am zuletzt editiert von
                                #35

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

                                F 1 Antwort Letzte Antwort
                                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
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  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 Abwesend
                                    O Abwesend
                                    oFbEQnpoLKKl6mbY5e13
                                    schrieb am zuletzt editiert von
                                    #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 Antwort Letzte Antwort
                                    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
                                      schrieb am zuletzt editiert von
                                      #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 Antworten Letzte Antwort
                                      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 Abwesend
                                        O Abwesend
                                        oFbEQnpoLKKl6mbY5e13
                                        schrieb am zuletzt editiert von
                                        #39

                                        @fastfoot
                                        Danke für die Info.

                                        1 Antwort Letzte Antwort
                                        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
                                          schrieb am zuletzt editiert von
                                          #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 Antwort Letzte Antwort
                                          1
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

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

                                          865

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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