LED_PIN = 4;--вывод к которому подключен светодиод
HOT_PIN = 1;--вывод контактов счетчика 1
COLD_PIN = 2;--вывод контактов счетчика 2
C_SSID = "Ваша сеть";
C_PWD = "Ключ вашей сети";
C_USKEY = "Ваш ключ uskey";
C_BASEKEY = "Ваш ключ basekey";
C_TIMEOUT_CONNECT = 10000;--время ожидания подключения к сети
C_DELAY_CONNECT = 15000;-- период передачи данных
C_HOT_COUNT = 0;
C_COLD_COUNT = 0;
C_HOT_IMP = 0;
C_COLD_IMP = 0;
configuration = {};
T1 = tmr.create();
--Настройка GPIO D1-горячий D2-холодный
gpio.mode(LED_PIN,gpio.OUTPUT);
gpio.mode(HOT_PIN,gpio.INPUT,gpio.PULLUP);
gpio.mode(COLD_PIN,gpio.INPUT,gpio.PULLUP);
--Мигание светодиода пока идет подключение
T1:alarm(200, 1, function()
if (gpio.read(LED_PIN) == 0) then
gpio.write(LED_PIN, gpio.HIGH);
else
gpio.write(LED_PIN, gpio.LOW);
end;
end);
dofile ("main.lua")
--Подключение к точке wifi
wifi.setmode(wifi.STATION);
scfg={};
scfg.ssid=C_SSID;
scfg.pwd=C_PWD;
scfg.auto=true;
scfg.save=true;
wifi.sta.config(scfg);
wifi.sta.connect();
--Ожидание подключения
tmr.create():alarm(C_TIMEOUT_CONNECT, tmr.ALARM_SINGLE, function()
if (wifi.sta.getip() == nil) then
--Ошибка подключения
T1:stop();
T1:unregister();
gpio.write(LED_PIN, gpio.LOW);
else
--Подключение прошло удачно
T1:stop()
T1:unregister();
gpio.write(LED_PIN, gpio.HIGH);
--Считывение последней записи канала
t=tmr.create();
t:alarm(1000, tmr.ALARM_AUTO, function ()
http.get("http://www.thingopen.ru/feeds.php?uskey="..C_USKEY.."&basekey="..C_BASEKEY.."&results=1", nil, function(code, data)
if (code ~= 200) then
gpio.write(LED_PIN, gpio.LOW);
else
t:stop();
t:unregister();
gpio.write(LED_PIN, gpio.HIGH);
--Инициализация счетчиков
t = sjson.decode(data)
C_COLD_COUNT = t["feeds"][1]["Field1"];
C_HOT_COUNT = t["feeds"][1]["Field2"];
cold_s = 0;
hot_s = 0;
--Опрос GPIO D1,D2
tpin=tmr.create();
tpin:alarm(500, tmr.ALARM_AUTO, function ()
if ((gpio.read(COLD_PIN) == 0) and (cold_s == 1)) then
C_COLD_COUNT = C_COLD_COUNT+1;
C_COLD_IMP = 1;
end;
if ((gpio.read(HOT_PIN) == 0) and (hot_s == 1)) then
C_HOT_COUNT = C_HOT_COUNT+1;
C_HOT_IMP = 1;
end;
cold_s = gpio.read(COLD_PIN);
hot_s = gpio.read(HOT_PIN);
end)
--Отправка данных на сервер
tsend=tmr.create();
tsend:alarm(C_DELAY_CONNECT, tmr.ALARM_AUTO, function ()
gpio.write(LED_PIN, gpio.LOW);
http.get("http://www.thingopen.ru/update.php?basekey="..C_BASEKEY.."&field1="..C_COLD_COUNT.."&field2="..C_HOT_COUNT.."&field3="..C_COLD_IMP.."&field4="..C_HOT_IMP, nil, function(code, data)
C_HOT_IMP = 0;
C_COLD_IMP = 0;
gpio.write(LED_PIN, gpio.HIGH);
if (data=="0") then
--Ошибка передачи
end
if (data=="1") then
--Передача прошла успешно
end
if (data=="LED_ON") then
--Пример включения светодиода (включается в течении C_DELAY_CONNECT )
gpio.write(LED_PIN, gpio.LOW);
end
end)
end)
end
end)
end)
end;
end)