Re: AAO110 LINPUS Bios 3308 Lüftersteuerung mit acer_ec.pl
Di 30. Dez 2008, 20:04
Natürlich ist das mit " in der Auto-Einstellung den Lüfter ganz aus bekommen? " Quatsch. Ich will den Kerl bis 60 Grad aus haben und dann auf viertel bis halber Kraft laufen lassen (ab 70 Grad kann er dann voll drehen).
Die acerfand habe ich wir folgt geändert (Fettschrift). Ich glaube jedoch dass auch andere Bereiche geändert werden müssen (Fett- und Kursivschrift).
Kann mir jemand helfen?
Gruß Christian
Auszug aus Acerfand Version 0.4 ................. info "acerfand $ACERFAND_VERSION starting"
if pgrep acerfand | grep -v $$ > /dev/null; then info "acerfand already running" exit 0 fi
getBiosVersion() { DMIDECODE=$(which dmidecode) if [ -z $DMIDECODE ] ; then info "Can't find dmidecode. Assuming bios $BIOS_VERSION_DEFAULT" BIOS_VERSION=$BIOS_VERSION_DEFAULT else BIOS_VERSION=$($DMIDECODE -s bios-version) info "Detected bios version $BIOS_VERSION" fi }
ACEREC=$(which acer_ec.pl) if [ -z $ACEREC ] ; then ACEREC=$(dirname $ME)/acer_ec.pl fi
if [ ! -r $ACEREC ] ; then err "acer_ec.pl can't be found" exit 1 fi
INTERVAL=5 FANOFF=60 FANAUTO=70
if [ -r "/etc/acerfand.conf" ] ; then source "/etc/acerfand.conf" fi
getFanState() { FAN_STATE=$FAN_STATE_UNRECOGNIZED getRawFanState if [ "$RAW_FAN_STATE" == "$RAW_FAN_STATE_OFF" ]; then FAN_STATE=$FAN_STATE_OFF else let A="$RAW_FAN_STATE & 0x10" || true if [ "$A == 0" ] ; then # ASSUMPTION: All values with nybble 1==0 denote auto FAN_STATE=$FAN_STATE_AUTO fi fi notice "read fan state ${FAN_STATE_NAMES[$FAN_STATE]}" }
setFan() { info "Set fan ${FAN_STATE_NAMES[$1]}" acer_ec := $R_FAN ${FAN_STATE_CMDS[$1]} > /dev/null }
govern() { trap "info exiting;setFan $FAN_STATE_AUTO; exit" INT TERM EXIT info "Starting to govern acer fan speed. Interval: $INTERVAL, fan-off: $FANOFF, fan-auto: $FANAUTO" while true; do getTemp getFanState case "$FAN_STATE" in $FAN_STATE_AUTO) if [ "$TEMP" -le "$FANOFF" ] ; then setFan $FAN_STATE_OFF fi ;; $FAN_STATE_OFF) if [ "$TEMP" -ge "$FANAUTO" ] ; then setFan $FAN_STATE_AUTO fi ;; *) # weird state. Let's turn it off, # then decide next time around setFan $FAN_STATE_OFF ;; esac sleep $INTERVAL done }
Re: AAO110 LINPUS Bios 3308 Lüftersteuerung mit acer_ec.pl
Mi 31. Dez 2008, 09:36
ccegla52 hat geschrieben:Natürlich ist das mit " in der Auto-Einstellung den Lüfter ganz aus bekommen? " Quatsch. Ich will den Kerl bis 60 Grad aus haben und dann auf viertel bis halber Kraft laufen lassen (ab 70 Grad kann er dann voll drehen).
Ob das mit "viertel bis halber Kraft" geht weiß ich nicht.
Ich habe das acerfand script folgerndermaßen geändert:
acerfand hat geschrieben:BIOS_VERSION_3109="v0.3109" BIOS_VERSION_3114="v0.3114" BIOS_VERSION_3304="v0.3304" BIOS_VERSION_3305="v0.3305" #FRANCO BIOS_VERSION_3307="v0.3307" BIOS_VERSION_3308="v0.3308" BIOS_VERSION_3309="v0.3309"
BIOS_VERSION_DEFAULT=$BIOS_VERSION_3309
getBiosVersion() { DMIDECODE=$(which dmidecode) if [ -z $DMIDECODE ] ; then info "Can't find dmidecode. Assuming bios $BIOS_VERSION_DEFAULT" BIOS_VERSION=$BIOS_VERSION_DEFAULT else BIOS_VERSION=$($DMIDECODE -s bios-version) info "Detected bios version $BIOS_VERSION" fi }
ACEREC=$(which acer_ec.pl) if [ -z $ACEREC ] ; then ACEREC=$(dirname $ME)/acer_ec.pl fi
if [ ! -r $ACEREC ] ; then err "acer_ec.pl can't be found" exit 1 fi
Wieso Du an den Kommandos drehen willst weiß ich nicht, da die Bytes 0xaf bzw. 0x1f wohl im BIOS als Kommandos zur Lüftersteuerung hinterlegt sind. An den Temperaturen kann man aber schon "drehen".
Speziell wird Dir eine Änderung an den Kommandos für die alten Bios Versionen (3109 und 3114) wohl keinerlei Effekt bringen, da Du ja die 3308er Version einsetzt.
Re: AAO110 LINPUS Bios 3308 Lüftersteuerung mit acer_ec.pl
Sa 3. Jan 2009, 11:28
Habe mir mit der BIOS-Version 3308 zunächst auch die hervorragende Dämoneneistung von acerfand zerstört. Nach einigem Experimentieren läuft alles (fast) wieder: Statt den Hex-werten 1f muss 21 geschrieben werden. Noch ungeklärt: Manchmal schaltet sich der Lüfter erst nach nochmaliger Eingabe des Registerwerts 21 aus. Die Änderung des Perl-Script acerfand gestaltet sich einfach: In zwei Zeilen muss der Eintrag 1f in 21 geändert werden. Und einen ganz persönlichen Wunsch hätte ich an euch Perl-Programmieren: Die Anzeige der Temperatur in der Task-Leiste. Ach hätte ich doch Perl gelernt... Warte geduldig
Re: AAO110 LINPUS Bios 3308 Lüftersteuerung mit acer_ec.pl
Di 27. Jan 2009, 21:21
Hi, habe Erfolg gehabt. Nach genannte Veränderungen haben beim BIOS 3308 funktioniert. Gruß Christian
acerfand Version 0.01
#!/bin/bash # # acerfand - Rudimentary automatic fan control for noisy Acer Aspire One models # # Author Rachel Greenham # # version 0.01
LOGGER=$(which logger) if [ ! -x $LOGGER ] ; then LOGGER="/usr/bin/logger" fi if [ ! -x $LOGGER ] ; then echo "Warning, logger can't be found. Will log to stdout" unset LOGGER fi
LOGLEVEL="info"
log() { if [ ! -z "$LOGGER" ] ; then $LOGGER -p daemon.$LOGLEVEL -t acerfand "$@" else echo "$@" fi }
info() { LOGLEVEL="info" log "$@" }
notice() { LOGLEVEL="notice" # log "$@" }
err() { LOGLEVEL="err" log "$@" }
if pgrep acerfand | grep -v $$ > /dev/null; then info "acerfand already running" exit 0 fi
ME=$(readlink -f $0)
ACEREC=$(which acer_ec.pl) if [ -z $ACEREC ] ; then ACEREC=$(dirname $ME)/acer_ec.pl fi
if [ ! -r $ACEREC ] ; then err "acer_ec.pl can't be found" exit 1 fi
INTERVAL=5 FANOFF=60 FANAUTO=70
if [ -r "/etc/acerfand.conf" ] ; then source "/etc/acerfand.conf" fi
R_FAN=55 R_TEMP=58
FAN_CMD_OFF=21 # verändert von 1f auf 21 bei BIOS-Version3308 FAN_CMD_AUTO=0 # verändert von 00 auf 0 bei BIOS-Version3308
getFanState() { FAN_STATE=$FAN_STATE_UNRECOGNIZED getRawFanState if [ "$RAW_FAN_STATE" == "0x21" ]; then # verändert von 0x1f auf 0x21 bei BIOS-Version3308 FAN_STATE=$FAN_STATE_OFF else let A="$RAW_FAN_STATE & 0x10" || true if [ "$A == 0" ] ; then # ASSUMPTION: All values with nybble 1==0 denote auto FAN_STATE=$FAN_STATE_AUTO fi fi notice "read fan state ${FAN_STATE_NAMES[$FAN_STATE]}" }
setFan() { info "Set fan ${FAN_STATE_NAMES[$1]}" acer_ec := $R_FAN ${FAN_STATE_CMDS[$1]} > /dev/null }
govern() { trap "info exiting;setFan $FAN_STATE_AUTO; exit" INT TERM EXIT info "Starting to govern acer fan speed. Interval: $INTERVAL, fan-off: $FANOFF, fan-auto: $FANAUTO" while true; do getTemp getFanState case "$FAN_STATE" in $FAN_STATE_AUTO) if [ "$TEMP" -le "$FANOFF" ] ; then setFan $FAN_STATE_OFF fi ;; $FAN_STATE_OFF) if [ "$TEMP" -ge "$FANAUTO" ] ; then setFan $FAN_STATE_AUTO fi ;; *) # weird state. Let's turn it off, # then decide next time around setFan $FAN_STATE_OFF ;; esac sleep $INTERVAL done }