Python新手需要帮助。
寻找从我的鹦鹉花盆数据到Domoticz我找到了一个脚本,但已经过时了。我设法得到的是工作,但只剩下一个问题.:(
我有一个来自鹦鹉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‘的工作在这个脚本中像’光明‘的数据?
任何帮助都很好..。
发布于 2018-01-29 07:28:40
您可以更改度量列表以保存对象路径,而不仅仅是第一级的键。
示例:
Change
for metric in ['light', 'soil_moisture']:
data = loc[metric]到
for metric in [loc['light'], loc["watering"]['soil_moisture']]:
print metric发布于 2018-01-29 02:13:26
soil_moisture对象是watering对象的数据成员,而light是顶级对象。
soil_moisture对象需要通过watering访问,如:loc['watering']['soil_moisture']。
https://stackoverflow.com/questions/48493135
复制相似问题