Seite 1 von 1

Einezelne Werte aus JSON-String lesen

Verfasst: Samstag 21. Januar 2017, 10:47
von phischmi
Hallo zusammen,
ich bin noch blutiger Python-Anfänger und habe daher eine vermutlich simple Frage :roll:
Ich habe die lib PyTado installiert um diverse Werte meiner Tado-Thermostatsteuerung auslesen zu können.
Die lib beinhaltet die Funktion getState(), welche mir den folgenden JSON-String ausgibt:

Code: Alles auswählen

{
	"overlay": null, "activityDataPoints": {
		"heatingPower": {
			"timestamp": "2017-01-20T22:22:23.040Z", 
			"percentage": 0.0, 
			"type": "PERCENTAGE"
		}
	}, 
	"tadoMode": "HOME", 
	"preparation": null, 
	"overlayType": null, 
	"link": {
		"state": "ONLINE"
	}, 
	"geolocationOverride": false, 
	"geolocationOverrideDisableTime": null, 
	"sensorDataPoints": {
		"insideTemperature": {
			"fahrenheit": 65.39, 
			"timestamp": "2017-01-20T22:27:12.467Z", 
			"celsius": 18.55, 
			"type": "TEMPERATURE", 
			"precision": {
				"fahrenheit": 1.0, 
				"celsius": 1.0
			}
		}, 
		"humidity": {
			"timestamp": "2017-01-20T22:27:12.467Z", 
			"percentage": 32.8, 
			"type": "PERCENTAGE"
		}
	}, 
	"setting": {
		"type": "HEATING", 
		"temperature": {
			"fahrenheit": 64.4, 
			"celsius": 18.0
		}, 
		"power": "ON"
	}
}
Besonders interessiert mich der Wert hinter "tadoMode" (in diesem Fall "HOME"). Diesen möchte ich zur Anwesenheitserkennung in Domoticz weiter verwenden.
Um an den entsprechenden Wert zu kommen, habe ich nun folgendes probiert:

Code: Alles auswählen

>>> from pytado.interface import Tado
>>> t = Tado('XXX', 'XXX')
>>> tado_json = json.loads(t.getState(zone=1))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'json' is not defined
Wie muss der Code aussehen, um den JSON-String in ein Python Dictionary zu laden, um die einzelnen Werte ansprechen zu können?

Vielen Dank für eure Hilfe!

Philipp

Re: Einezelne Werte aus JSON-String lesen

Verfasst: Samstag 21. Januar 2017, 11:21
von Dav1d
Du musst das JSON-Modul auch importieren `import json`.

Re: Einezelne Werte aus JSON-String lesen

Verfasst: Samstag 21. Januar 2017, 17:43
von phischmi
Oh Mann... :roll:
Hatte in meinen vorherigen Versuchen natürlich json ebenfalls importiert, dann aber im obigen Beispiel vergessen und nicht auf die Fehlermeldung geachtet... Sorry!

Wenn ich json importiere erscheint die folgende Meldung:

Code: Alles auswählen

>>> tado_json = json.loads(t.getState(zone=1))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
Wo liegt mein Fehler?

Re: Einezelne Werte aus JSON-String lesen

Verfasst: Samstag 21. Januar 2017, 18:18
von BlackJack
@phischmi: Die Fehlermeldung sagt ``t.getState(zone=1)`` ist weder eine Zeichenkette noch ein `buffer`. Also was ist das denn?

Re: Einezelne Werte aus JSON-String lesen

Verfasst: Samstag 21. Januar 2017, 21:44
von phischmi

Code: Alles auswählen

print t.getState(zone=1)
gibt mir den im ersten Post erwähnten JSON-String aus :K

Re: Einezelne Werte aus JSON-String lesen

Verfasst: Samstag 21. Januar 2017, 22:30
von BlackJack
@phischmi: Wenn dem so wäre, dann käme die Fehlermeldung nicht. Welchen Typ hat das tatsächlich?

Re: Einezelne Werte aus JSON-String lesen

Verfasst: Samstag 21. Januar 2017, 23:31
von phischmi
Habe mir grad den Code von pyTado genauer angesehen. Der Rückgabewert von getState() ist bereits ein Dictionary. Trotzdem danke für Hilfe. Wäre da alleine vermutlich nicht drauf gekommen... :roll: