Merci beaucoup Lamparo, j'avais vu ce forum mais bêtement je n'avais pas regardé les pages suivantes, 
j'ai eu ton code mais je n'arrive pas à le faire fonctionner et je ne comprends pas ce que je me trompe?
À ce stade, je me demande si je mettre au bon endroit ip, username e password:
je les mets dans cette partie du code - Voir les parties en vert- (où je mets username-manu et password-manu)
			
				if (not QNAP) then
			 
			
				  QNAP = {} 
				  QNAP.globalvariable = "" 
				    
				   -- -------------------------------------------------------------------------------------------------------------- 
				   -- Obtient le XML et le retourne sous forme de table LUA 
				   -- -------------------------------------------------------------------------------------------------------------- 
				   QNAP.getTokenFromXml = function() 
				    --local QNAP2URL = Net.FHttp(ip,port); 
				    local QNAP2URL = Net.FHttp("MY IP", 13131); 
				         
				         
				    response = QNAP2URL:GET("/cgi-bin/authLogin.cgi?user=user-manu_pwd=password-manu"); 
				     
				    xmlTable = QNAP.iif(response ~= nil, QNAP.newParser().ParseXmlText(response), ""); 
				     
				    if (xmlTable.QDocRoot  ~= nil) then
			 
			
				      qsidstr = xmlTable.QDocRoot.authSid:value(); 
				      if (string.len(qsidstr)>0) then 
				        fibaro:debug("Qtoken founded"); 
				        qsidstr = qsidstr:gsub("[".."<![CDATA[".."]", ''); 
				        qsidstr = qsidstr:gsub("[".."]".."]", ''); 
				        qsidstr = qsidstr:gsub("["..">".."]", ''); 
				        fibaro:debug(qsidstr); 
				        response = QNAP2URL:GET("/cgi-bin/sys/sysRequest.cgi?subfunc=power_mgmt&count=0.1234&sid="..qsidstr.."&apply=shutdown"); 
				        if (string.find(response, "OK")) then 
				          fibaro:log("Power Off Server") 
				        else 
				          fibaro:log("ERROR") 
				        end 
				      end 
				    end 
				     
				     
				   end
			 
			
				 
				   -- ------------------------------------------------------------------------------------------------------------- 
				   -- Teste la condition  et retourne la valeur true ou false 
				   -- ------------------------------------------------------------------------------------------------------------- 
				   QNAP.iif = function(condition, iftrue, iffalse) 
				      if (condition) then 
				         return iftrue 
				      end 
				      return iffalse 
				   end
			 
			
				 
				   -- ------------------------------------------------------------------------------------------------------------- 
				   -- Ceci est une version modifiée par Steven de Corona-XML-Module par Jonathan Beebe qui a son tour 
				   -- est basée sur Alexander Makeev's Lua-only XML parser . 
				   -- see https://github.com/Cluain/Lua-Simple-XML-Parser 
				   -- ------------------------------------------------------------------------------------------------------------- 
				   QNAP.newParser = function()
			 
			
				      parseXml = {}
			 
			
				      parseXml.FromXmlString = function(value) 
				         value = string.gsub(value, "([%x]+)%;", 
				             function(h) 
				            return string.char(tonumber(h, 16)) 
				             end); 
				         value = string.gsub(value, "([0-9]+)%;", 
				             function(h) 
				            return string.char(tonumber(h, 10)) 
				             end); 
				         value = string.gsub(value, "'", "'"); 
				         value = string.gsub(value, ">", ">"); 
				         value = string.gsub(value, "<", "<"); 
				         value = string.gsub(value, "&", "&"); 
				         return value; 
				      end
			 
			
				      parseXml.ParseArgs = function(node, s) 
				         string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) 
				             node:addProperty(w,  parseXml.FromXmlString(a)) 
				         end) 
				      end
			 
			
				      parseXml.ParseXmlText = function(xmlText) 
				         local stack = {} 
				         local top = parseXml.newNode() 
				         table.insert(stack, top) 
				         local ni, c, label, xarg, empty 
				         local i, j = 1, 1 
				         while true do 
				             ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i) 
				             if not ni then break end 
				             local text = string.sub(xmlText, i, ni - 1); 
				             if not string.find(text, "^%s*$") then 
				            local lVal = (top:value() or "") .. parseXml.FromXmlString(text) 
				            stack[#stack]:setValue(lVal) 
				             end 
				             if empty == "/" then -- empty element tag 
				            local lNode = parseXml.newNode(label) 
				            parseXml.ParseArgs(lNode, xarg) 
				            top:addChild(lNode) 
				             elseif c == "" then -- start tag 
				            local lNode = parseXml.newNode(label) 
				            parseXml.ParseArgs(lNode, xarg) 
				            table.insert(stack, lNode) 
				            top = lNode 
				             else -- end tag 
				            local toclose = table.remove(stack) -- remove top
			 
			
				            top = stack[#stack] 
				            if #stack < 1 then 
				                error("XmlParser: nothing to close with " .. label) 
				            end 
				            if toclose:name() ~= label then 
				                error("XmlParser: trying to close " .. toclose.name .. " with " .. label) 
				            end 
				            top:addChild(toclose) 
				             end 
				             i = j + 1 
				         end 
				         local text = string.sub(xmlText, i); 
				         if #stack > 1 then 
				             error("XmlParser: unclosed " .. stack[#stack]:name()) 
				         end 
				         return top 
				      end
			 
			
				      parseXml.newNode = function(name) 
				          local node = {} 
				          node.___value = nil 
				          node.___name = name 
				          node.___children = {} 
				          node.___props = {} 
				          function node:value() return self.___value end 
				          function node:setValue(val) self.___value = val end 
				          function node:name() return self.___name end 
				          function node:setName(name) self.___name = name end 
				          function node:children() return self.___children end 
				          function node:numChildren() return #self.___children end 
				          function node:addChild(child) 
				         if self[child:name()] ~= nil then 
				             if type(self[child:name()].name) == "function" then 
				            local tempTable = {} 
				            table.insert(tempTable, self[child:name()]) 
				            self[child:name()] = tempTable 
				             end 
				             table.insert(self[child:name()], child) 
				         else 
				             self[child:name()] = child 
				         end 
				         table.insert(self.___children, child) 
				          end 
				          function node:properties() return self.___props end 
				          function node:numProperties() return #self.___props end 
				          function node:addProperty(name, value) 
				         local lName = "@" .. name 
				         if self[lName] ~= nil then 
				             if type(self[lName]) == "string" then 
				            local tempTable = {} 
				            table.insert(tempTable, self[lName]) 
				            self[lName] = tempTable 
				             end 
				             table.insert(self[lName], value) 
				         else 
				             self[lName] = value 
				         end 
				         table.insert(self.___props, { name = name, value = self[name] }) 
				          end 
				          return node 
				      end
			 
			
				      return parseXml; 
				   end   
				end 
				QNAP.getTokenFromXml();