Seite 1 von 1

Script ohne Internetverbindung

Verfasst: Samstag 17. März 2018, 22:48
von jens233
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

Re: Script ohne Internetverbindung

Verfasst: Samstag 24. März 2018, 18:20
von DeaD_EyE
https://docs.python.org/3/library/http. ... ttp.client

Du könntest mit einem Timeout arbeiten.

Re: Script ohne Internetverbindung

Verfasst: Sonntag 25. März 2018, 22:04
von jens233
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

Re: Script ohne Internetverbindung

Verfasst: Montag 26. März 2018, 07:27
von DeaD_EyE
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...')

Re: Script ohne Internetverbindung

Verfasst: Montag 26. März 2018, 19:34
von jens233
@ 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

Re: Script ohne Internetverbindung

Verfasst: Montag 26. März 2018, 19:43
von __deets__
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:
     ...