Programma oude python versie werkt niet meer met python3

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • wersitime
  • Registratie: April 2014
  • Laatst online: 29-04 12:43
Mijn vraag

Na een crash van mijn Raspberry B+ met Python heb ik deze opnieuw ingericht. Nu staat op de nieuwe sd card python3 en draaien mijn oude python programma's niet meer. Nu heb ik het belangrijkste programma op een regel na werkend en dat is het posten van data naar PVOutput. Deze code heeft ruim 6 jaar goed gewerkt op de oude python versie.

Het gaat om deze regel die niet meer werkt:

get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)

Ik krijg alleen maar de foutmelding die het programma ophoest. Ik kan geen errorcode van PVOutput terug vragen want ook dat werkt niet.

De variabele payload lijkt in orde te zijn. Mogelijk interpreteert python3 de waardes anders of moeten er ergens haakjes worden gezet net als bij de print commando's.

payload = {
'key' : pvoutput_key,
'sid' : pvoutput_sid,
'd' : strftime('%Y%m%d'),
't' : strftime('%H:%M'),
'v2' : watt_average,
}
print (payload)
try:
get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
except ConnectionError:
print ('Warning: pvoutput update failed')
except Timeout:
print ('Warning: pvoutput timed out')


Relevante software en hardware die ik gebruik
Raspberry B+ met python3

Wat ik al gevonden of geprobeerd heb

Ik heb het al geprobeerd met python voorbeelden als post. request.get

Bijvoorbaat dank,
Groeten Henny

www.mrmodelrailroad.com

Alle reacties


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Jet zult moeten kijken wat er exact in de ConnectionError ( of Timeout ) zit, of krijg je nog een uncaught exception? nu print je alleen een generieke foutmelding in je except clause, maar dat geeft inderdaad geen informatie over wat er fout gaat. Zonder meer informatie over de daadwerkelijke fout die optreed valt er weinig over te zeggen.

Verder is het makkelijker om je code te lezen als je het in [code=python]....[/code] blokken zet.

[ Voor 17% gewijzigd door Woy op 24-11-2021 14:41 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • +1 Henk 'm!

  • martyw
  • Registratie: Januari 2018
  • Laatst online: 22:43
Uit welke module komt de 'get' methode?
En ik neem aan dat 'strftime' uit de 'time' module komt, en het de bedoeling is huidige datum en tijd te printen?

Acties:
  • +1 Henk 'm!

  • Dogooder
  • Registratie: April 2004
  • Laatst online: 00:12

Dogooder

dus...

Kan je niet ook de error traceback posten?
En wellicht het hele script zodat we ook de gebruikte modules weten.

Ik herken trouwens de situatie. Zie ook mijn topic toendertijd: https://gathering.tweakers.net/forum/list_messages/2091056

[ Voor 37% gewijzigd door Dogooder op 24-11-2021 14:47 ]


Acties:
  • 0 Henk 'm!

  • wersitime
  • Registratie: April 2014
  • Laatst online: 29-04 12:43
martyw schreef op woensdag 24 november 2021 @ 14:42:
Uit welke module komt de 'get' methode?
En ik neem aan dat 'strftime' uit de 'time' module komt, en het de bedoeling is huidige datum en tijd te printen?
get komt uit: from requests import get
strftime komt van: from time import time, strftime, asctime, sleep

www.mrmodelrailroad.com


Acties:
  • 0 Henk 'm!

  • wersitime
  • Registratie: April 2014
  • Laatst online: 29-04 12:43
Dogooder schreef op woensdag 24 november 2021 @ 14:45:
Kan je niet ook de error traceback posten?
En wellicht het hele script zodat we ook de gebruikte modules weten.

Ik herken trouwens de situatie. Zie ook mijn topic toendertijd: https://gathering.tweakers.net/forum/list_messages/2091056
Hoe doe je dat een traceback. Ik heb namelijk al die jaren niet meer met python geprogrammeerd dus ben weer helemaal nieuw.

www.mrmodelrailroad.com


Acties:
  • +1 Henk 'm!

  • Zebby
  • Registratie: Maart 2009
  • Laatst online: 22:18
Ik heb je waardes natuurlijk niet, maar ik krijg een response terug, al dan niet 401 omdat ik geen apikey heb. Wat krijg jij terug, of wat gaat er fout?

Python:
1
2
3
4
5
6
In [12]: response = get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
In [13]: response.content
Out[13]: b'Unauthorized 401: Invalid API Key'

In [11]: print(payload)
{'key': 1, 'sid': 10, 'd': '20211124', 't': '14:01', 'v2': 100}

Acties:
  • 0 Henk 'm!

  • wersitime
  • Registratie: April 2014
  • Laatst online: 29-04 12:43
Zebby schreef op woensdag 24 november 2021 @ 15:05:
Ik heb je waardes natuurlijk niet, maar ik krijg een response terug, al dan niet 401 omdat ik geen apikey heb. Wat krijg jij terug, of wat gaat er fout?

Python:
1
2
3
4
5
6
In [12]: response = get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
In [13]: response.content
Out[13]: b'Unauthorized 401: Invalid API Key'

In [11]: print(payload)
{'key': 1, 'sid': 10, 'd': '20211124', 't': '14:01', 'v2': 100}
Dat is mijn probleem dat ik niets terug krijg omdat de error wordt afgevangen. Maar je commando zal ik eens testen met de api key ingevuld.

www.mrmodelrailroad.com


Acties:
  • +1 Henk 'm!

  • samo
  • Registratie: Juni 2003
  • Laatst online: 21:46

samo

yo/wassup

Wat als je probeert de error je script in te krijgen door om de try heen te werken. Dus
code:
1
2
3
4
5
6
try:
get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
except ConnectionError:
print ('Warning: pvoutput update failed')
except Timeout:
print ('Warning: pvoutput timed out')

wordt
code:
1
2
3
4
5
6
7
get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
#try:
#  get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
#except ConnectionError:
#  print ('Warning: pvoutput update failed')
#except Timeout:
#  print ('Warning: pvoutput timed out')

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana


Acties:
  • +1 Henk 'm!

  • Zebby
  • Registratie: Maart 2009
  • Laatst online: 22:18
wersitime schreef op woensdag 24 november 2021 @ 15:10:
[...]

Dat is mijn probleem dat ik niets terug krijg omdat de error wordt afgevangen. Maar je commando zal ik eens testen met de api key ingevuld.
Gewoon even spelen in de Python ja, en de commando's zo in je env draaien, krijg je gelijk feedback :)

Acties:
  • 0 Henk 'm!

  • wersitime
  • Registratie: April 2014
  • Laatst online: 29-04 12:43
samo schreef op woensdag 24 november 2021 @ 15:11:
Wat als je probeert de error je script in te krijgen door om de try heen te werken. Dus
code:
1
2
3
4
5
6
try:
get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
except ConnectionError:
print ('Warning: pvoutput update failed')
except Timeout:
print ('Warning: pvoutput timed out')

wordt
code:
1
2
3
4
5
6
7
get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
#try:
#  get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
#except ConnectionError:
#  print ('Warning: pvoutput update failed')
#except Timeout:
#  print ('Warning: pvoutput timed out')
Dan krijg ik een heel scherm vol met foutmeldingen, enige tientallen regels. Er gaat blijkbaar met het get commando iets goed fout. Haal ik get weg dan werkt alles normaal.

www.mrmodelrailroad.com


Acties:
  • +2 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
wersitime schreef op woensdag 24 november 2021 @ 15:27:
[...]


Dan krijg ik een heel scherm vol met foutmeldingen, enige tientallen regels. Er gaat blijkbaar met het get commando iets goed fout. Haal ik get weg dan werkt alles normaal.
Je zult toch iets meer moeite moeten doen om die foutmelding te begrijpen, anders kunnen we je hier sowieso niet helpen!

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • wersitime
  • Registratie: April 2014
  • Laatst online: 29-04 12:43
Woy schreef op woensdag 24 november 2021 @ 15:35:
[...]

Je zult toch iets meer moeite moeten doen om die foutmelding te begrijpen, anders kunnen we je hier sowieso niet helpen!
Ik heb nu alleen jouw code getest met een werkende url. Die heb ik getest met ingevulde api en sysid in de browser. De waarde staat dan netjes in PVOutput. Zet ik dezelfde regel met get in python dan krijg ik dus tientallen regels met fouten waar ik niets mee kan.

Dit is het eerste deel wat ik terug krijg. Als laatste staat er: Network unreacheble. Maar via de browser werkt het wel, dus ik kan er daarom nog geen koek van bakken wat die foutmeldingen betekenen.

Traceback (most recent call last):
File "/usr/lib/python3.9/urllib/request.py", line 1346, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "/usr/lib/python3.9/http/client.py", line 1255, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/lib/python3.9/http/client.py", line 1301, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/lib/python3.9/http/client.py", line 1250, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib/python3.9/http/client.py", line 1010, in _send_output
self.send(msg)
File "/usr/lib/python3.9/http/client.py", line 950, in send
self.connect()
File "/usr/lib/python3.9/http/client.py", line 1417, in connect
super().connect()
File "/usr/lib/python3.9/http/client.py", line 921, in connect
self.sock = self._create_connection(
File "/usr/lib/python3.9/socket.py", line 843, in create_connection
raise err
File "/usr/lib/python3.9/socket.py", line 831, in create_connection
sock.connect(sa)
OSError: [Errno 101] Network is unreachable

www.mrmodelrailroad.com


Acties:
  • +1 Henk 'm!

  • Dogooder
  • Registratie: April 2004
  • Laatst online: 00:12

Dogooder

dus...

Die tientallen regels zijn precies de traceback die je nodig hebt om te begrijpen waar het mis gaat.

Acties:
  • 0 Henk 'm!

  • wersitime
  • Registratie: April 2014
  • Laatst online: 29-04 12:43
Dit is mijn hele testprogramma:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from requests import get
from time import time, strftime, asctime, sleep

watt_average = (125)

pvoutput_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
pvoutput_sid = '19903'
payload = {
          'key' : pvoutput_key,
          'sid' : pvoutput_sid,
          'd'   : strftime('%Y%m%d'),
          't'   : strftime('%H:%M'),
          'v2'  : watt_average
          }

get('http://pvoutput.org/service/r2/addstatus.jsp', params=payload, timeout=5.0)
#response.content
print (payload)

www.mrmodelrailroad.com


Acties:
  • +1 Henk 'm!

  • martyw
  • Registratie: Januari 2018
  • Laatst online: 22:43
Als ik het test krijg ik als output als ik de response van de get opvang en print
code:
1
<Response [401]>


Bij jouw zie ik aan het eind van de trace, op het moment dat er een netwerk connectie gemaakt wordt
code:
1
OSError: [Errno 101] Network is unreachable


kun je wel pingen naar pvoutput.org vanaf je Pi?

[ Voor 18% gewijzigd door martyw op 24-11-2021 16:03 ]


Acties:
  • 0 Henk 'm!

  • wersitime
  • Registratie: April 2014
  • Laatst online: 29-04 12:43
martyw schreef op woensdag 24 november 2021 @ 16:00:
Als ik het test krijg ik als output als ik de response van de get opvang en print
code:
1
<Response [401]>


Bij jouw zie ik aan het eind van de trace, op het moment dat er een netwerk connectie gemaakt wordt
code:
1
OSError: [Errno 101] Network is unreachable


kun je wel pingen naar pvoutput.org vanaf je Pi?
Ik heb google geprobeerd maar dan krijg ik inderdaad network unreacheble. Blijkbaar gaat het daar fout. Mogelijk moet ik nog iets instellen op de Raspberry. Ik werk vanaf mijn pc dus kan de raspberry wel bereiken.

www.mrmodelrailroad.com


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Waarschijnlijk dus iets van je netwerk instellingen op je RPi niet goed ingesteld, en heeft dus totaal niks met een Python versie o.i.d. te maken ;)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • +1 Henk 'm!

  • wersitime
  • Registratie: April 2014
  • Laatst online: 29-04 12:43
Nu werkt het. De Raspberry kon de host niet bereiken. Ja wie denkt daar nu aan. Ik werk vanaf de pc en de raspberry staat hier een eind vandaan,. Dus via het netwerk werkte het wel maar de Raspberry kon het internet niet op.

Dit was wat nog moest gebeuren: sudo route add default gw 192.168.0.1

Het is wel een Python forum maar de oplossing is toch maar even hier vandaan gekomen.

Allemaal bedankt


Groeten Henny.

[ Voor 9% gewijzigd door wersitime op 24-11-2021 16:39 ]

www.mrmodelrailroad.com

Pagina: 1