Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT

  • 13 Odpowiedzi
  • 7512 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline Jacek

  • *** 117
  • 3
  • Nazwa i wersja ID: HC2 4.130, HC2 3.600, HCL 4.100
Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« dnia: Marzec 25, 2015, 09:35:14 pm »
function CUT_XML(respon)
  local lenResp = string.len(respon);
  local newResp = "";
  local i = 0;
  while i < lenResp do
    i = i+1;
    a = string.sub(respon, i, i);
    if a == "<" then
      while a ~= ">" and i ~= lenResp do
        i = i+1;
        a = string.sub(respon, i, i);
      end
      if string.sub(newResp, -2) ~= ". " and string.sub(newResp, -1) ~= "." then
        newResp = newResp..". ";
      end 
    else
      if a == "/" then a = ", " end;
      if string.sub(newResp, -2) == ". " then a = string.upper(a) end
      newResp = newResp..a;
    end 
  end 
  return newResp;
end
local Program = "Polsat";
local GodzPr = "20";
HC2 = Net.FHttp("www.teleman.pl", 80);
response, status, errorCode = HC2:POST("/program-tv/stacje/"..Program, "");
if tonumber(errorCode) == 0 then
  if tonumber(status) < 400 then
    respon = response
    fibaro:setGlobal("Komunikat", "Dzisiaj na kanale "..Program.." o godzinie "..GodzPr..":00.");
    fibaro:call(333, "pressButton", "2"); < - to u mnie gadaczka

    fibaro:sleep(5000);
    while respon ~= "" do
      p = string.find(respon, '>'..GodzPr..':', 1);
      if p == nil then
        fibaro:setGlobal("Komunikat", "Brak programu o "..GodzPr..":00. Sprawdzam godzinę 21:00.");
        fibaro:sleep(200);
        fibaro:call(333, "pressButton", "2");

        fibaro:sleep(5000);
        p = string.find(respon, '>21:', 1);
        if p == nil then break
        else
          fibaro:setGlobal("Komunikat", "Program o godzinie 21:00.");
          fibaro:sleep(200);
          fibaro:call(333, "pressButton", "2");

          fibaro:sleep(3000);
        end 
      end
      respon = string.sub(respon, p, -1);
      p1 = string.find(respon, '<div', 1 );
      if p1 == nil then break end

      respon = string.sub(respon, p1, -1);
      p2 = string.find(respon, "</div>", 1 );
      if p2 == nil then break end
      respon = string.sub(respon, 1, p2+7);
      respon = CUT_XML(respon);
      respon = "Tytuł dzisiejszego filmu"..respon;
      fibaro:debug(respon);
      fibaro:setGlobal("Komunikat", respon);
      fibaro:call(333, "pressButton", "2");

      ilzn = string.len(respon);
      fibaro:sleep((ilzn/11)*1000);
      respon = "";
    end 
    fibaro:setGlobal("Komunikat", "Zapraszam do oglądania kanału "..Program..". Dziękuje.");
    fibaro:call(333, "pressButton", "2");

  else
    fibaro:debug("status: "..status    );
  end   
else
  fibaro:debug("error: "..errorCode..", status: "..status);
end 
« Ostatnia zmiana: Marzec 30, 2015, 10:24:46 am wysłana przez Jacek »
Jacek
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #1 dnia: Marzec 25, 2015, 09:43:41 pm »
Heh ale fajny pomysł. Zrobię mojemu kochanie niespodziankę. Przerobie tylko żeby sprawdzał kilka stacji.
Dzięki Jacuś
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #2 dnia: Marzec 29, 2015, 12:41:06 pm »
Proszę o jakąś podpowiedź jak mam to wykorzystać
Kombinowałem po mojemu, ale nie mogę tego uruchomić
*

Offline Jacek

  • *** 117
  • 3
  • Nazwa i wersja ID: HC2 4.130, HC2 3.600, HCL 4.100
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #3 dnia: Marzec 29, 2015, 07:44:17 pm »
Zamiast fibaro:call(333, ......) musisz wysłać tekst tj respon do gadaczki.
Jacek
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #4 dnia: Marzec 29, 2015, 10:12:20 pm »
Proszę bardziej łopatologicznie
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #5 dnia: Marzec 29, 2015, 10:25:23 pm »
do zmiennej globalnej "komunikat" wrzuca to co jest do przeczytania
następnie naciska przycisk nr 2 w wirtualce o id 333, gdzie zapewne siedzi gadaczka, która odczytuje wartość ze zmiennej globalnej "komunikat" i go odczytuje przez PAW serwer.
*

Offline Jacek

  • *** 117
  • 3
  • Nazwa i wersja ID: HC2 4.130, HC2 3.600, HCL 4.100
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #6 dnia: Marzec 30, 2015, 09:06:59 am »
Dokładnie tak. Sztywniak to ładnie opisał.
Jacek
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #7 dnia: Kwiecień 04, 2015, 06:34:17 pm »
Jacek może stworzysz tu krok po kroku uruchomienia twojego pomysłu, bo ja nie daję rady tego uruchomić...
Myślę ze inni, co tu zajrzą  też będą zadowoleni
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #8 dnia: Kwiecień 04, 2015, 07:26:01 pm »
Rafał: co Ci nie działa. Pisz to pomogę. Tutorial po świętach jak będę przed kompem.
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #9 dnia: Kwiecień 04, 2015, 11:17:18 pm »
Rafał: co Ci nie działa. Pisz to pomogę. Tutorial po świętach jak będę przed kompem.

Dzięki...Udało się, ale Tutorial by się przydał
Ja się trochę męczyłem
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #10 dnia: Kwiecień 05, 2015, 06:26:29 am »
To napisz tutoriala.  Masz doświadczenia na żywo.
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #11 dnia: Kwiecień 05, 2015, 01:36:43 pm »
Tworzymy zmienną globalną o nazwie  Komunikat
 
Następnie tworzymy urządzenie wirtualne z dwoma przyciskami o nazwie np. Program Posat

Pod pierwszy przycisk wklejamy kod  Jacka zmieniając numer urządzenia wirtualnego w miejscach zaznaczonych na czerwony kolor

  function CUT_XML(respon)
  local lenResp = string.len(respon);
  local newResp = "";
  local i = 0;
  while i < lenResp do
    i = i+1;
    a = string.sub(respon, i, i);
    if a == "<" then
      while a ~= ">" and i ~= lenResp do
        i = i+1;
        a = string.sub(respon, i, i);
      end
      if string.sub(newResp, -2) ~= ". " and string.sub(newResp, -1) ~= "." then
        newResp = newResp..". ";
      end 
    else
      if a == "/" then a = ", " end;
      if string.sub(newResp, -2) == ". " then a = string.upper(a) end
      newResp = newResp..a;
    end 
  end 
  return newResp;
end
local Program = "Polsat";
local GodzPr = "20";
HC2 = Net.FHttp("www.teleman.pl", 80);
response, status, errorCode = HC2:POST("/program-tv/stacje/"..Program, "");
if tonumber(errorCode) == 0 then
  if tonumber(status) < 400 then
    respon = response
    fibaro:setGlobal("Komunikat", "Dzisiaj na kanale "..Program.." o godzinie "..GodzPr..":00.");
    fibaro:call(333, "pressButton", "2");
    fibaro:sleep(5000);
    while respon ~= "" do
      p = string.find(respon, '>'..GodzPr..':', 1);
      if p == nil then
        fibaro:setGlobal("Komunikat", "Brak programu o "..GodzPr..":00. Sprawdzam godzinę 21:00.");
        fibaro:sleep(200);
        fibaro:call(333, "pressButton", "2");
        fibaro:sleep(5000);
        p = string.find(respon, '>21:', 1);
        if p == nil then break
        else
          fibaro:setGlobal("Komunikat", "Program o godzinie 21:00.");
          fibaro:sleep(200);
          fibaro:call(333, "pressButton", "2");
          fibaro:sleep(3000);
        end 
      end
      respon = string.sub(respon, p, -1);
      p1 = string.find(respon, '<div', 1 );
      if p1 == nil then break end

      respon = string.sub(respon, p1, -1);
      p2 = string.find(respon, "</div>", 1 );
      if p2 == nil then break end
      respon = string.sub(respon, 1, p2+7);
      respon = CUT_XML(respon);
      respon = "Tytuł dzisiejszego filmu"..respon;
      fibaro:debug(respon);
      fibaro:setGlobal("Komunikat", respon);
      fibaro:call(333, "pressButton", "2");
      ilzn = string.len(respon);
      fibaro:sleep((ilzn/11)*1000);
      respon = "";
    end 
    fibaro:setGlobal("Komunikat", "Zapraszam do oglądania kanału "..Program..". Dziękuje.");
    fibaro:call(333, "pressButton", "2");
  else
    fibaro:debug("status: "..status    );
  end   
else
  fibaro:debug("error: "..errorCode..", status: "..status);
end

numer urządzenia sprawdzamy w prosty sposób klikając prawym przyciskiem myszy w oknie gdzie mamy wkleić kod LUA i wyszukując utworzone przez nas urządzenie wirtualne


 
W drugi przycisk wklejamy ten kod i mamy dodatkową funkcje gadaczki

if not Toolkit then Toolkit = {
   __header = "Toolkit",
   __version = "1.0.2",
   __luaBase = "5.1.0",
   __copyright = "Jean-Christophe Vermandé",
   __licence = [[
     Copyright (C) 2013 Jean-Christophe Vermandé

     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.

     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses></http:>.
   ]],
   __frameworkHeader = (function(self)
     self:traceEx("green", "-------------------------------------------------------------------------");
     self:traceEx("green", "-- HC2 Toolkit Framework version %s", self.__version);
     self:traceEx("green", "-- Current interpreter version is %s", self.getInterpreterVersion());
     self:traceEx("green", "-- Total memory in use by Lua: %.2f Kbytes", self.getCurrentMemoryUsed());
     self:traceEx("green", "-------------------------------------------------------------------------");
   end),
   -- chars
   chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
   -- hex
   hex = "0123456789abcdef",
   -- now(), now("*t", 906000490)
   -- system date shortcut
   now = os.date,
   -- toUnixTimestamp(t)
   -- t (table)        - {year=2013, month=12, day=20, hour=12, min=00, sec=00}
   -- return Unix timestamp
   toUnixTimestamp = (function(t) return os.time(t) end),
   -- fromUnixTimestamp(ts)
   -- ts (string/integer)    - the timestamp
   -- Example : fromUnixTimestamp(1297694343) -> 02/14/11 15:39:03
   fromUnixTimestamp = (function(s) return os.date("%c", ts) end),
   -- currentTime()
   -- return current time
   currentTime = (function() return tonumber(os.date("%H%M%S")) end),
   -- comparableTime(hour, min, sec)
   -- hour (string/integer)
   -- min (string/integer)
   -- sec (string/integer)
   comparableTime = (function(hour, min) return tonumber(string.format("%02d%02d%02d", hour, min, sec)) end),
   -- isTraceEnabled
   -- (boolean)    get or set to enable or disable trace
   isTraceEnabled = true,
   -- isAutostartTrigger()
   isAutostartTrigger = (function() local t = fibaro:getSourceTrigger();return (t["type"]=="autostart") end),
   -- isOtherTrigger()
   isOtherTrigger = (function() local t = fibaro:getSourceTrigger();return (t["type"]=="other") end),
   -- raiseError(message, level)
   -- message (string)    - message
   -- level (integer)    - level
   raiseError = (function(message, level) error(message, level); end),
   -- colorSetToRgbwTable(colorSet)
   -- colorSet (string) - colorSet string
   -- Example: local r, g, b, w = colorSetToRgbwTable(fibaro:getValue(354, "lastColorSet"));
   colorSetToRgbw = (function(self, colorSet)
     self.assertArg("colorSet", colorSet, "string");
     local t, i = {}, 1;
     for v in string.gmatch(colorSet,"(%d+)") do t[i] = v; i = i + 1; end
     return t[1], t[2], t[3], t[4];
   end),
   -- isValidJson(data, raise)
   -- data (string)    - data
   -- raise (boolean)- true if must raise error
   -- check if json data is valid
   isValidJson = (function(self, data, raise)
     self.assertArg("data", data, "string");
     self.assertArg("raise", raise, "boolean");
     if (string.len(data)>0) then
       if (pcall(function () return json.decode(data) end)) then
         return true;
       else
         if (raise) then self.raiseError("invalid json", 2) end;
       end
     end
     return false;
   end),
   -- assert_arg(name, value, typeOf)
   -- (string)    name: name of argument
   -- (various)    value: value to check
   -- (type)        typeOf: type used to check argument
   assertArg = (function(name, value, typeOf)
     if type(value) ~= typeOf then
       Tk.raiseError("argument "..name.." must be "..typeOf, 2);
     end
   end),
   -- trace(value, args...)
   -- (string)    value: value to trace (can be a string template if args)
   -- (various)    args: data used with template (in value parameter)
   trace = (function(self, value, ...)
     if (self.isTraceEnabled) then
       if (value~=nil) then       
         return fibaro:debug(string.format(value, ...));
       end
     end
   end),
   -- traceEx(value, args...)
   -- (string)    color: color use to display the message (red, green, yellow)
   -- (string)    value: value to trace (can be a string template if args)
   -- (various)    args: data used with template (in value parameter)
   traceEx = (function(self, color, value, ...)
     self:trace(string.format('<%s style="color:%s;">%s</%s>', "span", color, string.format(value, ...), "span"));
   end),
   -- getInterpreterVersion()
   -- return current lua interpreter version
   getInterpreterVersion = (function()
     return _VERSION;
   end),
   -- getCurrentMemoryUsed()
   -- return total current memory in use by lua interpreter
   getCurrentMemoryUsed = (function()
     return collectgarbage("count");
   end),
   -- trim(value)
   -- (string)    value: the string to trim
   trim = (function(s)
     Tk.assertArg("value", s, "string");
     return (string.gsub(s, "^%s*(.-)%s*$", "%1"));
   end),
   -- filterByPredicate(table, predicate)
   -- table (table)        - table to filter
   -- predicate (function)    - function for predicate
   -- Description: filter a table using a predicate
   -- Usage:
   -- local t = {1,2,3,4,5};
   -- local out, n = filterByPredicate(t,function(v) return v.item == true end);
   -- return out -> {2,4}, n -> 2;
   filterByPredicate = (function(table, predicate)
     Tk.assertArg("table", table, "table");
     Tk.assertArg("predicate", predicate, "function");
     local n, out = 1, {};
     for i = 1,#table do
       local v = table[i];
       if (v~=nil) then
         if predicate(v) then
             out[n] = v;
             n = n + 1;   
         end
       end
     end 
     return out, #out;
   end)
 };Toolkit:__frameworkHeader();Tk=Toolkit;
 end;
 -------------------------------------------------------------------------------------------
 -------------------------------------------------------------------------------------------
 -- Toolkit.Debug library extention
 -- Provide help to trace and debug lua code on Fibaro HC2
 -- Tested on Lua 5.1 with HC2 3.572 beta
 --
-- Copyright 2013 Jean-christophe Vermandé
 --
 -- Version 1.0.1 [12-12-2013]
 -------------------------------------------------------------------------------------------
 -------------------------------------------------------------------------------------------
   if not Toolkit.Debug then Toolkit.Debug = {
   __header = "Toolkit.Debug",
   __version = "1.0.1",
   -- The os.clock function returns the number of seconds of CPU time for the program.
   __clocks = {["fragment"]=os.clock(), ["all"]=os.clock()},
   -- benchmarkPoint(name)
   -- (string)    name: name of benchmark point
   benchmarkPoint = (function(self, name)
     __clocks[name] = os.clock();
   end),
   -- benchmark(message, template, name, reset)
   -- (string)     message: value to display, used by template
   -- (string)     template: template used to diqplay message
   -- (string)     name: name of benchmark point
   -- (boolean)     reset: true to force reset clock
   benchmark = (function(self, message, template, name, reset)
     Toolkit.assertArg("message", message, "string");
     Toolkit.assertArg("template", message, "string");
     if (reset~=nil) then Toolkit.assertArg("reset", reset, type(true)); end
     Toolkit:traceEx("yellow", "Benchmark ["..message.."]: "..
       string.format(template, os.clock() - self.__clocks[name]));
     if (reset==true) then self.__clocks[name] = os.clock(); end
   end)
 };
 Toolkit:traceEx("red", Toolkit.Debug.__header.." loaded in memory...");
 -- benchmark code
 if (Toolkit.Debug) then Toolkit.Debug:benchmark(Toolkit.Debug.__header.." lib", "elapsed time: %.3f cpu secs\n", "fragment", true); end ;
 end;
 -------------------------------------------------------------------------------------------
 -------------------------------------------------------------------------------------------
 -- Toolkit.Net library extention
 -- Toolkit.Net.HttpRequest provide http request with advanced functions
 -- Tested on Lua 5.1 with HC2 3.572 beta
 --
-- Copyright 2013 Jean-christophe Vermandé
 -- Thanks to rafal.m for the decodeChunks function used when reponse body is "chunked"
 -- http://en.wikipedia.org/wiki/Chunked_transfer_encoding
 --
 -- Version 1.0.3 [12-13-2013]
 -------------------------------------------------------------------------------------------
 -------------------------------------------------------------------------------------------
 if not Toolkit then error("You must add Toolkit", 2) end
 if not Toolkit.Net then Toolkit.Net = {
   -- private properties
   __header = "Toolkit.Net",
   __version = "1.0.3",
   __cr = string.char(13),
   __lf = string.char(10),
   __crLf = string.char(13, 10),
   __host = nil,
   __port = nil,
   -- private methods
   __trace = (function(v, ...)
     if (Toolkit.Net.isTraceEnabled) then Toolkit:trace(v, ...) end
   end),
   __writeHeader = (function(socket, data)
     assert(tostring(data) or data==nil or data=="", "Invalid header found: "..data);
     local head = tostring(data);
     socket:write(head..Toolkit.Net.__crLf);
     Toolkit.Net.__trace("%s.%s::request > Add header [%s]",
       Toolkit.Net.__header, Toolkit.Net.__Http.__header, head);
   end),
   __decodeChunks = (function(a)
     resp = "";
     line = "0";
     lenline = 0;
     len = string.len(a);
     i = 1;
     while i<=len do
       c = string.sub(a, i, i);
       if (lenline==0) then
         if (c==Toolkit.Net.__lf) then
           lenline = tonumber(line, 16);
           if (lenline==null) then
             lenline = 0;
           end
           line = 0;
         elseif (c==Toolkit.Net.__cr) then
           lenline = 0;
         else
           line = line .. c;
         end
       else
         resp = resp .. c;
         lenline = lenline - 1;
       end
       i = i + 1;
     end
     return resp;
   end),
   __readHeader = (function(data)
     if data == nil then
       error("Couldn't find header");
     end
     local buffer = "";
     local headers = {};
     local i, len = 1, string.len(data);
     while i<=len do
       local a = data:sub(i,i) or "";
       local b = data:sub(i+1,i+1) or "";
       if (a..b == Toolkit.Net.__crLf) then
         i = i + 1;
         table.insert(headers, buffer);
         buffer = "";
       else
         buffer = buffer..a;     
       end
       i = i + 1;
     end
     return headers;
   end),
   __readSocket = (function(socket)
     local err, len = 0, 1;
     local buffer, data = "", "";
     while (err==0 and len>0) do
       data, err = socket:read();
       len = string.len(data);
       buffer = buffer..data;
     end
     return buffer, err;
   end),
   __Http = {
     __header = "HttpRequest",
     __version = "1.0.3",   
     __tcpSocket = nil,
     __timeout = 250,
     __waitBeforeReadMs = 25,
     __isConnected = false,
     __isChunked = false,
     __url = nil,
     __method = "GET", 
     __headers = {},
     __body = nil,
     __authorization = nil,
     -- Toolkit.Net.HttpRequest:setBasicAuthentication(username, password)
     -- Sets basic credentials for all requests.
     -- username (string) – credentials username
     -- password (string) – credentials password
     setBasicAuthentication = (function(self, username, password)
       Toolkit.assertArg("username", username, "string");
       Toolkit.assertArg("password", password, "string");
       --see: http://en.wikipedia.org/wiki/Basic_access_authentication
       self.__authorization = Toolkit.Crypto.Base64:encode(tostring(username..":"..password));
     end),
     -- Toolkit.Net.HttpRequest:setBasicAuthenticationEncoded(base64String)
     -- Sets basic credentials already encoded. Avoid direct exposure for information.
     -- base64String (string)    - username and password encoded with base64
     setBasicAuthenticationEncoded = (function(self, base64String)
       Toolkit.assertArg("base64String", base64String, "string");
       self.__authorization = base64String;
     end),
     -- Toolkit.Net.HttpRequest:setWaitBeforeReadMs(ms)
     -- Sets ms
     -- ms (integer) – timeout value in milliseconds
     setWaitBeforeReadMs = (function(self, ms)
       Toolkit.assertArg("ms", ms, "integer");
       self.__waitBeforeReadMs = ms;
       Toolkit.Net.__trace("%s.%s::setWaitBeforeReadMs > set to %d ms",
         Toolkit.Net.__header, Toolkit.Net.__Http.__header, ms);
     end),
     -- Toolkit.Net.HttpRequest.getWaitBeforeReadMs()
     -- Returns the value in milliseconds
     getWaitBeforeReadMs = (function(self)
       return self.__waitBeforeReadMs;
     end),
     -- Toolkit.Net.HttpRequest.setReadTimeout(ms)
     -- Sets timeout
     -- ms (integer) – timeout value in milliseconds
       setReadTimeout = (function(self, ms)
       Toolkit.assertArg("ms", ms, "number");
       self.__timeout = ms;
       Toolkit.Net.__trace("%s.%s::setReadTimeout > Timeout set to %d ms",
         Toolkit.Net.__header, Toolkit.Net.__Http.__header, ms);
     end),
     -- Toolkit.Net.HttpRequest.getReadTimeout()
     -- Returns the timeout value in milliseconds
     getReadTimeout = (function(self)
       return self.__timeout;
     end),
     -- Toolkit.Net.HttpRequest:disconnect()
     -- Disconnect the socket used by httpRequest
     disconnect = (function(self)
       self.__tcpSocket:disconnect();
       self.__isConnected = false;
       Toolkit.Net.__trace("%s.%s::disconnect > Connected: %s",
         Toolkit.Net.__header, Toolkit.Net.__Http.__header, tostring(self.__isConnected));
     end),
     -- Toolkit.Net.HttpRequest:request(method, uri, headers, body)
     -- method (string)    - method used for the request
     -- uri (string)        - uri used for the request
     -- headers (table)    - headers used for the request (option)
     -- body (string)    - data sent with the request (option)
     request = (function(self, method, uri, headers, body)
       -- validation
       Toolkit.assertArg("method", method, "string");
       assert(method=="GET" or method=="POST" or method=="PUT" or method=="DELETE");
       assert(uri~=nil or uri=="");
       self.__isChunked = false;
       self.__tcpSocket:setReadTimeout(self.__timeout);
       self.__url = uri;
       self.__method = method;
       self.__headers = headers or {};
       self.__body = body or nil;
       local p = "";
       if (Toolkit.Net.__port~=nil) then
         p = ":"..tostring(Toolkit.Net.__port);
       end
           
       local r = self.__method.." ".. self.__url .." HTTP/1.1";
       Toolkit.Net.__trace("%s.%s::request > %s with method %s",
           Toolkit.Net.__header, Toolkit.Net.__Http.__header, self.__url, self.__method);

       local h = "Host: "..Toolkit.Net.__host .. p;
       -- write to socket headers method a host!
       Toolkit.Net.__writeHeader(self.__tcpSocket, r);
       Toolkit.Net.__writeHeader(self.__tcpSocket, h);
       -- add headers if needed
       for i = 1, #self.__headers do
         Toolkit.Net.__writeHeader(self.__tcpSocket, self.__headers[i]);
       end
       if (self.__authorization~=nil) then
         Toolkit.Net.__writeHeader(self.__tcpSocket, "Authorization: Basic "..self.__authorization);
       end
       -- add data in body if needed
       if (self.__body~=nil) then
         Toolkit.Net.__writeHeader(self.__tcpSocket, "Content-Length: "..string.len(self.__body));
         Toolkit.Net.__trace("%s.%s::request > Body length is %d",
           Toolkit.Net.__header, Toolkit.Net.__Http.__header, string.len(self.__body));
       end
       self.__tcpSocket:write(Toolkit.Net.__crLf..Toolkit.Net.__crLf);
       -- write body
       if (self.__body~=nil) then
         self.__tcpSocket:write(self.__body);
       end
       -- sleep to help process
       fibaro:sleep(self.__waitBeforeReadMs);
       -- wait socket reponse
       local result, err = Toolkit.Net.__readSocket(self.__tcpSocket);
       Toolkit.Net.__trace("%s.%s::receive > Length of result: %d",
           Toolkit.Net.__header, Toolkit.Net.__Http.__header, string.len(result));
       -- parse data
       local response, status;
       if (string.len(result)>0) then
         local _flag = string.find(result, Toolkit.Net.__crLf..Toolkit.Net.__crLf);
         local _rawHeader = string.sub(result, 1, _flag + 2);
         if (string.len(_rawHeader)) then
           status = string.sub(_rawHeader, 10, 13);
           Toolkit.Net.__trace("%s.%s::receive > Status %s", Toolkit.Net.__header,
             Toolkit.Net.__Http.__header, status);
           Toolkit.Net.__trace("%s.%s::receive > Length of headers reponse %d", Toolkit.Net.__header,
             Toolkit.Net.__Http.__header, string.len(_rawHeader));
           __headers = Toolkit.Net.__readHeader(_rawHeader);
           for k, v in pairs(__headers) do
             --Toolkit.Net.__trace("raw #"..k..":"..v)
             if (string.find(string.lower( v or ""), "chunked")) then
               self.__isChunked = true;
               Toolkit.Net.__trace("%s.%s::receive > Transfer-Encoding: chunked",
                   Toolkit.Net.__header, Toolkit.Net.__Http.__header, string.len(result));
             end
           end
         end
         local _rBody = string.sub(result, _flag + 4);
         --Toolkit.Net.__trace("Length of body reponse: " .. string.len(_rBody));
         if (self.__isChunked) then
           response = Toolkit.Net.__decodeChunks(_rBody);
           err = 0;
         else
           response = _rBody;
           err = 0;
         end
       end
       -- return budy response
       return response, status, err;
     end),
     -- Toolkit.Net.HttpRequest.version()
     -- Return the version
     version = (function()
       return Toolkit.Net.__Http.__version;
     end),
     -- Toolkit.Net.HttpRequest:dispose()
     -- Try to free memory and resources
     dispose = (function(self)     
       if (self.__isConnected) then
           self.__tcpSocket:disconnect();
       end
       self.__tcpSocket = nil;
       self.__url = nil;
       self.__headers = nil;
       self.__body = nil;
       self.__method = nil;
       if pcall(function () assert(self.__tcpSocket~=Net.FTcpSocket) end) then
         Toolkit.Net.__trace("%s.%s::dispose > Successfully disposed",
           Toolkit.Net.__header, Toolkit.Net.__Http.__header);
       end
       -- make sure all free-able memory is freed
       collectgarbage("collect");
       Toolkit.Net.__trace("%s.%s::dispose > Total memory in use by Lua: %.2f Kbytes",
         Toolkit.Net.__header, Toolkit.Net.__Http.__header, collectgarbage("count"));
     end)
   },
   -- Toolkit.Net.isTraceEnabled
   -- true for activate trace in HC2 debug window
   isTraceEnabled = false,
   -- Toolkit.Net.HttpRequest(host, port)
   -- Give object instance for make http request
   -- host (string)    - host
   -- port (intager)    - port
   -- Return HttpRequest object
   HttpRequest = (function(host, port)
     assert(host~=Toolkit.Net, "Cannot call HttpRequest like that!");
     assert(host~=nil, "host invalid input");
     assert(port==nil or tonumber(port), "port invalid input");
     -- make sure all free-able memory is freed to help process
     collectgarbage("collect");
     Toolkit.Net.__host = host;
     Toolkit.Net.__port = port;
     local _c = Toolkit.Net.__Http;
     _c.__tcpSocket = Net.FTcpSocket(host, port);
     _c.__isConnected = true;
     Toolkit.Net.__trace("%s.%s > Total memory in use by Lua: %.2f Kbytes",
           Toolkit.Net.__header, Toolkit.Net.__Http.__header, collectgarbage("count"));
     Toolkit.Net.__trace("%s.%s > Create Session on port: %d, host: %s",
           Toolkit.Net.__header, Toolkit.Net.__Http.__header, port, host);
     return _c;
   end),
   -- Toolkit.Net.version()
   version = (function()
     return Toolkit.Net.__version;
   end)
 };

 Toolkit:traceEx("red", Toolkit.Net.__header.." loaded in memory...");
 -- benchmark code
 if (Toolkit.Debug) then Toolkit.Debug:benchmark(Toolkit.Net.__header.." lib", "elapsed time: %.3f cpu secs\n", "fragment", true); end;
 end;
 ----------------------------------------------------------------------------
 -- URL-encode a string (see RFC 2396)
 ----------------------------------------------------------------------------
 function urlencode(str)
   if (str) then
     str = string.gsub (str, "\n", "\r\n")
     str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end)
     str = string.gsub (str, " ", "+")
   end
   return str
 end
 -------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-- Main process
 -------------------------------------------------------------------------------------------
 function SendVoice(message)
   local uri = "/app/gadaj.xhtml";
   local params = "?tekst=" .. urlencode(tostring(message or "empty"));
   Tk.Net.isTraceEnabled = false;
   local HttpClient = Tk.Net.HttpRequest("192.168.1.204", 8080);
-- powyżej wpisujemy IP PAW serwera
   HttpClient:setReadTimeout(500);
   local response, status, errorCode = HttpClient:request("GET",
     uri..params, {
       "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0",
       "Accept: text/html,application/xhtml+xml,application/xml;q=0.9"
     });
   HttpClient:disconnect();
   HttpClient:dispose();
   HttpClient = nil;
 end
local Komunikat = fibaro:getGlobalValue("Komunikat")
SendVoice(Komunikat);

Mam nadzieje, że dobrze to opisałem i komuś się przyda

Starajcie się wklejać kod w klamrach do tego dedykowanych (poprawiłem w tym poście viperlodz).
W klamrach nie jest widoczny czerwony(Rafał)
« Ostatnia zmiana: Kwiecień 11, 2015, 07:37:50 pm wysłana przez rafal_ll »
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #12 dnia: Kwiecień 05, 2015, 02:38:15 pm »
No to wyrósł nam tu kolejny "tutorialista". Dzięki Rafał.
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka o filmie dzisiaj po 20-tej na kanale np POLSAT
« Odpowiedź #13 dnia: Kwiecień 05, 2015, 09:19:07 pm »
No to wyrósł nam tu kolejny "tutorialista". Dzięki Rafał.

Opisałem to, co ktoś inny wymyślił, tak mogę się odwdzięczyć, ale dzięki za dobre słowo
Dosyć słodzenia bierzcie się do roboty i wymyślajcie dalej  :D