无法通过 flask-ask 使用 Alexa Show 显示文本输出
Unable to display text output with Alexa Show via flask-ask
所以我在 Python 中构建了一个自定义池控制系统。然后我使用 Flask-ask 将其与我的 Echo Dots and Show 集成。在 Echo Show 中,我使用的是 simple_card 格式,它可以在屏幕上显示我的所有信息时读回它:
@ask.intent("GetAllStats")
def get_pool_stats():
pool_current_ph = read_database("pool_chemicals", "pool_current_ph")
pool_current_orp = read_database("pool_chemicals", "pool_current_orp")
pool_current_temp = int(float(read_database("system_status", "pool_current_temp")))
pool_level_percentage = read_database("pool_level", "pool_level_percentage")
pic = 'https://richard.mydomian.net/pool_control.jpg'
msg = render_template('our_stats', temperature=pool_current_temp,
ph=pool_current_ph,
orp=pool_current_orp,
level=pool_level_percentage)
return statement(msg).simple_card(title='Pool Control', content='Pool Temperature: {0}\n Pool PH: {1}\n Pool ORP: {2}\n Water Level: {3}% .format(pool_current_temp,pool_current_ph,pool_current_orp,pool_level_percentage))
这是我的 our_stats 来自我的 templates.yaml:
our_stats: |
<speak>
The pool temperature is currently {{temperature}} degrees. The P H of our pool water is currently {{ph}}, while our oxygen reduction potential
is right at {{orp}}. The level of our water is at {{level}} percent.
</speak>
效果很好,但我没有任何字体控件(我能找到)并且背景总是灰色的。
所以我开始使用 display_render
方法进行研究,我能够让它为我的游泳池制作一张非常漂亮的背景图片,并且仍然可以回读我的统计数据,但现在我无法将其用于以印刷形式显示信息。
我将上面的 return statement
更改为:
return statement(msg).display_render(template='BodyTemplate3', title='Pool Control', background_image_url=pic)
同样,这很好用并读回了我的信息,但我尝试通过 textContent
、primaryText
、content
或 [=18= 将任何内容传递给它] 总是失败。我还尝试了各种模板,包括 BodyTemplate
和 listTemplate
。都无济于事。每当我尝试向屏幕添加内容时,技能都会失败。我删除了内容,得到了一张绝妙的图片,它会告诉我所有信息,但这是我所能得到的。
其中一个主要问题是,除了 simple_card。
,我无法找到任何使用 Flask-Ask 和 Echo Show 的相关示例。
我希望有人已经解决了这个问题并能为我指明正确的方向。
您必须编辑您的 flask-ask models.py。
在方法display_render中删除:
,
'textContent': 文字
变化:
def display_render(self, template=None, title=None, backButton='HIDDEN', token=None, background_image_url=None, image=None, text=None, hintText=None):
至:
def display_render(self, template=None, title=None, backButton='HIDDEN', token=None, background_image_url=None, image=None, text=None, format=None, hintText=None):
并在后面添加:
if background_image_url is not None:
directive[0]['template']['backgroundImage'] = {
'sources': [
{'url': background_image_url}
]
}
这个:
if format == None:
format = 'PlainText'
if text is not None:
directive[0]['template']['textContent'] = {
'primaryText': {
'type': format,
'text': text
},
'secondaryText': {
'type': format,
'text': None
},
'tertiaryText': {
'type': format,
'text': None
}
}
现在您应该可以使用:
display_render(template='BodyTemplate6', title='Pool Control', background_image_url=pic, text='Text', format='Format')
我这里使用的是BodyTemplate6,因为有些模板不支持文本,格式可以是'PlainText'或者'SSML'
所以我在 Python 中构建了一个自定义池控制系统。然后我使用 Flask-ask 将其与我的 Echo Dots and Show 集成。在 Echo Show 中,我使用的是 simple_card 格式,它可以在屏幕上显示我的所有信息时读回它:
@ask.intent("GetAllStats")
def get_pool_stats():
pool_current_ph = read_database("pool_chemicals", "pool_current_ph")
pool_current_orp = read_database("pool_chemicals", "pool_current_orp")
pool_current_temp = int(float(read_database("system_status", "pool_current_temp")))
pool_level_percentage = read_database("pool_level", "pool_level_percentage")
pic = 'https://richard.mydomian.net/pool_control.jpg'
msg = render_template('our_stats', temperature=pool_current_temp,
ph=pool_current_ph,
orp=pool_current_orp,
level=pool_level_percentage)
return statement(msg).simple_card(title='Pool Control', content='Pool Temperature: {0}\n Pool PH: {1}\n Pool ORP: {2}\n Water Level: {3}% .format(pool_current_temp,pool_current_ph,pool_current_orp,pool_level_percentage))
这是我的 our_stats 来自我的 templates.yaml:
our_stats: |
<speak>
The pool temperature is currently {{temperature}} degrees. The P H of our pool water is currently {{ph}}, while our oxygen reduction potential
is right at {{orp}}. The level of our water is at {{level}} percent.
</speak>
效果很好,但我没有任何字体控件(我能找到)并且背景总是灰色的。
所以我开始使用 display_render
方法进行研究,我能够让它为我的游泳池制作一张非常漂亮的背景图片,并且仍然可以回读我的统计数据,但现在我无法将其用于以印刷形式显示信息。
我将上面的 return statement
更改为:
return statement(msg).display_render(template='BodyTemplate3', title='Pool Control', background_image_url=pic)
同样,这很好用并读回了我的信息,但我尝试通过 textContent
、primaryText
、content
或 [=18= 将任何内容传递给它] 总是失败。我还尝试了各种模板,包括 BodyTemplate
和 listTemplate
。都无济于事。每当我尝试向屏幕添加内容时,技能都会失败。我删除了内容,得到了一张绝妙的图片,它会告诉我所有信息,但这是我所能得到的。
其中一个主要问题是,除了 simple_card。
,我无法找到任何使用 Flask-Ask 和 Echo Show 的相关示例。我希望有人已经解决了这个问题并能为我指明正确的方向。
您必须编辑您的 flask-ask models.py。
在方法display_render中删除: , 'textContent': 文字
变化:
def display_render(self, template=None, title=None, backButton='HIDDEN', token=None, background_image_url=None, image=None, text=None, hintText=None):
至:
def display_render(self, template=None, title=None, backButton='HIDDEN', token=None, background_image_url=None, image=None, text=None, format=None, hintText=None):
并在后面添加:
if background_image_url is not None:
directive[0]['template']['backgroundImage'] = {
'sources': [
{'url': background_image_url}
]
}
这个:
if format == None:
format = 'PlainText'
if text is not None:
directive[0]['template']['textContent'] = {
'primaryText': {
'type': format,
'text': text
},
'secondaryText': {
'type': format,
'text': None
},
'tertiaryText': {
'type': format,
'text': None
}
}
现在您应该可以使用:
display_render(template='BodyTemplate6', title='Pool Control', background_image_url=pic, text='Text', format='Format')
我这里使用的是BodyTemplate6,因为有些模板不支持文本,格式可以是'PlainText'或者'SSML'