Wie hole ich mir den Messwert?

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
ESP8266Schwabe
User
Beiträge: 16
Registriert: Sonntag 20. Oktober 2019, 11:24

Mittwoch 5. Mai 2021, 11:30

Hallo,

ich habe eine Smarthome Steckdose an die mein Balkonkraftwerk angeschlossen ist.

Mit "http://192.168.xxx.xxx/report"

bekomme ich folgende Ausgabe:

Code: Alles auswählen

power	8.6
Ws	24.18
relay	true
temperature	19.87
Hier interessiert mich lediglich die erste Zeile "power 8.6"

Die möchte ich alle 5 Minuten in eine lokale DB einpflegen:

Code: Alles auswählen

#!/usr/bin/python
import sys
import mysql.connector as mc


#Messdaten Holen


try:
    connection = mc.connect (host = "192.168.xxx.xxx",
                             user = "pibote",
                             passwd = "xxxx",
                             db = "messwerte")
except mc.Error as e:
    print("Error %d: %s" % (e.args[0], e.args[1]))
    sys.exit(1)

      
cursor = connection.cursor()
cursor.execute("INSERT INTO balkonkw (power) VALUES(%s)",(powerwert))
connection.commit()

cursor.close()
connection.close()
Das schreiben in die Datenbank habe ich von einem anderen Script kopiert, bei dem ich Daten von einem ESP8266 erfasse.

Was muss ich machen, damit ich im Script die http Ausgabe in ein Array? bekomme , von dem ich nur den ersten Wert dann in die Datenbank schreiben kann?
__deets__
User
Beiträge: 10052
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 5. Mai 2021, 11:37

Mit dieser Angabe kann man so nix anfangen, weil das ja die Ausgabe von HTML ist. Und es bazilllionen Wege gibt, diese Ausgabe zu erzeugen. Mit Tabellen, Divs, CSS, pipapo. Darum wäre es hilfreich, entweder den HTML Quelltext zu sehen. Oder noch besser das konkrete Modell der Steckdose und die Dokumentation zu dessen HTTP Protokoll. Denn vielleicht gibt es auch bessere Optionen, das gleich maschinenlesbar abzufragen.
ESP8266Schwabe
User
Beiträge: 16
Registriert: Sonntag 20. Oktober 2019, 11:24

Mittwoch 5. Mai 2021, 11:45

Wie auf der Hilfeseite von Mystrom beschrieben, kommt man mit einer HTML Abfrage an die Werte:
https://api.mystrom.ch/#fbb2c698-e37a-4 ... 8b2f615fe2

Ich weiß jetzt nicht, wie ich in meinem Script so eine http Abfrage machen kann :?
ESP8266Schwabe
User
Beiträge: 16
Registriert: Sonntag 20. Oktober 2019, 11:24

Mittwoch 5. Mai 2021, 12:04

Ich bin schon einen kleinen Schritt weiter:

Code: Alles auswählen

import requests

r = requests.get('192.168.xxx.xxx/report')
Da müsste jetzt ja in r

die Daten, so wie im Beispiel drinnen sein?

Code: Alles auswählen


{
  "power": 35.804927825927734,
  "relay": true,
  "temperature": 21.369983673095703
}

Sirius3
User
Beiträge: 14760
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 5. Mai 2021, 12:38

Code: Alles auswählen

response = requests.get('192.168.xxx.xxx/report')
data = response.json()
ESP8266Schwabe
User
Beiträge: 16
Registriert: Sonntag 20. Oktober 2019, 11:24

Donnerstag 6. Mai 2021, 06:22

Ich habe jetzt folgenden code:

Code: Alles auswählen

#!/usr/bin/python
import sys
import mysql.connector as mc
import requests

response = requests.get('http://192.168.178.125/report')
data = response.json()
print(data)
der erzeugt folgende Ausgabe:

Code: Alles auswählen

{u'Ws': 16.64, u'relay': True, u'power': 15.4, u'temperature': 19.56}
Wie hole ich mir das dritte Wertepaar heraus? Quasi "u'power': 15.4"

Damit ich den Wert 15,4 in meine Datenbank einpflegen kann?
Benutzeravatar
Whitie
User
Beiträge: 116
Registriert: Sonntag 4. Juni 2006, 12:39
Wohnort: Schulzendorf

Donnerstag 6. Mai 2021, 06:32

ESP8266Schwabe hat geschrieben:
Donnerstag 6. Mai 2021, 06:22

Code: Alles auswählen

{u'Ws': 16.64, u'relay': True, u'power': 15.4, u'temperature': 19.56}
Wie hole ich mir das dritte Wertepaar heraus? Quasi "u'power': 15.4"
Schau mal hier: https://docs.python.org/2.7/library/std ... types-dict

Gruß
Whitie
Benutzeravatar
sparrow
User
Beiträge: 2739
Registriert: Freitag 17. April 2009, 10:28

Donnerstag 6. Mai 2021, 06:48

@ESP8266Schwabe: Die shebang "#!/usr/bin/python" weißt darauf hin, dass du ein Python 2.x verwendest. Wenn dem so ist, solltest du das Projekt mit Python 3 weiterführen. Der Support für Python 2 ist längst ausgelaufen.

@Whitie: Du verweist auf die Dokumentation zu Python 2. Das is aber längst tot. Dicts gibt es natürlich auch in Python 3: https://docs.python.org/3/tutorial/data ... ctionaries
ESP8266Schwabe
User
Beiträge: 16
Registriert: Sonntag 20. Oktober 2019, 11:24

Donnerstag 6. Mai 2021, 07:38

Code: Alles auswählen

#!/usr/bin/python
import sys
import mysql.connector as mc
import requests



response = requests.get('http://192.168.178.125/report')
data = response.json()
#print(data)
powerwert = data["power"]
#print(powerwert)

Habe meinen gewünschten Wert extrahiert. Danke für die Hilfe!! :D
Antworten