欢迎

天猫精灵接入HomeAssistant【智能家居技能接入】

最近随着天猫精灵的铺开,很多人会问,天猫精灵支持连接小米设备吗,天猫精灵能控制小米网关吗?答案是无法直接控制,因为小米毕竟不会把自己的设备开放给小爱的直接竞争对手天猫精灵,如果开放了,小爱以后怎么在圈里混?
但是!!可以间接控制,通过 天猫精灵–HomeAssistant–小米设备,完成控制。

先放视频吧:

视频打不开的自己点视频链接看吧

 

写在前面,方案有几个硬性要求:
1.homeassistant公网可以访问
2.搭建公网可访问的https的oauth2服务(个人认为这里难度对较高)
3.搭建公网可访问的网关服务器,将天猫开放平台的语义转换成HA的api,代理调用HA。
4.该方式目前只能自己搭自己用(技能只能在测试状态,无法发布)


什么?? 2、3这两个条件都没有?那你的 HomeAssistant能不能在公网访问?如果只有1的话也能接入了!瀚思彼岸论坛官方技能’Hass智能’已在天猫精灵平台中发布!!

你只需要:

1.注册并登陆瀚思彼岸论坛,然后在这里 编辑你的HomeAssistant信息。

输入hass地址时,一定要带上 http:// 或者 https:// ,还有端口号!否则可能控制不了!!格式如:http://hass.test.com:8123

2.在这里维护你的设备列表。如果添加时超时,请检查您前面配置的域名和密码是否正确。

3.在天猫精灵APP,点击“我的”> “智能家居”> 点右上角 + 号 > 找到“HASS智能”,选择’HASS智能’点击绑定账号,登陆瀚思彼岸论坛账号即可!绑定后在你的设备列表里即会出现第二部中你添加过的设备列表了!

(瀚思彼岸是目前国内最大的HomeAssistant技术交流论坛,在上面可以找到各路大佬助你入坑HomeAssistant!!)

有问题,可以微博留言:https://weibo.com/ttarticle/p/show?id=2309404214308207761132

关注转发就是支持,谢谢!!

4.如果你自己有能力搭建服务,不希望将自己的ha账号托管给论坛,那么请继续往下看,自助搭建的方案也可以帮助你完成HomeAssistant接入天猫精灵。

 


 

下面的文章部署方案里我 2、3两个搭在一起,使用PHP完成,可以用任意语言替换。由于2、3难度较高,对没有代码能力且不理解oauth2的人来说属于修仙教程。 但是如果你跟我有一样的php+mysql环境,那就不会很复杂,直接复制我的代码,然后修改自己的设备列表即可!!

当然,这么接入我认为也有一些好处:
1.以智能家居技能接入,不用在天猫精灵里另起技能名字,直接调用。
2.完完全全的接入,正规渠道,稳定可控。
3.能做到什么完全不受限制,全看天猫精灵的家居技能做到什么程度。

先发一张简图

最近更新了一部分代码,部署操作步骤有简化已更新至微博:

https://weibo.com/ttarticle/p/show?id=2309404195482120392395

 

php搭建Oauth2:(我这里是用php 5.2版本,所以用了这个develop版,5.3以上版本可以使用主干分支)
https://github.com/bshaffer/oauth2-server-php/blob/php5.2-develop/README.md

个人建议学习一下oauth的流程,当然不学也可以,直接在你的网站根目录执行
git clone https://github.com/bshaffer/oauth2-server-php.git -b php5.2-develop
下载后目录里会有一个oauth2-server-php文件

下载好后按https://github.com/bshaffer/oauth2-server-php/blob/php5.2-develop/README.md 提示去执行建表操作

然后再新建账号和密码(XXXXXXclientid、XXXXXXsecret自己随便设,要记住后面填到天猫开放平台里)

INSERT INTO oauth_clients (client_id, client_secret, redirect_uri) VALUES ("XXXXXXclientid", "XXXXXXsecret", "https://open.bot.tmall.com/oauth/callback");

其他PHP文件也同样放到网站根目录,详见 https://github.com/c1pher-cn/tmall-bot-x1

最后的根目录的文件列表
aligenies_request.php authorize.php gate.php homeassistant_conf.php oauth2-server-php server.php token.php

请按照你自己的数据库配置修改 server.php
请按照你自己的homeassistant配置修改homeassistant_conf.php

如果没什么问题的话就可以在天猫开放平台里新建技能了 https://open.bot.tmall.com
技能类型选择智能家居,上传图片和一些描述(因为技能无法发布,这里传什么你随意)
账户授权链接 https://yourhost.com/authorize.php
ClientID XXXXXXclientid
Client Secret XXXXXXsecret
Access Token URL https://yourhost.com/token.php
开发者网关地址 https://yourhost.com/gate.php


配置好了之后点击下一步,真机测试下面点开启真机测试,之后就可以在下放看到H5的配置页面。

点击账户配置,会跳转到之前配置的账户授权连接 https://yourhost.com/authorize.php
当然,我这里写的非常简单,只做了一个确认按钮。

授权成功之后,天猫平台会凭着code跳转到
https://yourhost.com/token.php

凭借code获得token后即表示授权成功,天猫平台会直接向网关页面发起一条查询请求。
https://yourhost.com/gate.php
{“header”:{“messageId”:”97976e7a-73ff-4e70-870d-3df4ee2d8fb8″,”name”:”DiscoveryDevices”,”namespace”:”AliGenie.Iot.Device.Discovery”,”payLoadVersion”:1},”payload”:{“accessToken”:”*******”}}

根据DiscoveryDevices请求,我们返回DiscoveryDevicesResponse
完成响应,如果成功这个时候就可以在天猫平台真机测试的地方或者手机天猫精灵客户端看到自己新增的设备了
目前设备列表是人工写死的,我并没有做查询,需要你修改成自己的设备列表,在gate.php第19行开始的json数据(我给出了light、switch、media_player的例子,按样子改成自己的设备id即可,虽然代码里写了sensor,但是目前天猫精灵支持的不是特别好,我没研究明白咋读取数据),

如果想加入其它设备,具体的协议,和设备别名请严格按照文档来,如果配置错误可能导致你的设备不会显示在设备列表中
http://doc-bot.tmall.com/docs/doc.htm?spm=0.0.0.0.LCUthD&treeId=393&articleId=107454&docType=1

gate.php里的控制命令主要就是天猫平台跟网关进行通信,然后网关翻译给HomeAssistant API
https://home-assistant-china.github.io/developers/rest_api/

目前代码支持HA里三个种类 switch、light、media_player 前缀设备的打开、关闭和他们电源状态查询,其他操作不支持。注意:
deviceId、deviceType、deviceName这三个必须严格按要求写,deviceId 对应Ha中的设备id,如light.gateway_light_34ce008dc8c3
deviceType、deviceName则必须按天猫开放平台的格式填写(这里的类型只是用来给天猫精灵归类,不必和HA中的种类对应,楼主建议实际控制什么就用什么名字,比如你再Ha里可能是一个switch.XXXXX插座,但实际控制的是电视机,那这里的deviceType就要按电视机填,television,deviceName填电视),你的是电视就到下面的列表里查电视的deviceType填什么,还有支持的名字有哪些
deviceType请见

按照deviceType 去选择对应的 deviceName,可选的列表见下面url
https://open.bot.tmall.com/oauth/api/aliaslist

进阶篇,群晖DSM 非docker部署homebridge

看了homebridge的介绍,觉得很给力有木有,拉低接入homekit的成本有木有?
但是问题来了,我的群晖不支持docker怎么办?
市面上所有的文档都是群晖docker部署,或者是树莓派部署?
有群晖为什么还要单独买一个树莓派??多此一举嘛,所以,没有docker的同学们赶快上车了!!!
首先我说一句用的是ds261j, 看到这里同款的苦于没有docker的同学们,激不激动?
1.部署chroot
2.安装基础软件
3.安装homebridge及相关插件
4.常用插件
5.群晖后台启动

有问题微博联系 http://weibo.com/1147593092/profile

1.部署chroot
参考树莓派的部署方案,首先群晖要能装软件,但群晖套件里就只有那么几个软件,查阅各种资料之后发现了群晖可以按下面的方式安装第三方套件,而且套间里有牛逼的debian chroot,
群晖安装 apt-get

登录到DSM—“套件中心”—“设置”—“套件来源”—点击“新增”

在弹出的界面中填入以下地址,并确定。
这样第三方套件地址就添加好了

安装debian chroot

 

ssh到启动自己的nas上,执行:
sudo /var/packages/debian-chroot/scripts/start-stop-status chroot

懂的人后面应该就不用我说了,哈哈。

 

2.chroot装好后那我们就可以正式的安装homebridge基础 环境了

安装基础依赖的软件,另外由于我们是通过chroot环境安装基础软件,所以后续所有安装执行操作都要在chroot环境下完成,启动脚本除外,执行下面的命令就可以切换到root环境:

sudo /var/packages/debian-chroot/scripts/start-stop-status chroot

 切换到root后执行基础软件的安装

apt-get update
apt-get install libavahi-compat-libdnssd-dev
apt-get install avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev
apt-get install update-alternatives
apt-get install git make
apt-get install g++

安装nodejs,这里我是下载的最新的nodejs 8.0.0,由于我的系统是群晖armv7,所以安装下面的版本,其他版本请在node官网上找对应版本。

wget https://nodejs.org/dist/v8.0.0/node-v8.0.0-linux-armv7l.tar.gz
tar xJvf node-v6.11.0-linux-armv7l.tar.xz
sudo mkdir -p /volume1/@appstore/debian-chroot/var/chroottarget/opt/node/
sudo mv node-v6.11.0-linux-armv7l/* /volume1/@appstore/debian-chroot/var/chroottarget/opt/node/
sudo /var/packages/debian-chroot/scripts/start-stop-status chroot
update-alternatives --install "/usr/bin/node" "node" "/opt/node/bin/node" 1
update-alternatives --install "/usr/bin/npm" "npm" "/opt/node/bin/npm" 1

安装python


apt-get install python2.7
export PYTHON=/usr/bin/python2.7

 

3.安装homebridge


npm install -g --unsafe-perm hap-nodejs
npm install -g --unsafe-perm node-gyp
npm install -g --unsafe-perm homebridge

 

期间遇到的各种错误,及其解决方案:

未找到python执行文件,需要将你的python目录添加到path环境变量中,例如我这里装的是python,就要添加对应的执行文件到path里,可以通过直接在命令行中输入python检查是否配置成功

export PYTHON=/usr/bin/python2.7
这个错误是网络问题,遇到这种情况重试即可,如果反复都不可以就试着清空缓存再试。始终不行的话你就要先研究下科学上网的方法,这里不做赘述。
清理缓存方法:

npm cache clean -f

遇到最恶心的错误,相信50%的人在完成上面复杂的工序之后,开心的执行homebridge命令会遇到下面的问题,我吭哧吭哧研究了2个礼拜,几乎翻遍的github,之前一直没找到方法,甚至被逼到换windows平台去部署homebridge,但最后还是卡在了这个坑爹的错误上!!!what a fuck!!! 但好在功夫不负有心人,终于研究明白这个错误了,请往下看。

Scan this code with your HomeKit App on your iOS device to pair with Homebridge:

┌────────────┐
│ 031-45-154             │
└────────────┘ 
/usr/lib/node_modules/homebridge/node_modules/mdns/lib/advertisement.js:56 dns_sd.DNSServiceRegister(self.serviceRef, flags, ifaceIdx, name, ^ Error: dns service error: unknown at new Advertisement (/usr/lib/node_modules/homebridge/node_modules/mdns/lib/advertisement.js:56:10) at Object.create [as createAdvertisement] (/usr/lib/node_modules/homebridge/node_modules/mdns/lib/advertisement.js:64:10) at Advertiser.startAdvertising (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Advertiser.js:43:30) at Bridge.Accessory._onListening (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Accessory.js:555:20)
首先遇到错检查一下这几个包是否都已经正确安装

apt-get install avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev
上面那个错误的主要就是因为dbus-daemon、dbus、avahi-daemon这三个个东西没启动对,解决思路是启动homebridge前吧这三个进程都重启,对原因就是这么简单!

dbus-daemon --system
/etc/init.d/dbus restart
service avahi-daemon start
启动homebridge前重启上面进程,homebridge是不是就可以欢快的跑起来了呢??
4.常用插件
我这里简单整理了一下:
博联科技 homebridge-broadlink-rm
小米网关 homebridge-aqara
论坛里的空气质量插件 homebridge-airnow
ip摄像头插件 homebridge-camera-ffmpeg
5.群晖后台启动
最后,由于我们的homebridge是跑在nas上的,怎么让他在后台启动呢?
chroot环境下的启动脚本

#!/bin/bash
# LANCEMENT DES SERVICES DBUS, AVAHI, HOMEBRIDGE
# RUNNING DBUS, AVAHI AND HOMEBRIDGE SERVICES
export N_PREFIX="$HOME/n"; [[ :$PATH: == *":$N_PREFIX/bin:"* ]] || PATH+=":$N_PREFIX/bin"
rm -r /var/run && rm -r /var/lock && ln -s /run /var/run && ln -s /run/lock /var/lock && rm /run/dbus/*
dbus-daemon --system
/etc/init.d/dbus restart
service avahi-daemon stop
service avahi-daemon start
#avahi-daemon -D
/root/n/lib/node_modules/homebridge/bin/homebridge
nas用户态的启动脚本

#!/bin/sh
#
# Put this file in your path homebridge.sh

case "$1" in

stop)
echo "Stop Homebridge …"
pkill -f homebridge
;;

start)
nohup chroot /usr/local/debian-chroot/var/chroottarget su - root -c "/root/.homebridge/run.sh" >>/volume1/1.log 2>>/volume1/2.log &
;;

restart)
$0 stop
sleep 1
$0 start
;;

status)
ps | grep homebridge
return $?
;;

*)
echo "usage: $0 { start | stop | restart | status}" >&2
exit 1
;;

esac

 

最后到群晖控制台中添加计划任务:

 

 

进阶篇,智能家居初体验:homekit、homebridge、HomeAssistant都是干啥的?

从装修房子到买家电装安防,到入坑homebridge和homeassistant,再从homebridge的基于iphone siri的语音控制,到通过天猫精灵控制家电,这一段时间也算是接触了很多智能产品和设备,同时自己对只能家居的理解也更进一步。那我也基于最近一段时间的学习,完整的总结一下。

还是把之前录的效果放一下吧,哈哈:

从全局上看,我认为智能家居有几个阶段:

   设备数字网络化—-远程控制—-自动化控制—-语音控制—-‘贾维斯’

第一阶段最简单,设备肯定要通电并把物理的信号转换成数字信号,比如温湿度传感器,摄像头,电子门锁,体感设备,门磁,遥控器,联网之后,也就是到了第二阶段,互联后可以不依赖物理开关控制,能通过某种信号控制,这里的控制渠道可能有很多:红外、射频、蓝牙、网络… 再然后我们可以对这些互联可以远程控制的设备设置一些联动的逻辑,也就是现在所说的自动化控制,比如:检测到有人就播放一段语音、十二点音箱自动播放广播、人回家时关闭窗帘打开灯… 再然后我们可以通过智能音箱语音完成一些指令或者基于AI的对答,再然后可能就是像钢铁侠里贾维斯那样的超级管家,能像人一样有一定的思维逻辑的自动化处置!

目前市面上看到的产品其实并算不上智能家居,或者说仅仅是做到了前三个阶段:传感器数据采集以及指令的下发,还有一些简单的自动化,距离真正的“智能”还有很大差距。最近的频频发布的智能音箱目前也只是实现了语音控制,距离真正的智能管家,还是有很大的差距的。我这里讲的“智能”主要是现状下的一些产品。


一.智能家居是什么,能干什么?

就我自己了解到的情况,我把智能设备(物联设备)分为两类:

一类是信息采集器,摄像头、门磁、温度计、湿度计、霾表、红外传感器、烟感、水感等等。用来收集环境数据。

一类是控制器,灯、开关、窗帘盒、插座、锁、空调、用来执行某种动作。

而把采集器和控制器协调在一起,执行远程操控或是根据不同条件设置不同的动作,就成了现在所谓的智能家居系统。目前基本形成了 采集器+控制器+网关 组成了一套完整的智能家居系统的模式。

二.智能家居系统

    由于技术上的没有完全统一的协议,再加上一些厂商的封闭思维,不同厂商间的采集器和控制器是不通用的,都需要去配置各个家自己的中控系统及app,所以目前想把家里的全套东西都配置好你可能要在一个手机里装N个app,家里也是要接各种网关设备,或者一步到位全买这一个厂商的全套产品。

控制系统有两种,一种是开放平台,一种是封闭平台。就如字面意思,国外比较多的是统一软件协议然后各家做各家的硬件,然后由统一的控制平台来完成智能控制,比如HomeAssistant、Domoticz、Google Home、homekit(虽然homekit算不上真正意义的开放…但他开放了统一的协议标准);对比国内,目前多数是自己管自己,平台之间互不兼容,想做到智能就要买我家的全套设备才行。

三.封闭平台(这里只说国内的)

LifeSmart、阿里智能、萤石云:这些属于封闭的平台,都由各个智能设备厂商自己独立建立的中控app,只能控制自己旗下或者联盟内的产品及设备,无法“跨界”联动。

博联boardlink,米家:基本属于半开放的状态,支持部分系统的相互联动。

LifeSmart,是国内的智能家居品牌,主打智能家居控制,缺少家电类的覆盖,品质较高但相对的价格也比较贵。

阿里智能,依托阿里强大的整合能力组成了很大范围的联盟,目前在大小家电范围覆盖的较广,但在门磁、传感器类比较缺乏。

萤石云,海康威视旗下的品牌,做监控起家,主打安防类,门磁、人体传感器、声光水传感器的场景及联动比较丰富,但比较遗憾的是他没有家居类的设备。

 

博联boardlink,博联以红外和射频遥控作为切入点,可以与大部分红外和射频设备联动,目前也在搞自己的平台,但他的远程遥控器处于半开放的状态,可以对接很多三方的平台以及多数的智能音响,如:天猫精灵、Amazon Echo。

米家,小米在智能家居这块布局很早,以比较高的性价比取得了比较大的覆盖量和认可。目前也处于一种半开放的状态,可以支持对接三方平台。

以我自己家举例,如果按我自己的想法去实施的话我可能需要下面四个厂商的产品,(手机里同时装四个app、家里装四个网关,而且他们之间还不能相互控制)

小米          霾表、空气净化器、灯、插座

博联科技  红外控制 FR射频控制

阿里智能  空调、冰箱(家电类)、插座

萤石          摄像头、门磁、红外、烟感(安防类)

What a fuck??!!

四.开放平台

开放中控平台: HomeAssistant、Domoticz、Homekit

Homekit 是苹果推出的智能家居平台, 并在iOS 10开始默认在手机“家庭”APP中集成,可以通过apple内置的siri完成语音控制,但无法通过其他app或者android手机控制。目前接入homekit的厂商并不是很多,而且价格偏贵。亮点在于siri控制和苹果比较高的产品质量,准确的说他应该也属于封闭平台,但为什么要把他放在开放平台?请往后看homebridge部分。

 

HomeAssistant 是一款开源的智能家居平台详细介绍见其官网:https://home-assistant.io ,需要运行在python3的环境下,可以通过网页和手机客户端完成控制。目前看功能方面要比homekit强大很多,因为其开源的原因,可定制性较强,受到比较多开源爱好者的喜欢。支持通过网页或者android手机app、iOS手机app的控制;支持各种复杂条件的自动化动作(满足X情的条件下,做Y);语音控制方面,支持与类似亚马逊的Echo的智能系统的控制。

 

Domoticz 也是类似的智能家居平台详见官网http://www.domoticz.com/,相比来说界面比较丑,与HomeAssistant一样支持通过网页或者android手机app、iOS手机app控制;支持各种复杂条件的自动化动作(满足X情的条件下,做Y);语音控制方面,支持与类似亚马逊的 Echo的智能系统的控制。

 
 

homebridge

最后要强烈介绍一下homebridge,它由前homekit程序员创建,用nodejs编写,用于更多让更多无法接入homekit的产品接入homekit平台,程序开源,有各个兴趣组提供不同的插件,以兼容不同的智能设备,像桥一样把三方的设备与homekit连接在一起,让他们能在iOS里被Siri控制。有了它就可以将HomeAssistant与Domoticz中的智能设备引入到homekit中,由siri统一控制。

五.如何搭建这样的开放平台

前面文章提到过HomeKit 的优势在于iOS原生自带、Siri支持中文,还有苹果对高品质的把控。你可以告诉 Siri 我回家了,早上好等这样的文字激活你设置好的场景,还是可以直接从控制中心看到和控制你所有支持的设备,比起其他第三方智能家居 App 使用体验都更佳。 

懂技术的同学可以直接到下面的地址按项目中的方式部署

Homebridge项目地址:https://github.com/nfarina/homebridge

下面两篇文章里我将介绍如何搭建一套完整的智能家居系统。完成以下的操作,你需要一个永不关机(或者你需要的时候不关机的)Mac、Windows 或 Linux 设备,恩,简单说就是要有一台服务器,这里比较多的人选择使用树莓派,有的人在家里的NAS中安装,因为我已经有一台群晖的nas了,所以我选择在nas上完成安装

入门篇,智能家居基本情况

目前市面上看到的产品其实并算不上智能家居,或者说仅仅是做到了传感器数据采集以及指令的下发,距离真正的“智能”还有很大差距,而我这里讲的主要是现状下的一些产品。

就我自己了解到的情况,我把智能设备(物联设备)分为两类:

一类是信息采集器,摄像头、门磁、温度计、湿度计、霾表、红外传感器、烟感、水感等等。用来收集环境数据。另一类是控制器,灯、开关、窗帘盒、插座、锁、空调、用来执行某种动作。

而把采集器和控制器协调在一起,根据不同条件设置不同的动作,就成了现在所谓的智能家居系统。但是由于技术上的不成熟没有统一的协议或者一定程度上厂商的封闭思维,不同厂商间的采集器和控制器是不通用的,都需要去配置各个家自己的中控系统及app,所以目前想把家里的全套东西都配置好你可能要在一个手机里装N个app,家里也是要接各种网关设备。

以我自己家举例,如果按我自己的想法去实施的话我可能需要下面四个厂商的产品,(手机里同时装四个app、家里装四个网关,而且他们之间还不能相互控制)

小米          霾表、空气净化器、灯、插座

博联科技  红外控制 FR射频控制

阿里智能  空调、冰箱(家电类)、插座

萤石          摄像头、门磁、红外、烟感(安防类)

WHAT THE FUCK??!!

Mac 学习笔记3–termial快捷键&SSH技巧

-工欲善其事,必先利其器。

Terminal

用mac,当然离不开terminal,整理了些系统自带terminal的一些快捷键:

Command + K 清屏

Command + T 新建标签

Command +W 关闭当前标签页

Command + S  保存终端输出

Command + D  拆分面板

Command + Shift + D 关闭拆分面板

Command + shift +  方向键   向左/向右切换标签

SSH技巧

1.别名

使用ssh时,每次都需要输入复杂的主机名或者ip,这样真的浪费生命,使用config配置就可以很好的避免这种重复工作。在~/.ssh目录下建立config文件,ssh命令每次会自动的读取该文件。用下面的方式,相当于为host.aaa取了别名aaa。原来需要输入 “ssh usernameaaa@host.aaa”的复杂命令,现在只需要输入命令”ssh aaa”即可。

2.会话克隆

每次打开终端使用ssh都需要重新输入密码?按下面的配置就可以避免重复输入密码,第一次开ssh连接需要输入密码,第二次ssh登录同一台机器,你就不用再输入密码了,跟secureCRT一样的clone session的方式一样。这个文件的属性我这边设置为600的,一般不设置该属性也没有问题的。如果你细心的话,你在~/.ssh/目录下发现master-*的sock文件。它记录了你目前登录到的机器,这样的话,你登录同样的机器就会重用同一个链接了。

.ssh/config 配置

#会话克隆
host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
ServerAliveInterval 80
#服务器别名
Host aaa
hostname host.aaa
user usernameaaa
Host bbb
hostname host.bbb
user root

Mac 学习笔记1–系统包管理

-工欲善其事,必先利其器。

新配的mac到手后开始各种折腾,基础软件和权限搞定之后遂开始研究命令行工具,对于linux来说必须要有yum这种包管理软件,mac也一样哈哈。google告诉我Homebrew还不错。

 

简洁优雅的命令行工具 homebrew-cask

使用homebrew-cask安装软件,只需要一行命令

brew cask install sublime-text skitch dropbox google-chrome

这样以下就安装了4个软件,轻松搞定,不需要鼠标点击,no dragging, no dropping。

* 命令行?好像很高大上的赶脚,我能学会吗? *

homebrew-cask是一套建立在homebrew基础上的Mac软件安装命令行工具(想要详细了解homebrew,自己google)。拥有她只需要简单的1步:

安装homebrew

homebrew的官网是http://brew.sh/,上面有简体版本,可以了解以下homebrew是干啥的,但回到安装的正题,一行命令安装:

直接在Terminal中输入命令:

/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

在安装brew的时候,会要求你输入当前用户的密码,很简单。

具体安装方法详见:http://brew.sh/index_zh-cn.html

 

如何使用homebrew

类似yum,主要功能有search install uninstall

需要安装应用时,打开「Terminal」,输入

brew cask install XXX

# 将XXX替换成你想要安装的软件名称就可以了

下面做个示范:

Install homebrew-cask usage

* 常用命令 *

  • brew cask search 列出所有可以被安装的软件
  • brew cask search drop 查找所有和 drop 相关的应用
  • brew cask info thunder 查看 迅雷 应用的信息,这货安装的可是最新版本的迅雷哦!
  • brew cask uninstall qq 卸载 QQ

特别注意 homebrew-cask是将应用程序放置在/opt/homebrew-cask/Caskroom/下,会在你的家目录中的「应用程序」文件夹中创建一个类似快捷方式的替身。在Finder的偏好设置中,第三个侧边栏勾选上你的家目录,这样找应用会方便一些。但不用太担心你,Launchpad是会找到这个目录下的应用的,需要Alfred支持请查看brew cask alfred

homebrew-cask vs Mac App Store

homebrew-cask 和 Mac App Store 相比,目前还有很多优势:

  1. 安装软件体验非常一致简洁优雅
  2. 对常用软件支持更全面,例如 MPlayerX 已经宣布不在更新 Mac App Store上 的版本
  3. 软件更新速度快,体验好。例如Alfred 2.0已经出了很久,但在 Mac App Store 上还是1.2版本,QQ也是这样的情况

当然我承认,命令行的交互方式并不是人人都能学会和接受,homebrew-cask其实已经做的足够简单易用,习得这一技能能在以后提高效率。homebrew-cask安装省时省力,更新应用也简单,不用一个一个去找,其实先花时间学习,是值回本钱的,大家自己算算这笔帐。

Mac App Store 生态圈远不完善,审核流程过长,限制太多,维护成本过高让很多应用开发者被迫离开。虽然我个人很喜欢 homebrew-cask,但还是希望 Apple 尽快完善 Mac App Store ,等到有一天我可以不再使用 homebrew-cask。这样说是不是显得我很薄情?:)

关于软件更新

homebrew-cask团队一直还在探讨软件更新策略,以及homebrew-cask与homebrew的关系。目前倾向于:

  1. homebrew-cask作为软件安装工具体验是不错的(相比你要自己到网页上搜索,下载,拖转安装)
  2. 大部分软件都有自更新的功能,体验也不错,绝大多数只需要一次点击就能更新
  3. 实际上软件更新没有那么频繁,使用brew cask uninstall qq && brew cask install qq 也比上网自己下载更新方便

软件更新的结论

目前通过homebrew-cask安装的软件有两种更新方法:

  1. 使用软件自己的更新流程
  2. brew cask uninstall APP && brew cask install APP 先删除App,再重新安装

详细情况可以围观这个讨论帖子: brew cask upgrade, 具体看 第2条第5条 评论。

一键装机?有了homebrew-cask就可以

# 到目前October 5, 2013 1:43 PM为止,homebrew-cask共收录566款应用程序
# 瞬间安装所有常用软件

brew cask install alfred
brew cask install the-unarchiver
brew cask install qq
brew cask install line
brew cask install skype
brew cask install thunder
brew cask install mplayerx
brew cask install evernote
brew cask install skitch
brew cask install dropbox
brew cask install google-chrome
brew cask install mou
brew cask install iterm2
brew cask install sublime-text
brew cask install virtualbox

Mac 学习笔记2–编辑器

Homebrew安装:http://brew.sh/index_zh-cn.html

-工欲善其事,必先利其器。

系统的包管理工具选择了Homebrew后。下一步就是选一款编辑器,因为之前看了一个逼格很高的视频,记住了Atom,所以就用它了。

Atom安装:https://atom.io/

或者打开系统的 终端,然后用 Homebrew 的 brew install 命令去安装 Atom:

brew install Caskroom/cask/atom

在命令行下面安装完 Atom 以后,可以输入 atom ,后面指定一个目录,这样会用 Atom 编辑器打开这个目录。另外 Atom 编辑器还自带了一个包管理工具叫 apm (Atom Package Manager),用这个工具可以在命令行下面为编辑器去安装包 (Package) ,包就是 Atom 的插件。

Packages

Atom 核心的功能是由 Core Packages(核心包) 提供的,另外还有 Community Packages(社区包),就是由社区成员自己开发并且分享出来的 Package。Atom 可以通过安装这些 Package 来扩展编辑器的功能。安装 Package 可以在 Atom 的配置界面上去搜索,然后安装,也可以使用 apm 在命令行下面管理编辑器的 Package 。

Packages 列表:https://atom.io/packages

QQ20150118-1

安装包:通过配置界面

  1. 打开 Atom 编辑器。
  2. 打开 Atom 的配置界面(Windows:ctrl + ,    Mac:command + , )。
  3. 点击边栏上的 Install(安装)。
  4. 在界面上的 Install Packages 下面,选中 Packages 标签,然后搜索你想要安装的 Package。
  5. 在搜索结果找到想要的 Package ,点击 Install 安装。

QQ20150117-11

安装包:通过 apm

  1. 打开命令行工具,Windows 用 Powershell,Mac 可以使用终端。
  2. 搜索包用的是 apm search <关键词> 。
  3. 找到想要的包以后,再用 apm install <包的名字>。

QQ20150117-12

QQ20150117-13

下面,你可以搜索一个叫 Localization 的包,然后安装一下,这个包会为 Atom 的菜单栏提供一个中文翻译。下面我们再看一下怎么样去配置与管理包。

管理包

打开配置界面,在边栏上选中 Packages ,在这个界面上的 Communtity Packages 区域里,你可以找到自己安装的来自社区成员分享的包。Core Packages 下面是 Atom 编辑器核心自带的包。

QQ20150118-3

这里会显示包的名字,还有介绍,不想用的包,可以点击 Disable 按钮禁用它,或者直接点击 Uninstall 卸载掉包,点击 Settings 按钮可以打开包的配置界面,在这个界面上,你可以找到包的主页,说明的文档,可以查看包的源文件,还有相关的配置与快捷键。

下面打开之前安装的 Localization 这个包的配置界面,然后在 Settings 区域里面,在 Current Language 下面的文本框里输入:Chinese – Simplified ,这样会把菜单栏的语言设置成简体中文,如果设置成 Chinese – Traditional,会把菜单栏设置成繁体中文。输入以后,用鼠标点一下浏览器的其它的地方,这样编辑器会保存你的配置。

完成以后,想让设置生效,可以关掉并且重新打开编辑器,或者可以刷新一下编辑器。

QQ20150118-4

刷新编辑器的快捷键:
Mac    :ctrl + alt + command + L
Windows:ctrl + alt + R

基础

编辑器没有使用的门槛,打开以后,你就已经知道怎么用了,不过有些小技巧可以了解一下,可以提高工作效率。先去下载点东西,HTML5 Boilerplate(https://html5boilerplate.com/),这个东西可以作为项目的基础,以后我们会再跟它见面,以后在介绍前端包管理的时候,这个下载的动作可以用命令去做。下载以后,解压一下,把解压以后的目录重命名成你自己想要创建的项目的名字,然后用编辑器打开这个项目的目录(Mac:command + O,Windows:ctrl + shift + O)。

QQ20150118-7

编辑器的工作区有两部分组成,左边是编辑器的 Tree View(树形视图),上面会显示你打开的目录里面的东西,右边是编辑器,在这可以处理打开的文件,最上面是标签栏,点击不同的标签可以打开对应的文件。

树形视图

你想打开在树形视图上的文件,创建新的文件或者目录,展开与收起目录,这些动作可以用鼠标完成,或者也可以使用键盘上的按键。想要在树形视图上操作,你需要把焦点放到树形视图上,切换焦点使用 ctrl + 0 。你会发现树形视图上的背景颜色会有点变化,具体是什么变化,取决于你的编辑器使用的主题。

查看跟树形视图相关的命令,先确定你的焦点在树形视图上,然后打开命令面板(Command Palette),用快捷键:

Mac    :command + shift + P
Windows:ctrl + shift + P

搜索一下 tree view ,列出的就是跟树形视图相关的命令。

QQ20150118-8

  • 向下移动:↓ 或 J
  • 向上移动:↑ 或 K
  • 展开目录:→ 或 L
  • 收起目录:← 或 H
  • 打开文件:enter 回车

多试几次上面的快捷键,把它变成自己的肌肉记忆。

编辑器

先随便打开几个项目里的文件,比如 humans.txt,index.html,还有 css/main.css 。打开的文件会出现在编辑器的标签栏上,除了用鼠标点击标签可以打开对应的文件,也可以使用快捷键:

打开下一个标签面板

Mac    :alt + command + →
Windows:ctrl + pagedown

打开上一个标签面板

Mac    :alt + command + ←
Windows:ctrl + pageup

在 Mac 上,你还可以使用 command + 数字 ,打开对应的标签面板。

关闭标签面板

Mac    :command + W
Windows:ctrl + W
分离面板

在编辑器上打开的文件可以分离到不同的面板上显示,你可以把编辑器分隔成上,下,左,右,四个部分。方法是,找到要分离显示的标签面板,鼠标右键点击,然后选择 Split Up,Split Down,Split Left 或者 Split Right。

QQ20150118-13

这些动作也都有对应的快捷键,可以打开命令面板(Mac:command + shift + P,Windows:ctrl + shift + P),然后搜索 Pane ,这样会显示出面板相关的操作命令。

分离到上面

Mac    :command + K ↑
Windows:ctrl + K ↑

分离到下面

Mac    :command + K ↓
Windows:ctrl + K ↓

分离到左面

Mac    :command + K ←
Windows:ctrl + K ←

分离到右面

Mac    :command + K →
Windows:ctrl + K →

注意上面这些快捷键的用法,是先按一下 command + K 或者 ctrl + K ,然后松开按键,再按一下上,下,左,右这些箭头按键。

查找文件

项目里的文件多了,想找到对应的文件,用鼠标点出这个文件很费事,可以用搜索找到文件。

在已经打开的文件里找到你想要的文件:

Mac    :command + B
Windows:ctrl + B

QQ20150118-9

在整个项目里找到你需要的文件:

Mac    :command + P
Windows:ctrl + P

QQ20150118-10

查找文件里的内容

你可以搜索包含特定内容的文件,比如在当前打开的文件里搜索,或者也可以在整个项目里搜索,找到以后,可以把搜索的内容替换成新的内容。

在当前打开的文件中搜索

Mac    :command + F
Windows:ctrl + F

比如我当前打开的是 humans.txt ,打开搜索,输入 name ,编辑器会高亮显示匹配搜索的内容。在 Replace in current buffer 里面,可以输入要替换成的东西,点击 Replace 会一个一个的替换,点击 Replace All 按钮,会替换全部的找到的地方。

QQ20150118-11

我想知道有没有查找下一处或者上一处的快捷键,打开命令面板(Mac:command + shift + P,Windows:ctrl + shift + P),搜索 find ,仔细阅读一下,你会看到 Find Next , Find Previous 还有跟它们对应的快捷键。

查找下一个地方

Mac    :command + G
Windows:F3

查找上一个地方

Mac    :shift + command + G
Windows:shift + F3

在整个项目中搜索

Mac    :shift + command + F
Windows:shift + ctrl + F

下面,是我搜索了项目中的 name ,回车以后,会显示出找到的结果,这个结果显示了包含搜索的内容的文件,还有出现这个内容的位置,点一下,会打开出现这个搜索内容的文件,并且会定位到对应的位置上。

QQ20150118-12

 

wordpress 白屏问题

最近把数据库从阿里云实例迁回了本地mysql,然后顺路升级了新版本的wordpress,结果突然发现wordpress首页白屏了。。。但是仪表盘还是能访问。。。

这里我查了下我的仪表盘里的历史数据,都在。那就是数据库连接没问题。

又去排查了一下我的nginx和PHP进程,都是Ok的。

又google了一下,好多人反馈是主题的问题,于是进仪表盘换成其他主题,恢复了。。。