NEWS
Скрипт мониторинга основных параметров платы Cubietruck OS Armbian
-
Всем привет.
Делал нечто похожее для 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 -
Здравствуйте.
Воспользовался вашим скриптом , у меня сыпятся ошибки:
javascript.0 Error in callback: Error: ETIMEDOUT: connection timed out, read.
Подскажите куда копать.
Система на кубике3+ SSD.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login