Hallo liebes Forum,
wahrscheinlich ein einfacher Fall für euch. Ich möchte aus meiner PV Anlagensteuerung ein paar Werte auslesen. Dafür kann ich im LAN eine URL öffnen und erhalte eine sehr lange Seite mit Text.
Irgendwo in dem Text steht die Information die ich gerne hätte. Wonach ich suchen muss weiß ich schon.
Wie bekomme ich es hin, auf der Seite nach dem relevanten String zu suchen und den Wert auszulesen. Dieser kann 0 bis 5 stellig oder null sein.
Hier die Zeile die ich benötige/suche, in dem Fall möchte ich den Wert 286 in eine Variable schreiben:
{"tagName":"PowerConsumed","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":286}
Die Zeichenkette steht irgendwo auf der Webseite die ich mit einer URL aufrufe. Hier für euch zum Testen nur mal ein kleiner Auszug davon.
.....
{"tagName":"WorkOutFromStorage","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":57513.42330227361},"IdDevicesMap":{"tagName":"IdDevicesMap","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":{"INNER_BUFFER":["cda2a0cb-8094-4ac5-a5b4-b523cf56204b"],"INNER_CONSUMER":["urn:keba:evstation:21827223"],"POWERMETER_CONSUMPTION":["fe76fbdd-697a-4250-abd6-f7021cd8c78a"],"OUTER_CONSUMER":[],"OUTER_BUFFER":[],"POWERMETER_PRODUCTION":["fe76fbdd-697a-4250-abd6-f7021cd8c78a"],"OUTER_PRODUCER":[],"INNER_PRODUCER":["e76d46d4-0980-4c44-b39d-e3dd960f6732"]}},"StateVisibleIsSet":{"tagName":"StateVisibleIsSet","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":true},"DatePowerConsumptionForecastStart":{"tagName":"DatePowerConsumptionForecastStart","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":1666454820094},"PowerBuffered":{"tagName":"PowerBuffered","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":0},"PowerConsumed":{"tagName":"PowerConsumed","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":286},"IdInterfaceList":{"tagName":"IdInterfaceList","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":[]},"PowerBufferedFromGrid":{"tagName":"PowerBufferedFromGrid","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":0},"WorkReleased":{"tagName":"WorkReleased","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":1338287.3842312463},"PowerOut":{"tagName":"PowerOut","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":0},"WorkIn":{"tagName":"WorkIn","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":4826058.484853873},"WorkProduced":{"tagName":"WorkProduced","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":8973977.060285876},"IdName":{"tagName":"IdName","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":"Standort 1"},"WorkBufferedFromGrid":{"tagName":"WorkBufferedFromGrid","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":49148.84767118086},"StateLockedIsSet":{"tagName":"StateLockedIsSet","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":false},"WorkConsumedFromProducers":{"tagName":"WorkConsumedFromProducers","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":2007021.1032013502},"WorkOut":{"tagName":"WorkOut","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":5989648.354085953},"IdFingerPrintVersion":{"tagName":"IdFingerPrintVersion","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":0},"PowerIn":{"tagName":"PowerIn","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":272},"PowerConsumedFromStorage":{"tagName":"PowerConsumedFromStorage","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value":0},"PowerProductionForecastValues":{"tagName":"PowerProductionForecastValues","guid":"b670f751-e160-4310-918e-f32f9f3d925d","value": ......
Ich sage schon einmal vielen Dank und viele Grüße!
Value nach String auslesen
Hallo Sirius,
danke für die Info. Ich bin bei der Programmierung noch ein Neuling, könntest du mir noch etwas weiter helfen?
Ich habe die URL und erhalte als Ausgabe den Text, wie mache ich daraus ein JSON und suche über den Wörterbuchzugriff?
Sorry, wie gesagt ich fange gerade erst an mit Programmierung.
Danke und Gruß
danke für die Info. Ich bin bei der Programmierung noch ein Neuling, könntest du mir noch etwas weiter helfen?
Ich habe die URL und erhalte als Ausgabe den Text, wie mache ich daraus ein JSON und suche über den Wörterbuchzugriff?
Sorry, wie gesagt ich fange gerade erst an mit Programmierung.
Danke und Gruß
Wenn Du Den Code, den Du bisher hast, zeigen würdest, könnte man da anknüpfen, so erwartest Du, dass wir Dir das ganze Programm freihaus liefern:
Code: Alles auswählen
import requests
URL = "..."
def main():
response = requests.get(URL)
response.raise_for_status()
data = response.json()
print(data["PowerConsumed"]["value"])
if __name__ == "__main__":
main()
Hallo Sirius,
da hast du natürlich recht, ich habe die ersten Schritte ähnlich wie du gemacht:
Und ab dem Punkt kam ich nicht weiter. Ich wollte dann in "Ausgabe" nach dem String aus meinem Thread suchen. Dann habt ihr mich aufgeklärt, dass es im JSON Format ist.
Dein Code ist natürlich noch ein bisschen cleaner.
Und wie man ein JSON ausliest, wusste ich bislang nicht. Also das man es wie folgt schreiben kann.
Jetzt habe ich aber noch ein weiteres Problem. Als Ausgabe von deinem Code erhalte ich KeyError: 'PowerConsumed'
So ist der aktuelle Stand des Codes:
Habt ihr noch einen Tipp für mich?
da hast du natürlich recht, ich habe die ersten Schritte ähnlich wie du gemacht:
Code: Alles auswählen
import requests
response = requests.get("http://192.168.1.28/rest/kiwigrid/wizard/devices/PowerOutput")
Ausgabe = response.content
print(Ausgabe)
Dein Code ist natürlich noch ein bisschen cleaner.

Und wie man ein JSON ausliest, wusste ich bislang nicht. Also das man es wie folgt schreiben kann.
Code: Alles auswählen
print(data["PowerConsumed"]["value"])
Jetzt habe ich aber noch ein weiteres Problem. Als Ausgabe von deinem Code erhalte ich KeyError: 'PowerConsumed'
So ist der aktuelle Stand des Codes:
Code: Alles auswählen
import requests
URL = "http://192.168.1.28/rest/kiwigrid/wizard/devices/PowerOutput"
def main():
response = requests.get(URL)
response.raise_for_status()
data = response.json()
print(data["PowerConsumed"]["value"])
if __name__ == "__main__":
main()
Hallo Sirius,
du hattest Recht, die Struktur der Datei war umfangreicher als in meinem Beispiel zu sehen. Aber so konnte ich mich ein bisschen mit json auseinandersetzten.
Ich habe die Struktur nun angepasst und erhalte das gewünschte Ergebnis! Vielen Dank für eure Unterstützung!
du hattest Recht, die Struktur der Datei war umfangreicher als in meinem Beispiel zu sehen. Aber so konnte ich mich ein bisschen mit json auseinandersetzten.
Ich habe die Struktur nun angepasst und erhalte das gewünschte Ergebnis! Vielen Dank für eure Unterstützung!
Code: Alles auswählen
import requests
URL = "http://192.168.1.28/rest/kiwigrid/wizard/devices/PowerOutput"
def main():
response = requests.get(URL)
response.raise_for_status()
data = response.json()
print(data["result"]["items"][2]["tagValues"]["PowerConsumed"]["value"])
if __name__ == "__main__":
main()
- __blackjack__
- User
- Beiträge: 14069
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@JayJay_86: Ich würde da noch schauen ob das dritte Element von "items" irgendwie überprüfbar ist, ob das tatsächlich das gesuchte ist. Nicht das man da den Wert von einem falschen Element ausliest wenn sich da die Reihenfolge mal ändern sollte.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
- DeaD_EyE
- User
- Beiträge: 1243
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
JSON ist nicht für Menschen gedacht.
Lass dir die Ausgabe einmal formatiert ausgeben, dann hast du einen besseren Überblick:
Dann hangelst du dich von dict zu dict. Nicht zu viele Schritte aufeinmal.
PS: pprint sortiert die keys der dicts, kann man aber auch ausschalten.
Lass dir die Ausgabe einmal formatiert ausgeben, dann hast du einen besseren Überblick:
Code: Alles auswählen
import pprint
import requests
URL = "http://192.168.1.28/rest/kiwigrid/wizard/devices/PowerOutput"
def main():
response = requests.get(URL)
pprint.pprint(response.json())
if __name__ == "__main__":
main()
PS: pprint sortiert die keys der dicts, kann man aber auch ausschalten.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Hallo BlackJack,
genau der Fall den du beschreibst ist eingetreten. Die json Datei ist aus meiner SIcht wie folgt aufgebaut:
Ebene 1: dict
Ebene 2: dict
Ebene 3: list
Ebene 4: dict
Ebene 5: dict
Ebene 6: dict
Vorher habe ich einen Wert auf Ebene 3 (list) mit Listenindex 11 gefunden, nun ist aber Listenindex 0 richtig.
In dem folgenden Auszug aus der Datei sieht man noch das Merkmal "guid", dies ist eindeutig und somit würde ich zum gewünschten Wert kommen. Kann ich auch ohne den Listindex die Abfrage machen. Also quasi in allen Listen suchen. (Statt 11 oder 2 einzugeben quasi *)
Oder kann ich vorher über die "guid" rausfinden, in welcher Liste ich suchen muss? Ich hoffe ich konnte Problem beschrieben.
{
"result":{
"items":[
{
"tagValues":{
"StateLockedIsSet":{
"tagName":"StateLockedIsSet",
"guid":"urn:keba:evstation:21827223",
"value":false
Viele Grüße
genau der Fall den du beschreibst ist eingetreten. Die json Datei ist aus meiner SIcht wie folgt aufgebaut:
Ebene 1: dict
Ebene 2: dict
Ebene 3: list
Ebene 4: dict
Ebene 5: dict
Ebene 6: dict
Vorher habe ich einen Wert auf Ebene 3 (list) mit Listenindex 11 gefunden, nun ist aber Listenindex 0 richtig.
In dem folgenden Auszug aus der Datei sieht man noch das Merkmal "guid", dies ist eindeutig und somit würde ich zum gewünschten Wert kommen. Kann ich auch ohne den Listindex die Abfrage machen. Also quasi in allen Listen suchen. (Statt 11 oder 2 einzugeben quasi *)
Oder kann ich vorher über die "guid" rausfinden, in welcher Liste ich suchen muss? Ich hoffe ich konnte Problem beschrieben.
{
"result":{
"items":[
{
"tagValues":{
"StateLockedIsSet":{
"tagName":"StateLockedIsSet",
"guid":"urn:keba:evstation:21827223",
"value":false
Viele Grüße