Menimbang dan melihat sudah tidak adanya lalu lintas data yang menuju ke page Groups dan 157, maka kedua halaman ini dengan berat hati harus kami take down untuk tujuan efisiensi. (bandithijo, 2019/10/11) ● Untuk semua artikel yang memberikan tautan ke repositori dotfiles saya di GitHub, saat ini sedang dalam proses perbaikan sehingga tidak dapat diakses. Mohon maaf atas ketidaknyamanan ini. (bandithijo, 2019/03/14) ●

Membuat CPU Temperature Alert dengan Ruby

Ditulis: 2019/10/20 Diperbaharui: 2019/10/23
Ruby Tips

بسم الله الرحمن الرحيم

Pendahuluan

Sejak sekitar Maret 2019, saya menggunakan ThinkPad X61. Laptop yang dirilis tahun 2007 silam ini, masih dapat saya pergunakan untuk menunjang pekerjaan saya sehari-hari, sebagai Junior Backend Rails Developer.

Sebelum ini, saya menggunakan ThinkPad X260. Saya memiliki dua buah ThinkPad seri X, X61 (2007) dan X260 (2016). Namun, karena istri saya memerlukan laptop untuk menunjang pekerjaannya, maka saya pun memilih untuk menggunakan ThinkPad X61.

Cukup banyak beberapa kendala yang menuntut saya untuk harus pintar-pintar dalam mengadaptasikan workflow saya dalam menggunakan sistem komputer. Tentunya tidak seleluasa menggunakan X260.

Karena X61 ini adalah laptop yang berumur, maka hal yang paling saya perhatikan sekali adalah temperatur dari CPU.

Saya sangat menjaga dan memperhatikan sekali proses-proses yang berjalan di atas sistem agar tidak memberatkan CPU terlalu lama.

Kalaupun perlu proses yang berat, saya ingin dapat memonitor temperatur dari CPU yang sedang aktif bekerja.

Karena seperti yang teman-teman ketahui, Intel processor memiliki sistem yang dapat mematikan mesin apabila suhu CPU sudah mencapai ambang batas (100°C).

Beberapa hari ini, sudah kira-kira 2 kali dalam sehari saya mengalami mati mendadak. Saya curiga karena temperatur CPu yang tidak saya jaga pada konidisi yang aman.

Hal ini juga disebabkan karena minimalnya sistem notifikasi dari sistem yang saya gunakan.

Atas dasar ini, saya berinisiatif untuk menambahkan fitur notifikasi suara apabila CPU sudah mencapai suhu tertentu.

gambar_1

Gambar 1 - Tampilan notifikasi Peringatan Hot CPU Temperature

Langsung saja saya tuliskan script sederhana cupu, yang saya tulis menggunakan bahasa Ruby.

Script

#!/usr/bin/env ruby

# Copyright (C) 2019 Rizqi Nur Assyaufi <bandithijo@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

Process.setproctitle("notify-hightemp")

require 'open3'

CPU_TEMP_THRESHOLD = 90  # <- Normaly 90-100
NOTIF_DURATION = 2.5     # <- Second
NOTIF_VOLUME = 5         # <- Range 0-10

def notif_volume_converter(value)
  volume_rate = value * 6553.6
end

begin
  while true
    capture_temp = "cat /sys/class/thermal/thermal_zone0/temp"
    temp = Open3.capture2(capture_temp)
    temp_cpu = temp[0].to_i
    temp_threshold = CPU_TEMP_THRESHOLD
    notif_duration = (NOTIF_DURATION * 1000).to_i
    notif_volume = notif_volume_converter(NOTIF_VOLUME)

    if temp_cpu >= temp_threshold
      system("notify-send 'High CPU Temperature''!' 'The CPU has been hard at work in the past minute.' --urgency=critical --expire-time=#{notif_duration}")
      system("paplay /home/bandithijo/snd/Ringtones/Alert/aircraftalarm.wav --volume=#{notif_volume}")
    end

    sleep(5)
  end
rescue Interrupt
  puts "\nExiting..."
end

Saya beri nama file notify-hightemp.

Saya tidak menggunakan ekstensi .rb karena saya sudah mendefinisikan SheBang #!/usr/bin/env ruby dari file ini, agar sistem dapat mengenali bahwa saya ingin mengeksekusi file ini dengan Ruby intepreter. Selain itu agar lebih mudah dipanggil di Terminal, hehe.

Saya menggunakan perintah cat /sys/class/thermal/thermal_zone0/temp agar lebih fleksibel digunakan pada mesin yang lain. Karena selain /sys kita juga dapat menggunakan /proc

Selain itu saya hanya menangkap nilai untuk thermal_zone0 yang saya asumsikan sebagai temperatur untuk core0.

Teman-teman bisa mengolahnya sendiri untuk menangkap nilai dari core yang lain.

Selanjutnya, berikan permission untuk execute.

$ chmod +x notify-hightemp

Copykan ke direktori /usr/bin/ untuk dieksekusi semua user atau ~/.local/bin/ untuk user kita saja.

Selanjutnya tinggal meletakkan pada autorun.

Autorun

Bagian ini akan tergantung dari DE atau WM yang teman-teman pergunakan.

Karena saya menggunakan BSPWM, kira-kira seperti ini cara saya menambahkan script yang baru saja kita buat ini kedalam sistem autorun.

$ vim ~/.config/bspwm/autostart
#!/usr/bin/env sh

...
...

kill -9 $(pidof notify-hightemp); notify-hightemp &

Penambahakan kill -9 $(pidof notify-hightemp) bertujuan agar ketika saya merestart WM, script ini tidak dipanggil lagi. Namun, akan dikill terlebih dahulu, kemudian baru dijalankan kembali.

Nama dari processs title berupa notify_hightemp ini saya set pada Ruby script di bagian

Process.setproctitle("notify-hightemp")

Sebenarnya bisa juga menggunakan,

$0="notify-hightemp"

Namun, terlihat seperti kurang Ruby banget, hehe.

Akhir Kata

Kira-kira seperti ini saja Ruby script yang sederhana cupu ini.

Mungkin dilain waktu, berdasarkan kebutuhan-kebutuhan tertentu, akan mulai ditambahkan fitur-fitur dan kemampuan dari script ini agar lebih mudah dan interaktif untuk digunakan.

Mudah-mudahan bermanfaat.

Terima kasih (^_^)v

Oh ya, kalo mau audio aircraftalarm.wav, dapat diunduh di sini yaa.

Tapi tidak saya rekomendasikan karena mungkin dapat menyebabkan serangan panik, hehe.

Penulis

logo_author

BanditHijo adalah nama pena saya – meminjam istilah keren dari para penulis. Teman-teman menyebut saya sebagai GNU/Linux Enthusiast. Saya memang gemar mengutak-atik sistem operasi ini. Bukan karena hobi tapi karena saya perlu untuk menggunakannya. Hehe.

- Rizqi Nur Assyaufi