0%

背景

遇到一个坑:homeassistant部署后提示_sqlite3依赖找不到!

可是libsqlite-dev已经装有。

???

发现

因为Homeassistant最低需要Python3.9起步,raspberryPi国内镜像只有3.7版本(国外镜像慢得出奇就没加入源,也不知道有没有),只能自行编译安装。

官方默认sqlite可以被python调用的,但自己编译的就很孤立。于是configure的时候没有加进去!!!不说这谁能知道!

1.确认已经安装好所需要的依赖:

1
sudo apt-get install libsqlite3-dev

2.编译的时候加上sqlite的拓展!!!

1
./configure --enable-loadable-sqlite-extensions --prefix=/opt/python3.9

3.以上确认无误再装

1
make && sudo make install

其他就按着homeassistant-core部署的步骤来

亲自验证,完美运行!

曲率:

曲率半径:

参数方程曲率:

罗技键盘K480蓝牙连接(连接要求:连接后输入配对数字并按下回车才可配对)

1
sudo systemctl start bluetoothcli.device
1
bluetoothctl
1
scan on

如果有bluz.error not ready报错,先用power on来使能

1
connect <ssid>

用蓝牙键盘输入显示出来的数字

Enter

bug

因为蓝牙和wifi都使用2.4GHz,打开蓝牙后,wifi速度明显下降。

有因为路由器不支持5GHz…

所以改成回线键盘。

本文亲测在manjaro下同样管用。

1
sudo vim /etc/default/grub

在GRUB_CMDLINE_LINUX_DEFAULT:’xxxxxxxxxxxx’x的后面加上

1
2
3
4
acpi_backlight=vendor
acpi_baclight=video
acpi_backlight=none
acpi_backlight=native

重启电脑即可。

供给量

一个错觉:”石油快要开采殆尽了!”

但是事实是当价格上涨后,供给也将会增加。目前的生产技术水平,很多时候不是不能实现,而是成本制约了其可能性,当资源稀缺,并且价格很高,足以支撑这项技术实现的可能,将会让这些昂贵的技术在现实中实现。

当原油价格高于70美元,这样的价格足以支撑开采海底原油高昂的费用

当原油价格高于100美元,这样的价格足以支撑开采北极圈原油高昂的费用

如此一来价格上涨会有更多的供给,原油不再如此的稀缺。

当开采了足够多原油,原油不稀缺了,价格很快又会回到正常水平。

供给定律

价格上升,供给增加。

价格高,大家争先恐后进场

价格下降,供给减少。

价格低,厂家都不愿意去做.

供给曲线

供给曲线不一定严格为下图这个样子。但正常情况下都是增函数。

供给曲线

供给变动影响因素

即推动供给曲线左右移动的因素。

左移:供给萎缩,如果要保持原来供给量的情况,价格更高了

右移:供给增大,如果要保持原来供给量的情况,价格更低了

1.投入资源价格的变化

芯片国产化后,一些智能家居的价格下降了。(供给曲线右移)

2.技术因素

生产力的提升。比如美国页岩油革命让页岩油开采成本仅为40美元,并且把原油价格大幅拉下来。当原油价格到达40美元的时候,企业还不会破产。而当原油价格低于35美元的时候,企业破产,于是有越来越多的企业加入到页岩油开采中,最后到各个页岩油企业相互竞争。(供给曲线大幅右移)

3.同一生产线或同一生产线流程下的相关产品

顺带一起生产

石油和天然气

豆浆和豆渣

4.厂商数目

新的厂商进入,供给增加,供给曲线右移

厂商退出,供给减少,供给曲线左移

5.预期

煤采购成本很低,焦炭目前价格也低,但是预期未来焦炭价格可能会上涨(供给曲线左移),于是先存起来一部分焦炭(减产), 价格上涨之后再恢复增产

6.其他因素

政策法规变化。

比如2018年环保政策严格后,环保去产能(供给曲线大幅左移)。如果要提供和以前一样的供给量,所需要的成本更高了。

政治环境的变化。

禁止进出口商品,或是增加减少关税

自然天气的变化。

地震、战争、海啸、疫情、火灾等因素。内存卡和显卡趁机涨价(供给曲线左移)

其实不一定是自然因素,也可能是人为的控制供给!!!

  • 树梅派官网下载树梅派系统的镜像。

  • ArchLinux的AUR上搜rpi-imager,烧录用。(windows系统可以在系统找到raspberry Pi imager)

1.使用rpi-mager,把系统烧录到SD卡

SSH默认是不开启的,所以在烧录之后,在boot盘新建一个名为SSH的文件夹(就默认打开SSH了)

2.SD卡插入树梅派,插好网线和电源

3.登陆进入树梅派

默认SSH帐号密码:

1
2
帐号:pi
密码:raspberry

4.更新密码

1
passwd

(sudo账户同理)

5.更改镜像源

用编辑器修改/etc/apt/source.list
用#号注释原文内容,替换成以下:(其他源也可以,距离地理位置近即可)

1
2
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

用编辑器修改/etc/apt/sources.list.d/raspi.list文件:
1
2
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui

更新源:

1
sudo apt-get update

6.安装最新版本的Python3(因为用docker,所以这一步遗弃了)

提前安装好后面要用的依赖,常用的链接包链接进去

在官网找到源码,并下载

1
wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz

解压
1
tar xvJf Python-3.9.6.tar.xz

编译
1
sudo ./configure --prefix=/usr/local/Python-3.9.6 --enable-optimizations

安装(如果提示无权限创建/usr/local/Python-3.9.6就su成root)
1
sudo make && make install

软链接,方便使用
1
2
ln -s /usr/local/Python-3.9.6/bin/python3.9 /usr/bin/python396
ln -s /usr/local/Python-3.9.6/bin/pip3 /usr/bin/pip396

这样就可以同时存在两个python了!一个是原装的python3.7,另一个是自己编译安装的python3.9.6!


个性化

1.把bash改成zsh

安装zsh

1
sudo apt-get install zsh

修改/etc/passwd,找到Pi用户所在行,将/usr/bin/bash改为/usr/bin/zsh

2.正确上网

https://github.com/v2fly/v2ray-core/releases找到32位arm架构的linux版本,下载,使用
先从其他可以上网的电脑下载,复制到树梅派中

1
https://github.com/v2fly/v2ray-core/releases/download/v4.41.1/v2ray-linux-arm32-v7a.zip

准备好配置文件。

通过screen在后台运行:

1
screen ./v2ray -c xxxx.json

终端代理:(端口和代理类型要和json文件里指定的一致)
1
export http_proxy="http://127.0.0.1:xxxx"

3.ohmyzsh

就算挂了代理也访问不了raw.github,所以官方安装方法使用不了。

克隆这个项目到本地的~/.oh-my-zsh

1
git clone https://github.com/ohmyzsh/ohmyzsh ~/.oh-my-zsh

把.oh-my-zsh/templates/里面的文件复制到~/.zshrc配置文件中

把.zshrc里面的ZSH_THEME改为”agnoster”(个人爱好)

然后source .zshrc,

4.frp

https://github.com/fatedier/frp/releases/tag/v0.37.1找到对应的版本(arm架构32位)下载

frpc.ini配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[common]
server_addr = 120.79.229.218
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[web]
type = http
local_port = 80
custom_domains = www.ezhonghu.top

[web2]
type = http
local_port = 80
custom_domains = www.ezhonghu.cn

5.samba

1.安装samba

1
sudo apt-get install samba

弹出 Modify smb.conf to use WINS settings from DHCP?选择NO

2.备份配置文件

1
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.back

3.配置conf文件

1
sudo vim /etc/samba/smb.conf    

4.加入以下内容
1
2
3
4
5
6
7
8
[ezhonghuNAS]  # 显示被分享文件的名称    
comment = NAS Storage # 说明信息
valid users = pi,root # 可以访问的用户
path = /media/pi/ # 共享文件的路径
browseable = yes # 可被其他人看到资源名称(非内容)
writable = yes # 可写
create mask = 0664 # 新建文件的权限为 664
directory mask = 0775 # 新建目录的权限为 775

5.重启samba

1
sudo /etc/init.d/smbd restart

6.neovim

因为想用最新的neovim,所以这里编译安装neovim
从github克隆neovim源码

1
git clone https://github.com/neovim/neovim.git

1
sudo make && make install

7.安装docker

1
curl -fsSL https://get.docker.com -o get-docker.sh

执行

1
sudo sh get-docker.sh

把pi用户添加到docker group中,让其在非root状态下也能运行docker
1
sudo usermod -aG docker pi

重启后生效。

测试docker

1
docker run hello-world

8.homeassistant(安装在docker里)

安装homeassistant,/PATH_TO_YOUR_CONFIG为配置存放位置,看个人爱好放指定位置。

1
2
3
4
5
6
7
8
9
docker run -d \
--name homeassistant \
--privileged \
--restart=unless-stopped \
-e TZ=MY_TIME_ZONE \
-v /PATH_TO_YOUR_CONFIG:/home/pi/.config/homeassistant/config \
--network=host \
ghcr.io/home-assistant/raspberrypi4-homeassistant:stable

等待安装结束,就可以通过http://127.0.0.1:8123登陆进入homeassistant

9.mosquitto

为树莓派提供新库

1
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

1
sudo apt-key add mosquitto-repo.gpg.key

1
cd /etc/apt/sources.list.d/
1
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
1
sudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.list
1
sudo wget http://repo.mosquitto.org/debian/mosquitto-buster.list

更新

1
sudo apt-get update

查包
1
sudo apt-cache search mosquitto

安装

1
sudo apt-get install mosquitto

  1. Put xxx.key and xxx.pem into your website.

  2. copy the following code to .jupyter/jupyter_config.py

1
2
c.NotebookApp.certfile = u'path_to_public.crt'
c.NotebookApp.keyfile = u'path_to.key'

Don’t forget your path where xxx.key and xxx.pem file.

Generally, i put xxx.key and xxx.pem in /etc/nginx/cert/ (to create your own cert file first)

  1. reboot your jupyter lab.

Done.

problem

When I connected to my logic K480 bluetooth keyboard, the Network speed became obliously slow!

reason

After refer a title about bluetooth and wifi signal would be conflicted, I realize they are in same frequency at 2.4GHz!

solve

Login Router Administration according local IP address.

Find out frequency setting.

Turn 40M to 20M.

(while turn it down, the Network speed would be slow than before, but more stable)

Done!

1.在home目录创建jupyter根文件目录

1
mkdir ~/jupyter

2.建立虚拟环境

  • jupyter基于python环境,为了隔离主机python环境,所以创建虚拟环境。
    1
    2
    virtuanenv -p /usr/bin/python3 ~/jupyter/jupyterenv
    source ~/jupyter/jupyterenv/bin/activate

    以下涉及python3执行的步骤都需要在刚刚进入的jupyterenv虚拟环境下。

3.用pip3安装jupyter

1
pip3 instal jupyter

4.生成默认配置文件

1
jupyter notebook --generate-config

会默认在家目录生成配置文件~/.jupyter/jupyter_notebook_config.py

5.修改jupyter配置文件

  • 找到以下配置进行更新(如果为注释则取消注释)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    c.NotebookApp.ip = 'localhost'
    c.NotebookApp.allow_remote_access = True
    c.NotebookApp.base_url = '/jupyter' #必须与nginx代理目录一致。只有配置了才可以通过http协议进入www.ezhonghu.cn/jupyter访问jupyter服务
    c.NotebookApp.open_browser = False #因为服务在云服务器端,没必要
    c.NotebookApp.port = 8888 #需要和nginx指定的端口一致。(如果端口被占用,jupyter会随机生成端口)


    6.nginx配置

    ```shell
    nvim /etc/nginx/site-enables/nginx.config
    根据以下修改
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    server {
    #server头此处略

    # 要和Jupyter配置文件里的url一致
    location /jupyter {
    proxy_pass http://127.0.0.1:8888;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_redirect off;
    }

7.后台运行

1
screen jupyter-lab

个人比较习惯用screen。
也可以写一个system daemon,或者用Nohup &语句