Gadaczka

  • 24 Odpowiedzi
  • 14978 Wyświetleń

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

*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Gadaczka
« dnia: Marzec 25, 2015, 09:20:08 pm »
Wirtualka mówi i wysyła PUSH na smartfona :
"Dzisiaj jest wtorek, 24 czerwca, imieniny Adama i Jana, Pogoda lekkie zachmurzenia, temperatura 12, ciśnienie 1007, wilgotność 80 , wiatr 20, zachmurzenie 8"

Dodałem zaokrąglenie bo gadała niepotrzebnie "po przecinku"


-- Toolkit Framework, lua library extention for HC2, hope that it will be useful.
-- This Framework is an addon for HC2 Toolkit application in a goal to aid the integration.
-- Tested on Lua 5.1 with Fibaro HC2 3.572 beta
--
-- Version 1.0.2 [12-13-2013]
--
-- Use: Toolkit or Tk shortcut to access Toolkit namespace members.
--
-- Example:
-- Toolkit:trace("value is %d", 35); or Tk:trace("value is %d", 35);
-- Toolkit.assertArg("argument", arg, "string"); or Tk.assertArg("argument", arg, "string");
--
-- current release: http://krikroff77.github.io/Fibaro-HC2-Toolkit-Framework/
-- latest release: https://github.com/Krikroff77/Fibaro-HC2-Toolkit-Framework/releases/latest
--
-- Memory is preserved: The code is loaded only the first time in a virtual device
-- main loop and reloaded only if application pool restarded.
--
-- 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.

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/gadaj2.xhtml";
  local params = "?tekst=" .. urlencode(tostring(message or "empty"))..",&vol=100";
  Tk.Net.isTraceEnabled = false;
  local HttpClient = Tk.Net.HttpRequest("192.168.0.13", 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 currentDate = os.date("*t");
if (currentDate.wday == 2 ) then dzien="poniedziałek"
  elseif (currentDate.wday == 3 ) then dzien="wtorek"
  elseif (currentDate.wday == 4 ) then dzien="środa"
  elseif (currentDate.wday == 5 ) then dzien="czwartek"
  elseif (currentDate.wday == 6 ) then dzien="piątek"
  elseif (currentDate.wday == 7 ) then dzien="sobota"
  elseif (currentDate.wday == 1 ) then dzien="niedziela"
end 
    if (currentDate.day == 1 ) then dzienm="pierwszy"
elseif (currentDate.day == 2 ) then dzienm="drugi"
elseif (currentDate.day == 3 ) then dzienm="trzeci"
elseif (currentDate.day == 4 ) then dzienm="czwarty"
elseif (currentDate.day == 5 ) then dzienm="piąty"
elseif (currentDate.day == 6 ) then dzienm="szósty" 
elseif (currentDate.day == 7 ) then dzienm="siódmy"
elseif (currentDate.day == 8 ) then dzienm="ósmy"
elseif (currentDate.day == 9 ) then dzienm="dziewiąty"
elseif (currentDate.day == 10 ) then dzienm="dziesiąty"
elseif (currentDate.day == 11 ) then dzienm="jedenasty"
elseif (currentDate.day == 12 ) then dzienm="dwunasty"
elseif (currentDate.day == 13 ) then dzienm="trzynasty"
elseif (currentDate.day == 14 ) then dzienm="czternasty"
elseif (currentDate.day == 15 ) then dzienm="piętnasty"
elseif (currentDate.day == 16 ) then dzienm="szesnasty"
elseif (currentDate.day == 17 ) then dzienm="siedemnasty"
elseif (currentDate.day == 18 ) then dzienm="osiemnasty"
elseif (currentDate.day == 19 ) then dzienm="dziewiętnasty"
elseif (currentDate.day == 20 ) then dzienm="dwudziesty "
elseif (currentDate.day == 21 ) then dzienm="dwudziesty pierwszy"
elseif (currentDate.day == 22 ) then dzienm="dwudziesty drugi"
elseif (currentDate.day == 23 ) then dzienm="dwudziesty trzeci"
elseif (currentDate.day == 24 ) then dzienm="dwudziesty czwarty"
elseif (currentDate.day == 25 ) then dzienm="dwudziesty piąty"
elseif (currentDate.day == 26 ) then dzienm="dwudziesty szósty"
elseif (currentDate.day == 27 ) then dzienm="dwudziesty siódmy"
elseif (currentDate.day == 28 ) then dzienm="dwudziesty ósmy"
elseif (currentDate.day == 29 ) then dzienm="dwudziesty dziewiąty"
elseif (currentDate.day == 30 ) then dzienm="trzydziesty"
elseif (currentDate.day == 31 ) then dzienm="trzydziesty pierwszy"
end
 
 if (currentDate.month == 1 ) then mies="stycznia"
elseif (currentDate.month == 2 ) then mies="luty" 
elseif (currentDate.month == 3 ) then mies="marca"
elseif (currentDate.month == 4 ) then mies="kwietnia"
elseif (currentDate.month == 5 ) then mies="maja"
elseif (currentDate.month == 6 ) then mies="czerwca"
elseif (currentDate.month == 7 ) then mies="lipca"
elseif (currentDate.month == 8 ) then mies="sierpnia"
elseif (currentDate.month == 9 ) then mies="września"
elseif (currentDate.month == 10 ) then mies="październik"
elseif (currentDate.month == 11 ) then mies="listopada"
elseif (currentDate.month == 12 ) then mies="grudnia"
  end
 
--------------imieniny

t={d0101="Mieczysława i Mieszka",
d0102="Izydora i Makarego",
d0103="Danuty i Genowefy",
d0104="Anieli i Eugeniusza",
d0105="Edwarda i Szymona",
d0106="Kacpra i Melchiora Baltazara",
d0107="Juliana i Lucjana",
d0108="Seweryna i Teofila",
d0109="Weroniki i Juliana",
d0110="Jana i Wilhelma",
d0111="Matyldy i Honoraty",
d0112="Benedykta i Arkadiusza",
d0113="Weroniki i Bogumiły",
d0114="Feliksa i Hilarego",
d0115="Pawła i Izydora",
d0116="Marcelego i Włodzimierza",
d0117="Antoniego i Rościsława",
d0118="Piotra i Małgorzaty",
d0119="Henryka i Mariusza",
d0120="Fabiana i Sebastiana",
d0121="Agnieszki",
d0122="Anastazego",
d0123="Ildefonsa i Rajmunda",
d0124="Felicji i Tymoteusza",
d0125="Pawła i Miłosza",
d0126="Seweryna i Pauliny",
d0127="Jana i Przybysława",
d0128="Walerego i Radomira",
d0129="Zdzisława i Franciszka",
d0130="Macieja i Martyny",
d0131="Jana i Marceliny",
d0201="Brygidy i Ignacego",
d0202="Marii i Mirosława",
d0203="Błażeja i Hipolita",
d0204="Andrzeja i Weroniki",
d0205="Agaty i Adelajdy",
d0206="Doroty i Tytusa",
d0207="Ryszarda i Romualda",
d0208="Jana i Piotra",
d0209="Cyryla i Apolonii",
d0210="Jacka i Scholastyki",
d0211="Łazarza i Marii",
d0212="Eulalii i Modesta",
d0213="Grzegorza i Katarzyny",
d0214="Walentego i Metodego",
d0215="Faustyna i Józefa",
d0216="Danuty i Juliany",
d0217="Donata i Łukasza",
d0218="Symeona i Konstancji",
d0219="Konrada i Arnolda",
d0220="Leona i Ludomiła",
d0221="Eleonory i Feliksa",
d0222="Marty i Małgorzaty",
d0223="Romany i Damiana",
d0224="Macieja i Bogusza",
d0225="Wiktora i Cezarego",
d0226="Mirosława i Aleksandra",
d0227="Gabriela i Anastazji",
d0228="Teofila i Makarego",
d0229="Rufina i Hilarego",
d0301="Antoniny i Radosława",
d0302="Heleny i Pawła",
d0303="Tycjana i Kunegundy",
d0304="Kazimierza i Łucji",
d0305="Fryderyka i Wacława",
d0306="Róży i Wiktora",
d0307="Pawła i Tomasza",
d0308="Beaty",
d0309="Katarzyny i Franciszki",
d0310="Cypriana i Marcelego",
d0311="Konstantego i Benedykta",
d0312="Bernarda i Grzegorza",
d0313="Bożeny i Krystyny",
d0314="Leona i Matyldy",
d0315="Ludwiki i Klemensa",
d0316="Izabeli i Hilarego",
d0317="Zbigniewa i Partyka",
d0318="Cyryla i Edwarda",
d0319="Józefa i Bogdana",
d0320="Eufemii i Klaudii",
d0321="Benedykta i Lubomira",
d0322="Bogusława i Katarzyny",
d0323="Feliksa i Pelagii",
d0324="Marka i Gabriela",
d0325="Marii i Wieńczysłąwa",
d0326="Teodora i Emanuela",
d0327="Lidii i Ernesta",
d0328="Anieli i Sykstusa",
d0329="Wiktora i Eustachego",
d0330="Amelii i Jana",
d0331="Balbiny i Gwidona",
d0401="Zbigniewa i Grażyny",
d0402="Franciszka i Władysława",
d0403="Ryszarda i Pankracego",
d0404="Wacława i Izydora",
d0405="Ireny i Wincentego",
d0406="Celestyna i Wilhelma",
d0407="Donata i Rufina",
d0408="Dionizego i Januarego",
d0409="Marii i Marcelego",
d0410="Michała i Makarego",
d0411="Leona i Filipa",
d0412="Juliusza i Wiktora",
d0413="Przemysława i Hermenegildy",
d0414="Justyny i Waleriana",
d0415="Anastazji i Bazylego",
d0416="Julii i Benedykta",
d0417="Roberta i Patrycego",
d0418="Bogusławy i Bogumiły",
d0419="Adolfa i Tymona",
d0420="Czesława i Agnieszki",
d0421="Feliksa i Anzelma",
d0422="Leona i Łukasza",
d0423="Jerzego i Wojciecha",
d0424="Grzegorza i Aleksandra",
d0425="Marka i Jarosława",
d0426="Marii i Marcelego",
d0427="Zyty i Teofila",
d0428="Pawła i Walerii",
d0429="Piotra i Pawła",
d0430="Mariana i Katarzyny",
d0501="Józefa i Filipa",
d0502="Anatola i Zygmunta",
d0503="Marii i Aleksandra",
d0504="Moniki i Floriana",
d0505="Ireny i Waldemara",
d0506="Jana i Judyty",
d0507="Ludmiły i Gizeli",
d0508="Stanisława i Dezyderii",
d0509="Bożydara i Grzegorza",
d0510="Izydora i Antoniny",
d0511="Franciszka i Jakuba",
d0512="Dominika i Pankracego",
d0513="Roberta i Serwacego",
d0514="Bonifacego i Dobiesława",
d0515="Zofii i Jana",
d0516="Andrzeja i Wieńczysława",
d0517="Weroniki i Sławomira",
d0518="Feliksa i Aleksandry",
d0519="Piotra i Mikołaja",
d0520="Bernarda i Bazylego",
d0521="Wiktora i Tymoteusza",
d0522="Julii i Heleny",
d0523="Iwony i Dezyderego",
d0524="Joanny i Zuzanny",
d0525="Urbana i Grzegorza",
d0526="Filipa i Pauliny",
d0527="Jana i Juliusza",
d0528="Augustyna i Jaromira",
d0529="Teodozji i Magdaleny",
d0530="Feliksa i Ferdynanda",
d0531="Anieli i Petroneli",
d0601="Jakuba i Konrada",
d0602="Erazma i Marianny",
d0603="Leszka i Kłotyldy",
d0604="Karola i Franciszka",
d0605="Walerii i Bonifacego",
d0606="Pauliny i Laury",
d0607="Roberta i Wiesława",
d0608="Maksyma i Medarda",
d0609="Pelagii i Felicjana",
d0610="Bogumiła i Małgorzaty",
d0611="Barnaby i Feliksa",
d0612="Jana i Onufrego",
d0613="Lucjana i Antoniego",
d0614="Walerego i Bazylego",
d0615="Wita i Jolanty",
d0616="Aliny i Justyny",
d0617="Laury i Adolfa",
d0618="Marka i Elżbiety",
d0619="Gerwazego i Protazego",
d0620="Bogny i Florentyny",
d0621="Alicji i Alojzego",
d0622="Pauliny i Flawiusza",
d0623="Wandy i Zenona",
d0624="Jana i Danuty",
d0625="Łucji i Wilhelma",
d0626="Jana i Pawła",
d0627="Marii i Władysława",
d0628="Leona i Ireneusza",
d0629="Piotra i Pawła",
d0630="Emilii i Lucyny",
d0701="Haliny i Mariana",
d0702="Marii i Urbana",
d0703="Jacka i Anatola",
d0704="Teodora i Innocentego",
d0705="Karoliny i Antoniego",
d0706="Łucji i Dominika",
d0707="Cyryla i Metodego",
d0708="Elżbiety i Prokopa",
d0709="Zenona i Weroniki",
d0710="Filipa i Amelii",
d0711="Olgi i Pelagii",
d0712="Jana i Gwalberta",
d0713="Ernesta i Małgorzaty",
d0714="Marceliny i Bonawentury",
d0715="Henryka i Włodzimierza",
d0716="Marii i Benedykta",
d0717="Bogdana i Aleksego",
d0718="Kamila i Szymona",
d0719="Wincentego i Wodzisława",
d0720="Czesława i Hieronima",
d0721="Daniela i Andrzeja",
d0722="Magdaleny i Bolesława",
d0723="Bogny i Apolinarego",
d0724="Kingi i Krystyny",
d0725="Jakuba i Krzysztofa",
d0726="Anny i Mirosławy",
d0727="Julii i Natalii",
d0728="Wiktora i Innocentego",
d0729="Marty i Olafa",
d0730="Julity i Ludmiły",
d0731="Ignacego i Heleny",
d0801="Piotra i Justyny",
d0802="Gustawa i Alfonsa",
d0803="Lidii i Augusta",
d0804="Dominika i Protazego",
d0805="Marii i Stanisławy",
d0806="Sławy i Jakuba",
d0807="Doroty i Kajetana",
d0808="Emila i Cyryla",
d0809="Romana i Romualda",
d0810="Borysa i Wawrzyńca",
d0811="Zuzanny i Filomeny",
d0812="Klary i Hilarego",
d0813="Hipolita i Diany",
d0814="Alfreda i Euzebiusza",
d0815="Marii i Napoleona",
d0816="Rocha i Joachima",
d0817="Jacka i Mirona",
d0818="Heleny i Bronisławy",
d0819="Bolsława i Juliana",
d0820="Bernarda i Sobiesława",
d0821="Joanny i Franciszki",
d0822="Cezarego i Tymoteusza",
d0823="Filipa i Apolinarego",
d0824="Jerzego i Bartłomieja",
d0825="Ludwika i Luizy",
d0826="Marii i Sandry",
d0827="Józefa i Moniki",
d0828="Augustyna i Patrycji",
d0829="Sabiny i Jana",
d0830="Rózy i Szczęsnego",
d0831="Bogdana i Rajmunda",
d0901="Bronisława i Idziego",
d0902="Stefana i Juliana",
d0903="Izabeli i Szymona",
d0904="Rozalii i Róży",
d0905="Doroty i Wawrzyńca",
d0906="Beaty i Eugeniusza",
d0907="Reginy i Melchiora",
d0908="Marii i Adrianny",
d0909="Piotra i Mikołaja",
d0910="Bernarda i Sobiesława",
d0911="Jacka i Piotra",
d0912="Marii i Gwidona",
d0913="Filipa i Eugenii",
d0914="Cypriana i Bernarda",
d0915="Albina i Nikodema",
d0916="Edyty i Kornela",
d0917="Justyna i Franciszki",
d0918="Ireny i Józefa",
d0919="Januarego i Konstancji",
d0920="Filipiny i Eustachego",
d0921="Hipolita i Mateusza",
d0922="Tomasza i Maurycego",
d0923="Tekli i Bogusława",
d0924="Gerarda i Teodora",
d0925="Aurelii i Ładysława",
d0926="Justyny i Cypriana",
d0927="Kosmy i Damiana",
d0928="Marka i Wacława",
d0929="Michała i Michaliny",
d0930="Zofii i Hieronima",
d1001="Danuty i Remigiusza",
d1002="Teofila i Dionizego",
d1003="Gerarda i Teresy",
d1004="Rozalii i Franciszka",
d1005="Apolinarego i Placyda",
d1006="Artura i Brunona",
d1007="Marii i Marka",
d1008="Pelagii i Brygidy",
d1009="Ludwika i Dionizego",
d1010="Pauliny i Franciszka",
d1011="Emila i Aldony",
d1012="Eustachego i Maksymiliana",
d1013="Edwarda i Teofila",
d1014="Bernarda i Fortunaty",
d1015="Teresy i Jadwigi",
d1016="Gawła i Ambrożego",
d1017="Wiktora i Małgorzaty",
d1018="Łukasza i Juliana",
d1019="Piotra i Ziemowita",
d1020="Ireny i Kleopatry",
d1021="Urszuli i Hilarego",
d1022="Filipa i Kordulii",
d1023="Teodora i Seweryna",
d1024="Rafała i Marcina",
d1025="Kryspina i Ingi",
d1026="Lucjana i Ewarysta",
d1027="Sabiny i Iwony",
d1028="Szymona i Tadeusza",
d1029="Euzebii i Narcyza",
d1030="Zenobii i Przemysława",
d1031="Urbana i Augusta",
d1101="Seweryna i Wiktoryny",
d1102="Bohdana i Bożydara",
d1103="Sylwii i Huberta",
d1104="Karola i Olgierda",
d1105="Sławomira i Elżbiety",
d1106="Feliksa i Leonarda",
d1107="Antoniego i Ernesta",
d1108="Sewera i Gotfryda",
d1109="Usryna i Teodora",
d1110="Andrzeja i Ludomira",
d1111="Bartłomieja i Marcina",
d1112="Renaty i Witolda",
d1113="Stanisława i Mikołaja",
d1114="Serafina i Rogera",
d1115="Alberta i Leopolda",
d1116="Gertrudy i Edmunda",
d1117="Grzegorza i Salomei",
d1118="Anieli i Romana",
d1119="Elżbiety i Seweryna",
d1120="Feliksa i Anatola",
d1121="Janusza i Konrada",
d1122="Marka i Cecylii",
d1123="Klemensa i Amelii",
d1124="Jana i Flory",
d1125="Erazma i Katarzyny",
d1126="Konrada i Sylwestra",
d1127="Waleriana i Maksymiliana",
d1128="Grzegorza i Zdzisława",
d1129="Błażeja i Saturnina",
d1130="Andrzeja i Konstantego",
d1201="Natalii i Eligiusza",
d1202="Pauliny i Balbiny",
d1203="Franciszka i Ksawerego",
d1204="Barbary i Piotra",
d1205="Kryspina i Saby",
d1206="Mikołaja i Emiliana",
d1207="Marcina i Ambrożego",
d1208="Marii i Wirgiliusza",
d1209="Wiesławy i Leokadii",
d1210="Julii i Daniela",
d1211="Damazego i Waldemara",
d1212="Adelajdy i Aleksandra",
d1213="Łucji i Otylii",
d1214="Alfreda i Izydora",
d1215="Celiny i Waleriana",
d1216="Euzebiusza i Zdzisławy",
d1217="Olimpii i Łazarza",
d1218="Gracjana i Bogusława",
d1219="Urbana i Dariusza",
d1220="Bogumiła i Dominika",
d1221="Tomasza i Tomisława",
d1222="Zenona i Honoraty",
d1223="Wiktorii i Sławomiry",
d1224="Adama i Ewy",
d1225="Eugenii i Anastazji",
d1226="Dionizego i Szczepana",
d1227="Kosmy i Damiana",
d1228="Cezarego i Teofila",
d1229="Dawida i Tomasza",
d1230="Eugeniusza i Sabiny",
d1231="Sylwestra i Sebastiana"}


data= "d"..tostring(os.date("%m%d"))
for a, b in pairs(t) do
 if data==a then
 fibaro:debug(b)
    imieniny=b

  end
end

function round(n)
  return math.floor((math.floor(n*2) + 1)/2)
end

miejsc="ostrów wielkopolski"
panstwo="pl"
-- smartfon to ID smartfonu na który ma wysłac pogodę
local smartfon=845
HC3 = Net.FHttp("api.openweathermap.org")
danem, statusm = HC3:GET("/data/2.5/weather?q="..miejsc..","..panstwo.."&units=metric&lang=pl")
ajson=json.decode(danem)
tempmin=round(ajson.main.temp_min)
fibaro:debug(round(tempmin))
tempmax=round(ajson.main.temp_max)
cisn=round(ajson.main.pressure)
wilg=round(ajson.main.humidity)
wiatr=round(ajson.wind.speed)
zach=ajson.clouds.all
pogo=ajson.weather[1].description
wysylka=" Pogoda "..pogo..", Temperatura "..tempmin
if tempmin~=tempmax then
wysylka=wysylka.."-"..tempmax
end
wysylka=wysylka..", Ciśnienie "..cisn..", Wilgotność "..wilg..", Wiatr "..wiatr..", Zachmurzenie "..zach
fibaro:call(smartfon, "sendPush", wysylka, wysylka)


 
-- tu wpisujemy tekst do powiedzenia
SendVoice("Dzień dobry. Dzisiaj jest "..dzien.." "..dzienm.." "..mies..". Imieniny "..imieniny.."."..wysylka);
fibaro:debug(os.date("%B"))
--EOF
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka
« Odpowiedź #1 dnia: Marzec 28, 2015, 11:10:56 pm »
sztywniak jakoś od razu lepiej dzięki...

Pytanko
Czy można dodać do jednego kodu jeszcze jeden adres PAW serwera tak żeby na przykład na różnych piętrach był odtwarzany ten sam komunikat?

 

local HttpClient = Tk.Net.HttpRequest("192.168.1.204", 8080);
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Gadaczka
« Odpowiedź #2 dnia: Marzec 28, 2015, 11:14:16 pm »
powiel całą funkcje sendvoice na sendvoicegora i zmień w niej IP, później wywołaj na końcu skryptu nową funkcję, tak jak starą
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka
« Odpowiedź #3 dnia: Marzec 28, 2015, 11:26:15 pm »
Działa dzięki
------------------------------
 
« Ostatnia zmiana: Maj 23, 2015, 07:03:44 pm wysłana przez rafal_ll »
*

Offline viperlodz

  • Moderator Globalny
  • ***** 838
  • 23
  • Nazwa i wersja ID: HC3 / HC2/ HC3L / Yubii
Odp: Gadaczka
« Odpowiedź #4 dnia: Listopad 02, 2015, 09:56:50 am »
Jak zrobić zeby ta gadaczka zaczęła gadać ???
Nauczyć się programować.
*

Offline marecki_0luk1

  • Administratorzy
  • ***** 430
  • 26
  • Nazwa i wersja ID: HC3 5.070.42 / HC2 4.600
Odp: Gadaczka
« Odpowiedź #5 dnia: Listopad 02, 2015, 12:54:34 pm »
skasowałem całą dyskusję - nic nie wnosiła do tematu.
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka
« Odpowiedź #6 dnia: Listopad 30, 2015, 09:13:32 pm »
Nie mogę sobie poradzić z głośnością kombinuję i nic zawsze 100%
Mam odpowiednią zmienną predefiniowaną o nazwie PoraDnia gdzie jest dzien, wieczor i noc
Ustawiam zmienną na np. noc, a głośność jest 100%

 mój proces

  function SendVoice(message,volume)
 local uri = "/app/gadaj.xhtml";
 local params = "?tekst=" .. urlencode(tostring(message or "empty")) .. "&vol=" .. volume;
 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
-- zmienna określająca kiedy jest dzień kiedy noc
 local PoraDnia = fibaro:getGlobalValue("PoraDnia")
--głośnosc komunikatu w zależności od pory dnia
 if (PoraDnia == "dzien") then
 volume_message = 100
 else
 volume_message = 50
 end

 -- tu wpisujemy tekst do powiedzenia
 SendVoice("Koniec prania",volume_message);


Tak wygląda plik gadaj.xhtml
 

gadaczka  import android.media.AudioManager; import android.content.Context; service = server.props.get("serviceContext"); audioMgr = service.getSystemService(Context.AUDIO_SERVICE); maxVolume = audioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); volume = audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC); tekst = parameters.get("tekst"); vol = parameters.get("vol"); langue = parameters.get("langue"); if (vol!=null) { audioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, eval(vol), 0); } if (langue==null) { langue = ""; } switch (langue) { case "en": lang = "new Locale(\"en\", \"EN\")"; break; case "fr": lang = "new Locale(\"fr\", \"FR\")"; break; case "de": lang = "new Locale(\"de\", \"DE\")"; break; case "it": lang = "new Locale(\"it\", \"IT\")"; break; case "es": lang = "new Locale(\"es\", \"ES\")"; break; default: lang = "Locale.getDefault()"; } if (tekst==null) { tekst = ""; } speak (tekst, eval(lang)); if (vol!=null) { audioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, eval(volume), 0); }   gadaczka Parametry  : tekst : tekst do przeczytania langue : jezyk en : angielski fr : francuski de : niemiecki it : wloski es : hiszpanski 


Proszę o pomoc
*

Offline michu

  • * 18
  • 3
  • Nazwa i wersja ID: HC2 4.053
Odp: Gadaczka
« Odpowiedź #7 dnia: Grudzień 04, 2015, 09:12:08 pm »
Witam.

U Mnie dopiero zmiana poziomu z 100 na 5 jest odczuwalna, wygląda na to że skala głośności tak naprawdę jest od 1-10
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka
« Odpowiedź #8 dnia: Grudzień 04, 2015, 10:06:24 pm »
Witam.

U Mnie dopiero zmiana poziomu z 100 na 5 jest odczuwalna, wygląda na to że skala głośności tak naprawdę jest od 1-10

Dziękuję to było takie proste a ja siedziałem nad tym tyle czasu...
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka
« Odpowiedź #9 dnia: Grudzień 06, 2015, 03:38:09 pm »
Kod strajkuje
wywala mi taki błąd

 [DEBUG] 15:29:51: -------------------------------------------------------------------------
[DEBUG] 15:29:51: -- HC2 Toolkit Framework version 1.0.2
[DEBUG] 15:29:51: -- Current interpreter version is Lua 5.1
[DEBUG] 15:29:51: -- Total memory in use by Lua: 143.70 Kbytes
[DEBUG] 15:29:51: -------------------------------------------------------------------------
[DEBUG] 15:29:51: Toolkit.Debug loaded in memory...
[DEBUG] 15:29:51: Benchmark [Toolkit.Debug lib]: elapsed time: 0.000 cpu secs
[DEBUG] 15:29:51: Toolkit.Net loaded in memory...
[DEBUG] 15:29:51: Benchmark [Toolkit.Net lib]: elapsed time: 0.000 cpu secs
[DEBUG] 15:29:51: Mikołaja i Emiliana
[ERROR] 15:29:51: line 1004: Expected value but found invalid token at character 1

Wirtualka mówi i wysyła PUSH na smartfona :
"Dzisiaj jest wtorek, 24 czerwca, imieniny Adama i Jana, Pogoda lekkie zachmurzenia, temperatura 12, ciśnienie 1007, wilgotność 80 , wiatr 20, zachmurzenie 8"

Dodałem zaokrąglenie bo gadała niepotrzebnie "po przecinku"


-- Toolkit Framework, lua library extention for HC2, hope that it will be useful.
-- This Framework is an addon for HC2 Toolkit application in a goal to aid the integration.
-- Tested on Lua 5.1 with Fibaro HC2 3.572 beta
--
-- Version 1.0.2 [12-13-2013]
--
-- Use: Toolkit or Tk shortcut to access Toolkit namespace members.
--
-- Example:
-- Toolkit:trace("value is %d", 35); or Tk:trace("value is %d", 35);
-- Toolkit.assertArg("argument", arg, "string"); or Tk.assertArg("argument", arg, "string");
--
-- current release: http://krikroff77.github.io/Fibaro-HC2-Toolkit-Framework/
-- latest release: https://github.com/Krikroff77/Fibaro-HC2-Toolkit-Framework/releases/latest
--
-- Memory is preserved: The code is loaded only the first time in a virtual device
-- main loop and reloaded only if application pool restarded.
--
-- 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.

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/gadaj2.xhtml";
  local params = "?tekst=" .. urlencode(tostring(message or "empty"))..",&vol=100";
  Tk.Net.isTraceEnabled = false;
  local HttpClient = Tk.Net.HttpRequest("192.168.0.13", 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 currentDate = os.date("*t");
if (currentDate.wday == 2 ) then dzien="poniedziałek"
  elseif (currentDate.wday == 3 ) then dzien="wtorek"
  elseif (currentDate.wday == 4 ) then dzien="środa"
  elseif (currentDate.wday == 5 ) then dzien="czwartek"
  elseif (currentDate.wday == 6 ) then dzien="piątek"
  elseif (currentDate.wday == 7 ) then dzien="sobota"
  elseif (currentDate.wday == 1 ) then dzien="niedziela"
end 
    if (currentDate.day == 1 ) then dzienm="pierwszy"
elseif (currentDate.day == 2 ) then dzienm="drugi"
elseif (currentDate.day == 3 ) then dzienm="trzeci"
elseif (currentDate.day == 4 ) then dzienm="czwarty"
elseif (currentDate.day == 5 ) then dzienm="piąty"
elseif (currentDate.day == 6 ) then dzienm="szósty" 
elseif (currentDate.day == 7 ) then dzienm="siódmy"
elseif (currentDate.day == 8 ) then dzienm="ósmy"
elseif (currentDate.day == 9 ) then dzienm="dziewiąty"
elseif (currentDate.day == 10 ) then dzienm="dziesiąty"
elseif (currentDate.day == 11 ) then dzienm="jedenasty"
elseif (currentDate.day == 12 ) then dzienm="dwunasty"
elseif (currentDate.day == 13 ) then dzienm="trzynasty"
elseif (currentDate.day == 14 ) then dzienm="czternasty"
elseif (currentDate.day == 15 ) then dzienm="piętnasty"
elseif (currentDate.day == 16 ) then dzienm="szesnasty"
elseif (currentDate.day == 17 ) then dzienm="siedemnasty"
elseif (currentDate.day == 18 ) then dzienm="osiemnasty"
elseif (currentDate.day == 19 ) then dzienm="dziewiętnasty"
elseif (currentDate.day == 20 ) then dzienm="dwudziesty "
elseif (currentDate.day == 21 ) then dzienm="dwudziesty pierwszy"
elseif (currentDate.day == 22 ) then dzienm="dwudziesty drugi"
elseif (currentDate.day == 23 ) then dzienm="dwudziesty trzeci"
elseif (currentDate.day == 24 ) then dzienm="dwudziesty czwarty"
elseif (currentDate.day == 25 ) then dzienm="dwudziesty piąty"
elseif (currentDate.day == 26 ) then dzienm="dwudziesty szósty"
elseif (currentDate.day == 27 ) then dzienm="dwudziesty siódmy"
elseif (currentDate.day == 28 ) then dzienm="dwudziesty ósmy"
elseif (currentDate.day == 29 ) then dzienm="dwudziesty dziewiąty"
elseif (currentDate.day == 30 ) then dzienm="trzydziesty"
elseif (currentDate.day == 31 ) then dzienm="trzydziesty pierwszy"
end
 
 if (currentDate.month == 1 ) then mies="stycznia"
elseif (currentDate.month == 2 ) then mies="luty" 
elseif (currentDate.month == 3 ) then mies="marca"
elseif (currentDate.month == 4 ) then mies="kwietnia"
elseif (currentDate.month == 5 ) then mies="maja"
elseif (currentDate.month == 6 ) then mies="czerwca"
elseif (currentDate.month == 7 ) then mies="lipca"
elseif (currentDate.month == 8 ) then mies="sierpnia"
elseif (currentDate.month == 9 ) then mies="września"
elseif (currentDate.month == 10 ) then mies="październik"
elseif (currentDate.month == 11 ) then mies="listopada"
elseif (currentDate.month == 12 ) then mies="grudnia"
  end
 
--------------imieniny

t={d0101="Mieczysława i Mieszka",
d0102="Izydora i Makarego",
d0103="Danuty i Genowefy",
d0104="Anieli i Eugeniusza",
d0105="Edwarda i Szymona",
d0106="Kacpra i Melchiora Baltazara",
d0107="Juliana i Lucjana",
d0108="Seweryna i Teofila",
d0109="Weroniki i Juliana",
d0110="Jana i Wilhelma",
d0111="Matyldy i Honoraty",
d0112="Benedykta i Arkadiusza",
d0113="Weroniki i Bogumiły",
d0114="Feliksa i Hilarego",
d0115="Pawła i Izydora",
d0116="Marcelego i Włodzimierza",
d0117="Antoniego i Rościsława",
d0118="Piotra i Małgorzaty",
d0119="Henryka i Mariusza",
d0120="Fabiana i Sebastiana",
d0121="Agnieszki",
d0122="Anastazego",
d0123="Ildefonsa i Rajmunda",
d0124="Felicji i Tymoteusza",
d0125="Pawła i Miłosza",
d0126="Seweryna i Pauliny",
d0127="Jana i Przybysława",
d0128="Walerego i Radomira",
d0129="Zdzisława i Franciszka",
d0130="Macieja i Martyny",
d0131="Jana i Marceliny",
d0201="Brygidy i Ignacego",
d0202="Marii i Mirosława",
d0203="Błażeja i Hipolita",
d0204="Andrzeja i Weroniki",
d0205="Agaty i Adelajdy",
d0206="Doroty i Tytusa",
d0207="Ryszarda i Romualda",
d0208="Jana i Piotra",
d0209="Cyryla i Apolonii",
d0210="Jacka i Scholastyki",
d0211="Łazarza i Marii",
d0212="Eulalii i Modesta",
d0213="Grzegorza i Katarzyny",
d0214="Walentego i Metodego",
d0215="Faustyna i Józefa",
d0216="Danuty i Juliany",
d0217="Donata i Łukasza",
d0218="Symeona i Konstancji",
d0219="Konrada i Arnolda",
d0220="Leona i Ludomiła",
d0221="Eleonory i Feliksa",
d0222="Marty i Małgorzaty",
d0223="Romany i Damiana",
d0224="Macieja i Bogusza",
d0225="Wiktora i Cezarego",
d0226="Mirosława i Aleksandra",
d0227="Gabriela i Anastazji",
d0228="Teofila i Makarego",
d0229="Rufina i Hilarego",
d0301="Antoniny i Radosława",
d0302="Heleny i Pawła",
d0303="Tycjana i Kunegundy",
d0304="Kazimierza i Łucji",
d0305="Fryderyka i Wacława",
d0306="Róży i Wiktora",
d0307="Pawła i Tomasza",
d0308="Beaty",
d0309="Katarzyny i Franciszki",
d0310="Cypriana i Marcelego",
d0311="Konstantego i Benedykta",
d0312="Bernarda i Grzegorza",
d0313="Bożeny i Krystyny",
d0314="Leona i Matyldy",
d0315="Ludwiki i Klemensa",
d0316="Izabeli i Hilarego",
d0317="Zbigniewa i Partyka",
d0318="Cyryla i Edwarda",
d0319="Józefa i Bogdana",
d0320="Eufemii i Klaudii",
d0321="Benedykta i Lubomira",
d0322="Bogusława i Katarzyny",
d0323="Feliksa i Pelagii",
d0324="Marka i Gabriela",
d0325="Marii i Wieńczysłąwa",
d0326="Teodora i Emanuela",
d0327="Lidii i Ernesta",
d0328="Anieli i Sykstusa",
d0329="Wiktora i Eustachego",
d0330="Amelii i Jana",
d0331="Balbiny i Gwidona",
d0401="Zbigniewa i Grażyny",
d0402="Franciszka i Władysława",
d0403="Ryszarda i Pankracego",
d0404="Wacława i Izydora",
d0405="Ireny i Wincentego",
d0406="Celestyna i Wilhelma",
d0407="Donata i Rufina",
d0408="Dionizego i Januarego",
d0409="Marii i Marcelego",
d0410="Michała i Makarego",
d0411="Leona i Filipa",
d0412="Juliusza i Wiktora",
d0413="Przemysława i Hermenegildy",
d0414="Justyny i Waleriana",
d0415="Anastazji i Bazylego",
d0416="Julii i Benedykta",
d0417="Roberta i Patrycego",
d0418="Bogusławy i Bogumiły",
d0419="Adolfa i Tymona",
d0420="Czesława i Agnieszki",
d0421="Feliksa i Anzelma",
d0422="Leona i Łukasza",
d0423="Jerzego i Wojciecha",
d0424="Grzegorza i Aleksandra",
d0425="Marka i Jarosława",
d0426="Marii i Marcelego",
d0427="Zyty i Teofila",
d0428="Pawła i Walerii",
d0429="Piotra i Pawła",
d0430="Mariana i Katarzyny",
d0501="Józefa i Filipa",
d0502="Anatola i Zygmunta",
d0503="Marii i Aleksandra",
d0504="Moniki i Floriana",
d0505="Ireny i Waldemara",
d0506="Jana i Judyty",
d0507="Ludmiły i Gizeli",
d0508="Stanisława i Dezyderii",
d0509="Bożydara i Grzegorza",
d0510="Izydora i Antoniny",
d0511="Franciszka i Jakuba",
d0512="Dominika i Pankracego",
d0513="Roberta i Serwacego",
d0514="Bonifacego i Dobiesława",
d0515="Zofii i Jana",
d0516="Andrzeja i Wieńczysława",
d0517="Weroniki i Sławomira",
d0518="Feliksa i Aleksandry",
d0519="Piotra i Mikołaja",
d0520="Bernarda i Bazylego",
d0521="Wiktora i Tymoteusza",
d0522="Julii i Heleny",
d0523="Iwony i Dezyderego",
d0524="Joanny i Zuzanny",
d0525="Urbana i Grzegorza",
d0526="Filipa i Pauliny",
d0527="Jana i Juliusza",
d0528="Augustyna i Jaromira",
d0529="Teodozji i Magdaleny",
d0530="Feliksa i Ferdynanda",
d0531="Anieli i Petroneli",
d0601="Jakuba i Konrada",
d0602="Erazma i Marianny",
d0603="Leszka i Kłotyldy",
d0604="Karola i Franciszka",
d0605="Walerii i Bonifacego",
d0606="Pauliny i Laury",
d0607="Roberta i Wiesława",
d0608="Maksyma i Medarda",
d0609="Pelagii i Felicjana",
d0610="Bogumiła i Małgorzaty",
d0611="Barnaby i Feliksa",
d0612="Jana i Onufrego",
d0613="Lucjana i Antoniego",
d0614="Walerego i Bazylego",
d0615="Wita i Jolanty",
d0616="Aliny i Justyny",
d0617="Laury i Adolfa",
d0618="Marka i Elżbiety",
d0619="Gerwazego i Protazego",
d0620="Bogny i Florentyny",
d0621="Alicji i Alojzego",
d0622="Pauliny i Flawiusza",
d0623="Wandy i Zenona",
d0624="Jana i Danuty",
d0625="Łucji i Wilhelma",
d0626="Jana i Pawła",
d0627="Marii i Władysława",
d0628="Leona i Ireneusza",
d0629="Piotra i Pawła",
d0630="Emilii i Lucyny",
d0701="Haliny i Mariana",
d0702="Marii i Urbana",
d0703="Jacka i Anatola",
d0704="Teodora i Innocentego",
d0705="Karoliny i Antoniego",
d0706="Łucji i Dominika",
d0707="Cyryla i Metodego",
d0708="Elżbiety i Prokopa",
d0709="Zenona i Weroniki",
d0710="Filipa i Amelii",
d0711="Olgi i Pelagii",
d0712="Jana i Gwalberta",
d0713="Ernesta i Małgorzaty",
d0714="Marceliny i Bonawentury",
d0715="Henryka i Włodzimierza",
d0716="Marii i Benedykta",
d0717="Bogdana i Aleksego",
d0718="Kamila i Szymona",
d0719="Wincentego i Wodzisława",
d0720="Czesława i Hieronima",
d0721="Daniela i Andrzeja",
d0722="Magdaleny i Bolesława",
d0723="Bogny i Apolinarego",
d0724="Kingi i Krystyny",
d0725="Jakuba i Krzysztofa",
d0726="Anny i Mirosławy",
d0727="Julii i Natalii",
d0728="Wiktora i Innocentego",
d0729="Marty i Olafa",
d0730="Julity i Ludmiły",
d0731="Ignacego i Heleny",
d0801="Piotra i Justyny",
d0802="Gustawa i Alfonsa",
d0803="Lidii i Augusta",
d0804="Dominika i Protazego",
d0805="Marii i Stanisławy",
d0806="Sławy i Jakuba",
d0807="Doroty i Kajetana",
d0808="Emila i Cyryla",
d0809="Romana i Romualda",
d0810="Borysa i Wawrzyńca",
d0811="Zuzanny i Filomeny",
d0812="Klary i Hilarego",
d0813="Hipolita i Diany",
d0814="Alfreda i Euzebiusza",
d0815="Marii i Napoleona",
d0816="Rocha i Joachima",
d0817="Jacka i Mirona",
d0818="Heleny i Bronisławy",
d0819="Bolsława i Juliana",
d0820="Bernarda i Sobiesława",
d0821="Joanny i Franciszki",
d0822="Cezarego i Tymoteusza",
d0823="Filipa i Apolinarego",
d0824="Jerzego i Bartłomieja",
d0825="Ludwika i Luizy",
d0826="Marii i Sandry",
d0827="Józefa i Moniki",
d0828="Augustyna i Patrycji",
d0829="Sabiny i Jana",
d0830="Rózy i Szczęsnego",
d0831="Bogdana i Rajmunda",
d0901="Bronisława i Idziego",
d0902="Stefana i Juliana",
d0903="Izabeli i Szymona",
d0904="Rozalii i Róży",
d0905="Doroty i Wawrzyńca",
d0906="Beaty i Eugeniusza",
d0907="Reginy i Melchiora",
d0908="Marii i Adrianny",
d0909="Piotra i Mikołaja",
d0910="Bernarda i Sobiesława",
d0911="Jacka i Piotra",
d0912="Marii i Gwidona",
d0913="Filipa i Eugenii",
d0914="Cypriana i Bernarda",
d0915="Albina i Nikodema",
d0916="Edyty i Kornela",
d0917="Justyna i Franciszki",
d0918="Ireny i Józefa",
d0919="Januarego i Konstancji",
d0920="Filipiny i Eustachego",
d0921="Hipolita i Mateusza",
d0922="Tomasza i Maurycego",
d0923="Tekli i Bogusława",
d0924="Gerarda i Teodora",
d0925="Aurelii i Ładysława",
d0926="Justyny i Cypriana",
d0927="Kosmy i Damiana",
d0928="Marka i Wacława",
d0929="Michała i Michaliny",
d0930="Zofii i Hieronima",
d1001="Danuty i Remigiusza",
d1002="Teofila i Dionizego",
d1003="Gerarda i Teresy",
d1004="Rozalii i Franciszka",
d1005="Apolinarego i Placyda",
d1006="Artura i Brunona",
d1007="Marii i Marka",
d1008="Pelagii i Brygidy",
d1009="Ludwika i Dionizego",
d1010="Pauliny i Franciszka",
d1011="Emila i Aldony",
d1012="Eustachego i Maksymiliana",
d1013="Edwarda i Teofila",
d1014="Bernarda i Fortunaty",
d1015="Teresy i Jadwigi",
d1016="Gawła i Ambrożego",
d1017="Wiktora i Małgorzaty",
d1018="Łukasza i Juliana",
d1019="Piotra i Ziemowita",
d1020="Ireny i Kleopatry",
d1021="Urszuli i Hilarego",
d1022="Filipa i Kordulii",
d1023="Teodora i Seweryna",
d1024="Rafała i Marcina",
d1025="Kryspina i Ingi",
d1026="Lucjana i Ewarysta",
d1027="Sabiny i Iwony",
d1028="Szymona i Tadeusza",
d1029="Euzebii i Narcyza",
d1030="Zenobii i Przemysława",
d1031="Urbana i Augusta",
d1101="Seweryna i Wiktoryny",
d1102="Bohdana i Bożydara",
d1103="Sylwii i Huberta",
d1104="Karola i Olgierda",
d1105="Sławomira i Elżbiety",
d1106="Feliksa i Leonarda",
d1107="Antoniego i Ernesta",
d1108="Sewera i Gotfryda",
d1109="Usryna i Teodora",
d1110="Andrzeja i Ludomira",
d1111="Bartłomieja i Marcina",
d1112="Renaty i Witolda",
d1113="Stanisława i Mikołaja",
d1114="Serafina i Rogera",
d1115="Alberta i Leopolda",
d1116="Gertrudy i Edmunda",
d1117="Grzegorza i Salomei",
d1118="Anieli i Romana",
d1119="Elżbiety i Seweryna",
d1120="Feliksa i Anatola",
d1121="Janusza i Konrada",
d1122="Marka i Cecylii",
d1123="Klemensa i Amelii",
d1124="Jana i Flory",
d1125="Erazma i Katarzyny",
d1126="Konrada i Sylwestra",
d1127="Waleriana i Maksymiliana",
d1128="Grzegorza i Zdzisława",
d1129="Błażeja i Saturnina",
d1130="Andrzeja i Konstantego",
d1201="Natalii i Eligiusza",
d1202="Pauliny i Balbiny",
d1203="Franciszka i Ksawerego",
d1204="Barbary i Piotra",
d1205="Kryspina i Saby",
d1206="Mikołaja i Emiliana",
d1207="Marcina i Ambrożego",
d1208="Marii i Wirgiliusza",
d1209="Wiesławy i Leokadii",
d1210="Julii i Daniela",
d1211="Damazego i Waldemara",
d1212="Adelajdy i Aleksandra",
d1213="Łucji i Otylii",
d1214="Alfreda i Izydora",
d1215="Celiny i Waleriana",
d1216="Euzebiusza i Zdzisławy",
d1217="Olimpii i Łazarza",
d1218="Gracjana i Bogusława",
d1219="Urbana i Dariusza",
d1220="Bogumiła i Dominika",
d1221="Tomasza i Tomisława",
d1222="Zenona i Honoraty",
d1223="Wiktorii i Sławomiry",
d1224="Adama i Ewy",
d1225="Eugenii i Anastazji",
d1226="Dionizego i Szczepana",
d1227="Kosmy i Damiana",
d1228="Cezarego i Teofila",
d1229="Dawida i Tomasza",
d1230="Eugeniusza i Sabiny",
d1231="Sylwestra i Sebastiana"}


data= "d"..tostring(os.date("%m%d"))
for a, b in pairs(t) do
 if data==a then
 fibaro:debug(b)
    imieniny=b

  end
end

function round(n)
  return math.floor((math.floor(n*2) + 1)/2)
end

miejsc="ostrów wielkopolski"
panstwo="pl"
-- smartfon to ID smartfonu na który ma wysłac pogodę
local smartfon=845
HC3 = Net.FHttp("api.openweathermap.org")
danem, statusm = HC3:GET("/data/2.5/weather?q="..miejsc..","..panstwo.."&units=metric&lang=pl")
ajson=json.decode(danem)
tempmin=round(ajson.main.temp_min)
fibaro:debug(round(tempmin))
tempmax=round(ajson.main.temp_max)
cisn=round(ajson.main.pressure)
wilg=round(ajson.main.humidity)
wiatr=round(ajson.wind.speed)
zach=ajson.clouds.all
pogo=ajson.weather[1].description
wysylka=" Pogoda "..pogo..", Temperatura "..tempmin
if tempmin~=tempmax then
wysylka=wysylka.."-"..tempmax
end
wysylka=wysylka..", Ciśnienie "..cisn..", Wilgotność "..wilg..", Wiatr "..wiatr..", Zachmurzenie "..zach
fibaro:call(smartfon, "sendPush", wysylka, wysylka)


 
-- tu wpisujemy tekst do powiedzenia
SendVoice("Dzień dobry. Dzisiaj jest "..dzien.." "..dzienm.." "..mies..". Imieniny "..imieniny.."."..wysylka);
fibaro:debug(os.date("%B"))
--EOF
*

Offline Jacek

  • *** 117
  • 3
  • Nazwa i wersja ID: HC2 4.130, HC2 3.600, HCL 4.100
Odp: Gadaczka
« Odpowiedź #10 dnia: Grudzień 06, 2015, 05:17:10 pm »
openweathermap od jakiegoś czasu wymaga zarejestrowania się ( bezpłatnego) i uzyskania indywidualnego klucza do odbioru danych pogodowych.
Jacek
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka
« Odpowiedź #11 dnia: Grudzień 06, 2015, 05:33:00 pm »
openweathermap od jakiegoś czasu wymaga zarejestrowania się ( bezpłatnego) i uzyskania indywidualnego klucza do odbioru danych pogodowych.

Podpowiedz jak mam zmienić kod, aby uzupełnić moje dane logowania
*

Offline Jacek

  • *** 117
  • 3
  • Nazwa i wersja ID: HC2 4.130, HC2 3.600, HCL 4.100
Odp: Gadaczka
« Odpowiedź #12 dnia: Grudzień 06, 2015, 05:58:54 pm »
Klucz uzyskujesz na stronie:
http://home.openweathermap.org/users/sign_up

następnie poprawiasz kod tak aby wyglądał jak niżej:

danem, statusm = HC3:GET("/data/2.5/weather?q="..miejsc..","..panstwo.."&units=metric&lang=pl&APPID=uzyskany_kod_klucza")
« Ostatnia zmiana: Grudzień 06, 2015, 06:21:12 pm wysłana przez Jacek »
Jacek
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Gadaczka
« Odpowiedź #13 dnia: Grudzień 06, 2015, 06:13:27 pm »
Wielkie dzięki Jacek...
*

Offline rakq

  • * 8
  • 0
  • Nazwa i wersja ID: rakq
Odp: Gadaczka
« Odpowiedź #14 dnia: Październik 18, 2016, 11:18:11 pm »
Cześć jestem tu nowy i może gdzieś jest na forum o tym temat jednak nie znalazłem. Mianowicie, czy myślał ktoś jak w łatwy sposób zrobić taką gadaczkę z użyciem PAW SERVER lub bez niego (nie wiem może za pomocą Rasberry Pi), aby ostrzegała nas o niebezpieczeństwie np. "drzwi garażu zostały otwarte" nie tylko w sieci lokalnej ale i w sieci WAN ?