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.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden