1 min read

Python script CPU Temperature มาใช้งานบน Home Assistant

Python script CPU Temperature มาใช้งานบน Home Assistant

จากบทความที่แล้วเกี่ยวกับการ Integration Openmediavault เข้ามาใช้งานที่ Home Assistant (อ่านเพิ่มเติม) จะเห็นว่ามันไม่มีข้อมูลของ CPU Temperature ซึ่งในบทความนี้ ผมจะมาแนะนำวิธีการใช้ Python script เพื่อจะดึงข้อมูล CPU Temp ไปแสดงผลที่ Home Assistant โดยจะเป็นการ run Python script บนเครื่อง Openmediavault โน๊ตบุ๊คเก่า (อ่านเพิ่มเติม)

* วิธีนี้สามารถนำไปประยุกต์ใช้กับ server linux อื่นๆได้ด้วยนะ

เตรียมพร้อม Home Assistant

  1. เปิดใช้ Rest API แก้ไข configuration.yaml (อ่านเพิ่มเติม)
# Example configuration.yaml entry
api:

2. ทำการสร้าง input_number และ sensors แก้ไข configuration.yaml เสร็จแล้ว Restart

# Example configuration.yaml entry
input_number:
  cpu_temp:
    min: 0
    max: 200000
    
sensors:
  cpu_temp:
    unit_of_measurement: '°C'
    value_template: '{{ states("input_number.cpu_temp") | multiply(0.001) | round(1) }}'

3. สร้าง Long-Lived Access Tokens โดนเข้าไปที่ Profile ของเรา หลังจากสร้างแล้วอย่าลืม copy token เก็บไว้นะ

ติดตั้ง Python script

1. SSH เข้าไปเครื่อง Openmediavault จากนั้น ทดสอบเรียก CPU Temp

cat /sys/class/thermal/thermal_zone0/temp

2. ทำการติดตั้ง Python และทำการ Verify เพื่อให้มั่นใจว่า Python พร้อมใช้งาน

sudo apt-get install python3-pip
pip3 --version

3. สร้าง Python script

sudo nano update_temp.py
#!/usr/bin/env python3

import subprocess
from requests import post

temp=subprocess.check_output("cat /sys/class/thermal/thermal_zone0/temp", shell=True)
temp = [int(i) for i in temp.split() if i.isdigit()][0]

url = "http://192.168.x.xxx:8123/api/states/input_number.cpu_temp"

headers = {
  "Authorization": "Bearer TOKEN",
  "content-type": "application/json"
}

data = '{"state": %s}' % temp
post(url, headers=headers, data=data, verify=False)
  • url ต้องแก้เป็น ip ของ Home Assistant ของเรานะ
  • Authorization ตรงส่วนของ TOKEN แก้เป็น Long-Lived Access Tokens ตอนที่สร้างไว้ข้างบน

3. เปลี่ยน Permission ของไฟล์ update_temp.py

sudo chmod +x update_temp.py

4. ทดสอบ run Python script

sudo ./update_temp.py

5. ทำการตั้งค่า crontab เพื่อจะอัพเดท script ทุกๆนาที

* * * * * /root/update_temp.py

หรือจะใช้งานผ่านทาง scheduled job Openmediavault ก็ได้เหมือนกัน

เพียงแค่นี้ เราก็สามารถ monitor CPU Temperature จากเครื่อง Openmediavault หรือ server linux ตัวอื่นๆ โดยการเข้าไปเพิ่ม card เพื่อเรียกใช้งาน sensor cpu_temp ได้เลย