From ca2e8601c908083ccb169ccb1436106c77a0add7 Mon Sep 17 00:00:00 2001 From: Ralph Metzler Date: Wed, 26 Sep 2018 13:05:45 +0200 Subject: [PATCH] add fancontrol for MaxSX8 and other temp devices --- octoserve/var/monitor/fancontrol.lua | 87 +++++++++++++++++----------- 1 file changed, 53 insertions(+), 34 deletions(-) mode change 100755 => 100644 octoserve/var/monitor/fancontrol.lua diff --git a/octoserve/var/monitor/fancontrol.lua b/octoserve/var/monitor/fancontrol.lua old mode 100755 new mode 100644 index ad7b237..61d3185 --- a/octoserve/var/monitor/fancontrol.lua +++ b/octoserve/var/monitor/fancontrol.lua @@ -9,12 +9,34 @@ local LogFile = "/tmp/Temperatur.log" local HighTemp = 50 local LowTemp = 45 +function ReadAttribute(attribute) + local value = 0 + local ddbridge = io.open(devicepath.."/"..attribute,"r"); + if ddbridge then + value = ddbridge:read("*l") + ddbridge:close() + end + return value +end + function ReadTemp(sensor) local temp = 0 - local file = io.open(devicepath.."/temp"..sensor) + local file; + + if sensor > 3 then + sensor = sensor - 4 + if sensor == 0 then + file = io.open(devicepath.."/temp") + else + file = io.open(devicepath.."/templ"..sensor) + end + else + file = io.open(devicepath.."/temp"..sensor) + end + if file then temp = file:read() - if temp == "no sensor" then + if temp == "no sensor" then temp = 0 else temp = math.floor(tonumber(temp)/1000) @@ -55,26 +77,23 @@ local fanstate = -1 sleep(30) -local ddbridge = io.open("/sys/class/ddbridge/ddbridge0/devid0","r"); -if ddbridge then - local devid = ddbridge:read("*l") - ddbridge:close() - if devid == "0307dd01" then - fanstate = 1 - ddbridge = io.open("/sys/class/ddbridge/ddbridge0/fanspeed1","r"); - if ddbridge then - local fs = tonumber(ddbridge:read("*l")) - ddbridge:close() - if fs > 0 and fs < 17000 then - fanstate = -2 - end +local devid = ReadAttribute("devid0") +if devid == "0307dd01" then + fanstate = 1 + local devid1 = ReadAttribute("devid1") + if devid1 == "0009dd01" or devid1 == "000add01" then + fanstate = -2 + else + local fs = tonumber(ReadAttribute("fanspeed1")) + if fs > 0 and fs < 17000 then + fanstate = -2 end - end -end + end +end -for i = 0,4,1 do +for i = 0,8,1 do temp = ReadTemp(i) - if temp > 0 then + if temp > 0 then Sensor[NumSensors] = i NumSensors = NumSensors + 1 end @@ -95,18 +114,18 @@ while true do temps = "" for i = 0, NumSensors - 1, 1 do temp = ReadTemp(Sensor[i]) - + if temp == 0 then print(" fanControl Error ") return end - - if i == 0 then - temps = temp + + if i == 0 then + temps = temp else temps = temps .. "," .. temp end - + if fanstate == 0 and temp >= HighTemp then SetFan(1) fanstate = 1 @@ -114,35 +133,35 @@ while true do SetFan(0) fanstate = 0 end - + end - - count = count - 1 + + count = count - 1 if count == 0 then count = interval - + if #TempList < nValues then - TempList[#TempList+1] = temps + TempList[#TempList+1] = temps else TempList[StartIndex] = temps StartIndex = StartIndex + 1 if StartIndex > nValues then StartIndex = 1 end end - + TmpLogFile = os.tmpname() - + fh = io.open(TmpLogFile,"w") if fh then fh:write(NumSensors..","..interval..","..fanstate.."\n") - + for i = StartIndex-1, 1, -1 do fh:write(TempList[i].."\n") end - + for i = #TempList, StartIndex, -1 do fh:write(TempList[i].."\n") end - + fh:close() os.remove(LogFile) os.rename(TmpLogFile,LogFile)