Seite 1 von 1

Wie hole ich mir den Messwert?

Verfasst: Mittwoch 5. Mai 2021, 11:30
von ESP8266Schwabe
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?

Re: Wie hole ich mir den Messwert?

Verfasst: Mittwoch 5. Mai 2021, 11:37
von __deets__
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.

Re: Wie hole ich mir den Messwert?

Verfasst: Mittwoch 5. Mai 2021, 11:45
von ESP8266Schwabe
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 :?

Re: Wie hole ich mir den Messwert?

Verfasst: Mittwoch 5. Mai 2021, 12:04
von ESP8266Schwabe
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
}


Re: Wie hole ich mir den Messwert?

Verfasst: Mittwoch 5. Mai 2021, 12:38
von Sirius3

Code: Alles auswählen

response = requests.get('192.168.xxx.xxx/report')
data = response.json()

Re: Wie hole ich mir den Messwert?

Verfasst: Donnerstag 6. Mai 2021, 06:22
von ESP8266Schwabe
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?

Re: Wie hole ich mir den Messwert?

Verfasst: Donnerstag 6. Mai 2021, 06:32
von Whitie
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

Re: Wie hole ich mir den Messwert?

Verfasst: Donnerstag 6. Mai 2021, 06:48
von sparrow
@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

Re: Wie hole ich mir den Messwert?

Verfasst: Donnerstag 6. Mai 2021, 07:38
von ESP8266Schwabe

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