Category

HomeLab

远程连接内网路由器

HomeLab

看标题会感觉是一个很简单的操作,但是不是。路由器后台会自动重定向到ip访问,导致常规端口转发不生效。

我尝试过zerotier,但是和公司的局域网网段重叠了,遂放弃。

今天发现ssh可以做socks代理,于是解决了。

ssh指令ssh -D 1080 -N -q user@host -p port打开一个socks代理

然后下一个火狐(可以下便携版)

进入设置拉到最下面找到网络设置,配置socks代理(别写http的)

然后就可以直接访问了

米家+小爱音箱+巴法云+termux 远程开关机

HomeLab

场景

以前写过一个安卓app可以远程操作家里旧手机给电脑发wake-on-lan数据包触发远程开机,最近用上了米家的智能家居,想把远程开关机集成到米家里,同时又不想买米家的开机卡

碰壁

首先研究了Home Assistant,部署完了对接米家的时候发现只能单向用ha操作米家设备,这不是和我的需求反了吗

然后看了一下小米iot平台开发者账号,发现要企业资质才能申请😓

问gpt,给了一个用脚本模拟米家设备的方案,会顶替掉一个设备😓

今天下班不死心在网上搜,突然看到一个知乎文章,发现还有这种好东西

折腾

巴法云

先注册巴法云账号,然后点按钮切到mqtt设备云并新建一个设备,此处设备命名后缀代表了设备的类型,参考

创建一个设备,该设备的名字代表了后面mqtt协议的频道,然后可以给设备自定义一个昵称,这个名字是米家关联后的设备名字

在该页面左上角可以看到密钥,点击显示复制出来,可以用mosquitto_sub订阅mqtt,接收消息

termux

然后是termux,研究ha的时候就给旧手机装好了,其实不用proot也可以用,但是之前已经装好了那就拿着用了

我用的脚本如下

纯文本
#!/bin/bash

ID="{secret}" # 用自己的替换
TOPIC="{topic}"
HOST="bemfa.com"
PORT=9501

mosquitto_sub -h "$HOST" -p "$PORT" -i "$ID" -t "$TOPIC" | while read payload
do
    ts=$(date +"%Y-%m-%d %H:%M:%S")
    echo "[$ts] $payload" > $TOPIC.log
    if [[ "$payload" == "on" ]]; then
        wakeonlan 01:02:03:04:05:06
    elif [ "$payload" == "off" ]; then
        ssh device "shutdown /s /t 30 /f" # 需要配置 ssh config
    fi
done

运行脚本后会阻塞,此时如果在巴法云管理页面上可以看到订阅者:在线 1,如果在网页上推送消息,则log文件中会打印推送的消息

米家

在米家app中找到 我的 > 添加其他平台 > 巴法

输一下账号密码,然后会看到设备(需要是巴法云上名字符合后缀要求的设备,否则不会同步到米家),看到后就可以退出来了

使用

触发开关机首先可以用语音操作小爱同学打开电脑,这儿的电脑是巴法云里设置的设备昵称,触发之后会给mqtt推送一条消息on

然后可以使用米家操作按钮开关,但是米家里是看不到这个设备的,所以要用到自动化/手动控制去控制小爱音响,设备选择小爱音响,动作选择自定义,然后写打开电脑,就可以触发巴法云的mqtt推送了,延迟基本上在1秒左右

通过局域网在安卓设备和PC之间传输文件

HomeLab

PC操作

配置共享文件夹

  1. 首先需要一个文件夹用于存放传输的文件,建议在空间比较大的盘下创建,比如D盘
  2. 右键文件夹点击属性 -> 共享 -> 网络文件和文件夹共享 -> 共享
  3. 下拉框中选择用户,此处若要允许匿名访问则选择下拉框中的EveryOne
  4. 在下方添加的用户中配置权限,若要允许修改则点击读取修改为读取/写入
  5. 点击共享
  6. 点击完成

匿名共享

  1. 若要允许匿名共享,则需要点击属性界面中最下方 密码保护 -> 网络和共享中心
  2. 在跳转的高级共享设置界面选择所有网络
  3. 最下方密码保护的共享选择无密码保护的共享

tips

同一个共享文件夹中可以针对子文件夹配置不同的访问权限,使匿名访问无法查看某些文件夹

安卓操作

下载文件管理器+

连接SMB共享

  1. 打开 文件管理器+ 并选择远程存储,点击添加远程存储
  2. 选择SMB(SMB是windows的局域网文件共享协议)
  3. 在弹出的窗口中填写主机名,用户名和密码(或者匿名)
    此处主机名可以尝试填写对应pc的机器名,但是有可能因为路由器原因导致失败
    若失败请填入机器的ip地址,win+r 打开 cmd ,在 cmd 中输入 ipconfig 显示自己的ip地址
    在其中选择 和要连接的安卓设备在同一个网络下的网络连接(注意选择有IPv4 地址的网卡)
    比如pc通过网线连接的路由器,那么此时选择以太网的网络地址
    比如pc通过wifi连接的路由器,那么此时选择无线局域网适配器
  4. 填写用户名和密码(若匿名则勾选匿名)
  5. 连接

tips

可以将远程存储中的文件夹放入收藏夹从而快捷访问