Домашен енергомер


История на показанията


Предстои да бъде публикувана схемата на меренето.

Използвани технологии и компоненти:
OpenWRT
Създава се /www/1w/data със следното съдържание:
#!/usr/bin/lua
print ("Content-type: Text/html\n")
function file_exists(file)
    local f = io.open(file, "rb")
	if f then f:close() end
	return f ~= nil
    end
      
    function round(num, numDecimalPlaces)
	local mult = 10^(numDecimalPlaces or 0)
	return math.floor(num * mult + 0.5) / mult
	end
          
         function temp_from(file)
        if not file_exists(file) then return 0 end
	lines={}
        for line in io.lines(file) do
    	    lines[#lines + 1] = line
	end
        return round(lines[1],2)
    end
                
    local temp = temp_from('/1w/10.5090B6020800/temperature')
    io.write("{\"spa\":\"")
    io.write(temp)
    io.write("\",")
    local temp = temp_from('/1w/28.E4A323050000/temperature')
    io.write("\"det\":\"")
    io.write(temp)
    io.write("\",")
    local temp = temp_from('/1w/10.C7387F020800/temperature')
    io.write("\"hol\":\"")
    io.write(temp)
    io.write("\"}")
Файла се прави изпълним с chmod +x /www/1w/data.
Lua
/etc/conf/uhttpd - внасяме следната конфигурация най-долу:
config uhttpd 'ow'
    list listen_http '0.0.0.0:8080'
    option home '/www/1w'
    option cgi_prefix '/'
Сега при извикване на http://адрес:8080/data ще видите нещо подобно:
{"spa":"23","det":"19","hol":"25.94"}
JSON форматирано и готово за консумация.
На удобно място в сървър по избор създавате скрипта, който ще попълва базата данни:
dt=`curl -s http://address:8080/data`
mongo 127.0.0.1/temperature --eval "db.t.insert($dt);" > /dev/null
Настройва се за изпълнение през 5мин в Cron.
MongoDB
PHP 5.3
Nginx
Dallas Semiconductor DS1490F 2-in-1 Fob, 1-Wire USB адаптер
DS18S20, DS18B20 температурни сензори
Arduino Uno
Iskra WS0014 електромер
Google Charts

©www.kamenitza.org