Script ohne Internetverbindung

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
jens233
User
Beiträge: 7
Registriert: Samstag 17. März 2018, 22:42

Hallo,

hab mir vor einer Woche einen Raspi gekauft.

Nun einen Türöffner gebastelt…
der auch funktioniert,

aber er soll auch Daten an meinen Webserver senden,
was auch funktioniert…

da hier das Internet sehr instabil ist,
muss ich diese Abfrage auskommentieren (drei Routen im Python3-Script)
da sonst das Script hängen bleibt, wenn keine Internetverbindung besteht.

Hab keinen Plan, wie ich eine Abfrage einbauen kann,
wenn keine Internetverbindung besteht,
das einfach das Script ohne Internetverbindung weiter macht…

auch Python ist für mich Neuland (bin noch am einlesen...)


wäre über jegliche Hilfe Dankbar.

Mit freundlichen Grüßen,
Jens

Code: Alles auswählen

import re
from smartcard.System import readers
import datetime
import os
import RPi.GPIO as GPIO
import signal
import http.client
import time
import mysql.connector
from subprocess import call


call(["gpio","export","17","out"])
call(["gpio","-g","write","17","1"])


COMMAND = [0xFF, 0xCA, 0x00, 0x00, 0x00] 

r = readers()

reader = r[0]
print("Reader= ", reader)

data = ''

while(1):
	try:
		connection = reader.createConnection()
		status_connection = connection.connect()
		dataCurr = connection.transmit(COMMAND)

		if isinstance(dataCurr, tuple):
			temp = dataCurr[0]

		else:
			temp = dataCurr		
		dataCurr = ''

		for int in temp:
			dataCurr += format(int)[0:] # += bf
			
		if(dataCurr != data):
			data = dataCurr
			try:
				cnx = mysql.connector.connect(user='Benutzer',password='Passwort',host='127.0.0.1',database='meine Datenbank')
			except:
				print ("Keine Verbindung")
				exit(0)
			cursor = cnx.cursor()
			print(data)
			###conn = http.client.HTTPConnection("meinserver.de")
			###conn.request("GET","/myscript.php?Seite1="+Seite2)
			###res = conn.getresponse()
			cursor.execute("SELECT status from karten WHERE karte = %s",(data,))
			result = cursor.fetchone()
			ergebnis = str(result[0])
			cnx.close()
			print(ergebnis)
			if ergebnis == "1":
				call(["gpio","-g","write","17","0"])
				time.sleep(3.0)
				call(["gpio","-g","write","17","1"])
				data = ''

	except Exception as e:
		continue
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

https://docs.python.org/3/library/http. ... ttp.client

Du könntest mit einem Timeout arbeiten.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
jens233
User
Beiträge: 7
Registriert: Samstag 17. März 2018, 22:42

Hab nochmal gespielt…

das mit Timeout macht keinen Sinn,
weil, dies muss ich nicht Auskommentieren:

conn = http.client.HTTPConnection("meinserver.de")

das macht also einfach weiter, auch ohne Verbindung…


aber, ab hier hängt es, wenn keine Rückmeldung kommt,
wegen fehlender Internetverbindung…

conn.request("GET","/myscript.php?Seite1="+Seite2)
res = conn.getresponse()


selbiges Script unter Python2 (leicht abgewandelt, wegen Klammersetzung usw.)
läuft durch, auch bei fehlender Internetverbindung…
es werden dann halt nur keine Daten an den Server übertragen…

was haut unter Python3 nicht hin ???


Mit freundlichen Grüßen,
Jens
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Das sollte helfen:

Code: Alles auswählen

conn = http.client.HTTPConnection('china.cn', timeout=0.01)
conn.request('GET', '/')

Code: Alles auswählen

timeout: timed out
Die exception kommt von socket.timeout

Code: Alles auswählen

conn = http.client.HTTPConnection('china.cn', timeout=0.01)
try:
    conn.request('GET', '/')
except socket.timeout:
    print('Timeout, keine Internetverbindung oder der Server ist down...')
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
jens233
User
Beiträge: 7
Registriert: Samstag 17. März 2018, 22:42

@ DeaD_EyE,

Dir erst mal ein super Dankeschön,
für den Denkanstoß…

das mit dem Timeout muss ich noch abschätzen,
aber, es hat dann sofort ohne Timeout funktioniert,
egal, ob mit oder ohne Internetverbindung…


so sieht das nun aus:

Code: Alles auswählen

...
try:
	conn = http.client.HTTPConnection("meinserver.de")
	conn.request("GET","/myscript.php?Seite1="+Seite2)
	res = conn.getresponse() 
except:
	print ("keine Server-Verbindung")
...
Kein Plan ob mir das mit den fehlenden Timeout irgendwann zum Verhängnis wird,
erst mal funktioniert es…


aber im Nachhinein ist man immer Schlauer.
hab diese Abfrage, ein Paar Zeilen höher in der mysql-Verbindung eingebaut,
wo dies eigentlich nutzlos ist,
da die Datenbank Lokal abgefragt wird…

und im letztem Beitrag Schrieb ich:
das mit Timeout macht keinen Sinn...

natürlich sollte man alles zwischen,
try und except schreiben.

Hab es immer mit einzelnen Zeilen versucht.


Aber Egal,
befasse mich erst seit ein paar Wochen mit Python,
weil mich der Raspbery interessiert…

Bin Ü50 aber noch Lernwillig…


@ DeaD_EyE, nochmal Danke…

Mit freundlichen Grüßen
Jens
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte keine ‚nackten‘ try/excepts. Du fängst damit mehr Fehler ab als dir lieb ist, inklusive welchen, die du gemacht hast, wie zb falsche/nicht existierende Namen anzugeben.

Immer so präzise wie möglich abfangen, also zb

Code: Alles auswählen

try:
     ...
except IOError as e:
     ...
Antworten