Всем привет.
Делал нечто похожее для ccu.io (там был http://forum.iobroker.net/viewtopic.php?f=10&t=313), вот дошли руки до ioBroker.
Плата http://cubieboard.org/model/cb3/
OS https://www.armbian.com/cubietruck/
Система перенесена на жесткий диск 80Гб
Подключена АКБ Li-Pol на 5000мАч
Весь бутерброд поставил на DIN-рейку.
Собственно скрипт под спойлером:
! ````
//Скрипт мониторинга основных параметров платы Cubietruck
//Температуры:
// - monitoring_CT.temp.CPU /sys/devices/virtual/thermal/thermal_zone0/temp
// - monitoring_CT.temp.PMU /sys/power/axp_pmu/pmu/temp
// - monitoring_CT.temp.HDD hddtemp /dev/sda
//Данные rootfs:
// - monitoring_CT.disk.size df -m
// - monitoring_CT.disk.used
// - monitoring_CT.disk.free
// - monitoring_CT.disk.usage
//Данные memory:
// - monitoring_CT.memory.used fre -m
// - monitoring_CT.memory.free
// - monitoring_CT.memory.usage
//Данные swap: -отключено!
// - monitoring_CT.swap.size -отключено!
// - monitoring_CT.swap.used -отключено!
// - monitoring_CT.swap.free -отключено!
// - monitoring_CT.swap.usage -отключено!
//Данные system:
// - monitoring_CT.loadavg.CPU cut -f1 -d" " = 1){
clearInterval(poll_mon);
poll_mon = setInterval(poolMonitor, parseInt(obj.newState.val)1000);
}
});
! function poolMonitor () {
//Чтение файлов температур CPU and PMU
var temp = fs.readFileSync("/sys/devices/virtual/thermal/thermal_zone0/temp").toString();
setState('monitoring_CT.temp.CPU', parseFloat(temp)/1000, true);
temp = fs.readFileSync("/sys/power/axp_pmu/pmu/temp").toString();
setState('monitoring_CT.temp.PMU', parseFloat(temp)/1000, true);
//Результат команды hddtemp - температура жесткого диска
//cp.exec("hddtemp /dev/sda /dev/sdb /dev/sdc /dev/sdd | grep -o '[0-9].°C' | grep -o '[0-9].'", function(err, resp) {
cp.exec("hddtemp /dev/sda | grep -o '[0-9].°C' | grep -o '[0-9].'", function(err, resp) {
if (!err && resp) {
//var temp = resp.split("\n");
setState('monitoring_CT.temp.HDD', parseFloat(resp), true);
}
});
//Результат команды df - использование HDD
cp.exec("df -m | grep '/dev/sda2' | awk '{print $2,$3,$4,$5}' | grep -o '[0-9]'", function(err, resp) {
if (!err && resp) {
var temp = resp.split("\n");
setState('monitoring_CT.disk.size', parseFloat(temp[0]), true);
setState('monitoring_CT.disk.used', parseFloat(temp[1]), true);
setState('monitoring_CT.disk.free', parseFloat(temp[2]), true);
setState('monitoring_CT.disk.usage', parseFloat(temp[3]), true);
}
});
//Результат команды free - исользование ОЗУ и swap
//cp.exec("free -m | grep -E 'Mem|Swap' | awk '{print $3,$4}' | grep -Eo '[0-9]+'", function(err, resp) { .toFixed(1)
cp.exec("free -m | grep -E 'Mem' | awk '{print $2,$3,$4}' | grep -Eo '[0-9]+'", function(err, resp) {
if (!err && resp) {
var temp = resp.split("\n");
setState('monitoring_CT.memory.size', parseFloat(temp[0]), true);
setState('monitoring_CT.memory.used', parseFloat(temp[1]), true);
setState('monitoring_CT.memory.free', parseFloat(temp[2]), true);
setState('monitoring_CT.memory.usage', (temp[1]/temp[0]).toFixed(3)*100, true);
}
});
//Использование центрального процессора loadavg
temp = fs.readFileSync("/proc/loadavg").toString().split(" ");
setState('monitoring_CT.loadavg.CPU', parseFloat(temp[0]), true);
//Опрос состояния системы питания - данные чипа AXP209
setState('monitoring_CT.power.AC.status', Boolean(parseFloat(fs.readFileSync("/sys/power/axp_pmu/ac/connected"))), true);
setState('monitoring_CT.power.AC.voltage', parseFloat((fs.readFileSync("/sys/power/axp_pmu/ac/voltage")/1000000).toFixed(2)), true);
setState('monitoring_CT.power.AC.current', parseFloat((fs.readFileSync("/sys/power/axp_pmu/ac/amperage")/1000).toFixed(0)), true);
setState('monitoring_CT.power.battery.connected', Boolean(parseFloat(fs.readFileSync("/sys/power/axp_pmu/battery/connected"))), true);
setState('monitoring_CT.power.battery.charging', Boolean(parseFloat(fs.readFileSync("/sys/power/axp_pmu/battery/charging"))), true);
setState('monitoring_CT.power.battery.current_charging', parseFloat((fs.readFileSync("/sys/power/axp_pmu/charger/amperage")/1000).toFixed(0)), true);
setState('monitoring_CT.power.battery.current_discharging', parseFloat((fs.readFileSync("/sys/power/axp_pmu/battery/amperage")/1000).toFixed(0)), true);
setState('monitoring_CT.power.battery.voltage', parseFloat((fs.readFileSync("/sys/power/axp_pmu/battery/voltage")/1000000).toFixed(2)), true);
setState('monitoring_CT.power.battery.capacity', parseFloat(fs.readFileSync("/sys/power/axp_pmu/battery/capacity")), true);
}
poll_mon = setInterval(poolMonitor, getState('javascript.0.monitoring_CT.poolinterval').val*1000);
! ````
1238_img_20171106_005535.jpg
1238_img_20171106_005541.jpg
1238_img_20171210_122106.jpg