Hallo,
ich rufe von einen Arduno, der über LAN mit der Fritzbox verbunden ist, Messdaten ab.
Das funktioniert die meiste Zeit.
Hängen bleibt es nach unterschiedlichen Zeiten (2 MIn - 1 Tag).
print(url)
wird dann noch ausgeführt.
Danach kommt nicht mehr, auch keine Fehlermeldung.
Kann jemand helfen?
Python
# -*- coding: utf-8 -*-
import time
import smbus
bus = smbus.SMBus(1)
import requests
from requests.exceptions import HTTPError
address = 0x04
vStdOld = 24
vDL = False
DatenKuechRamDiscFormat = '''{0:s};{1:s};{2:s};{3:s};{4:s};{5:s};{6:s};{7:s};{8:s};{9:s};{10:s};{11:s};{12:s};{13:s};{14:s};{15:s};{16:s};{17:s};{18:s};{19:s};{20:s};{21:s};{22:s};{23:s};{24:s};{25:s};{26:s};{27:s};{28:s};{29:s}'''
#with SMBusWrapper(1) as bus:
while True:
vTimeDate = time.localtime() #aktuelle Zeit
if vTimeDate[5]>45: #Flage löschen
vDL = False
if vTimeDate[5]<45 and vTimeDate[5]>30 and vDL==False: # 1x pro Minute
time.sleep(0.2)
url = 'http://192.168.178.175/value.html' #Küchensteuerung
try:
print(url)
response = requests.get(url) #!!!!!!!!!!!!!!!Problemstelle
response.raise_for_status()
except HTTPError as http_err:
print("HTTP error occurred: {http_err}")
except Exception as err:
print("Other error occurred: {err}")
else:
time.sleep(0.5)
print (response.text[0:1000])
aDaten = response.text.split(";")
if aDaten[1] == 'XXXX' and aDaten[44] == 'YYYY':
i = 2
vWindGes = 0
vWindSpitze = 0
while i < 8: #druchschnittliche Windgeschwindigkeit berechnen
vWindGes += float(aDaten[i])
if vWindSpitze < float(aDaten[i + 6]): #die höchste Windgeschwindigkeit
vWindSpitze = float(aDaten[i + 6])
i += 1
vWindDurchsch = vWindGes / 6
vRegenWert = int(aDaten[14])
bStatRegen = int(aDaten[15])
vTempKueche = int(aDaten[17])
vSollTempKueche = int(aDaten[18])
vTempGalerie = int(aDaten[19])
vTempSollGalerie = int(aDaten[20])
vTempDFensterRahmen = int(aDaten[21])
vTempSchlafz = int(aDaten[22])
bStatRoWoO = int(aDaten[23])
bStatRoWoU = int(aDaten[24])
bStatRoReO = int(aDaten[25])
bStatRoReU = int(aDaten[26])
bStatRoLiO = int(aDaten[27])
bStatRoLiU = int(aDaten[28])
aHK_Pumpe = int(aDaten[29])
vLUX = float(aDaten[30])
vSonnenMinutenHeute = int(aDaten[31])
bStatFeWo = int(aDaten[32])
bStatFeRe = int(aDaten[33])
bStatFeLi = int(aDaten[34])
vLuftdruck = float(aDaten[35])
vDachfensterWinkel = int(aDaten[36])
vDachfensterHeizung = int(aDaten[37])
vSollTempSchl = int(aDaten[38]) #Solltemperatur Schlafzimmer
vSchlafFeuchte = int(aDaten[39])
bStatRoScO = int(aDaten[40]) #Status Rolo Schlafzimmer Oben
bStatRoScU = int(aDaten[41]) #Status Rolo Schlafzimmer Unten
bStatFeSc = int(aDaten[42]) #Status Fenster Schlafzimmer
KuechenStWerte = DatenKuechRamDiscFormat.format (str(vWindDurchsch),str(vWindSpitze),str(vRegenWert),str(bStatRegen),str(vTempKueche),str(vSollTempKueche),
str(vTempGalerie),str(vTempSollGalerie),str(vTempDFensterRahmen),str(vTempSchlafz),str(bStatRoWoO),str(bStatRoWoU),
str(bStatRoReO),str(bStatRoReU),str(bStatRoLiO),str(bStatRoLiU),str(aHK_Pumpe),str(vLUX),str(vSonnenMinutenHeute),str(bStatFeWo),
str(bStatFeRe),str(bStatFeLi),str(vLuftdruck),str(vDachfensterWinkel),str(vDachfensterHeizung),
str(vSollTempSchl),str(vSchlafFeuchte),str(bStatRoScO),str(bStatRoScU),str(bStatFeSc))
try:
fx=open("/mnt/RAMDisk/Kuechst_Werte.wet", "w")
fx.write(KuechenStWerte)
fx.close()
except:
print("Schreibfehler datei Kuechst_Werte.wet")
vDL = True #verhindert einen weitern Durchlauf in der aktuellen Minute
time.sleep(1)
#print(".",end=" ")
vTimeDate = time.localtime()
y=vTimeDate[0]-2000
data = [y, vTimeDate[1], vTimeDate[2], vTimeDate[3], vTimeDate[4], vTimeDate[5]]
vXOR = 0
for x in data:
vXOR = vXOR^x
data = [y, vTimeDate[1], vTimeDate[2], vTimeDate[3], vTimeDate[4], vTimeDate[5], vXOR]
try:
bus.write_i2c_block_data(address, 0xF2, data)
#print ("Nachricht an Arduino ", data)
except IOError:
print("Schreibfehler ")
time.sleep(1)
try:
time.sleep(0.23)
block = bus.read_i2c_block_data(address, 0xF1, 8)
#LByte Temp. / HByten Temp. / LByte Pegel / HByte Pegel / Störungsnummer /3 Byte reserve
vWaTemp = ((block[1]*256)+block[0])*0.06255
vPegel = block[3]
vPegel = vPegel<<8
vPegel = vPegel+block[2]
y=vTimeDate[0]-2000
#print("Nachricht x ", block, "Wassertemp. ", round(vWaTemp,5), "Pegel ", vPegel)
vDataStr = str(block[0])+";"+str(block[1])+";"+str(block[2])+";"+str(block[3])+";"+str(block[4])+";"+str(block[5])+";" \
+str(block[6])+";"+str(block[7])+";"+str(y)+";"+str(vTimeDate[1])+";"+str(vTimeDate[2])+";"+str(vTimeDate[3])
fx=open("/mnt/RAMDisk/GWWerte.wet", "w")
fx.write(vDataStr) # stellt die Werte der Flutüberwachung
fx.close() # für die Webseite und die Datenbank zur Verfügung
#print("Nachricht von Arduino", block, "Wassertemp. ", round(vWaTemp,5), "Pegel ", vPegel)
except:
print("i2c-Lesefehler")
time.sleep(1)
if vTimeDate[3]!=vStdOld and vTimeDate[4]==1:
vStdOld=vTimeDate[3]
c=0
if c==0:
vCND = 0
while True:
try:
vEEProm = [0]
X = 0xA0
while X < 0xC0:
block1 = bus.read_i2c_block_data(address, X, 32)
X += 1
vEEProm.extend(block1)
break
except:
time.sleep(0.3)
vCND+=1
print("Lesefehler EEProm")
if vCND>10:
break
X=vEEProm.pop(0)
print("EEProm in RAMDisk", vEEProm)
vEEPromStr =""
for y in range(0,1023):
vEEPromStr+=str(vEEProm[y])+";"
vEEPromStr=vEEPromStr[:-1]
fx=open("/mnt/RAMDisk/GWListe.wet", "w")
fx.write(vEEPromStr) # stellt die Werte der letzten 1024 Std der Flutüberwachung
fx.close() # für die Webseite und die Datenbank zur Verfügung
time.sleep(7)
Alles anzeigen
Shell- Ausgabe
HTML
http://192.168.178.175/value.html
<!DOCTYPE HTML>
<html>
;XXXX;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0;0;27;209;195;187;297;126;180;0;1;0;1;0;1;0;0;0;0;0;0;95311;0;0;160;55;0;1;0;;YYYY;</html>
http://192.168.178.175/value.html
<!DOCTYPE HTML>
<html>
;XXXX;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0;0;27;209;195;186;297;125;180;0;1;0;1;0;1;0;0;0;0;0;0;95311;0;0;160;55;0;1;0;;YYYY;</html>
http://192.168.178.175/value.html
<!DOCTYPE HTML>
<html>
;XXXX;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0;0;27;209;195;187;297;125;180;0;1;0;1;0;1;0;0;0;0;0;0;95311;0;0;160;55;0;1;0;;YYYY;</html>
http://192.168.178.175/value.html
Alles anzeigen