Re: Архив данных (сервер недоступен)
Добавлено: Чт янв 11, 2018 11:45 am
Эммм... тихо сам с собою? ))))
Ага))Gofk писал(а):Эммм... тихо сам с собою? ))))
Тут какая засада. Нужно тогда в лог писать и идентификатор объекта/свойства (привет domoticz). А когда в системе какие-нибудь изменения будут - всё отвалится нафиг.xor писал(а):Есть логи фиксированной структуры, т.е., вы знаете, что первый элемент-дата, второй-температура датчика 1 и тд. Надо это хозяйство засунуть в таблицу истории
...
Скармливаем лог пхп скрипту, он его парсит по-строчно. Зная имяОбъекта.Свойство, вставляем в таблицу истории , заменяя поле added временем из лога.
...
Нужно распарсить, найти объекты, по ним определить id, работа с SQL -- практика.
Посмотрите, как gps, esp, noolite обрабатываются пхпэшками.Gofk писал(а):Тут какая засада. Нужно тогда в лог писать и идентификатор объекта/свойства (привет domoticz). А когда в системе какие-нибудь изменения будут - всё отвалится нафиг.xor писал(а):Есть логи фиксированной структуры, т.е., вы знаете, что первый элемент-дата, второй-температура датчика 1 и тд. Надо это хозяйство засунуть в таблицу истории
...
Скармливаем лог пхп скрипту, он его парсит по-строчно. Зная имяОбъекта.Свойство, вставляем в таблицу истории , заменяя поле added временем из лога.
...
Нужно распарсить, найти объекты, по ним определить id, работа с SQL -- практика.
Мне кажется единственный рабочий вариант - для каждого датчика в логе писать уникальный (!) ID. А привязку к объекту делать на принимающей стороне. Опять же, как это сейчас с данными по MQTT происходит. Но это не только скрипт нужен, но и вся обвязка в виде пользовательского интерфейса и т.д.
Код: Выделить всё
function getTime()
sntp.sync('ru.pool.ntp.org',
function(sec,usec,server)
print('sync', sec, usec, server)
pin = 4
status, temp, humi, temp_dec, humi_dec = dht.read(pin)
if file.open("/SD0/test.txt", "a+") and status == dht.OK then
file.write('sync '..';'..sec..';'..usec..';'..server.." - ")
file.write(string.format("DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n",
math.floor(temp),
temp_dec,
math.floor(humi),
humi_dec))
file.close()
m = mqtt.Client("ESP8266_1", 120)
m:on("connect", function(client) print ("MQTT online") end)
m:on("offline", function(client) print ("MQTT offline") end)
m:on("message", function(client, topic, data)
print("<-- "..topic .. ":"..data )
end)
m:connect("192.168.0.30", 1883, 0, function(client)
print("MQTT client connected")
client:subscribe("#", 0, function(client) print("subscribe success") end)
client:publish("dht21/temp", temp, 0, 0)
client:publish("dht21/hum", humi, 0, 0)
end,
function(client, reason)
print("MQTT failed reason: " .. reason)
end)
m:close();
print("MQTT client disconnected")
elseif status == dht.ERROR_CHECKSUM then
print( "DHT Checksum error." )
elseif status == dht.ERROR_TIMEOUT then
print( "DHT timed out." )
end
end,
function()
print('failed!')
end, true)
end
function sendArchive()
file.rename("/SD0/test.txt","/SD0/test_to_send.txt")
if file.exists("/SD0/test_to_send.txt") then
print("File exists or renamed")
m1 = mqtt.Client("ESP8266_1_archive", 300)
m1:connect("192.168.0.30", 1883, 0, function(client)
print("MQTT client connected")
fd = file.open("/SD0/test_to_send.txt", "r")
if fd then
print("ARCHIVE START")
line = file.readline()
while line do
client:publish("dht21/archive", line, 0, 0)
line = file.readline()
end
file.close()
file.remove("/SD0/test_to_send.txt")
end
end,
function(client, reason)
print("MQTT failed reason: " .. reason)
end)
m1:close();
else
print("Error file renaming")
end
end
r1tmr = tmr.create():alarm(5000, tmr.ALARM_AUTO, getTime)
r2tmr = tmr.create():alarm(30000, tmr.ALARM_AUTO, sendArchive)
Код: Выделить всё
function startup()
print("Running")
spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)
vol = file.mount("/SD0", 8)
if not vol then
print("...retry mounting")
vol = file.mount("/SD0", 8)
if not vol then
error("SD-card mount failed")
else
file.close("init.lua")
dofile("main.lua")
end
else
file.close("init.lua")
dofile("main.lua")
end
end
print("Connecting to WiFi access point...")
wifi.setmode(wifi.STATION)
local wificfg={}
wificfg.ssid='wifiUser'
wificfg.pwd='wifiPassword'
wifi.sta.config(wificfg)
wificfg = nil
tmr.create():alarm(1000, tmr.ALARM_AUTO, function(cb_timer)
if wifi.sta.getip() == nil then
print("Waiting for IP address...")
else
cb_timer:unregister()
print("WiFi connection established, IP address: " .. wifi.sta.getip())
print("You have 3 seconds to abort")
print("Waiting...")
tmr.create():alarm(3000, tmr.ALARM_SINGLE, startup)
end
end)