fan-control 8K

    • Also der 3 Pol Stecker den du auf dem zweiten Bild siehst ist nur 3 Pol, weil der Lüfter nur über die Spannung und nicht per PWM gesteuert wird.
      Der Anschluß der 8k ist normalerweise 4 Pol was aber auf den Bildern nicht ersichtlich ist.
      Und es ist auch extra ein FAN Anschluß, weil die 8k ja für den Betrieb eines Lüfters vorbereitet ist.

      Das FanMonitor Plugin denke ich mal wird nicht so ohne weiteres auf der 800er laufen, weil die ja kein FAN Anschluß besitzt und da auch keine Schnittstelle in der Software für vorhanden sein dürfte.
      Das Plugin testet ja auch wie hoch die Max. Drehzahl des Lüfters ist und bekommt ja auch die aktuellen U/min vom Lüfter zurück geliefert.
      Ich denke mal am sinnvollsten wäre es, ein neues FanMonitor Plugin zum steuern eines Lüfters über die USB Schnittstelle der 800er zu programmieren.
      Den 4 Pol Anschluß der Festplatte könntest du schon nutzen. Aber dann läuft der Lüfter immer mit voller Drehzahl.
      Ob man diesen Anschluß auch über die Software in der Spannung regeln könnte, kann ich nicht sagen.Dazu habe ich viel zu wenig Ahnung von der ganzen Materie.
    • So Lüfter eingebaut und Fan Control instaliert ( enigma2-plugin-systemplugins-fan-ctrl_1. 1.by.klpsauger_mipsel.ipk )
      und anschließend neue plugin.py drüber gebügelt wie beschrieben.
      Der Lüfter läuft an wenn die Box hochfährt und dann ist er aus.
      Im Menue vom Fankontrol werden logischer nur die einzelnen Temperaturen angezeigt.
      Wenn ich kalibrieren anklicke sprint der Lüfter sporadisch an und die Werte vom Lüfter steigen an und steigen an..........
      Habt ja geschrieben das die kaliebrierung noch ein Fehler hat.
      Soll ich lieber die Variante wählen wo der Lüfter im dauer Betrieb ist? ?(
      Kann es sein das meien Box noch nicht so warm wurde das der Lüfter anspringt? ?(
    • Fan_ctl.py

      import time, sys

      def clamp(val, min, max):
      if val < min: return min
      if val > max: return max
      return val

      def skal (x, x1, x2, y1, y2):
      if x > x2: return y2
      if x < x1: return y1
      m = (y2 - y1) / (x2 - x1)
      y = m * x + y1
      return y

      def FanParameter():
      global FanOK
      global maxRPM
      global FanType
      TYPE_PWM = 0
      TYPE_VOLTAGE = 1

      # speichere die maximal einstellbare Luefterdrehzahl
      open("/proc/stb/fp/fan_vlt", "w").write("ff")
      open("/proc/stb/fp/fan_pwm", "w").write("ff")
      time.sleep (5)
      maxRPM = int(open("/proc/stb/fp/fan_speed").read().split(' ')[0])

      # Test ob Luefter eingebaut - Drehzahl darf nicht mehr 0 sein
      # sonst Tacho defekt oder kein Luefter eingebaut
      if maxRPM == 0:
      FanOK = False
      open("/proc/stb/fp/fan_vlt", "w").write("00")
      open("/proc/stb/fp/fan_pwm", "w").write("00")
      return
      else:
      FanOK = True

      # was fuer einen Luefter haben wir denn eingebaut
      # reagiert er auf fan_pwm dann pwm-Luefter (4pol), sonst Spannung (3pol)
      open("/proc/stb/fp/fan_pwm", "w").write("00")
      time.sleep (5)
      minPWM = int(open("/proc/stb/fp/fan_speed").read().split(' ')[0])
      if minPWM < maxRPM * 0.8:
      FanType = TYPE_PWM
      else:
      FanType = TYPE_VOLTAGE
      return

      class TemperatureSensor(object):
      pass

      class FPTemperature(TemperatureSensor):
      def __init__(self, index):
      self.index = index

      def readTemp(self):
      t = int(open("/proc/stb/fp/temp%d"%self.index).read()) / 256.0 * 3.3
      t = 4.246e1 * t + 7.362e-1
      return t

      current = property(readTemp)

      class FanControl(object):
      pass

      class FPFanControl(FanControl):
      TYPE_PWM = 0
      TYPE_VOLTAGE = 1

      def __init__(self, type):
      self.zeroRPM = False
      self.type = type
      # in case of a PWM fan, set voltage to max
      if type == self.TYPE_PWM:
      open("/proc/stb/fp/fan_vlt", "w").write("ff")
      else:
      # and vice-versa, but that doesn't really matter.
      open("/proc/stb/fp/fan_pwm", "w").write("ff")

      def setOutput(self, output):
      if self.zeroRPM:
      output = 0
      # open("/proc/stb/fp/led_set", "w").write("00")
      # else:
      # open("/proc/stb/fp/led_set", "w").write("05")
      print "set fan output to %d" % output,
      if self.type == self.TYPE_PWM:
      if self.zeroRPM:
      open("/proc/stb/fp/fan_vlt", "w").write("00")
      else:
      open("/proc/stb/fp/fan_vlt", "w").write("ff")

      open("/proc/stb/fp/fan_pwm", "w").write("%x" % output)
      print "pwm"
      else:
      open("/proc/stb/fp/fan_vlt", "w").write("%x" % output)
      print "vlt"

      output = property(None, setOutput)

      def getRPM(self):
      return int(open("/proc/stb/fp/fan_speed").read().split(' ')[0])

      rpm = property(getRPM)

      class FanLoop(object):
      pass

      class PID:
      def __init__(self, Kp = 1/100.0, Ki=1/100.0, Kd=0):
      self.Kp = Kp
      self.Ki = Ki
      self.Kd = Kd
      self.i = 0
      self.prev = 0

      def cycle(self, current, target, dT = 1.0):
      error = target - current
      self.i += error * dT

      deriv = (error - self.prev) / dT
      out = self.Kp * error + self.Ki * self.i + self.Kd * deriv
      self.prev = error
      return out

      class FanLoopPID(FanLoop):

      def __init__(self, fan):
      self.fan = fan
      self.target_rpm = 1000
      self.pid = PID()

      def cycle(self, dT=1.0):
      cur_rpm = self.fan.rpm
      if self.target_rpm == 0:
      zeroRPM = True
      else:
      zeroRPM = False
      out = self.pid.cycle(cur_rpm, self.target_rpm)
      print "current rpm: %d, target_rpm: %d" % (cur_rpm, self.target_rpm),
      self.fan.zeroRPM = zeroRPM
      self.fan.output = clamp(out, 0, 255)

      class TemperatureLoop:
      def __init__(self, sensors):
      self.FAN_MIN = 600
      self.FAN_MAX = 2000
      self.target_temp = 50
      self.Range = 5
      self.FanOFF = False
      self.FanOFFTemp = -1.5
      self.Hystereese = 1.4
      self.sensors = sensors

      def readCurrentTemperature(self):
      return max([s.current for s in self.sensors])

      def cycle(self, dT=1.0):
      cur_temp = self.readCurrentTemperature()
      e = cur_temp - self.target_temp
      print [int(cur_temp)], e,
      # Luefter AUS (rpm = 0) wenn curr_temp FanOFFtemp unter target_temp
      if e <= self.FanOFFTemp:
      self.FanOFF = True
      # mit Hystereese erneut einschalten
      if self.FanOFF == True and e >= self.FanOFFTemp + self.Hystereese:
      self.FanOFF = False
      if self.FanOFF == True:
      rpm = 0
      else:
      # Luefterdrehzahl als lineare Gleichung y = mx + b
      # wobei git:
      # x = cur_temp - target_temp
      # m = (FAN_MAX - FAN_MIN) / Range
      # b = FAN_MIN
      rpm = skal(e, 0, self.Range, self.FAN_MIN, self.FAN_MAX)
      return rpm

      FanParameter()

      if FanOK == True:
      fl = FanLoopPID(FPFanControl(FanType))
      tl = TemperatureLoop([FPTemperature(x) for x in range(8)])
      tl.target_temp = int(sys.argv[1])
      tl.FAN_MIN = int (sys.argv[2])
      tl.FAN_MAX = maxRPM
      dT = 1
      print
      print "#################################################################"
      print "# Fan Control - modified by KLPsAUGER (NewNigma2.to - Board) #"
      print "# v 0.2 #"
      print "# ###############################################################"
      print "#"
      print "# Lueftermodell:",
      if FanType == 0:
      print " PWM (4-pol.)"
      else:
      print " Voltage (3-pol.)"
      print "# ---------------------------------------------------------------"
      print "# Basisdrehzahl: ", tl.FAN_MIN, "rpm ", "max. Drehzahl: ", tl.FAN_MAX, "rpm"
      print "# ---------------------------------------------------------------"
      print "# Solltemperatur: ", tl.target_temp, "Grad C Maximaldrehzahl bei: ", tl.target_temp + tl.Range, "Grad C"
      print "# Luefter AUS bei:", tl.target_temp + tl.FanOFFTemp, "Grad C Hystereese: ",tl.Hystereese, "Grad C"
      print "#"
      print "#################################################################"
      print

      while True:
      fl.cycle(dT)
      fl.target_rpm = tl.cycle(dT)
      time.sleep(dT)

      else:
      print
      print "no fan detected - leaving fan_ctrl"

      S99anControl.sh


      #! /bin/sh
      if pidof python > 0
      then
      exit 0
      else
      python /usr/lib/enigma2/python/Plugins/Extensions/FanControl/fan_ctrl.py 42 2000 noLED ALERT > /dev/null &
      fi
      exit 0

      Habe die werte so geändert Box neu gestartet, aber Lüfter läuft nur kurz an beim Hochfahren und dann passiert nichts mehr ;(

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Schoppenmeister ()

    • Dein Lüfter sprngt erst wieder bei 42° an wenn ich das eben auf die schnelle richtig gesehen habe.


      mfg,
      KLPsAUGER
      Dreambox 8000sscc, Dreambox 800se, NAS 1 (Buffalo 1TB LinkStation), NAS 2 (Buffalo 1TB LinkStation mit FTP Server), NAS 3 (Synology Ds2009+ mit 2TB Platten im Raid 0 - Verbund) 14 Smargo, Ubuntu - Server / CCcam & 2 aktiven 7 - Port USB Hub's, DLan (develo 200AVplus), DLink (DES-1005D), TP-Link (TL-SG1005D), 3Com (4228G), hama (Hub & Cardreader), CF - Karte (2x a 2GB), SD - Karte (2GB), Router (Fritz!Box 7390), externer DVD-Brenner (LG GE20LU, USB 2.0, schwarz), Teufel Concept E 400 - digital (Musikanlage)

    • So ich habe meiner Dream 8000 nun auch einen 92mm Lüfter spendiert. Danke für das tolle Plug In. Soweit läuft auch alles nur eine Frage habe ich. wie herunm baut Ihr den Lüfter ein? Lasst Ihr den lüfter in die Box blasen oder die Warmluft absaugen?
    • Hat auch den Vorteil das sich nicht soviel Schmutz in der Box sammelt!
      Dreambox 7080 /Synology DS415+ NAS 12 TB, Xtrend 9200 /Synology DS415+ NAS 12 TB
      Panasonic TX-50 VT20 3D, Benq W1080+,Panasonic DMP-346 3D
      Onkyo TX-SR 876, Teufel Motiv 1,Harmony 900, Multytenne 45
    • FanControl für die neuen Treiber

      Leider funktioniert meine modifizierte Version vorerst leider nicht mehr mit den neuen Treibern von DMM.

      Für alle wo aber dennoch nicht auf den Lüfter bzw. die Lüftersteuerung verzichten möchten, hänge ich hier mal eine Version an, welche mit den neuen Treibern funktioniert.


      Anmerkung:

      Diese Version ist nicht von mir und auch nicht / noch nicht von mir modifiziert worden.

      Um diese Version benutzen zu können, so deinstalliert bitte zuerst die alte Version von FanControl und macht einen kompletten Neustart eurer Box. Danach einfach die hier angehängte Datei per FTP ins Verzeichnis /tmp kopieren und mit der fernbedienung installieren. Danach die box wieder neu starten und schon könnt ihr diese Version benutzen.

      Zu finden ist diese dann unter:

      Menü -> Einstellungen -> System -> Temperature and Fan control

      Jetzt aber nicht wundern wenn bei euch sich der Lüfter nicht dreht und bei rpm die Ziffer "0" davor steht.

      Drückt nach RECHTS, wenn ihr auf FAN1 VOLTAGE steht!

      Und danach drückt nach RECHTS, wenn ihr auf FAN1 PWM steht!

      Somit ändert ihr die Einstellungen wie ihr ja an den erscheinenden Balken sehen könnt. Und schont beginnt sich euer Lüfter nun zu drehen :D



      mfg,
      KLPsAUGER
      Bilder
      • screenshot.jpg

        21,06 kB, 720×405, 2.203 mal angesehen
      • screenshot1.jpg

        21,63 kB, 720×405, 2.218 mal angesehen
      Dateien
      Dreambox 8000sscc, Dreambox 800se, NAS 1 (Buffalo 1TB LinkStation), NAS 2 (Buffalo 1TB LinkStation mit FTP Server), NAS 3 (Synology Ds2009+ mit 2TB Platten im Raid 0 - Verbund) 14 Smargo, Ubuntu - Server / CCcam & 2 aktiven 7 - Port USB Hub's, DLan (develo 200AVplus), DLink (DES-1005D), TP-Link (TL-SG1005D), 3Com (4228G), hama (Hub & Cardreader), CF - Karte (2x a 2GB), SD - Karte (2GB), Router (Fritz!Box 7390), externer DVD-Brenner (LG GE20LU, USB 2.0, schwarz), Teufel Concept E 400 - digital (Musikanlage)

    • Original von dekraameise
      Hi KLP,

      habe das alte Fan-Contol deinstalliert, Restartet, das neue offline inst., finde es aber leider net unter Menue, Einstellungen, System...

      Wo isses nu?


      Zu finden ist diese dann unter:

      Menü -> Einstellungen -> System -> Temperature and Fan control



      Edit:
      Hier hänge ich euch nun mal die neuere Version an.



      mfg,
      KLPsAUGER
      Dateien
      Dreambox 8000sscc, Dreambox 800se, NAS 1 (Buffalo 1TB LinkStation), NAS 2 (Buffalo 1TB LinkStation mit FTP Server), NAS 3 (Synology Ds2009+ mit 2TB Platten im Raid 0 - Verbund) 14 Smargo, Ubuntu - Server / CCcam & 2 aktiven 7 - Port USB Hub's, DLan (develo 200AVplus), DLink (DES-1005D), TP-Link (TL-SG1005D), 3Com (4228G), hama (Hub & Cardreader), CF - Karte (2x a 2GB), SD - Karte (2GB), Router (Fritz!Box 7390), externer DVD-Brenner (LG GE20LU, USB 2.0, schwarz), Teufel Concept E 400 - digital (Musikanlage)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von KLPsAUGER ()

    • ****traurig*****

      Wieder versucht zu installieren und immer noch nicht zu finden unter dem von Dir angegebenen Pfad.
      In den Pugins is es aber serwohl zu finden.
      Wenn ich nach dem Restart der Box die Erweiterungen aufrufe ist folgende Nachricht auf dem Bildschirm zu erkennen (nur einmal):

      Einige Plugins sind nicht verfügbar:
      SystemPlugins/TempFanControl (No module named Sensors)

      WAs mache ich nu falsch??
    • Original von winkeruwe
      kann aus auch am skin liegen....ich habe kerni hd1



      Verwende doch einfach einmal zu Testzwecken den Skin "NewNigma2 HD" und berichte...


      mfg,
      KLPsAUGER
      Dreambox 8000sscc, Dreambox 800se, NAS 1 (Buffalo 1TB LinkStation), NAS 2 (Buffalo 1TB LinkStation mit FTP Server), NAS 3 (Synology Ds2009+ mit 2TB Platten im Raid 0 - Verbund) 14 Smargo, Ubuntu - Server / CCcam & 2 aktiven 7 - Port USB Hub's, DLan (develo 200AVplus), DLink (DES-1005D), TP-Link (TL-SG1005D), 3Com (4228G), hama (Hub & Cardreader), CF - Karte (2x a 2GB), SD - Karte (2GB), Router (Fritz!Box 7390), externer DVD-Brenner (LG GE20LU, USB 2.0, schwarz), Teufel Concept E 400 - digital (Musikanlage)