aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaster4385 <venkateshchaturvedi12@gmail.com>2023-05-20 18:44:22 +0530
committerBlaster4385 <venkateshchaturvedi12@gmail.com>2023-05-21 11:04:05 +0530
commit364c5c00578fa2e88466bb0ddcaff3db34ccd4e4 (patch)
treeb5ea0369e2c43ff74d1b9732883534f5cd6d16df
parent5fd76b071a7b5b359abd62ab18ab9d42fad0d1a4 (diff)
Add system information
- Also cleanup code - Switch to almost realtime data reading
-rw-r--r--cpu.cpp3
-rw-r--r--cpu.h3
-rw-r--r--gfx_1.cpp203
-rw-r--r--gfx_1.h3
-rw-r--r--sysmon.ino128
-rw-r--r--sysmon.py52
6 files changed, 197 insertions, 195 deletions
diff --git a/cpu.cpp b/cpu.cpp
index 2c1b437..86d8643 100644
--- a/cpu.cpp
+++ b/cpu.cpp
@@ -6,6 +6,9 @@ int16_t cpuTempGlobal = defaultValue;
int16_t cpuTemp[8] = {defaultValue, defaultValue, defaultValue,defaultValue, defaultValue, defaultValue, defaultValue, defaultValue};
uint32_t ramFree = defaultValue;
uint32_t ramMax = defaultValue;
+String OS = "";
+String KernelVer = "";
+String Uptime = "";
static int8_t extractArray(String &command, int16_t *array)
{
diff --git a/cpu.h b/cpu.h
index cffd298..9c1b5a3 100644
--- a/cpu.h
+++ b/cpu.h
@@ -17,5 +17,8 @@ extern int16_t cpuTempGlobal;
extern int16_t cpuTemp[8];
extern uint32_t ramMax;
extern uint32_t ramFree;
+extern String OS;
+extern String KernelVer;
+extern String Uptime;
#endif // __CPU_H__
diff --git a/gfx_1.cpp b/gfx_1.cpp
index 755ab04..e8a2d39 100644
--- a/gfx_1.cpp
+++ b/gfx_1.cpp
@@ -4,35 +4,31 @@
#include "Adafruit_GFX.h"
#include <Adafruit_ILI9341.h>
-bool gfx1_refresh = true;
-static uint8_t s_time_tab[6] = {'0', '0', ':', '0', '0', 0};
+static uint8_t s_time_tab[6] = { '0', '0', ':', '0', '0', 0 };
static uint8_t s_localHum = 0, s_localTemp = 0, s_cpuTemp = 255;
static int16_t s_cpu_usage = 255;
static uint32_t s_ram_free = 255, s_ram_max = 255;
+static String s_os = "Unknown", s_kernel = "Unknown", s_uptime = "Unknown";
// 5px size
static void gfx_update_toolbar();
static void gfx_update_cpu();
static void gfx_update_mem();
+static void gfx_update_sys_info();
-static void writeArray(const char *buf)
-{
- uint8_t c= 0;
- while(buf[c] != 0)
+static void writeArray(const char *buf) {
+ uint8_t c = 0;
+ while (buf[c] != 0)
tft.write(buf[c++]);
}
-void gfx1_udpate()
-{
- // if(!gfx1_refresh)
- // return ;
-
- gfx1_refresh = false;
+void gfx1_udpate() {
gfx_update_toolbar();
gfx_update_cpu();
gfx_update_mem();
+ gfx_update_sys_info();
}
#define LINE_Y_REL 29
@@ -43,164 +39,189 @@ void gfx1_udpate()
char buf[20];
-void gfx1_layout()
-{
- uint8_t c= 0;
-
+void gfx1_layout() {
+ uint8_t c = 0;
+
tft.fillScreen(ILI9341_BLACK);
tft.drawLine(10, 18, 310, 18, ILI9341_YELLOW);
- tft.setTextColor(ILI9341_YELLOW, ILI9341_BLACK);
+ tft.setTextColor(ILI9341_YELLOW, ILI9341_BLACK);
+
+ // Temp
tft.setCursor(35, 0);
tft.setTextSize(1);
tft.write('o');
tft.setTextSize(2);
- tft.setCursor(35+8, 2);
+ tft.setCursor(35 + 8, 2);
tft.write('C');
- //Humidity
+
+ // Humidity
tft.setCursor(300, 2);
tft.write('%');
- // CPU rect
+ // CPU
tft.setTextSize(2);
- tft.drawRoundRect(5, 45, 150, 90, 10, ILI9341_DARKCYAN);
- tft.drawLine(5, 45+LINE_Y_REL, 154, 45+LINE_Y_REL, ILI9341_DARKCYAN);
- tft.setTextColor(ILI9341_DARKCYAN, ILI9341_BLACK);
- tft.setCursor(60, 45+TEXT_Y_REL);
+ tft.drawRoundRect(5, 25, 150, 90, 10, ILI9341_RED);
+ tft.drawLine(5, 25 + LINE_Y_REL, 154, 25 + LINE_Y_REL, ILI9341_RED);
+ tft.setTextColor(ILI9341_RED, ILI9341_BLACK);
+ tft.setCursor(60, 25 + TEXT_Y_REL);
sprintf(buf, "CPU");
writeArray(buf);
- tft.setCursor(15, 45+FIRST_TEXT_Y_REL);
+ tft.setCursor(15, 25 + FIRST_TEXT_Y_REL);
sprintf(buf, "Usage:");
writeArray(buf);
- tft.setCursor(15, 45+FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
+ tft.setCursor(15, 25 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
sprintf(buf, "Temp:");
writeArray(buf);
- tft.setCursor(15, 45+FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y *2);
+ tft.setCursor(15, 25 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y * 2);
// memory
- tft.drawRoundRect(165, 45, 150, 90, 10, ILI9341_GREEN);
- tft.drawLine(165, 45+LINE_Y_REL, 314, 45+LINE_Y_REL, ILI9341_GREEN);
- tft.setTextColor(ILI9341_GREEN, ILI9341_BLACK);
- tft.setCursor(205, 45+TEXT_Y_REL);
+ tft.drawRoundRect(165, 25, 150, 90, 10, ILI9341_GREEN);
+ tft.drawLine(165, 25 + LINE_Y_REL, 314, 25 + LINE_Y_REL, ILI9341_GREEN);
+ tft.setTextColor(ILI9341_GREEN, ILI9341_BLACK);
+ tft.setCursor(205, 25 + TEXT_Y_REL);
sprintf(buf, "MEMORY");
writeArray(buf);
- tft.setCursor(175, 45+FIRST_TEXT_Y_REL);
+ tft.setCursor(175, 25 + FIRST_TEXT_Y_REL);
sprintf(buf, "Max:");
writeArray(buf);
- tft.setCursor(175, 45+FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
+ tft.setCursor(175, 25 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
sprintf(buf, "Free:");
writeArray(buf);
- gfx1_refresh = true;
+ // sysinfo
+ tft.setTextSize(2);
+ tft.drawRoundRect(5, 125, 310, 110, 10, ILI9341_CYAN);
+ tft.drawLine(5, 125 + LINE_Y_REL, 314, 125 + LINE_Y_REL, ILI9341_CYAN);
+ tft.setTextColor(ILI9341_CYAN, ILI9341_BLACK);
+ tft.setCursor(55, 125 + TEXT_Y_REL);
+ sprintf(buf, "System Information");
+ writeArray(buf);
+ tft.setCursor(15, 125 + FIRST_TEXT_Y_REL);
+ sprintf(buf, "OS:");
+ writeArray(buf);
+ tft.setCursor(15, 125 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
+ sprintf(buf, "Kernel:");
+ writeArray(buf);
+ tft.setCursor(15, 125 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y * 2);
+ sprintf(buf, "Uptime:");
+ writeArray(buf);
+
gfx1_udpate();
}
-void get_formated_space(int32_t valueMb)
-{
+void get_formated_space(int32_t valueMb) {
int8_t unity = 0;
- if(valueMb > 999)
- {
+ if (valueMb > 999) {
valueMb = valueMb / 1024;
- unity = 1; // GB
+ unity = 1; // GB
}
- if(valueMb > 9999)
- {
+ if (valueMb > 9999) {
valueMb = valueMb / 1024;
- unity = 2; // TB
+ unity = 2; // TB
}
- if(unity == 0)
+ if (unity == 0)
sprintf(buf, "%4d MB", valueMb);
- else if(unity == 1)
+ else if (unity == 1)
sprintf(buf, "%4d GB", valueMb);
else
sprintf(buf, "%4d TB", valueMb);
}
-static void gfx_update_mem()
-{
- tft.setTextColor(ILI9341_GREEN, ILI9341_BLACK);
- if(s_ram_max != ramMax)
- {
- tft.setCursor(175 + 50, 45+FIRST_TEXT_Y_REL);
+static void gfx_update_mem() {
+ tft.setTextColor(ILI9341_GREEN, ILI9341_BLACK);
+ if (s_ram_max != ramMax) {
+ tft.setCursor(175 + 50, 25 + FIRST_TEXT_Y_REL);
get_formated_space(ramMax);
writeArray(buf);
- s_ram_free = ramMax;
+ s_ram_max = ramMax;
}
- if(s_ram_free != ramFree)
- {
- tft.setCursor(175 + 50, 45+FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
+ if (s_ram_free != ramFree) {
+ tft.setCursor(175 + 50, 25 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
get_formated_space(ramFree);
writeArray(buf);
s_ram_free = ramFree;
}
}
-//s_cpu_usage = 0;
-static void gfx_update_cpu()
-{
- tft.setTextColor(ILI9341_DARKCYAN, ILI9341_BLACK);
- if(cpuUsageGlobal != s_cpu_usage)
- {
- tft.setCursor(15+75, 45+FIRST_TEXT_Y_REL);
+static void gfx_update_cpu() {
+ tft.setTextColor(ILI9341_RED, ILI9341_BLACK);
+ if (cpuUsageGlobal != s_cpu_usage) {
+ tft.setCursor(15 + 75, 25 + FIRST_TEXT_Y_REL);
sprintf(buf, "%3d %%", cpuUsageGlobal);
writeArray(buf);
s_cpu_usage = cpuUsageGlobal;
}
- if(s_cpuTemp != cpuTempGlobal)
- {
- tft.setCursor(15 + 75, 45+FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
+ if (s_cpuTemp != cpuTempGlobal) {
+ tft.setCursor(15 + 75, 25 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
sprintf(buf, "%3d ", cpuTempGlobal);
writeArray(buf);
- tft.setCursor(15 + 115, 45+FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y - 2);
+ tft.setCursor(15 + 115, 25 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y - 2);
tft.setTextSize(1);
tft.write('o');
tft.setTextSize(2);
- tft.setCursor(15 + 115 +8, 45+FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
+ tft.setCursor(15 + 115 + 8, 25 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
tft.write('C');
s_cpuTemp = cpuTempGlobal;
}
}
-static void gfx_update_toolbar()
-{
- uint8_t c= 0;
+static void gfx_update_sys_info() {
+ tft.setTextColor(ILI9341_CYAN, ILI9341_BLACK);
+
+ tft.setCursor(15 + 50, 125 + FIRST_TEXT_Y_REL);
+ sprintf(buf, "%s", OS);
+ writeArray(buf);
+ s_os = OS;
+
+ tft.setCursor(15 + 95, 125 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y);
+ sprintf(buf, "%s ", KernelVer);
+ writeArray(buf);
+ tft.setCursor(15 + 115, 125 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y - 2);
+ s_kernel = KernelVer;
+
+ tft.setCursor(15 + 95, 125 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y * 2);
+ sprintf(buf, "%s ", Uptime);
+ writeArray(buf);
+ tft.setCursor(15 + 115, 125 + FIRST_TEXT_Y_REL + TEXT_ESPACE_SHORT_Y * 2 - 2);
+ s_uptime = Uptime;
+}
+
+static void gfx_update_toolbar() {
+ uint8_t c = 0;
char buf[5];
- tft.setTextColor(ILI9341_YELLOW, ILI9341_BLACK);
- //time
- if(s_time_tab[4] != time_tab[4] || s_time_tab[3] != time_tab[3]
- || s_time_tab[1] != time_tab[1] || s_time_tab[0] != time_tab[0])
- {
- tft.setTextSize(2);
- tft.setCursor(135, 2);
-
- while(c < 5)
- {
- uint8_t car = time_tab[c];
- s_time_tab[c] = car;
- tft.write(car);
- c++;
+ tft.setTextColor(ILI9341_YELLOW, ILI9341_BLACK);
+
+ if (s_time_tab[4] != time_tab[4] || s_time_tab[3] != time_tab[3]
+ || s_time_tab[1] != time_tab[1] || s_time_tab[0] != time_tab[0]) {
+ tft.setTextSize(2);
+ tft.setCursor(135, 2);
+
+ while (c < 5) {
+ uint8_t car = time_tab[c];
+ s_time_tab[c] = car;
+ tft.write(car);
+ c++;
+ }
}
- }
//temp
- if(s_localTemp != localTemp)
- {
+ if (s_localTemp != localTemp) {
tft.setCursor(10, 2);
- if(localTemp != 255)
+ if (localTemp != 255)
sprintf(buf, "%2d", localTemp);
else
sprintf(buf, "--");
writeArray(buf);
s_localTemp = localTemp;
}
-
+
// humidity
- if(s_localHum != localHum)
- {
+ if (s_localHum != localHum) {
tft.setCursor(275, 2);
- if(localHum != 255)
+ if (localHum != 255)
sprintf(buf, "%2d", localHum);
else
sprintf(buf, "--");
diff --git a/gfx_1.h b/gfx_1.h
index 601401e..7d22626 100644
--- a/gfx_1.h
+++ b/gfx_1.h
@@ -8,7 +8,4 @@ extern Adafruit_ILI9341 tft;
extern void gfx1_udpate();
extern void gfx1_layout();
-extern bool gfx1_refresh;
-
-
#endif
diff --git a/sysmon.ino b/sysmon.ino
index b854bfd..34b9499 100644
--- a/sysmon.ino
+++ b/sysmon.ino
@@ -6,17 +6,17 @@
#include "datetimeHandler.h"
#include "gfx_1.h"
-#define TFT_DC D4
+#define TFT_DC D4
#define TFT_CS D2
#define TFT_RESET D3
#define DHTPIN D8
-#define DHTTYPE DHT22
+#define DHTTYPE DHT22
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
DHT dht(DHTPIN, DHTTYPE);
-static uint32_t tempTime = 0;
-static uint32_t rtcTime = 0;
+static uint32_t tempTime = 0;
+static uint32_t rtcTime = 0;
static uint32_t displayTime = 0;
void setup() {
@@ -26,76 +26,73 @@ void setup() {
}
void update(String command) {
- int delimiterIndex = command.indexOf('=');
- // Serial.println(command);
- if (delimiterIndex != -1) {
- String key = command.substring(0, delimiterIndex);
- String value = command.substring(delimiterIndex + 1);
- Serial.print(key);
+ if (!isnan(dht.readTemperature())) {
+ localHum = dht.readHumidity();
+ localTemp = dht.readTemperature() - 4;
+ }
- // Check the key and assign the corresponding value
- if (key.equals("CpuTemp")) {
- setCpuTemp(value);
- Serial.print("Received CPU temperature: ");
- Serial.println(value);
- // gfx1_udpate();
- } else if (key.equals("CpuUsage")) {
- setCpuUsage(value);
- Serial.print("Received CPU usage: ");
- Serial.println(value);
- // gfx1_udpate();
- } else if (key.equals("RamFree")) {
- setRamFree(value);
- Serial.print("Received Ram free: ");
- Serial.println(value);
- // gfx1_udpate();
- } else if (key.equals("RamMax")) {
- setRamMax(value);
- Serial.print("Received Ram max: ");
- Serial.println(value);
- // gfx1_udpate();
- } else if (key.equals("Time")) {
- setTime(value);
- Serial.print("Received Time: ");
- Serial.println(value);
- // gfx1_udpate();
- }
+ String keys[] = { "CpuTemp", "CpuUsage", "RamMax", "RamFree", "Time", "OS", "Kernel", "Uptime" };
+ String values[] = { "", "", "", "", "", "", "", "" };
+
+ for (int i = 0; i < std::size(keys); i++) {
+
+ int index = command.indexOf(keys[i]);
+
+ if (index != -1) {
+ String value = command.substring(index + keys[i].length() + 1, command.indexOf(",", index + keys[i].length() + 1));
+ values[i] = value;
+ }
+ }
+
+ for (int i = 0; i < std::size(values); i++) {
+ Serial.print(keys[i]);
+ Serial.print(" = ");
+ Serial.println(values[i]);
+ switch (i) {
+ case 0:
+ if (values[i] != "")
+ setCpuTemp(values[i]);
+ break;
+ case 1:
+ if (values[i] != "")
+ setCpuUsage(values[i]);
+ break;
+ case 2:
+ if (values[i] != "")
+ setRamMax(values[i]);
+ break;
+ case 3:
+ if (values[i] != "")
+ setRamFree(values[i]);
+ break;
+ case 4:
+ if (values[i] != "")
+ setTime(values[i]);
+ break;
+ case 5:
+ if (values[i] != "")
+ OS = values[i];
+ break;
+ case 6:
+ if (values[i] != "")
+ KernelVer = values[i];
+ break;
+ case 7:
+ if (values[i] != "")
+ Uptime = values[i];
+ break;
}
- gfx1_refresh = true;
- gfx1_udpate();
+ }
+ gfx1_udpate();
}
void loop() {
- Serial.println("Enter data:");
- // while (Serial.available() == 0) {}
String command = Serial.readString();
- command.trim();
- Serial.println(command);
-
- if(!isnan(dht.readTemperature()))
- {
- localHum = dht.readHumidity();
- localTemp = dht.readTemperature() - 4;
- Serial.println(localTemp);
- gfx1_refresh = true;
- gfx1_udpate();
- }
- // else
- // {
- // localHum = 255;
- // localTemp = 255;
- // }
-
+ command.trim();
update(command);
- // delay(1000);
-
- // if ( currentTime > displayTime ) {
- // displayTime = currentTime + 100000;
- // }
}
-void initHardware()
-{
+void initHardware() {
pinMode(TFT_RESET, OUTPUT);
digitalWrite(TFT_RESET, LOW);
delay(1000);
@@ -104,5 +101,4 @@ void initHardware()
tft.begin();
tft.setRotation(3);
dht.begin();
- // delay(3000);
} \ No newline at end of file
diff --git a/sysmon.py b/sysmon.py
index 9fd0530..2fe6d0b 100644
--- a/sysmon.py
+++ b/sysmon.py
@@ -5,12 +5,10 @@ from datetime import datetime
from datetime import timedelta
import psutil
import serial
-from gettext import c2py
from time import sleep
import sensors
import subprocess
import math
-import pyowm
import os
CPU_TEMP_PATH = '/sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon2/temp1_input'
@@ -27,37 +25,36 @@ def send_command(command):
sleep(0.1)
def set_time(date_time):
- request = '\nTime=%s\r\n' % date_time.strftime('%H:%M:%S')
- send_command(request)
+ curr_time=date_time.strftime('%H:%M:%S')
+ return curr_time
def set_max():
ram_max = int(psutil.virtual_memory().total / (1024.*1024.))
- request = 'RamMax=%d\r\n' % ram_max
- send_command(request)
+ # request = 'RamMax=%d\r\n' % ram_max
+ # send_command(request)
+ return ram_max
def set_free():
ram_free = int(psutil.virtual_memory().free / (1024.*1024.))
- request = 'RamFree=%d\r\n' % ram_free
- send_command(request)
+ # request = 'RamFree=%d\r\n' % ram_free
+ # send_command(request)
+ return ram_free
-def set_system_info():
+def set_OS():
with open('/etc/os-release', 'r') as f:
for line in f:
if line.startswith('NAME='):
OSName = line.split('"')[1]
break
- request = 'OS=%s\r\n' % OSName
- send_command(request)
- sleep(1)
+ return OSName
+def set_kernel_version():
with open('/proc/version', 'r') as f:
for line in f:
Kernel = line.split(' ')[2].split('-')[0]
break
- request = 'Kernel=%s\r\n' % Kernel
- send_command(request)
- sleep(1)
+ return Kernel
def set_uptime():
uptime_seconds = psutil.boot_time()
@@ -65,35 +62,20 @@ def set_uptime():
uptime_hours = int(uptime.total_seconds() // 3600)
uptime_minutes = int((uptime.total_seconds() % 3600) // 60)
uptime = f"{uptime_hours:02d}:{uptime_minutes:02d}"
- request = 'Uptime=%s\r\n' % uptime
- send_command(request)
+ return uptime
-def start(tty_serial):
-
- set_system_info()
+def start():
while 1:
- set_uptime()
- sleep(1)
cpu_temp = int(subprocess.check_output(['cat', CPU_TEMP_PATH]))/1000
- requests = "\nCpuTemp="+str(math.trunc(cpu_temp))
- send_command(requests)
- sleep(1)
cpu_pct = psutil.cpu_percent(interval=None, percpu=False)
cpu_global = int(cpu_pct)
- request = "\nCpuUsage=" + str(math.trunc(cpu_global))
+ request = "\nCpuTemp="+str(math.trunc(cpu_temp))+",CpuUsage="+str(math.trunc(cpu_global))+",RamMax="+str(set_max())+",RamFree="+str(set_free())+",Time="+str(set_time(datetime.now()))+",OS="+str(set_OS())+",Kernel="+str(set_kernel_version())+",Uptime="+str(set_uptime())
send_command(request)
- sleep(1)
- set_time(datetime.now())
- sleep(1)
- set_max()
- sleep(1)
- set_free()
- sleep(1)
+ sleep(2)
def main():
- start('/dev/ttyUSB0')
-
+ start()
if __name__ == "__main__":
main()