Skip to content

Instantly share code, notes, and snippets.

@willwhui
Last active November 26, 2017 10:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save willwhui/d251ac2413105162817782eb21158b52 to your computer and use it in GitHub Desktop.
Save willwhui/d251ac2413105162817782eb21158b52 to your computer and use it in GitHub Desktop.
Hass.io on Raspberry Pi 3 B
@willwhui
Copy link
Author

willwhui commented Oct 16, 2017

搞一个树莓派3,按照官网指示进行安装。
将烧制好的TF卡插入树莓派之前,可以在电脑上直接打开TF卡上的/wifisystem-connections/resin-sample文件设置wifi
设置过程相当简单,将文件中如下被箭头标注的地方改一改就好了:

[connection]
id=resin-wifi
type=wifi

[wifi]
hidden=true <--- 我的wifi是不隐藏的,所以把这里改成false,不知道有没有必要
mode=infrastructure
ssid=My Awesome Wifi Ssid <--- 我的wifi的名字,注意:Pi3不支持wifi 5G网络

[ipv4]
method=auto

[ipv6]
addr-gen-mode=stable-privacy
method=auto

[wifi-security]
auth-alg=open
key-mgmt=wpa-psk
psk=super_secret_wifi_password <--- 我的wifi的密码

其他的地方没改。
然后把TF卡插好,给机器加电。
过一会儿访问
就可以看到网页界面了。
此时的界面是显示“系统正在升级,大概需要20分钟”这样的消息。
去干了点别的,再看这个界面,就发现已经进入系统了。
自动识别了我的google home和chrome cast,蛮神奇的 :o

修改configuration.yaml等配置文件时,如果改错了东西,并且在界面中reload了,会导致界面显示加载配置文件失败。
此时如果改为正确的模式,依然可能会reload失败,无效果。
这种情况下,需要重新启动树莓派,不然没法继续了。

  • 问题:怎么才能控制google home呢?
  • 问题:怎么才能控制小米插座普通版关机和开机?
    如果想在小米的平台利用这个插座的定时关闭拨号modem,并且隔段时间再开启,是不可能的:此插座基于云端,断网之后后续设定场景就无效了!

@willwhui
Copy link
Author

willwhui commented Oct 18, 2017

修改yaml文件导致hassio.local:8123,smb,ssh都不可访问

  • 起因:

    1. 昨天在configuration.yaml中做实验,增加了一个radom sensor。
      我给它命名是 name:random1
      成功配置之后,可以看到它在state里面的entry id 是sensor.random1
      接着填充了group.yaml文件,在里面设定了一个group,引用了sensor.random1
    2. 今天抱着我不入地狱谁入地狱的大无畏精神,我改了一下random senser的name:改成“random 1”(在1前面加了个空格)。
      我想看看entry id是不是来自这个"name"属性,会不会自动将空格转为下划线之类的。
      并且这次修改“random 1”的时候故意没有修改这个文件,看看会导致什么错误。
      同时还改了configuration.yaml的http部分,设置了一个密码,心想着这个应该不会有什么问题。
  • 结果:
    重启之后进不了hassio.local:8123页面。
    连smb,ssh都坏掉了!
    根据经验,是yaml文件不对头,导致hass不能正常启动了。
    以前都只是网页起不来,这次smb和ssh都访问不了了,改不了yaml文件了。
    必须得想办法可以再访问到yaml文件进行修改。
    否则就得重装了。

经过摸索,采用以下办法:

给树莓派断电,把TF卡拔下来,用读卡器接在电脑上查看(我是ubuntu)。
嗯,还好,可以看到电脑上识别出4个usb存储设备。(不过我记得之前刷卡完成的时候,只会有1个的?)
选择resin-data存储设备,在目录resin-data/homeassistant/中有我们需要修改的那些.yaml文件。
以我的情况为例:
** groups.yaml是我改过的内容,我注释了里面的东西。
** configuration.yaml居然被清空了,是0字节。需要填充正确的内容进行恢复(下面有正确的内容)
把TF卡插回去,加电。

其实经过后面的折腾后,我后来觉得如果树莓派启动完成后,http://hassio.local:8123 页面刷不出来,其实不要太着急,等3分钟等它启动完也许就好了。
然而我当时并不能先知先觉。。。

因为当时没有经验,所以我加电后马上手脚麻利地ping树莓派的ip。
一旦ping通,我就开始刷http://hassio.local:8123,几下没刷出来,我就认为还是没启动成功。
于是又继续下面的操作了。
(我现在想,是不是这个问题的根源就是我在重启树莓派后,在hass.io还没启动完成的时候,就给树莓派断电导致的)

总之,再一次断电树莓派,然后在电脑上打开TF卡。
在resin-state存储设备上发现有一个文件"remove_me_to_reset",在命令行删掉:
sudo rm /media/username/resin-state/remove_me_to_reset
不得不使用命令行,因为这个文件是写保护的。

现在,又一次重新插入TF卡到树莓派,加电。
还是没法访问http://hassio.local:8123/
没辙了。
这时候我终于想:也许是它启动的实在太慢?
干脆死马当活马医,多等几分钟吧。

于是过了几分钟,访问http://hassio.local:8123/成功了!
所以我也不知道删除上面那个"remove_me_to_reset"是不是有必要的了。
汗。

那么,为什么我早没想到呢要多等几分钟呢?
因为:
在上面文字记录中,我省掉了n次尝试在configuration.yaml写入必要的正确的内容的过程。
而只要yaml内容不对,一定是不能启动成功的。
我只能断电拔卡在电脑上找到home-assistant.log文件,看失败的原因。
所以,我在之前无法很好的判断hass.io是不是正确启动了——等了也是白等。

好了,已经到了这里了,总算基本恢复正常了。
如果发现smb和ssh不能访问,那么需要进入hass.io的addon页面去看看。
我发现这两个addon被停止了,莫非是"remove_me_to_reset"导致的?
重新启动它们就好了。

用于恢复的configuration.yaml文件

这里有一份完整的,但不是hass.io自带的:https://github.com/devdelay/home-assistant-config/blob/master/configuration.yaml
在Q群7533213中找到“沉睡的先行者”上传的一个配置文件,删除掉多余的部分之后,如下(注释写的挺好的,我就不删了):

homeassistant:
  # 下面这些内容是老高给初学者提供的一个“范例文件”,更多的玩法请访问home-assistant.io,或者等后续的帖子
  # 这是你给智能家居系统起的名字
  name: HomePi
  # 下面填入纬度和经度,用于计算你所在城市的“日出日落时间”,请认真填写,越精确越好!
  latitude: 32.87336
  longitude: 117.22743
  #  海拔高度用于修正天气参数和日出日落时间参数 (认真填写,默认单位是:米)
  elevation: 37
  # 度量衡单位制式(metric)是公制,(imperial)是英制
  unit_system: metric
  # 时区,请参照: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones,一般不需要修改
  time_zone: Asia/Chongqing
    
# 在网页界面的首页显示简介(那一大段E文),不想看到的话,请在前面加上#号
introduction:

# 是否使用默认的“首页”
frontend:

http:
  # 给系统网页的登录加上一个密码 (推荐!),先去掉下面这行的#号,然后把PASSWORD改成你想要的密码
  #api_password: 5566

# 升级提示,当HomeAssitant有新版本发布的时候,“日出日落”图标会变成(Update)字样
updater:

# 系统自动发现新的设备
discovery:

# Allows you to issue voice commands from the frontend in enabled browsers
conversation:

# 在系统数据库中保存“历史数据”
history:

# 在logbook查看所有的“已发生事项”
logbook:

# 太阳“跟踪器”,也就是“日出日落时间”
sun:

恩,最后我不得不说,hass.io的稳定性有点差。

不过,不知道为什么侧边栏的configuration栏目不再显示了

在configuration.yaml中增加"config:"即可
来源:https://www.reddit.com/r/homeassistant/comments/6q88ef/default_hassio_config_file/
config: #for the config component + panel
automation: #for the automation component + panel
hassio: #for the Hassio component + panel

还有,上面的那个改name的实验:

经过实验:name指定的字符串如果有空格的话,作为Entity ID使用的时候,系统会自动将空格转换为下划线。
比如如果我们定义了这样的:

sensor:
  - platform: random
    name: random 1

那么在state里面看到的Entity ID就是“sensor.random_1”

@willwhui
Copy link
Author

willwhui commented Oct 18, 2017

addon Configurator

一个web方式运行的配置文件修改器,安装后的默认入口是http://hassio.local:3218/
必须在它的配置页中设置password,否则不能运行。
运行后,点击界面左上角的文件夹图标,可以打开我们想要编辑的yaml文件。
这里是它的说明:https://home-assistant.io/addons/configurator/
这其中还提到了如何添加到Panel(侧边栏)去,结合参考:https://home-assistant.io/components/panel_iframe/

特殊用途

这个 Configurator很有意思,当我改错了配置文件,进不了http://hassio.local:8123的时候,如果预先打开了它的页面没有关闭,我还是可以访问机器里所有的文件并进行修改的。
只不过改了之后,选择它右上角菜单里的restart hass,没有效果。
但至少可以看log,知道上次启动失败的原因。
还可以执行命令,比如命令行启动ssh:/usr/sbin/sshd -D -e (待测试)

@willwhui
Copy link
Author

hass的架构说明

在这里,值得一看:https://home-assistant.io/developers/

@willwhui
Copy link
Author

willwhui commented Oct 20, 2017

奇怪的bug

不知道什么原因,每次重启设备之后,addon并不按照预期的设定进行自动启动。
导致每次都要手动启动ssh,smb,configurator
很过分。。。

设置.ssh/authorized_keys之后,总是被清空,

看来必须在SSH插件里面放置公钥

并且再也无法通过在boot分区修改配置文件的方法成功配置wifi了

根据上面的情况来看,通过ssh配置也是不靠谱的,因为会清空

因此暂时放弃hass.io直接用原生的hass

根据 https://community.home-assistant.io/t/setup-ssh-but-sudo-not-found/25291/2 这里的讨论来看:

So the only real way to change anything is to add hass.io4 add-ons and changing you config.yaml file.

只能通过add-on和*.yaml来改变hass.io的行为。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment