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