MySQL fehler

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Fl3xizzz
User
Beiträge: 2
Registriert: Dienstag 23. Februar 2016, 18:23

Hallo Leute,

ich habe ein kleine Problem bei diesem Code:

Code: Alles auswählen

import smbus, time, sys, MySQLdb
	

db = MySQLdb.connect(host="localhost", user="root", passwd="lol123", db="box")    
cur = db.cursor()




class Chirp:

	


    def __init__(self, bus=1, address=0x20):
        self.bus_num = bus
        self.bus = smbus.SMBus(bus)
        self.address = address

    def get_reg(self, reg):
        # read 2 bytes from register
        val = self.bus.read_word_data(self.address, reg)
        # return swapped bytes (they come in wrong order)
        return (val >> 8) + ((val & 0xFF) << 8)

    def reset(self):
        # To reset the sensor, write 6 to the device I2C address
        self.bus.write_byte(self.address, 6)

    def set_addr(self, new_addr):
        # To change the I2C address of the sensor, write a new address
        # (one byte [1..127]) to register 1; the new address will take effect after reset
        self.bus.write_byte_data(self.address, 1, new_addr)
        self.reset()
        self.address = new_addr

    def moist(self):
        # To read soil moisture, read 2 bytes from register 0
        return self.get_reg(0)

    def temp(self):
        # To read temperature, read 2 bytes from register 5
        return self.get_reg(5)

    def light(self):
        # To read light level, start measurement by writing 3 to the
        # device I2C address, wait for 3 seconds, read 2 bytes from register 4
        self.bus.write_byte(self.address, 3)
        time.sleep(1.5)
        return self.get_reg(4)

    def __repr__(self):
        return "<Chirp sensor on bus %d, addr %d>" % (self.bus_num, self.address)

if __name__ == "__main__":
    addr = 0x20
    if len(sys.argv) == 2:
        if sys.argv[1].startswith("0x"):
            addr = int(sys.argv[1], 16)
        else:
            addr = int(sys.argv[1])
    chirp = Chirp(1, addr)

    print chirp
    print "Moisture\tTemperature\tBrightness"
    while True:
		
	test=float(0.2092050209205021)	
	
		loggit = "INSERT INTO sensor1 (feuchte, temp, licht) VALUES (%s, %s, %s)"
		cur.execute(loggit, (1, 1, 1))
		db.commit()
		
        print "%6.1f%% \t%6.1f*C \t%d" % ((chirp.moist()-230)*test, (chirp.temp())/float(10), chirp.light())
        loggit = "INSERT INTO sensor1 (feuchte, temp, licht) VALUES (%s, %s, %s)"
	cur.execute(loggit, (1, 1, 1))
	db.commit()
	time.sleep(1)
		
		
		
		
db.close()
An der Stelle wo ich zum testen was in die Datenbank schreiben will bekomme ich folgenden fehler:
File "sensor.py", line 71
loggit = "INSERT INTO sensor1 (feuchte, temp, licht) VALUES (%s, %s, %s)"
^
IndentationError: unexpected indent
root@raspberrypi:/home/pi/Adafruit_Py
wo dran liegts?
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wie die Fehlermeldung sagt: die Einrückung ist falsch.

Dein Code ist an der Stelle so wie so ziemlich "wirr", was die Einrückungen betrifft - die Zeile darüber ist z.B. anders eingerückt.

Standard bei Python ist, dass man als Einrückung jeweils. vier Leerzeichen benutzt. Darauf hin solltest du deine Code in "main" mal überprüfen.

Und das hast auch 2x den gleichen `insert` Befehl inkl. commit drin - Absicht oder Copy&Paste Fehler?

Gruß, noisefloor
Fl3xizzz
User
Beiträge: 2
Registriert: Dienstag 23. Februar 2016, 18:23

Ja es ist ein CopyPast Fehler :D

Das mit dem einrücken habe ich mir schon fast gedacht ich komme damit nicht ganz klar :D, wenn ich das hier weg lasse funktioniert alles:

Code: Alles auswählen

loggit = "INSERT INTO sensor1 (feuchte, temp, licht) VALUES (%s, %s, %s)"
		cur.execute(loggit, (1, 1, 1))
		db.commit()
		


Ich müsste das ja eigentlich nur auf die höhe von dem Print setzen dann müsste es ja gehen, tut es aber nicht...
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das ist aber auch keine korrekte Einrückung - nur eine, die keinen Fehler wirft... Das sollte alles auf einer Höhe stehen.

Poste bitte nochmal den `if __name__ == "__main__":` Block ohne C&P Fehler und mit der Einrückung, wie du sie aktuell hast.

Gruß, noisefloor
Antworten