Module: Rsensors::Sensor

Defined in:
lib/rsensors.rb

Overview

Temperature Sensor interface.

Class Method Summary collapse

Class Method Details

.format_hdparm(text) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/rsensors.rb', line 61

def self.format_hdparm(text)
 sol = ""
 text.each_line { |line|
  if /^\/dev/.match(line)  # hard disk detected
   sol[0] += line
  elsif /^ drive temperature/.match(line) # info detected
   sol += line
  elsif /^ Model=(\w+),*/.match(line) # model detected
   m1 = /^ Model=(\w+\s+\w+),*/.match(line)
   #p m1
   sol += m1[1]
  end
 }
 return sol # return
end

.formatHddtemp(entry) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/rsensors.rb', line 121

def self.formatHddtemp(entry)
	 sol = []
	 entry.each_line { |line|
 if m1 = /\w+(\/?d?\/):(\w+) not available/.match(line)  # error detected
  puts "**warning** drive /dev/#{m1[1]} sensor not available"
 elsif m1 = /^(d+)/.match(line) # info detected
   sol << m1[1]
 end
 }
	 return sol[0].to_f if sol.size == 1
	 return sol
end

.formatHdparm(entry) ⇒ Object



113
114
115
116
117
118
119
120
# File 'lib/rsensors.rb', line 113

def self.formatHdparm(entry)
  sol = []
  ok_sense = true
  entry.each_line { |line|
    sol, ok_sense = hdparmLine(line,sol,ok_sense)
             }
  hdParmOutput(sol)
end

.hdDetect(line) ⇒ Object



96
97
98
# File 'lib/rsensors.rb', line 96

def self.hdDetect(line)
  return /^\/dev/.match(line)  # hard disk detected 
end

.hdparmInfoOk(line) ⇒ Object



90
91
92
# File 'lib/rsensors.rb', line 90

def self.hdparmInfoOk(line)
  /^ drive temperature \(celsius\) is:\s+(d+)/.match(line) # info detected
end

.hdparmLine(line, ol, ok_sense) ⇒ Object



103
104
105
106
107
108
109
110
111
112
# File 'lib/rsensors.rb', line 103

def self.hdparmLine(line, ol, ok_sense)
  if hdDetect(line)
      ok_sense = true # activate sense
  elsif m1= hdParmInfoOk(line) # info detected
      sol << m1[1] if ok_sense
  elsif hdparmProblem(line) # sense problem detected
      ok_sense = false
  end
  return sol, ok_sense
end

.hdParmOutput(sol) ⇒ Object



99
100
101
102
# File 'lib/rsensors.rb', line 99

def self.hdParmOutput(sol)
 return sol[0].to_f if sol.size == 1
	 return sol
end

.hdparmProblem(line) ⇒ Object



93
94
95
# File 'lib/rsensors.rb', line 93

def self.hdparmProblem(line)
  /^SG_IO: bad\/missing sense data/.match(line) # sense problem detected
end

.maxTemperatureHdObject



133
134
135
136
137
# File 'lib/rsensors.rb', line 133

def self.maxTemperatureHd
  temp = temperatureHd  # float or array of temperatures
  return temp if temp.is_a? Float
  return temp.max # return max temp from available hard disks 
end

.temperatureObject



138
139
140
141
142
143
144
145
146
147
# File 'lib/rsensors.rb', line 138

def self.temperature
 if temperature1
  return temperature1
 elsif temperature2
  return temperature2
 elsif temperature4
  return temperature4
 else return 0 # to perform float test, give a correct answer
 end
end

.temperature1Float

Returns cpu temperature or [False] if not available.

Returns:

  • (Float)

    cpu temperature or [False] if not available

Raises:

  • none



30
31
32
33
34
35
# File 'lib/rsensors.rb', line 30

def self.temperature1
 if File.exists?('/sys/class/hwmon/hwmon0/temp1_input')
  File.read('/sys/class/hwmon/hwmon0/temp1_input').to_f / 1000
 else false
 end
end

.temperature2Object



36
37
38
39
40
41
42
43
# File 'lib/rsensors.rb', line 36

def self.temperature2
 if File.exists?('/sys/class/hwmon/hwmon0/device/temp2_input')
  File.read('/sys/class/hwmon/hwmon0/device/temp2_input').to_f / 1000
 elsif  File.exists?('/sys/class/hwmon/hwmon0/temp2_input')
  File.read('/sys/class/hwmon/hwmon0/temp2_input').to_f / 1000
 else false
 end
end

.temperature4Object



44
45
46
47
48
49
50
51
# File 'lib/rsensors.rb', line 44

def self.temperature4
 if File.exists?('/sys/class/hwmon/hwmon0/device/temp4_input')
  File.read('/sys/class/hwmon/hwmon0/device/temp4_input').to_f / 1000
 elsif File.exists?('/sys/class/hwmon/hwmon0/temp4_input')
  File.read('/sys/class/hwmon/hwmon0/temp4_input').to_f / 1000 
 else false
 end
end

.temperature_hdObject

need superuser or privileges with apps



52
53
54
55
56
57
58
59
60
# File 'lib/rsensors.rb', line 52

def self.temperature_hd # need superuser or privileges with apps
 # 1st try hddtemp
 temp =  %x( hddtemp -uC /dev/?d? )
 if $?.exitstatus != 0 # hddtemp not works, try hdparm
		temp = %x( hdparm -Hi /dev/?d? )
		temp = format_hdparm(temp) if $?.exitstatus == 0 # works fine
 end   #dtemp -n /dev/?d? ) # good for one line, one hard disk
 return temp
end

.temperatureHdObject

return float of hd temperature or array if more disk(s) present



76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/rsensors.rb', line 76

def self.temperatureHd # return float of hd temperature or array if more disk(s) present
 # need superuser or privileges with apps
 # 1st try hddtemp, temp = -20 error temp
 temp = -20
 temp =  %x( hddtemp -n /dev/?d? )
 if $?.exitstatus != 0 # hddtemp not works, try hdparm
		temp = %x( hdparm -H /dev/?d? )
		temp = formatHdparm(temp) if $?.exitstatus == 0 # works fine
 else # hddtemp ok
   temp = formatHddtemp(temp) if temp.is_a? Array
 end
 return temp if temp.is_a? Array
 return temp.to_f
end