Zamilovat si programování Zamilovat si programování
Pouze tento týden až 80% sleva na SQL jazyky
Zamiluj si programování! Až 80 % bodů na prémiový obsah zdarma. Více informací

Diskuze: Python_Měření teploty

Python Python Python_Měření teploty American English version English version

Aktivity (1)
Avatar
dvorak.vit94
Člen
Avatar
dvorak.vit94:22.3.2018 9:35

Čau lidi.
Snažím se na svém Raspberry Pi 3 zprovoznit modul Sense-hat tak aby měřil hodnoty a posílal je na PHP stránku. Jenže při spuštění mi hází stále chybu ** "inconsistent use of tabs and spaces in indentation"** na řádku kde je: "temp= "%.1f" %temperature" .
Nevíte někdo proč tomu tak je a jak to napravit?
Moc díky za rady.

import os
import threading
import urllib.request, urllib.error, urllib.parse
from sense_hat import SenseHat



sense = SenseHat()

def readSensor():

        global temperature
        global humidity
        global pressure
        global cpu_temp

        cpu_temp = 0
        temperature =0
        humidity = 0
        pressure = 0

        temperature = sense.get_temperature()
        humidity = sense.get_humidity()+16.5
        pressure = sense.get_pressure()+20

        if pressure == 20 :
                pressure = sense.get_pressure()+20

        humidity = round(humidity,1)
        pressure = round(pressure,1)

def readCPUTemperature():

        global temperature

        cpu_temp = os.popen("/opt/vc/bin/vcgencmd measure_temp").read()
        cpu_temp = cpu_temp[:-3]
        cpu_temp = cpu_temp[5:]

        temperature = sense.get_temperature()

        print(cpu_temp)

        if cpu_temp == "42.9":
                temperature = temperature - 8.2
        elif cpu_temp == "44.0":
                temperature = temperature - 8.5
        elif cpu_temp == "44.5":
                temperature = temperature - 8.7
        elif cpu_temp == "45.1":
                temperature = temperature - 9.0
        elif cpu_temp == "46.7":
                temperature = temperature - 9.1
        elif cpu_temp == "47.2":
                temperature = temperature - 9.2
        elif cpu_temp == "47.8":
                temperature = temperature - 9.3
        elif cpu_temp == "48.3":
                temperature = temperature - 9.35
        elif cpu_temp == "48.9":
                temperature = temperature - 9.4
        else:
                temperature = temperature - 9.5


def sendDataToServer():
        global temperature
        global pressure
        global humidity

        threading.Timer(600,sendDataToServer).start()
        print("Sensing...")
        readSensor()
        readCPUTemperature()
        temperature = round(temperature,1)
        print(temperature)
        print(humidity)
        print(pressure)
        temp= "%.1f" %temperature
        hum ="%.1f" %humidity
        press = "%.1f" %pressure
        urllib.request.urlopen("localhost/mereni/add_data.php?temp="+temp+"&hum="+hum+"&pr="+press).read()

sendDataToServer()
 
Odpovědět 22.3.2018 9:35
Avatar
Filip Němeček
Redaktor
Avatar
Filip Němeček:22.3.2018 10:19

Ahoj, no ta chyba ti říká, kde bude problém. Tyto netisknutelné znaky (hlavně tab a nové řádky) jsou v Pythonu důležité pro oddělení kódu metod, podmínek apod...

Jaké použiváš IDE nebo editor? Nějaký lepší by ti měl tyto "neviditelné" znaky ukázat, podle mě tam máš někde o mezeru na víc nebo několik mezer místo TABu.

Za sebe bych doporučil PyCharm, který je v Community edici zdarma a Python se v něm píše krásně.

 
Nahoru Odpovědět 22.3.2018 10:19
Avatar
dvorak.vit94
Člen
Avatar
Odpovídá na Filip Němeček
dvorak.vit94:22.3.2018 10:30

Píši to v Thonny Python IDE, Zkusím PyCharm tedy. Díky

 
Nahoru Odpovědět 22.3.2018 10:30
Avatar
j.c.
Člen
Avatar
j.c.:22.3.2018 13:13

já jsem používal na skouknutí odsazení notepad++

pycharm mám nainstalovaný taky, ale nemám ho rád, je pomalý a vytváří podivné struktury okolo projektu
ALE pohodlně se v něm díky tomu dá udělat distribuční balíček a lehce se v něm ladí, a vůbec má spoustu "bells and whistles"

s postupující praxí tě přestane odsazení trápit, zvykneš si

nejlepší je IDLE, je vestavěné, můžeš ho mít také ve tmavém motivu a chybové hlášky jsou stejné jako v pycharmu

 
Nahoru Odpovědět 22.3.2018 13:13
Avatar
j.c.
Člen
Avatar
j.c.:22.3.2018 13:20

máš na ř. 27, 45,47,49,51,5­3,55,57,59,61,63 a 67..82 odsazení navíc

Editováno 22.3.2018 13:22
 
Nahoru Odpovědět 22.3.2018 13:20
Avatar
j.c.
Člen
Avatar
Odpovídá na j.c.
j.c.:22.3.2018 13:33

trochu kecám,máš na těch řádkách odsazení navíc, ale ty ho máš skoro všude ;)
V pythonu si nemůžeš udělat odsazení navíc.

 
Nahoru Odpovědět 22.3.2018 13:33
Avatar
Odpovídá na j.c.
Erik Šťastný:22.3.2018 13:59

IDLE mi přijde na cokoliv serioznějšího naprosto nedostatečné, připadám si v něm jako ve vylepšeném texťáku z roku 2000 v porovnání s PyCharmem.

Používám ho maximálně na jednoduchou úpravu kódu u uživatele, kde není nic jiného nainstalovaného.

 
Nahoru Odpovědět  +1 22.3.2018 13:59
Avatar
dvorak.vit94
Člen
Avatar
Odpovídá na j.c.
dvorak.vit94:22.3.2018 15:11

Takže má být vše co není nějaká proměnná hnedka na začátku? Třeba:

def sendDataToServer():
global temperature
global humidity

        threading.Timer(10,sendDataToServer).start()
print("Sensing...")
        readSensor()
        readCPUTemperature()

Nebo jaký v tom je pravidlo?

 
Nahoru Odpovědět 22.3.2018 15:11
Avatar
j.c.
Člen
Avatar
Odpovídá na dvorak.vit94
j.c.:22.3.2018 15:23
import os
import threading
import urllib.request, urllib.error, urllib.parse
from sense_hat import SenseHat



sense = SenseHat()

def readSensor():
    global temperature
    global humidity
    global pressure
    global cpu_temp

    cpu_temp = 0
    temperature =0
    humidity = 0
    pressure = 0

    temperature = sense.get_temperature()
    humidity = sense.get_humidity()+16.5
    pressure = sense.get_pressure()+20

    if pressure == 20 :
        pressure = sense.get_pressure()+20
        humidity = round(humidity,1)
        pressure = round(pressure,1)

def readCPUTemperature():

    global temperature

    cpu_temp = os.popen("/opt/vc/bin/vcgencmd measure_temp").read()
    cpu_temp = cpu_temp[:-3]
    cpu_temp = cpu_temp[5:]

    temperature = sense.get_temperature()

    print(cpu_temp)

    if cpu_temp == "42.9":
        temperature = temperature - 8.2
    elif cpu_temp == "44.0":
        temperature = temperature - 8.5
    elif cpu_temp == "44.5":
        temperature = temperature - 8.7
    elif cpu_temp == "45.1":
        temperature = temperature - 9.0
    elif cpu_temp == "46.7":
        temperature = temperature - 9.1
    elif cpu_temp == "47.2":
        temperature = temperature - 9.2
    elif cpu_temp == "47.8":
        temperature = temperature - 9.3
    elif cpu_temp == "48.3":
        temperature = temperature - 9.35
    elif cpu_temp == "48.9":
        temperature = temperature - 9.4
    else:
        temperature = temperature - 9.5


def sendDataToServer():
    global temperature
    global pressure
    global humidity

    threading.Timer(600,sendDataToServer).start()
    print("Sensing...")
    readSensor()
    readCPUTemperature()
    temperature = round(temperature,1)
    print(temperature)
    print(humidity)
    print(pressure)
    temp= "%.1f" %temperature
    hum ="%.1f" %humidity
    press = "%.1f" %pressure
    urllib.request.urlopen("localhost/mereni/add_data.php?temp="+temp+"&hum="+hum+"&pr="+press).read()

sendDataToServer()
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 22.3.2018 15:23
Avatar
j.c.
Člen
Avatar
j.c.:22.3.2018 15:26

^^^netvrdím, že to proleze, ale mělo by to být o dost lepší
všude jsou místo tab 4 mezery

 
Nahoru Odpovědět 22.3.2018 15:26
Avatar
dvorak.vit94
Člen
Avatar
Odpovídá na j.c.
dvorak.vit94:22.3.2018 16:07

Dobře, už to hází chyby ohledně importování urllib. Ale díky za pomoc

 
Nahoru Odpovědět 22.3.2018 16:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.