added temperaturr
This commit is contained in:
parent
1ff912edff
commit
3074f55973
6 changed files with 61 additions and 86 deletions
|
@ -9,6 +9,7 @@ import util/emurrji
|
||||||
import util/calendurr
|
import util/calendurr
|
||||||
import util/remminurr
|
import util/remminurr
|
||||||
import util/passwurrd
|
import util/passwurrd
|
||||||
|
import util/temperaturr
|
||||||
|
|
||||||
proc dispatch*(cfg: Config) =
|
proc dispatch*(cfg: Config) =
|
||||||
case cfg.run
|
case cfg.run
|
||||||
|
@ -30,5 +31,7 @@ proc dispatch*(cfg: Config) =
|
||||||
remminurr.go()
|
remminurr.go()
|
||||||
of Passwurrd:
|
of Passwurrd:
|
||||||
passwurrd.go()
|
passwurrd.go()
|
||||||
|
of Temperaturr:
|
||||||
|
temperaturr.go()
|
||||||
else:
|
else:
|
||||||
echo "No valid run command given"
|
echo "No valid run command given"
|
||||||
|
|
|
@ -10,4 +10,5 @@ type
|
||||||
Emurrji,
|
Emurrji,
|
||||||
Calendurr,
|
Calendurr,
|
||||||
Remminurr,
|
Remminurr,
|
||||||
Passwurrd
|
Passwurrd,
|
||||||
|
Temperaturr
|
||||||
|
|
|
@ -31,6 +31,8 @@ proc parseArgs*() =
|
||||||
myConfig.run = Remminurr
|
myConfig.run = Remminurr
|
||||||
of "passwurrd", "password", "pw":
|
of "passwurrd", "password", "pw":
|
||||||
myConfig.run = Passwurrd
|
myConfig.run = Passwurrd
|
||||||
|
of "temperaturr", "temperature", "temp":
|
||||||
|
myConfig.run = Temperaturr
|
||||||
else:
|
else:
|
||||||
echo p.help
|
echo p.help
|
||||||
quit(1)
|
quit(1)
|
||||||
|
|
54
src/util/temperaturr.nim
Normal file
54
src/util/temperaturr.nim
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import math
|
||||||
|
import strutils
|
||||||
|
|
||||||
|
import ../common
|
||||||
|
import ../output
|
||||||
|
|
||||||
|
proc getThermalZones(): seq[string] =
|
||||||
|
var zones: seq[string] = @[]
|
||||||
|
let dirname_re = re("thermal_zone[\\d]+")
|
||||||
|
let enabled_re = re("enabled")
|
||||||
|
for file in walkDir("/sys/class/thermal/"):
|
||||||
|
if file.path.contains(dirname_re):
|
||||||
|
let state = readFile(file.path & "/mode")
|
||||||
|
if state.contains(enabled_re):
|
||||||
|
zones.add(file.path)
|
||||||
|
return zones
|
||||||
|
|
||||||
|
proc getTemp(zone: string): int =
|
||||||
|
let temp = strip(readFile(zone & "/temp"))
|
||||||
|
return parseInt(temp)
|
||||||
|
|
||||||
|
proc getAverageTemp(zones: seq[string]): float =
|
||||||
|
var temps: int = 0
|
||||||
|
for zone in zones:
|
||||||
|
let temp = getTemp(zone)
|
||||||
|
temps += temp
|
||||||
|
let avgtemp = ceil((temps / len(zones))/1000)
|
||||||
|
return round(avgtemp,2)
|
||||||
|
|
||||||
|
proc getObject(temp: float): Info =
|
||||||
|
var icon = ""
|
||||||
|
case temp:
|
||||||
|
of 40..59:
|
||||||
|
icon = ""
|
||||||
|
of 60.. 200:
|
||||||
|
icon = ""
|
||||||
|
else:
|
||||||
|
icon = ""
|
||||||
|
let main_text = icon & " " & $temp & "°C"
|
||||||
|
var data = newInfo("Temperaturr")
|
||||||
|
data.full_text = main_text
|
||||||
|
return data
|
||||||
|
|
||||||
|
proc go*() =
|
||||||
|
let zones = getThermalZones()
|
||||||
|
let temp = getAverageTemp(zones)
|
||||||
|
let data = getObject(temp)
|
||||||
|
let option = outputData(data)
|
||||||
|
if option == data.full_text:
|
||||||
|
# Refresh
|
||||||
|
go()
|
||||||
|
|
|
@ -1,72 +0,0 @@
|
||||||
import ../../globurrl
|
|
||||||
import std/[os,re,math,strutils]
|
|
||||||
|
|
||||||
const default_bg = green
|
|
||||||
const default_fg = black
|
|
||||||
const alert_bg = yellow
|
|
||||||
const alert_fg = black
|
|
||||||
const warning_bg = red
|
|
||||||
const warning_fg = black
|
|
||||||
|
|
||||||
proc getThermalZones(): seq[string] =
|
|
||||||
var zones: seq[string] = @[]
|
|
||||||
let dirname = re("thermal_zone[\\d]+")
|
|
||||||
for file in walkDir("/sys/class/thermal/"):
|
|
||||||
if contains(file.path,dirname):
|
|
||||||
let state = readFile(file.path & "/mode")
|
|
||||||
if contains(state,re"enabled"):
|
|
||||||
zones.add(file.path)
|
|
||||||
return zones
|
|
||||||
|
|
||||||
proc getTemp(zone: string): int =
|
|
||||||
let temp = strip(readFile(zone & "/temp"))
|
|
||||||
return parseInt(temp)
|
|
||||||
|
|
||||||
proc getAverageTemp(zones: seq[string]): int =
|
|
||||||
var temps: int = 0
|
|
||||||
for zone in zones:
|
|
||||||
let temp = getTemp(zone)
|
|
||||||
temps += temp
|
|
||||||
let avgtemp = ceil((temps / len(zones))/1000)
|
|
||||||
return toInt(round(avgtemp,0))
|
|
||||||
|
|
||||||
proc getObject(temp: int): Info =
|
|
||||||
var icon = ""
|
|
||||||
var bg_col = default_bg
|
|
||||||
var fg_col = default_fg
|
|
||||||
case temp:
|
|
||||||
of 40..59:
|
|
||||||
bg_col = alert_bg
|
|
||||||
fg_col = alert_fg
|
|
||||||
icon = ""
|
|
||||||
of 60.. 200:
|
|
||||||
bg_col = warning_bg
|
|
||||||
fg_col = warning_fg
|
|
||||||
icon = ""
|
|
||||||
else:
|
|
||||||
bg_col = default_bg
|
|
||||||
fg_col = default_fg
|
|
||||||
icon = ""
|
|
||||||
let text = "<span foreground='" & bg_col & "'>" & icon & "</span> " & $temp & "°C"
|
|
||||||
let main_text = icon & " " & $temp & "°C"
|
|
||||||
var data = newInfo("Temperaturr")
|
|
||||||
data.full_text = main_text
|
|
||||||
data.selected_bg = bg_col
|
|
||||||
data.selected_fg = fg_col
|
|
||||||
# i3bar stuff
|
|
||||||
data.html_text = text
|
|
||||||
data.color = bg_col
|
|
||||||
data.border = bg_col
|
|
||||||
return data
|
|
||||||
|
|
||||||
proc main() =
|
|
||||||
let zones = getThermalZones()
|
|
||||||
let temp = getAverageTemp(zones)
|
|
||||||
let data = getObject(temp)
|
|
||||||
let option = outputData(data)
|
|
||||||
if option == data.full_text:
|
|
||||||
# Refresh
|
|
||||||
main()
|
|
||||||
|
|
||||||
if isMainModule:
|
|
||||||
main()
|
|
|
@ -1,13 +0,0 @@
|
||||||
# Package
|
|
||||||
|
|
||||||
version = "0.1.0"
|
|
||||||
author = "Paul Wilde"
|
|
||||||
description = "Display temp in dmenu"
|
|
||||||
license = "GPL-3.0-or-later"
|
|
||||||
srcDir = "src"
|
|
||||||
bin = @["temperaturr"]
|
|
||||||
|
|
||||||
|
|
||||||
# Dependencies
|
|
||||||
|
|
||||||
requires "nim >= 1.6.6"
|
|
Loading…
Reference in a new issue