ich bin neu hier im Forum, klar und warum meldet man sich hier? Man hat Probleme!
Vielleicht könnt Ihr mir helfen.
Zuerst möcht ich kurz mein Projekt beschreiben:
Meine PV-Anlage wird mit zwei dig.Zählern erfasst, auf denen ein sogn. Smat Grid Hub (Fa. efr) installiert ist. Bei den Hubs o. Webservern kann man die aktuellen Daten über ein JSON-Format auslesen. Mein RasPi soll diese Daten alle 15 sek. auslesen, analysieren und darstellen. (Später vielleicht PV-Strom-abhängig Verbraucher ein/ausschalten)
Ich arbeite mit Python 2.7.3 (Erfahrungen habe ich mit ANSI-C) und im allg. läuft das Script gut. Aber zwischendurch kommen Fehler. Zur Fehlerbehandlung sehe ich vor, den voherigen Wert einfach nochmal zurückzugeben. (Nicht elegant, aber beim 15-s-Takt kein Problem)
1.) urlError - Fehler: kann ich erkennen, aber beim nächsten Durchlauf kommt der Fehler wieder.
Kann man diesen Fehler reseten, löschen o.ä.?
2.) ValueError (sehr selten) läuft
3.) "error: [Errno 110] Connection timed out": diese Meldung habe ich noch nicht gelöst. Weder RuntimError noch socket.time erkennt diesen. Gibt es hier eine Lösung?
Nochmals zur Verdeutlichung, einer der Fehler taucht ca. einmal am Tag auf. Da das Script aber anhält (3) oder mit falschen Daten (1) weiterläuft, nervt dieses.
Hier habe ich ein Extrat des Scripts:
Code: Alles auswählen
import urllib2
import socket
import json
import time
def hub_fct(addr):
global json_old1
url = ('http://192.168.178.%d/json.txt?LogName=name&LogPSWD=1234' % (addr))
req = urllib2.Request(url)
try:
response = urllib2.urlopen(req)
except urllib2.URLError, e:
if hasattr(e, 'reason'):
print ('URLError(%d): %s' % (addr, e.reason))
elif hasattr(e, 'code'):
print ('URLError(%d): %s' % (addr, e.code))
return json_old1
except ValueError as e:
print ('ValueError(%d): %d' % (addr, e.code))
return json_old1
except RuntimeError as e:
print ('RuntimeError(%d): %d' % (addr, e.code))
except socket.timeout:
print('TimeOut(%d)')
return json_old1
else:
json_text = response.read()
json_old1 = json_text
response.close()
return json_text
i_ges = 4 * 60 * 24 #4 mal pro Std am Tag
while i<i_ges:
#hier auf 0, 15, 30 u. 45 ste Sek. warten
#Smart Grid Hubs aufrufen u. auslesen
data0 = hub_fct(31)
data1 = hub_fct(32)
#Datenverarbeitung