hallo,

ben bezig om mij raspberry pi 3b te voor zien van een ventilator.
het idee is dat de ventilator aan gaat bij een bepaalde tempratuur en ook weer uit gaat bij een bepaalde tempratuur.

nu heb ik een python code gevonden op internet en over getypt.

maar nu krijg ik een foutmelding waar ik niet uitkomt of begrijp wat ik verkeerd doe.

code:

#!/usr/bin/python
import sys
import time
from gpiozero import LED # doc: https://gpiozero.readthedocs.io/

# define o GPIO a ser controlado pelo transistor na parte de gatilhofan = LED(21)

def cpu_temp():
with open(“/sys/class/thermal/thermal_zone0/temp”, ‘r’) as f:
return float(f.read())/1000


def main():
# close fan at begining
is_close = True
fan.off()
while True:
temp = cpu_temp()
if is_close:
if temp > 55.0: # temperatura para ligar fan
print time.ctime(), temp, ‘Fan ON’
fan.on()
is_close = False
else:
if temp < 48.0: # temperatura para desligar fan
print time.ctime(), temp, &#8216;Fan OFF&#8217;
fan.off()
is_close = True

time.sleep(2.0)
print time.ctime(), temp


if __name__ == &#8216;__main__&#8217;:
main()

To check if the fan is working, use the command:

python /home/pi/scripts/fan.py

&#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211; &#8211;

ik heb daar dan wel overal tapjes toe gevoegd.

de foutmelding die ik dan krijg:

lne 22
print time.ctime(), temp, 'fan on'
^

hoop dat iemand mij hier mee kan helpen.

jd6130r

mod edit:
code tags toegevoegd. Het inspringen zat er al niet meer in, dus weinig nuttig.

[Bericht gewijzigd door GJ_ op (3%)]

Begin eens met het juist kopieren en plakken van de hele code.
Springt de code bij jou niet in?
Bijvoorbeeld regels 9 en 10 moeten met een tab of spaties beginnen.
Dat is heel belangrijk in Python.

En wat was de foutmelding nu? Je laat alleen de lokatie zien. Er moet nog meer tekst op je scherm hebben gestaan, deel die eens.

[Bericht gewijzigd door kojazz op (25%)]

Op 13 april 2023 23:37:15 schreef kojazz:
Begin eens met het juist kopieren en plakken van de hele code.
Springt de code bij jou niet in?
Bijvoorbeeld regels 9 en 10 moeten met een tab of spaties beginnen.
Dat is heel belangrijk in Python.

En wat was de foutmelding nu? Je laat alleen de lokatie zien. Er moet nog meer tekst op je scherm hebben gestaan, deel die eens.

zie bijlage voor de melding en de completen code

Je hebt een of andere video gedeeld lijkt het wel .heic file. Kan ik niet lezen. Is geen tekstformaat.

Maak van die kromme haakjes (rond fan off en rond fan on) eens rechte.
Dus niet ` maar '
Als dat niet helpt, zet eens ronde haken rond het geheel:
print (time.ctime(), temp, 'Fan OFF')

Zelfde uiteraard een paar regels daarboven.

Het script is geschreven in python 2, toen waren er nog geen haakjes nodig. Als jij python --version typt zie je waarschijnlijk Python 3.

Op 13 april 2023 23:46:17 schreef kojazz:
Je hebt een of andere video gedeeld lijkt het wel .heic file. Kan ik niet lezen. Is geen tekstformaat.

Maak van die gekke kromme haakjes (rond fan off en rond fan on) eens rechte.
Dus niet ` maar '
Als dat niet helpt, zet eens kromme haken rond het geheel:
print (time.ctime(), temp, 'Fan OFF')

Zelfde uiteraard een paar regels daarboven.

Het script is geschreven in python 2, toen waren er nog geen haakjes nodig. Als jij python --version typt zie je waarschijnlijk Python 3.

nu is die tussen de haakjes groen. als ik de haakjes veranderd dan word die niet meer groen. hij lijkt mij dan dat de haakjes van mij wel goed zijn. maar ik heb geprobeerd met andere haakje maar de melding blijft het zelfde.

python 3.9.2

Ronde haken ( ) geprobeerd na print? Zie hierboven. Graag een screenshotje als de error er dan nog is...

Op 14 april 2023 00:04:45 schreef kojazz:
Ronde haken ( ) geprobeerd na print? Zie hierboven. Graag een screenshotje als de error er dan nog is...

De raspbeery pi zit aan de tv aangesloten vandaar ik geen screenshot kan maken. En foto's maak.

De haakjes hebben geholpen. Heb nu andere nieuwe meldingen

Als het python3 is - wat me vreemd lijkt want er wordt gewoon /usr/bin/python opgeroepen in de shebang, niet /usr/bin/python3 - dan kan het niet werken.

Waar er staat

print time.ctime(), temp, &#8216;Fan ON&#8217;

moet het worden

print ( time.ctime(), temp, &#8216;Fan ON&#8217; ) 

[ oeps! dit was al eens gezegd! ]

@topicstarter, aub geen .heic posten, en aub de [ c o d e ] gebruiken dan kunnen we misschien iets opmaken uit uw berichten. Nu zijn ze te ontcijferen.

Als ik, als niet zo domme maar wel luie L*l, op die .heic klik, dan krijg ik dit windowtje

Je mag zelf verzinnen hoeveel zin ik heb om een euro uit te geven om jouw probleem te begrijpen. (PM me maar voor een factuur!)

En ja, ik weet dat er waarschijnlijk wel gratis (of zelfs open-source) oplossingen zijn om .heic te lezen. Ga ik ook niet uitzoeken, tenzij je er dubbel tarief (want ik vind het geen leuk werk) tarief voor betaald ;-)

@Pualinha: /usr/bin/python is vaak een symlink naar /usr/bin/python3:


steven@milvus:~
$ python --version
Python 3.9.2
steven@milvus:~
$ which python
/usr/bin/python
steven@milvus:~
$ ls -al /usr/bin/python
lrwxrwxrwx 1 root root 7 Mar  2  2021 /usr/bin/python -> python3
steven@milvus:~

Zoals @kojazz al zegt:
Code kun je beter knippen en plakken in plaats van overtypen. Zowel van de bron naar je RPi als van je RPi naar dit forum. Nu weten we niet wat je probeert te runnen en je kunt het ook niet laten zien.

/usr/bin/python is vaak een symlink naar /usr/bin/python3

Ja, als men geen andere versie heeft ge-installeerd, blijkbaar.

/ontwerp/3dprint/model/clip_print$ ls -al /usr/bin/python
lrwxrwxrwx 1 root root 9 Apr 16  2018 /usr/bin/python -> python2.7
/ontwerp/3dprint/model/clip_print$ ls -al /usr/bin/python3
lrwxrwxrwx 1 root root 9 Oct 25  2018 /usr/bin/python3 -> python3.6

Volgens mij is jouw code bedoeld voor python versie 2, en run je hem met versie 3. Daar zitten verschillen in :)

Python2 staat al 15 jaar stil. Sinds 2020 ook geen security-updates meer.

Als je python default naar python2 laat wijzen moet je wel weten wat je aan het doen bent.

RaspberryPI's komen sinds 2021 met enkel python3, en default geen python2.

Wat natuurlijk niet betekend dat het script van TS voor python3 gemaakt is! (denk het niet, print zonder haakjes is heel erg python2).

De oplossing is dan natuurlijk het script updated, en niet toch python2 installeren. Zeker voor zo'n kort scriptje.

Maar dan moet de TS wel het script netjes tussen code-tags plaatsen. Of een link naar het origineel....

De HEIC bestanden omgezet naar JPG.

Is de code overgetikt?

Ook python2 heeft geen 'z' mode voor open().

Afijn, maak van die 'z' maar een 'r'

Enne, installeer Putty of zo op je computer, dan kun je normaal met ssh verbinden met je Raspberry.

En copy-paste gebruiken, geeft minder tikfouten :-)

Die foutmelding komt waarschijnlijk doordat je een functie aanroept uit een library met argumenten die nu niet meer ondersteund worden.
Dat komt doordat de versie van die api of library op jouw raspberry waarschijnlijk niet dezelfde is als waar dit script ooit voor is geschreven.
Je moet de docs van jouw api opzoeken om te kijken wat er vandaag de dag nodig is. Blurp heeft dat laatste al gedaan vermoed ik.

Oja en vergeet niet om Aart te bedanken voor de conversie van je .heic files ;-)

De code is te slecht om tijd aan te besteden


#!/bin/bash

echo out > /sys/class/gpio/gpio21/direction
while :
do
        temp=`cat /sys/class/thermal/thermal_zone0/temp`
        fan=0
        [ $temp -gt 52000 ] && fan=1 
        echo Temp: $temp  Fan: $fan
        echo $fan > /sys/class/gpio/gpio21/value
        sleep 5
done

In bestandje zetten en starten met "bash bestandsnaam".

52000 = 52 graden. -gt x && is een korte variant voor 'if greater than x then'

Op 14 april 2023 21:54:57 schreef K7Jz:
De code is te slecht om tijd aan te besteden

Doch is 100x beter gedocumenteerd dan het shell script dat jij net post.

Ik geef direct toe dat ik beter ben in Python dan in Bash, maar ik denk niet dat TS gebaat is bij weer een andere oplossing.

Ik weet wel zeker dat het makkelijker is om in Python leesbare code te schrijven dan in Bash. (En dat je in iedere taal onleesbare code kunt schrijven)


        [ $temp -gt 52000 ] && fan=1 

Wat een heel goed voorbeeld van onleesbaarheid is, ook al is het correct (en voor bash-golf experts waarschijnlijk ook heel duidelijk)

[Bericht gewijzigd door blurp op (18%)]

Hehe, helemaal akkoord, @blurp!
De bash-code proeft naar unix van 30-40 jaar geleden, toen we alleen maar bourne shell aka sh hadden (en het exotisme csh waar ik altijd vies van ben geweest).

Zo kan men de leesbaarheid flink verbeteren door

[ $temp -gt 52000 ] && fan=1 

te vervangen door

if [[ $temp -gt 52000 ]] ; then fan=1 ; fi 

Op 15 april 2023 11:38:15 schreef Paulinha_B:
De bash-code proeft naar unix van 30-40 jaar geleden,

He, op Unix gebruikten we sh, bash is de gepimpte versie voor Linux-weenies :-)

Zo kan men de leesbaarheid flink verbeteren door

[ $temp -gt 52000 ] && fan=1 

te vervangen door

if [[ $temp -gt 52000 ]] ; then fan=1 ; fi 

if [[ $temp -gt 52000 ]] ; then 
    fan=1 ; 
fi 

of:


if (temp > 5200) then
    fan =1

:-)

Maar we dwalen af

Ik zat in een vi shell op de mobiel vandaar mijn beknopte code.

Het voordeel van bash is dat het onafhankelijk is van eventuele libraries.

Je maakt overigens een typefout in je laatste snippet O-)

Op 15 april 2023 15:00:58 schreef K7Jz:
Je maakt overigens een typefout in je laatste snippet O-)

Klopt, moet zijn


if (temp>5200) :
    fan = 1

Python is min of meer standaard. Het enige serieuze OS dat niet standaard met een python interpreter komt is Windows, en dat heeft ook geen bash.

In dit geval heb je het over code die gebruikt maar van /sys/class/thermal/thermal_zone0/temp , en dat bind het toch wel redelijk sterk aan een Raspberry met Raspbian. En als dat al een gegeven is, is aanwezigheid van python ook gegeven.

... en misschien ook 52000 ipv 5200 :)
(sorry voor de haarklieverij, maar als we dan toch bezig zijn...)

Op 15 april 2023 15:13:22 schreef blurp:
Python is min of meer standaard.

Dat was leuk totdat ze van Python2 naar Python3 ineens zoveel veranderden dat vrijwel NIETS meer zonder aanpassingen werkt. Da's net zo vervelend als een library probleem.

Op 15 april 2023 11:42:11 schreef blurp:
He, op Unix gebruikten we sh, bash is de gepimpte versie voor Linux-weenies :-)

Voglens mij hadden we al bash in 1990 op de Unix computers. Ook was er iemand die perse "zsh" moest hebben. Dat ook maar geinstalleerd. Maar goed. Bash is kut. :-)

Het enige serieuze OS dat niet standaard met een python interpreter komt is Windows, en dat heeft ook geen bash

Zonder meteen de Linux-Windows discussie in te willen duiken, vanaf Windows 10 heeft het een "Linux subsystem"

What is Windows 10 subsystem for Linux?
The Windows Subsystem for Linux (WSL) lets developers install a Linux distribution (such as Ubuntu, OpenSUSE, Kali, Debian, Arch Linux, etc) and use Linux applications, utilities, and Bash command-line tools directly on Windows, unmodified, without the overhead of a traditional virtual machine or dualboot setup