作为homie-pythom实现的一部分,以下代码:
def isValidId(idString):
"""Validate device Id."""
logger.debug("isIdFormat")
if isinstance(idString, str):
r = re.compile('(^(?!\-)[a-z0-9\-]+(?<!\-)$)')
return True if r.match(idString) else False
从json文件读取了idString的位置,应为“碗柜”
print("Loading Config:" + configfile)
config = homie.loadConfigFile(configfile)
device = homie.Device(config)
config是字典:
{
"DEVICE_ID": "cupboard",
"DEVICE_NAME": "cupboard",
}
在使用配置创建homie.Device对象后,DEVICE_ID将通过该字符串帮助器函数传递,该函数将判定它无效。
我在模块中重新创建了相同的代码:
print("Loading Config:" + configfile)
config = homie.loadConfigFile(configfile)
device = homie.Device(config)
print(config)
print("Config ID: " + config["DEVICE_ID"] + " Device Object iD:" + device.deviceId)
if device.deviceId != config["DEVICE_ID"]:
print("homie.helpers.isValidId:")
print(homie.helpers.isValidId(config["DEVICE_ID"]))
print("isinstance(config['DEVICE_ID']:")
print(isinstance(config["DEVICE_ID"], str))
if isinstance(config["DEVICE_ID"], str):
r = re.compile('(^(?!\-)[a-z0-9\-]+(?<!\-)$)')
print(r.match(config["DEVICE_ID"]))
我在哪里得到以下信息:
{u'DEVICE_ID': u'cupboard', u'DEVICE_NAME': u'cupboard'}
Config ID: cupboard Device Object iD:b827ebf8fa72
homie.helpers.isValidId:
None
isinstance(config['DEVICE_ID']:
False
您可以看到isInstance(config ['DEVICE_ID'],str)得到了错误。 我认为这是我问题的症结所在.....为什么会这样?
此代码在rwspberry pi上的python 3.7上。
即使是在python中本地执行的操作也一样:
>>> import homie
>>> config = homie.loadConfigFile('sensorconfig/homie-dht-raspups.json')
>>> print config
{u'DEVICE_ID': u'cupboard', u'DEVICE_NAME': u'cupboard'}
>>> print(isinstance(config["DEVICE_ID"], str))
False
是u橱柜吗?