Python新手需要一些帮助。
寻找从我的鹦鹉花盆到Domoticz的数据我找到了一个脚本,但是已经过时了。我设法得到了工作,但只有一个问题仍然存在...... :(
我有来自Parrot API的json响应,其中包含以下数据:
u 'locations': [{
u 'first_sample_utc': u '2018-01-27T18:34:59Z',
u 'air_temperature': {
u 'status_key': u 'status_ok',
u 'gauge_values': {
u 'current_value': 16.2531360227017,
u 'min_threshold': 7.0,
u 'max_threshold': 35.0
},
u 'instruction_key': u 'air_temperature_good',
u 'next_analysis_datetime_utc': None
},
u 'processing_uploads': False,
u 'user_sharing': {
u 'first_all_green': {
u 'sharing_status': u 'conditions_unmet'
}
},
u 'battery': {
u 'gauge_values': {
u 'current_value': 100,
u 'min_threshold': 0,
u 'max_threshold': 100
}
},
u 'global_validity_datetime_utc': u '2018-01-31T00:19:56Z',
u 'location_identifier': u 'kOzNaDnxWi1517078855393',
u 'watering': {
u 'status_key': u 'status_ok',
u 'automatic_watering': {
u 'next_watering_datetime_utc': u '2018-01-29T00:21:29Z',
u 'instruction_key': u 'automatic_watering_good',
u 'last_watering_datetime_utc': None,
u 'done_action_datetime_utc': None,
u 'status_key': u 'status_ok',
u 'gauge_values': {
u 'current_value': 81,
u 'min_threshold': 0,
u 'max_threshold': 100
},
u 'full_autonomy_days': None,
u 'predicted_action_datetime_utc': u '2018-01-29T00:21:30Z'
},
u 'instruction_key': u 'automatic_watering_good',
u 'soil_moisture': {
u 'status_key': u 'status_ok',
u 'gauge_values': {
u 'current_value': 64.8775787353516,
u 'min_threshold': 32.0,
u 'max_threshold': None
},
u 'instruction_key': u 'soil_moisture_good',
u 'predicted_action_vwc_value': None,
u 'predicted_action_datetime_utc': None
}
},
u 'last_sample_utc': u '2018-01-29T00:19:56Z',
u 'growth_day': False,
u 'total_sample_count': 120,
u 'light': {
u 'status_key': u 'status_ok',
u 'gauge_values': {
u 'current_value': 0.00263333333333334,
u 'min_threshold': 5.0,
u 'max_threshold': 99.0
},
u 'instruction_key': u 'light_too_low',
u 'next_analysis_datetime_utc': None
},
从json搜索和解析数据到Domoticz的代码:
for loc in status_locations:
plante=('{plant}:'.format(plant=loc2name[loc['location_identifier']].encode('utf-8')))
print plante
if plante == Nom_Plante:
print('Found Plant')
for metric in ['light', 'soil_moisture']:
data = loc[metric]
if debug!=0:
print ('############# metrics###############')
print(' {metric}:'.format(metric=metric))
#print(' instruction_key: {0}'.format(data['instruction_key']))
print('#####################################')
inst_key=format(data['instruction_key'])
status_key=format(data['status_key'])
if metric == 'light':
domoticz_idx=str(periph_idx['Plante_Lumiere_Status'])
maj_widget_alert(domoticz_idx,status_key,inst_key,battery_level)
z=data['gauge_values']
# Conversion de la valeur en Lux (1 PAR = 53.93 Lux)
valeur=z['current_value']*53.93
valeur="%.2f" % valeur
domoticz_idx=str(periph_idx['Plante_Lumiere_Valeur'])
maj_widget_texte(domoticz_idx,valeur,battery_level)
if metric == 'soil_moisture':
domoticz_idx=str(periph_idx['Plante_Humidite_Status'])
maj_widget_alert(domoticz_idx,status_key,inst_key,battery_level)
z=data['gauge_values']
valeur="%.2f" % z['current_value']
domoticz_idx=str(periph_idx['Plante_Humidite_Valeur'])
maj_widget_texte(domoticz_idx,valeur,battery_level)
搜索“light”下的数据有效,但搜索“soil_moisture”却没有。我可以看到它与'soil_moisture'在'浇水'的子项下的原因有关。但是,我怎样才能在这个脚本中搜索“soil_moisture”,就像“光”数据一样?
任何帮助都会很好......
答案 0 :(得分:0)
soil_moisture
对象是watering
对象的数据成员,而light
是顶级对象。
soil_moisture
对象需要通过watering
访问,如下所示:loc['watering']['soil_moisture']
。
答案 1 :(得分:0)
您可以更改度量标准列表以保留对象路径,而不仅仅是第一级的键。
示例:强>
更改
for metric in ['light', 'soil_moisture']:
data = loc[metric]
要强>
for metric in [loc['light'], loc["watering"]['soil_moisture']]:
print metric