hardcoded prometheus-textfile exporter

This commit is contained in:
do
2020-05-24 20:11:17 +02:00
parent e344809374
commit 610e1b514f

View File

@@ -3,18 +3,22 @@
import RPi.GPIO as GPIO import RPi.GPIO as GPIO
from datetime import date from datetime import date
from os import path
from os import getenv from os import getenv
import time import time
import sys import sys
# Configuration # Configuration
FAN_PIN = getenv("RPI_FAN_PIN", 21) # BCM pin used to drive transistor's base FAN_PIN = getenv('RPI_FAN_PIN', 21) # BCM pin used to drive transistor's base
WAIT_TIME = getenv("RPI_FAN_WAITTIME", 5) # [s] Time to wait between each refresh WAIT_TIME = getenv('RPI_FAN_WAITTIME', 5) # [s] Time to wait between each refresh
FAN_MIN = getenv("RPI_FAN_MIN", 70) # [%] Fan minimum speed. FAN_MIN = getenv('RPI_FAN_MIN', 70) # [%] Fan minimum speed.
PWM_FREQ = getenv("RPI_FAN_PWMFREQ", 25000) # [Hz] Change this value if fan has strange behavior PWM_FREQ = getenv('RPI_FAN_PWMFREQ', 25000) # [Hz] Change this value if fan has strange behavior
# Fan speed will change only of the difference of temperature is higher than hysteresis # Fan speed will change only of the difference of temperature is higher than hysteresis
hyst = getenv("RPI_FAN_HYST", 5) hyst = getenv('RPI_FAN_HYST', 1)
debug = bool(getenv("RPI_FAN_DEBUG", "False")) debug = bool(getenv('RPI_FAN_DEBUG', 'False'))
prom_collect_dir = getenv('RPI_PROM_COLLECTDIR','/tmp/textfile-collector')
prom_collect_file = prom_collect_dir + '/rpi_fan.prom'
# Configurable temperature and fan speed steps # Configurable temperature and fan speed steps
tempSteps = [55, 57, 60, 65, 70] # [°C] tempSteps = [55, 57, 60, 65, 70] # [°C]
@@ -35,21 +39,21 @@ cpuTempOld = 0
fanSpeedOld = 0 fanSpeedOld = 0
if debug: if debug:
print("%s Temp: %s, Fan: %s" % (date.today(), cpuTemp, fanSpeed)) print('%s Temp: %s, Fan: %s' % (date.today(), cpuTemp, fanSpeed))
# We must set a speed value for each temperature step # We must set a speed value for each temperature step
if len(speedSteps) != len(tempSteps): if len(speedSteps) != len(tempSteps):
print("Numbers of temp steps and speed steps are different") print('Numbers of temp steps and speed steps are different')
exit(0) exit(0)
try: try:
while 1: while 1:
# Read CPU temperature # Read CPU temperature
cpuTempFile = open("/sys/class/thermal/thermal_zone0/temp", "r") cpuTempFile = open('/sys/class/thermal/thermal_zone0/temp', 'r')
cpuTemp = float(cpuTempFile.read()) / 1000 cpuTemp = float(cpuTempFile.read()) / 1000
cpuTempFile.close() cpuTempFile.close()
if debug: if debug:
print("%s Temp: %s, Fan: %s" % (date.today(), cpuTemp, fanSpeed)) print('%s Temp: %s, Fan: %s' % (date.today(), cpuTemp, fanSpeed))
# Calculate desired fan speed # Calculate desired fan speed
if abs(cpuTemp - cpuTempOld) > hyst: if abs(cpuTemp - cpuTempOld) > hyst:
# Below first value, fan will run at min speed. # Below first value, fan will run at min speed.
@@ -72,15 +76,21 @@ try:
and (fanSpeed >= FAN_MIN or fanSpeed == 0)): and (fanSpeed >= FAN_MIN or fanSpeed == 0)):
fan.ChangeDutyCycle(fanSpeed) fan.ChangeDutyCycle(fanSpeed)
fanSpeedOld = fanSpeed fanSpeedOld = fanSpeed
if debug: if path.isdir(prom_collect_dir):
print("%s Temp: %s, Fan: %s" % (date.today(), cpuTemp, fanSpeed)) with open(prom_collect_file, 'w') as f:
str = '#HELP rpi_fan fan running at percent duty cycle\n'
str += '#TYPE rpi_fan gauge\n'
str += 'rpi_fan{component="sys"} %s\n' % fanSpeed
f.write(str)
if debug:
print('%s Temp: %s, Fan: %s' % (date.today(), cpuTemp, fanSpeed))
cpuTempOld = cpuTemp cpuTempOld = cpuTemp
# Wait until next refresh # Wait until next refresh
time.sleep(WAIT_TIME) time.sleep(WAIT_TIME)
# If a keyboard interrupt occurs (ctrl + c), the GPIO is set to 0 and the program exits. except Exception as exception:
finally: print('Exception: {}'.format(type(exception).__name__))
print("Fan ctrl interrupted by keyboard") print('Exception message: {}'.format(exception))
GPIO.cleanup() GPIO.cleanup()
sys.exit() sys.exit()