#!/bin/bash

# variables
PRESENT=`cat /sys/devices/system/cpu/present`
CPU0=`lscpu | grep "Model name" | sed -n 1p | sed 's/Model name://g' | sed -r '1s/\s+//g'`
CPU0M=`lscpu | grep "CPU max MHz" | sed -n 1p | sed 's/CPU max MHz://g' | sed -r '1s/\s+//g' | sed 's/.0000//g'`
if [[ -f "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq" ]]; then
	CPU0C=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq | sed 's/...$//');
fi
CPU1=`lscpu | grep "Model name" | sed -n 2p | sed 's/Model name://g' | sed -r '1s/\s+//g'`
CPU1M=`lscpu | grep "CPU max MHz" | sed -n 2p | sed 's/CPU max MHz://g' | sed -r '1s/\s+//g' | sed 's/.0000//g'`
if [[ -f "/sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_cur_freq" ]]; then
	CPU1C=$(cat /sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_cur_freq | sed 's/...$//');
fi
if [[ -f "/sys/class/thermal/thermal_zone0/temp" ]]; then
	CPU0T=$(cat /sys/class/thermal/thermal_zone0/temp|cut -c1-2);
fi
if [[ -f "/sys/class/thermal/thermal_zone1/temp" ]]; then
	CPU1T=$(cat /sys/class/thermal/thermal_zone1/temp|cut -c1-2);
fi
if [[ `ls /sys/class/hwmon/hwmon*[0-9]*/pwm1` ]] > /dev/null 2>&1; then
	if [[ `ls /sys/class/hwmon/hwmon*[0-9]*/fan1_input` ]] > /dev/null 2>&1 || \
	[[ `ls /sys/class/hwmon/hwmon*[0-9]*/pwm1_enable` ]] > /dev/null 2>&1; then
		FAN="true"
		HWMON=`ls /sys/class/hwmon/hwmon*[0-9]*/pwm1 | grep -ohE 'hwmon[0-9][^ ]' | sed 's/.$//'`
	fi
else
	FAN="false"
fi
if [[ `ls /sys/class/nvme/nvme[0-9]/hwmon[0-9]/temp[0-9]_input` ]] > /dev/null 2>&1; then
	NVME="true"
	NVMET=$(cat /sys/class/nvme/nvme[0-9]/hwmon[0-9]/temp[0-9]_input | cut -c1-2 | sed s/$/°C/ | tr '\n' ' ')
else
	NVME="false"
fi
if [[ `ls /sys/class/scsi_device/[0-9]:[0-9]:[0-9]:[0-9]/device/hwmon/hwmon[0-9]/temp1_input` ]] > /dev/null 2>&1; then
	SSD="true"
	SSDT=$(cat /sys/class/scsi_device/[0-9]:[0-9]:[0-9]:[0-9]/device/hwmon/hwmon[0-9]/temp1_input | cut -c1-2 | sed s/$/°C/ | tr '\n' ' ')
else
	SSD="false"
fi
NETWORK=$(ip -o -4 -br a | grep -v '^lo'| sed 's/^/ /' | sed 's/\/..//' | sed -r '1s/\s+/ /g' | sed -r '2s/\s+/ /g')
ETH=`echo -e Wired:`
WLAN=`echo -e Wireless:`
USB=`echo -e Tether:`
HA=`echo -e Hassio:`
DOCKER=`echo -e Docker:`

# functions
count_high (){
echo -en "Processors:  "$CPU0; echo -en " @ $CPU0M"; echo -en "MHz $CPU0T°C";
echo -en "," $CPU1; echo -en " @ $CPU1M"; echo -e "MHz $CPU1T°C";
echo -en "Frequencies: "$CPU0C; echo -en "MHz $CPU1C"; echo -e "MHz"
}

count_low (){
echo -en "Processor:   "$CPU0; echo -en " @ $CPU0M"; echo -e "MHz $CPU0T°C";
echo -en "Frequency:   "$CPU0C; echo -e "MHz";
}

cpu_hwinfo (){
if [[ "$PRESENT" == "0-7" || "$PRESENT" == "0-5" ]]; then
	count_high;
fi
if [[ "$PRESENT" == "0-3" || "$PRESENT" == "0-1" || "$PRESENT" == "0" ]]; then
	count_low;
fi
}

fan_pwr (){
MODEL=$(tr -d '\0' </proc/device-tree/model)
PWM=`cat /sys/class/hwmon/${HWMON}/pwm1`
if [[ `ls /sys/class/hwmon/${HWMON}/fan1_input` ]] > /dev/null 2>&1; then
	RPM=`cat /sys/class/hwmon/${HWMON}/fan1_input`
	echo -e "Fan:         RPM ${RPM}, PWR ${PWM}"
else
	if [[ "$PWM" == "0" ]]; then
		echo -e "Fan:         OFF, PWR ${PWM}"
	else
		echo -e "Fan:         ON, PWR ${PWM}"
	fi
fi
}

# display
echo -e "── \e[1mDISK\e[0m"
df -h | egrep '(Filesystem)|(/dev/mmc)|(/dev/root)|(/dev/sd)|(/dev/nvme)'
echo ""
echo -e "── \e[1mNETWORK\e[0m"
echo -e "Hostname:    $(hostname)"
echo -e "$NETWORK" | sed "s/^[ \t]*//" | \
	sed "s/eth0/$ETH       eth0/g" | sed "s/eth1/$ETH       eth1/g" | sed "s/eth2/$ETH       eth2/g" | \
	sed "s/wlan0/$WLAN    wlan0/g" | sed "s/wlan1/$WLAN    wlan1/g" | sed "s/wlan2/$WLAN    wlan2/g" | \
	sed "s/usb0/$USB      usb0/g" | sed "s/usb1/$USB      usb1/g" | \
	sed "s/hassio/$HA      hassio/g" | sed "s/docker0/$DOCKER      docker0/g"
echo ""
echo -e "── \e[1mSYSTEM\e[0m"
if [[ -f "/sys/devices/system/cpu/present" ]]; then cpu_hwinfo; fi
echo -e "Online:     " $(lscpu | grep -w "On-line CPU(s) list:" | sed "s/On-line CPU(s) list:/ /g" | sed -e "s/\s\{3,\}//g")
if [[ "$FAN" == "true" ]]; then fan_pwr; fi
if [[ "$NVME" == "true" ]]; then echo -e "NVMe:        ${NVMET}"; fi
if [[ "$SSD" == "true" ]]; then echo -e "SSD:         ${SSDT}"; fi
echo -e "Governor:   " $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
echo -e "Memory:     " $(free -h | sed 's/i//g' | sed 's/Mem://g' | awk '{print $1" "$2}' | sed -n 'n;p')
echo -e "Entropy:    " $(cat /proc/sys/kernel/random/entropy_avail)
echo -e "Uptime:     " $(uptime)
