sudo-萌兔化身语音助手
本帖最后由 中二点 于 2019-5-21 11:16 编辑材料清单:
1: ReSpeaker 4-Mics线性阵列套件
(https://www.seeedstudio.com/ReSp ... r-Raspberry-Pi.html)
2: Raspberry Pi 3 Model B
3: Adafruit Mono 2.5W Class D Audio Amplifier - PAM8302
(https://www.adafruit.com/product/2130)
用到的软件:
1. Snips AIR
(https://snips.ai/)
2. Home Assisant
(https://www.home-assistant.io/)
用到的机器:
1. 激光切割机(市面是普通的型号都是可以的)
项目介绍:
这是一个私人的家庭助手
市面上其实已经有很多的语音助手了,他们一般都可以在智能手机或者一些其它设备上使用。他们已经可以实现很多的功能,但他们打数据基本上都会被上传至某一个云平台上,这会让数据一直处于一种很危险的境地。但是Snips可以帮助你建立属于自己的语音助手,只让他们在设备上进行运行(除非你希望你的数据可以在网络上进行更精准的查询),树莓派会是一个很好的搭载设备用来建立属于自己的语音助手。
这是一个没有性别的语音助手:
我认为一个既不是女声也不是男声的语音助手是我认为最理想的声音。我还起了一个很中性的名字Sudo。
“- Turn on the lights-...- Sudo, turn on the lights- Okay, turning on the lights”
环保的:
"Turn off the lights, this is not Versailles"这是作者原文中的话,我认为可能是一句老人言,大致的意思就是要节约用电,记得关灯。作者认为做为成年人其实就很少会有人提醒需要及时关灯,所以他给Sudo设置了会提醒及时关灯的程序,这一点上至少它是可以帮助作者更环保的。
总结:由于该项目涉及不同的组件,因此以下是相关部分的概述:
让你的家更加的智能
一:设置Snips
首先要做的是在Raspberry Pi上安装Snips- 我用了Raspberry Pi 3 - B.我首先将最新版本的Raspbian下载并传到到SD卡上,在root过的SD卡上创建了一个名为ssh的空文件,另一个名为wpa_supplicant.conf,然后在弹出卡的期间我用了我的信用卡插在里面。完成启动后,您应该在本地网络上看到它,并且如果您使用的是Mac OS,则可以使用默认的用户名和密码(pi / rapsberry)和raspberrypi.local。之后,我按照这里给出的说明(https://docs.snips.ai/getting-started/quick-start-raspberry-pi)。
然后,您前往Snips控制台(https://console.snips.ai)创建一个新助手。 我使用的是法语,但您可以自由使用支持者中的任何一种。 我打电话给我的助手Sue-Do,并从Snips App Store 中找到了一个工具(Heure by Joseph - 可以让你询问Snips时间)。 然后您可以给助手添加技能。
为了让你的语音助手可以听到你说话并回答你,扬声器、麦克风。我外接了一个扬声器到树莓派上来完成了这个功能。
设置Home Assistant
然后按照下面的顺序找到一个文件(/home/homeassistant/.homeassistant/configuration.yaml),加上以下的代码
tradfri: host: IP_ADDRESS
连接Snips和Home Assistant
详细可见:https://www.home-assistant.io/components/snips/
mqtt:
broker: 127.0.0.1
port: 1883
https://docs.snips.ai/articles/console/actions/skills
然后在configuration.yaml 文件加上了以下代码:
snips:
feedback_sounds: true
python_script:intent_script: !include intent_script.yaml
ikealights:
speech:
type: plain
text: "OK, j'allume la lumière"
action:
- service: python_script.ikealights
data_template:
lamp_name: "{{ lamp_name }}"
lamp_name = data.get('lamp_name')
if lamp_name is not None:
logger.info("turning on lamp {}".format(lamp_name))
service_data = {'entity_id': lamp_name, 'brightness': 255 }
hass.services.call('light', 'turn_on', service_data, False)
ensor:
- platform: history_stats
name: streelight on today
entity_id: light.streetlight
state: 'on'
type: time
start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
end: '{{ now() }}'
consumption: speech: type: plain text: La lampe a passé {{ states('sensor.streetlight_on_today') }} heures allumée aujourd''hui
streelight_overuse:
trigger: - platform: numeric_state entity_id: sensor.streetlight_on_today above: 3
sequence: service: snips.say_action data: text: 'Dis, tu veux pas éteindre ta lumière ?' intent_filter: - lightsTurnOff
- platform: history_stats
name: 'streetlight on today'
entity_id: 'light.streetlight_1'
state: 'on'
type: time
start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
end: '{{ now() }}'
- platform: history_stats
name: 'streetlight on yesterday'
entity_id: 'light.streetlight_1'
state: 'on'
type: time
end: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
duration:
hours: 24
- platform: history_stats
name: 'streetlight on this week'
entity_id: 'light.streetlight_1'
state: 'on'
type: time
start: '{{ as_timestamp( now().replace(hour=0).replace(minute=0).replace(second=0) ) - now().weekday() * 86400 }}'
end: '{{ now() }}'
qds_year = queried_date_string
qds_month = queried_date_string
qds_day = queried_date_string
qds_hour = queried_date_string
qds_min = queried_date_string
qds_sec = queried_date_string
queried_date = datetime.datetime(int(qds_year),int(qds_month),int(qds_day),int(qds_hour),int(qds_min),int(qds_sec))
delta = queried_date - datetime.datetime.now()
if(delta == -1)
service_data = {'text': "La lampe a passé {{ states('sensor.streetlight_on_today') }} heures allumée ajourd'hui" }
elif(delta == -2)
service_data = {'text': "La lampe a passé {{ states('sensor.streetlight_on_yesterday') }} heures allumée hier" }
elif(delta < -2 and delta >-9)
service_data = {'text': "La lampe a passé {{ states('sensor.streetlight_on_yesterday') }} heures allumée cette semaine" }
else
service_data = {'text':"Je ne peux comprends pas cette date"}
consumption:
speech:
type: plain
text: "Je consulte mes archives, ne bouge pas"
action:
- service: python_script.consumptionhistory
data_template:
date: "{{ date }}"
homeassistant:
name: 1921
latitude: 48.8543
longitude: 2.3527
elevation: 0
unit_system: metric
time_zone: Europe/Paris
customize: !include customize.yaml
default_config:
sensor:
- platform: yr
- platform: history_stats
name: 'streetlight on today'
entity_id: 'light.streetlight_1'
state: 'on'
type: time
start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
end: '{{ now() }}'
mqtt:
broker: 127.0.0.1
port: 1883
snips:
feedback_sounds: true
python_script:
intent_script: !include intent_script.yaml
group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
#introduction:
#discovery:
原文:https://www.hackster.io/jessyjones/sudo-a-private-by-design-gender-neutral-eco-friendly-bot-bd8d85
很不错的教程,感谢编译
页:
[1]