Script verbessern
Verfasst: Sonntag 6. März 2022, 12:22
Hallo zusammen.
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.
Die Datei "Deconz_Sensoren.txt" ist als "gegeben" zu betrachten und kann von mir NICHT verändert werden!
Die Struktur der Datei "Sensoren.txt" ist ebenfalls als "gegeben" zu betrachten.
Da ich die Dateien als solches nicht hochladen kann (wahrscheinlich blind bin
- füge ich sie halt als Text (im Codeblock) ein.
Inhalt der Datei "Deconz_Sensoren.txt":
Inhalt der Datei "Sensoren.txt":
Freundliche Grüsse
Daniel
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