mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			Create temp_monitor
							parent
							
								
									de370e8988
								
							
						
					
					
						commit
						2357b61e68
					
				|  | @ -0,0 +1,74 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # Define temperature thresholds: | ||||||
|  | NORMAL_THRESHOLD=85    # Normal if below 85°C | ||||||
|  | REBOOT_THRESHOLD=100   # Reboot if 100°C or higher | ||||||
|  | 
 | ||||||
|  | # --- Get Adapter info --- | ||||||
|  | for card in $(lsusb | awk '{print $6}' | sort | uniq); do | ||||||
|  |     case "$card" in | ||||||
|  |         "0bda:8812" | "0bda:881a" | "0b05:17d2" | "2357:0101" | "2604:0012") | ||||||
|  |             driver=88XXau | ||||||
|  |             ;; | ||||||
|  |         "0bda:a81a") | ||||||
|  |             driver=8812eu | ||||||
|  |             ;; | ||||||
|  |         "0bda:f72b" | "0bda:b733") | ||||||
|  |             driver=8733bu | ||||||
|  |             ;; | ||||||
|  |     esac | ||||||
|  | done | ||||||
|  | wifi_adapter=""$driver"" | ||||||
|  | echo "Wifi adapter found: $driver" | ||||||
|  | 
 | ||||||
|  | while true; do | ||||||
|  |     # --- Get VTX Temperature --- | ||||||
|  |     # Example output from ipcinfo --temp: "39.00" | ||||||
|  |     vtx_temp=$(ipcinfo --temp) | ||||||
|  |     vtx_int=$(echo "$vtx_temp" | cut -d. -f1) | ||||||
|  |      | ||||||
|  |     adapter_temp=0 | ||||||
|  |     if [ "$wifi_adapter" = "8733bu" ]; then | ||||||
|  |         # Expected format: "rf_path: 0, thermal_value: 37, offset: 45, temperature: 20" | ||||||
|  |         adapter_temp=$(grep -o 'temperature: [0-9]*' /proc/net/rtl8733bu/wlan0/thermal_state | awk '{print $2}') | ||||||
|  |     elif [ "$wifi_adapter" = "88XXau" ]; then | ||||||
|  |         echo "Adapter 88XXau temperature extraction not implemented yet." | ||||||
|  |         adapter_temp=0 | ||||||
|  |     elif [ "$wifi_adapter" = "8812eu" ]; then | ||||||
|  |         if [ -f /proc/net/rtl88x2eu/wlan0/thermal_state ]; then | ||||||
|  |             # Extract both temperature values and choose the highest | ||||||
|  |             adapter_temp=$(grep -o 'temperature: [0-9]*' /proc/net/rtl88x2eu/wlan0/thermal_state | awk '{print $2}' | sort -n | tail -1) | ||||||
|  |         else | ||||||
|  |             echo "Thermal state file for 8812eu not found." | ||||||
|  |             adapter_temp=0 | ||||||
|  |         fi | ||||||
|  |     else | ||||||
|  |         echo "Unknown adapter type: $wifi_adapter" | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     # Fallback if adapter_temp is empty | ||||||
|  |     if [ -z "$adapter_temp" ]; then | ||||||
|  |         adapter_temp=0 | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     echo "VTX temperature: ${vtx_temp}°C, Adapter temperature: ${adapter_temp}°C" | ||||||
|  | 
 | ||||||
|  |     # --- Determine the Highest Temperature --- | ||||||
|  |     if [ "$adapter_temp" -gt "$vtx_int" ]; then | ||||||
|  |         max_temp=$adapter_temp | ||||||
|  |     else | ||||||
|  |         max_temp=$vtx_int | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     # --- Determine the current state based on max_temp --- | ||||||
|  |     if [ "$max_temp" -lt "$NORMAL_THRESHOLD" ]; then | ||||||
|  |         echo "All is well... Nothing to do" > /dev/null | ||||||
|  |     elif [ "$max_temp" -lt "$REBOOT_THRESHOLD" ]; then | ||||||
|  |         echo "Warning: High temperature was detected.\nVTX Temp:&T WifiTemp:&W &L30 &G8 &F18" > /tmp/MSPOSD.msg | ||||||
|  |     else | ||||||
|  |         echo "VTX will reboot due to thermal state...\nVTX Temp:&T WifiTemp:&W &L30 &G8 &F18.\nRebooting in 15 seconds..." > /tmp/MSPOSD.msg | ||||||
|  |         sleep 15 | ||||||
|  |         reboot | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     sleep 5 | ||||||
|  | done | ||||||
		Loading…
	
		Reference in New Issue