Das folgende Script erfüllt seinen Zweck, macht was es soll. Doch bin ich mir sicher - das es noch einiges an Verbesserungspotential gibt. Mag sich jemand die Zeit nehmen und die Mühe machen - mich an die Hand zu nehmen und mir zeigen, was ich wo verbessern kann (evtl noch erklären warum?) - Besten Dank.
Code: Alles auswählen
#!/usr/bin/python3
# Imports
import json
def f_rekursiv_wb(wb):
for k in wb.keys():
v = wb[k]
if isinstance(v, dict):
f_rekursiv_wb(v)
else:
temp_wb[k] = v
def f_schuessel_suchen(schluessel, wb):
if schluessel in wb:
return wb[schluessel]
else:
return ""
def f_check_neuer_wert(wb_wert, neuer_Wert):
if wb_wert == "":
return neuer_Wert
else:
return wb_wert
def f_list_4_string(liste):
var_1 = liste[0]
var_2 = liste[1]
var_3 = liste[2]
var_4 = liste[3]
return var_1, var_2, var_3, var_4
with open('Deconz_Sensoren.txt', 'r') as datei:
json_wb = json.load(datei)
temp_wb = {}
neues_wb = {}
for k in json_wb.keys():
f_rekursiv_wb(json_wb[k])
name = f_schuessel_suchen("name", temp_wb)
batterie = f_schuessel_suchen("battery", temp_wb)
temperatur = f_schuessel_suchen("temperature", temp_wb)
sonnenaufgang = f_schuessel_suchen("sunrise", temp_wb)
sonnenuntergang = f_schuessel_suchen("sunset", temp_wb)
if isinstance(temperatur, int):
temperatur = temperatur / 100
if name not in neues_wb.keys():
neues_wb[name] = "{}**{}**{}**{}".format(batterie, temperatur, sonnenaufgang, sonnenuntergang)
else:
temp_batterie, temp_temperatur, temp_sonnenaufgang, temp_sonnenuntergang = \
f_list_4_string(neues_wb[name].split("**"))
batterie = f_check_neuer_wert(temp_batterie, batterie)
temperatur = f_check_neuer_wert(temp_temperatur, temperatur)
sonnenaufgang = f_check_neuer_wert(temp_sonnenaufgang, sonnenaufgang)
sonnenuntergang = f_check_neuer_wert(temp_sonnenuntergang, sonnenuntergang)
neues_wb[name] = "{}**{}**{}**{}".format(batterie, temperatur, sonnenaufgang, sonnenuntergang)
temp_wb = {}
for k, v in list(neues_wb.items()):
if len(v) == 6:
del neues_wb[k]
with open ("Sensoren.txt", "w") as datei:
for k in neues_wb.keys():
datei.write("Schlüssel: {}, Werte: {}\n".format(k, neues_wb[k]))
print("Benötigte Werte in neue Datei geschrieben - Fertig!")
Die Struktur der Datei "Sensoren.txt" ist ebenfalls als "gegeben" zu betrachten.
Da ich die Dateien als solches nicht hochladen kann (wahrscheinlich blind bin

Inhalt der Datei "Deconz_Sensoren.txt":
Code: Alles auswählen
{
"1": {
"config": {
"configured": true,
"on": true,
"sunriseoffset": 30,
"sunsetoffset": -30
},
"etag": "e785e2698f497370c7c26899dcc4ea5d",
"manufacturername": "Philips",
"modelid": "PHDL00",
"name": "Sensor_1",
"state": {
"dark": true,
"daylight": false,
"lastupdated": "2022-03-02T18:50:44.399",
"status": 230,
"sunrise": "2022-03-02T06:02:19",
"sunset": "2022-03-02T17:09:01"
},
"swversion": "1.0",
"type": "Daylight",
"uniqueid": "00:21:2e:ff:ff:06:ba:a8-01"
},
"11": {
"config": {
"alert": "none",
"battery": 100,
"delay": 62,
"ledindication": false,
"on": true,
"pending": [],
"reachable": true,
"sensitivity": 2,
"sensitivitymax": 2,
"usertest": false
},
"ep": 2,
"etag": "4984f3d3835e854ca65196fe6c699dbe",
"lastannounced": "2022-02-27T19:29:09Z",
"lastseen": "2022-03-02T19:17Z",
"manufacturername": "Philips",
"modelid": "SML001",
"name": "Bewegung_1",
"state": {
"lastupdated": "2022-03-02T19:17:04.904",
"presence": false
},
"swversion": "6.1.0.18912",
"type": "ZHAPresence",
"uniqueid": "00:17:88:01:09:15:87:47-02-0406"
},
"12": {
"config": {
"alert": "none",
"battery": 100,
"ledindication": false,
"offset": 0,
"on": true,
"pending": [],
"reachable": true,
"usertest": false
},
"ep": 2,
"etag": "f9d61e8f4a9a1093a846e451fd803a5d",
"lastannounced": "2022-02-27T19:29:09Z",
"lastseen": "2022-03-02T19:17Z",
"manufacturername": "Philips",
"modelid": "SML001",
"name": "Bewegung_1",
"state": {
"lastupdated": "2022-03-02T19:15:58.262",
"temperature": 1577
},
"swversion": "6.1.0.18912",
"type": "ZHATemperature",
"uniqueid": "00:17:88:01:09:15:87:47-02-0402"
},
"13": {
"config": {
"alert": "none",
"battery": 100,
"ledindication": false,
"on": true,
"pending": [],
"reachable": true,
"tholddark": 12000,
"tholdoffset": 7000,
"usertest": false
},
"ep": 2,
"etag": "b3c2345b301003fd40ab135145b70371",
"lastannounced": "2022-02-27T19:29:09Z",
"lastseen": "2022-03-02T19:17Z",
"manufacturername": "Philips",
"modelid": "SML001",
"name": "Bewegung_1",
"state": {
"dark": true,
"daylight": false,
"lastupdated": "2022-03-02T19:17:04.919",
"lightlevel": 0,
"lux": 0
},
"swversion": "6.1.0.18912",
"type": "ZHALightLevel",
"uniqueid": "00:17:88:01:09:15:87:47-02-0400"
},
"15": {
"config": {
"battery": 98,
"group": "10",
"on": true,
"reachable": true
},
"ep": 1,
"etag": "981eb84b62cd13d3e523ffc29512cfff",
"lastannounced": "2022-02-01T09:11:53Z",
"lastseen": "2022-03-02T19:15Z",
"manufacturername": "Signify Netherlands B.V.",
"mode": 1,
"modelid": "RWL022",
"name": "Schalter_1",
"state": {
"buttonevent": 1002,
"eventduration": 1,
"lastupdated": "2022-03-01T06:22:20.055"
},
"swversion": "2.42.0_h1F5E860",
"type": "ZHASwitch",
"uniqueid": "00:17:88:01:09:26:9a:5d-01-fc00"
},
"16": {
"config": {
"battery": 95,
"group": "11",
"on": true,
"reachable": true
},
"ep": 1,
"etag": "f0b85611c64d5803b6f5a8b90f256342",
"lastannounced": "2022-01-30T21:23:12Z",
"lastseen": "2022-03-02T19:18Z",
"manufacturername": "Signify Netherlands B.V.",
"mode": 1,
"modelid": "RWL022",
"name": "Schalter_2",
"state": {
"buttonevent": 1002,
"eventduration": 0,
"lastupdated": "2022-02-27T22:45:13.063"
},
"swversion": "2.42.0_h1F5E860",
"type": "ZHASwitch",
"uniqueid": "00:17:88:01:09:26:a7:c9-01-fc00"
},
"17": {
"config": {
"battery": 100,
"devicemode": "singlerocker",
"on": true,
"pending": [],
"reachable": true
},
"ep": 1,
"etag": "a7de2ea63fbcf9097e65222b2d866041",
"lastannounced": "2022-01-31T20:19:53Z",
"lastseen": "2022-03-02T19:05Z",
"manufacturername": "Signify Netherlands B.V.",
"mode": 1,
"modelid": "RDM001",
"name": "Schalter_3",
"state": {
"buttonevent": 1002,
"eventduration": 1,
"lastupdated": "2022-02-27T18:10:39.328"
},
"swversion": "1.0.3",
"type": "ZHASwitch",
"uniqueid": "00:17:88:01:0b:01:4e:d9-01-fc00"
},
"18": {
"config": {
"battery": 100,
"devicemode": "singlerocker",
"on": true,
"pending": [],
"reachable": true
},
"ep": 1,
"etag": "6076f834e01f7d7b0b11db0b077d2815",
"lastannounced": "2022-01-22T19:59:29Z",
"lastseen": "2022-03-02T19:13Z",
"manufacturername": "Signify Netherlands B.V.",
"mode": 1,
"modelid": "RDM001",
"name": "Schalter_4",
"state": {
"buttonevent": 1002,
"eventduration": 1,
"lastupdated": "2022-03-01T21:38:01.043"
},
"swversion": "1.0.3",
"type": "ZHASwitch",
"uniqueid": "00:17:88:01:0b:01:4f:bf-01-fc00"
},
"19": {
"config": {
"battery": 100,
"devicemode": "singlepushbutton",
"on": true,
"pending": [],
"reachable": true
},
"ep": 1,
"etag": "cd461de2f815a89a95568c33166eb798",
"lastannounced": null,
"lastseen": "2022-03-02T19:12Z",
"manufacturername": "Signify Netherlands B.V.",
"mode": 1,
"modelid": "RDM001",
"name": "Schalter_5",
"state": {
"buttonevent": 1002,
"eventduration": 2,
"lastupdated": "2022-02-28T23:40:37.167"
},
"swversion": "1.0.3",
"type": "ZHASwitch",
"uniqueid": "00:17:88:01:0b:00:fe:0a-01-fc00"
},
"2": {
"config": {
"battery": 100,
"group": "3",
"on": true,
"reachable": true
},
"ep": 1,
"etag": "11c4de321368a2cec4362c5845196bd4",
"lastannounced": "2022-02-16T10:46:27Z",
"lastseen": "2022-03-02T19:15Z",
"manufacturername": "Signify Netherlands B.V.",
"mode": 1,
"modelid": "RWL022",
"name": "Schalter_6",
"state": {
"buttonevent": 4002,
"eventduration": 1,
"lastupdated": "2022-03-01T19:49:29.893"
},
"swversion": "2.42.0_h1F5E860",
"type": "ZHASwitch",
"uniqueid": "00:17:88:01:09:26:89:c2-01-fc00"
},
"20": {
"config": {
"battery": 100,
"devicemode": "singlerocker",
"on": true,
"pending": [],
"reachable": true
},
"ep": 1,
"etag": "8852c006b96d881fbd892033da9d4208",
"lastannounced": "2022-02-12T08:49:26Z",
"lastseen": "2022-03-02T19:14Z",
"manufacturername": "Signify Netherlands B.V.",
"mode": 1,
"modelid": "RDM001",
"name": "Schalter_7",
"state": {
"buttonevent": 1002,
"eventduration": 1,
"lastupdated": "2022-03-01T21:46:33.888"
},
"swversion": "1.0.3",
"type": "ZHASwitch",
"uniqueid": "00:17:88:01:0b:01:4f:bd-01-fc00"
},
"21": {
"config": {
"battery": 100,
"devicemode": "singlerocker",
"on": true,
"pending": [],
"reachable": true
},
"ep": 1,
"etag": "e5a01c07df11b2c9d4dd6a7d30892d58",
"lastannounced": "2022-02-25T18:04:56Z",
"lastseen": "2022-03-02T19:15Z",
"manufacturername": "Signify Netherlands B.V.",
"mode": 1,
"modelid": "RDM001",
"name": "Schalter_8",
"state": {
"buttonevent": 1002,
"eventduration": 1,
"lastupdated": "2022-03-01T21:40:19.243"
},
"swversion": "1.0.3",
"type": "ZHASwitch",
"uniqueid": "00:17:88:01:0b:01:49:de-01-fc00"
},
"22": {
"config": {
"on": true,
"reachable": true
},
"etag": "0edff74330cf0bdea3a574329c7449c1",
"manufacturername": "Hue Essentials",
"modelid": "Motion sensor 6 state",
"name": "Sensor_2",
"state": {
"lastupdated": "2022-03-02T11:46:28.403",
"status": 0
},
"swversion": "1.0",
"type": "CLIPGenericStatus",
"uniqueid": "lSQz45ucRBeyA7PwpPshdJsT5z5eR8jL"
},
"24": {
"config": {
"group": "20001",
"on": true,
"reachable": true
},
"ep": 2,
"etag": "7f539fa4aa8abc8bec6e8820c3e3e0e3",
"lastannounced": null,
"lastseen": "2022-03-02T19:13Z",
"manufacturername": "dresden elektronik",
"mode": 1,
"modelid": "Kobold",
"name": "Schalter_9",
"state": {
"buttonevent": 1002,
"lastupdated": "2022-03-02T19:13:40.862"
},
"swversion": "0103.10000026",
"type": "ZHASwitch",
"uniqueid": "00:21:2e:ff:ff:0a:64:b4-02-0006"
},
"27": {
"config": {
"group": "20003",
"on": true,
"reachable": true
},
"ep": 2,
"etag": "3c37286745969a452fa99427a5086a86",
"lastannounced": null,
"lastseen": "2022-03-01T21:52Z",
"manufacturername": "dresden elektronik",
"mode": 1,
"modelid": "Kobold",
"name": "Schalter_10",
"state": {
"buttonevent": 1002,
"lastupdated": "2022-03-01T21:52:58.451"
},
"swversion": "0103.10000026",
"type": "ZHASwitch",
"uniqueid": "00:21:2e:ff:ff:0a:64:bc-02-0006"
},
"28": {
"config": {
"duration": 60,
"on": true,
"reachable": true
},
"etag": "0fe3102b4998b4ca54bb41a019ef7609",
"manufacturername": "Phoscon",
"modelid": "PHOSCON_VPIR",
"name": "Sensor_3",
"state": {
"lastupdated": "2022-03-02T11:30:23.199",
"presence": false
},
"swversion": "1.0",
"type": "CLIPPresence",
"uniqueid": "vpir-1645724778030"
},
"29": {
"config": {
"on": true,
"reachable": true
},
"etag": "53338d88f932740a4b36264b0c1977f8",
"manufacturername": "Phoscon",
"modelid": "PHOSCON_FSM_STATE",
"name": "Sensor_4",
"state": {
"lastupdated": "2022-03-01T21:47:56.401",
"status": 0
},
"swversion": "1.0",
"type": "CLIPGenericStatus",
"uniqueid": "fsm-state-1645724778030"
},
"3": {
"config": {
"alert": "none",
"battery": 100,
"delay": 122,
"ledindication": false,
"on": true,
"pending": [],
"reachable": true,
"sensitivity": 2,
"sensitivitymax": 2,
"usertest": false
},
"ep": 2,
"etag": "0bce2ef074c0d840c8433060b5afe6e2",
"lastannounced": "2022-03-02T14:56:15Z",
"lastseen": "2022-03-02T19:18Z",
"manufacturername": "Philips",
"modelid": "SML001",
"name": "Bewegung_2",
"state": {
"lastupdated": "2022-03-02T19:15:45.044",
"presence": false
},
"swversion": "6.1.0.18912",
"type": "ZHAPresence",
"uniqueid": "00:17:88:01:09:15:7d:cf-02-0406"
},
"30": {
"config": {
"duration": 60,
"on": true,
"reachable": true
},
"etag": "2fbc9f27ac8994effc33745a095a9f98",
"manufacturername": "Phoscon",
"modelid": "PHOSCON_VPIR",
"name": "Sensor_5",
"state": {
"lastupdated": "2022-03-01T21:38:05.402",
"presence": false
},
"swversion": "1.0",
"type": "CLIPPresence",
"uniqueid": "vpir-1645752215866"
},
"31": {
"config": {
"on": true,
"reachable": true
},
"etag": "53d573c9b80bffba517f4be819f8fbca",
"manufacturername": "Phoscon",
"modelid": "PHOSCON_FSM_STATE",
"name": "Sensor_6",
"state": {
"lastupdated": "2022-03-01T21:38:15.401",
"status": 0
},
"swversion": "1.0",
"type": "CLIPGenericStatus",
"uniqueid": "fsm-state-1645752215866"
},
"4": {
"config": {
"alert": "none",
"battery": 100,
"ledindication": false,
"offset": 0,
"on": true,
"pending": [],
"reachable": true,
"usertest": false
},
"ep": 2,
"etag": "3cdd33630dec275d3c889308d8859d51",
"lastannounced": "2022-03-02T14:56:15Z",
"lastseen": "2022-03-02T19:18Z",
"manufacturername": "Philips",
"modelid": "SML001",
"name": "Bewegung_2",
"state": {
"lastupdated": "2022-03-02T19:18:04.390",
"temperature": 1632
},
"swversion": "6.1.0.18912",
"type": "ZHATemperature",
"uniqueid": "00:17:88:01:09:15:7d:cf-02-0402"
},
"5": {
"config": {
"alert": "none",
"battery": 100,
"ledindication": false,
"on": true,
"pending": [],
"reachable": true,
"tholddark": 12000,
"tholdoffset": 7000,
"usertest": false
},
"ep": 2,
"etag": "3cdd33630dec275d3c889308d8859d51",
"lastannounced": "2022-03-02T14:56:15Z",
"lastseen": "2022-03-02T19:18Z",
"manufacturername": "Philips",
"modelid": "SML001",
"name": "Bewegung_2",
"state": {
"dark": true,
"daylight": false,
"lastupdated": "2022-03-02T19:15:45.088",
"lightlevel": 11662,
"lux": 15
},
"swversion": "6.1.0.18912",
"type": "ZHALightLevel",
"uniqueid": "00:17:88:01:09:15:7d:cf-02-0400"
},
"6": {
"config": {
"alert": "none",
"battery": 100,
"delay": 122,
"ledindication": false,
"on": true,
"pending": [],
"reachable": true,
"sensitivity": 2,
"sensitivitymax": 2,
"usertest": false
},
"ep": 2,
"etag": "7cb3a798284e15254325148e6944fb61",
"lastannounced": "2022-03-01T03:13:22Z",
"lastseen": "2022-03-02T19:15Z",
"manufacturername": "Philips",
"modelid": "SML001",
"name": "Bewegung_3",
"state": {
"lastupdated": "2022-03-02T19:15:58.222",
"presence": false
},
"swversion": "6.1.0.18912",
"type": "ZHAPresence",
"uniqueid": "00:17:88:01:09:15:7d:f7-02-0406"
},
"7": {
"config": {
"alert": "none",
"battery": 100,
"ledindication": false,
"offset": 0,
"on": true,
"pending": [],
"reachable": true,
"usertest": false
},
"ep": 2,
"etag": "3ea882dd62b9acb7e4a2af1338abffa7",
"lastannounced": "2022-03-01T03:13:22Z",
"lastseen": "2022-03-02T19:15Z",
"manufacturername": "Philips",
"modelid": "SML001",
"name": "Bewegung_3",
"state": {
"lastupdated": "2022-03-02T19:15:23.605",
"temperature": 1504
},
"swversion": "6.1.0.18912",
"type": "ZHATemperature",
"uniqueid": "00:17:88:01:09:15:7d:f7-02-0402"
},
"8": {
"config": {
"alert": "none",
"battery": 100,
"ledindication": false,
"on": true,
"pending": [],
"reachable": true,
"tholddark": 12000,
"tholdoffset": 7000,
"usertest": false
},
"ep": 2,
"etag": "430d41efeb735728283928f1deeb0258",
"lastannounced": "2022-03-01T03:13:22Z",
"lastseen": "2022-03-02T19:15Z",
"manufacturername": "Philips",
"modelid": "SML001",
"name": "Bewegung_3",
"state": {
"dark": true,
"daylight": false,
"lastupdated": "2022-03-02T19:15:58.280",
"lightlevel": 4403,
"lux": 3
},
"swversion": "6.1.0.18912",
"type": "ZHALightLevel",
"uniqueid": "00:17:88:01:09:15:7d:f7-02-0400"
}
}
Code: Alles auswählen
Schlüssel: Sensor_1, Werte: ****2022-03-02T06:02:19**2022-03-02T17:09:01
Schlüssel: Bewegung_1, Werte: 100**15.77****
Schlüssel: Schalter_1, Werte: 98******
Schlüssel: Schalter_2, Werte: 95******
Schlüssel: Schalter_3, Werte: 100******
Schlüssel: Schalter_4, Werte: 100******
Schlüssel: Schalter_5, Werte: 100******
Schlüssel: Schalter_6, Werte: 100******
Schlüssel: Schalter_7, Werte: 100******
Schlüssel: Schalter_8, Werte: 100******
Schlüssel: Bewegung_2, Werte: 100**16.32****
Schlüssel: Bewegung_3, Werte: 100**15.04****
Daniel