在自组 NAS 上备份安卓相册的办法

按照 自组NAS教程 成功搭建家用 NAS 存储以后,备份手机相册和媒体库的需求非常普遍。虽然各种商业 NAS 往往会提供各种网页端 gui 或手机 app 作为完善其生态的重要组成部分,但仅就「备份」这个需求来说,简单的一个 termux 就完全足够了。

Read more »

NAS 可以用来做什么?

写一些我个人搭建NAS后的主要用途。已经买了NAS可以看下有没有哪方面能拓展自己的应用。或者有购买或搭建NAS意向的可以看着参考一下自己是否真的有这方面的需求,避免盲目跟风导致吃灰。

本人的配置 Intel N6005/16G内存/512G固态/12T RAID1(4T*6)
系统Archlinux。
网络300M宽带,动态公网IP+DDNS。

远程存储及读取

Read more »

探测器常见问题解答

气体探测器(布控球)的常见问题, 主要是接入商和平台提供商的疑问解答。咨询技术支持前可以先看一下。


主界面上的实时浓度数据为什么不显示了?

我们的最新系列布控球采用分体设计:气体传感器部分安装在手持式设备里,方便现场工人随身携带着进入作业现场。而数据接收、传输、视频录像等功能放在球机内,用于跟外部平台通讯。在只有球机开机,手持设备关闭的情况下球机上是没有数据显示的。

所以球机主界面没数据时可以先看手持设备是否开机,如果开机了检查一下手持设备跟球机距离是否过远,并且确认手持设备跟球机是否是正确的配对,不要拿错。

Read more »

TongjiAI Media Service Instruction

Realtime Streaming

1. Request streaming from devices.

Devices are designed to be accesed via socket.io. By default a device gets itself registered at the official socket.io server once it is connected to the internet, either via wirelss LANs(aka Wifi) or 4G/5G cellular networks. Clients who are willing to request the realtime video streaming should connect themselves to the socket.io server and join the same room with the target devices, which is followed by the steps below:

Read more »

  • 将以下脚本作为库文件导入前端项目中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { io } from "socket.io-client";
import playRecord from "./playRecord";

const socketIOInit = async (sio_url,setRmoteStream, setRecList) => {
const socketio = io(sio_url);
let pc;
let heartbeat_timer;

socketio.on("connect", () => {
console.log("connected");
});

socketio.on("create", () => {
socketio.emit("auth");
socketio.emit("heartbeatping");
console.log("created");
});
socketio.on("bridge", async (pathid) => {
setTimeout(() => {
setRemoteStream(
`https://live.tongjiai.cn/channel/${pathid}/index.m3u8`
);
}, 3000);
});
socketio.on("join", () => {
socketio.emit("auth");
socketio.emit("heartbeatping");
socketio.emit("getRecList");
console.log("joined");
});

// client-side custom heartbeat check with an interval of 10 seconds.
socketio.on("heartbeatpong", () => {
if (heartbeat_timer) {
clearTimeout(heartbeat_timer);
}
heartbeat_timer = setTimeout(() => {
socketio.emit("heartbeatping");
socketio.emit("getRecList");
}, 10000);
});

// recList handler
socketio.on("recList", (list) => {
console.log("list:",list);
setRecList(list);
});

socketio.on("hangup", () => {
console.log("hangup");
});
return socketio;
};
Read more »

偶尔发现的简便小技巧随手分享。
使用场景:家庭PC,Windows系统,希望搭网络服务(ssh/transmission/nginx等),或者远程开发平台(go/python/nodejs等)

硬件要求:家用宽带最好有公网ip(包含ddns)且路由器可以转发端口。如果没有的话可以用云服务商那儿买的vps搭frp或ssh tunnel。
如果有需要可以自行设置wake-on-lan方便远程开机(我自己是24小时开机所以没用上这个)。

一、装VMware Player。对,免费的Player就够;
二、新建一个Linux的guest,网络连接选桥接(bridged)。装好server版系统(不需要gui),发行版随意。
三、在guest机上装你需要的服务,设置好systemctl enable。在路由或vps上设好端口转发。


以上三步是常规操作不多赘述详细操作,有疑问查阅之前的文章


Read more »

一、安装 Nvidia SDK manager

根据 Nvidia官网 教程说明,先下载用于 Ubuntu (或者其他当前使用的Linux发行版)的安装包。其中 Ubuntu版的下载地址如下:
https://developer.nvidia.com/sdkmanager_deb
注意:使用该地址下载可能需要先注册Nvidia用户,注册步骤请按照官网提示一步步进行,此处不多赘述。
下载完成后打开终端 Terminal,键入以下命令安装sdkmanager(此处假设下载好的.deb安装包位于 ~/Downloads/目录,该目录是大多数浏览器的默认下载目录,如果你手动修改过下载保存目录,请自行替换):

$ cd ~/Downloads
$ sudo apt install ./sdkmanager*.deb -y

等待安装完毕后键入以下命令打开刚安装好的sdkmanager:

$ sdkmanager

二、刷机

进入SDK Manager 的GUI图形界面后取消勾选 HARDWARE CONFIGURATION 栏中的 Host Machine 选勾,再点击 Target Hardware方框右下角的三个点 ...,选择Jetson TX2 models

Read more »

智能监测平台 TJAI-Platform

开发文档

平台结构概述

监测平台(下文简称平台)采用 NextJS 作为开发技术栈。基于 NextJS 的前后端一体化和服务器端预渲染(Server Side Rendering) 特性,可以方便地进行设备端传感器数据上传和客户端页面实时刷新。

NextJS 依赖 Node.js 环境和 ReactJS 前端框架,因此开发环境上需要安装好 Node.js 和 npm 包管理工具。在 Ubuntu 20.04 LTS 版本下安装nodejs 方法如下

1
2
$ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
$ sudo apt install -y nodejs
Read more »

监测仪数据外发结构概述

监测仪会在有网络连接的前提下定时向预设的网络接口以 HTTP 协议的格式发送 POST 请求,用以向网站传递设备信息以及实时气体浓度数据。

目前设备外发数据的接口有以下五种:

  • token 请求接口:
    http://[hostname:port]/[apipath]/getToken
    用以发送用户名密码验证信息并获取返回的验证 token 。该 token 将被用于以下另四种 api 接口的身份验证。

  • 设备信息上传接口:
    http://[hostname:port]/[apipath]/deviceInfo
    用于上传监测仪的设备名称、序列号、经纬度位置信息以及所属用户。

  • 摄像机信息上传接口:
    http://[hostname:port]/[apipath]/cameraSource
    用于上传摄像机的 camera id、摄像机画面的远程获取 url 和所属设备。

  • 传感器信息上传接口:
    http://[hostname:port]/[apipath]/sensorInfoUpdate
    用于传递设备上气体浓度传感器的名称、代号、类别、上下限阈值和所属设备。

  • 实时气体浓度数据上传接口:
    http://[hostname:port]/[apipath]/realtimeDataUpload
    用于上传设备中所有气体传感器的实时浓度数据。该接口一般会同时上传所有气体浓度数据,因此发送的数据结构是数组形式。

Read more »

背景

Qt 的位置信息库 QtPositioning 中获取位置信息的输入源设置方法为:

QGeoPositionInfoSource::createDefaultSource()

该方法默认选择当前系统的位置信息提供服务获取经纬度坐标等。
我的系统是树莓派 Raspbian,因此安装了 geoclue2 作为位置服务,用上述方法创建位置信息源后开始获取树莓派的经纬度,再用 GeocodeModel 从 OpenStreetMap 处查询经纬度对应的实际地址。

以上是自研发软件的一些背景。

起因

在开发环境中调通了地址显示的功能后,编译部署到树莓派上,发现数据源一直是 Null 。但是 geoclue2 很确定是正常工作的,不管是示例程序还是开发环境都明确显示位置源没有问题,但就是在实际程序内不显示位置。

开 qDebug() 打印,supportedPositioningMethods 是正确的。终端给出的是这么一行提示:

libEGL warning: DRI2: failed to authenticate
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
qt.positioning.geoclue2: Unable to start the client: "org.freedesktop.DBus.Error.AccessDenied" "An authorization request is already pending"
qml: Source error: 0
qt.positioning.geoclue2: Unable to start the client: "org.freedesktop.DBus.Error.AccessDenied" "'[myapp]' disallowed, no agent for UID 0"

很显然,qt.positioning.geoclue2 报错那两行跟获取不到位置信息的错误高度相关,于是理所当然的从这里下手了。

Read more »
0%