From 364c5c00578fa2e88466bb0ddcaff3db34ccd4e4 Mon Sep 17 00:00:00 2001 From: Blaster4385 Date: Sat, 20 May 2023 18:44:22 +0530 Subject: [PATCH] Add system information - Also cleanup code - Switch to almost realtime data reading --- cpu.cpp | 3 + cpu.h | 3 + gfx_1.cpp | 203 +++++++++++++++++++++++++++++------------------------ gfx_1.h | 3 - sysmon.ino | 128 ++++++++++++++++----------------- sysmon.py | 52 +++++--------- 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 -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; } - gfx1_refresh = true; - gfx1_udpate(); + } + + 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_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()