Categories
验光仪

法里奥对接协议

按下打印按钮后会收到

通知指令 指令(FKR710->上位机) 指令:#!< DATY 00 #!>,该指令表示 FKR710 存在数据记录 指令:#!< DATN 00 #!>,该指令表示 FKR710 不存在数据记录 该指令在 FKR710 端触发“打印”键时由 FKR710 发出注 1,上位机针对该指令不需应答。

#!<DATY00#!>

此时要回复

获取右眼屈光数据

#!<REFR#!>

应答

#!<REFR0167.012.00-02.25---02.00-00.50006#!>

获取左眼屈光数据

#!<REFL#!>

应答

#!<REFL0167.012.00-02.25---02.00-00.75159#!>

获取右眼角膜数据

#!<KRTR#!>

应答

#!<KRTR0167.000.00-01.20MM+08.08+07.85006#!>

获取左眼角膜数据

#!<KRTL#!>

应答

#!<KRTL0167.000.00-01.10MM+08.08+07.88174#!>

返回例子

bluetooth data :  #!<DATY00#!>
falio.js:259 exam data : #!<DATY00#!>
falio.js:262 trigger printing
falio.js:277 writeBLECharacteristicValue success writeBLECharacteristicValue:ok
falio.js:298 writeBLECharacteristicValue success writeBLECharacteristicValue:ok
falio.js:219 bluetooth data :  #!<REFR0167.012.00-0
falio.js:219 bluetooth data :  2.25---02.00-00.5000
falio.js:318 writeBLECharacteristicValue success writeBLECharacteristicValue:ok
falio.js:219 bluetooth data :  6#!>#!<REFL0167.012.
falio.js:259 exam data : #!<REFR0167.012.00-02.25---02.00-00.50006#!>
falio.js:219 bluetooth data :  00-02.25---02.00-00.
falio.js:219 bluetooth data :  75159#!>#!<KRTR0167.
falio.js:259 exam data : #!<REFL0167.012.00-02.25---02.00-00.75159#!>
falio.js:338 writeBLECharacteristicValue success writeBLECharacteristicValue:ok
falio.js:219 bluetooth data :  000.00-01.20MM+08.08
falio.js:219 bluetooth data :  +07.85006#!>
falio.js:259 exam data : #!<KRTR0167.000.00-01.20MM+08.08+07.85006#!>
falio.js:219 bluetooth data :  #!<KRTL0167.000.00-0
falio.js:219 bluetooth data :  1.10MM+08.08+07.8817
falio.js:219 bluetooth data :  4#!>
falio.js:259 exam data : #!<KRTL0167.000.00-01.10MM+08.08+07.88174#!>
Categories
php

laravel wechat

用户登录流程

小程序调用 wx.login 后获得 code ,调用 laravel-wechat 的login 接口

https://depscreen.studentvision.cn/api/wechat/mini/login

返回 用户个人信息 openid accessToken 等

{
	"error_code": 0,
	"data": {
		"access_token": "bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2RlcHNjcmVlbi5zdHVkZW50dmlzaW9uLmNuL2FwaS93ZWNoYXQvbWluaS9sb2dpbiIsImlhdCI6MTczMzk4NzMzMCwiZXhwIjoxNzMzOTkwOTMwLCJuYmYiOjE3MzM5ODczMzAsImp0aSI6IkFUTTloR1dvU1VuNjlaWWgiLCJzdWIiOiIxIiwicHJ2IjoiNDI1MTRkODBlZTM4NWRhODRjYTM4YWY0NTgyZThmNTRiYjRjZmIzOSJ9.qLXirUDL8GJjkg3LS47_J1LEpdA5j02VgyfUrt6RrpY",
		"expires_in": 3600,
		"wechat_user": {
			"id": 1,
			"app_id": "wx621e0fe15a370854",
			"user_id": "0",
			"openid": "oLG3w68wIQoTn5BwLOVyREIMtiFM",
			"nickname": null,
			"avatar": null,
			"gender": "0",
			"country": null,
			"province": null,
			"city": null,
			"subscribed_at": null,
			"created_at": "2024-12-11T04:15:17.997000Z",
			"updated_at": "2024-12-11T04:15:17.997000Z",
			"gender_readable": null
		}
	}
}

之后的每个请求都要带上 该jwt access token 作为通信票据以保证安全

Accept:application/json
Content-Type:application/json
Authorization:bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2RlcHNjcmVlbi5zdHVkZW50dmlzaW9uLmNuL2FwaS93ZWNoYXQvbWluaS9sb2dpbiIsImlhdCI6MTczMzk4NzMzMCwiZXhwIjoxNzMzOTkwOTMwLCJuYmYiOjE3MzM5ODczMzAsImp0aSI6IkFUTTloR1dvU1VuNjlaWWgiLCJzdWIiOiIxIiwicHJ2IjoiNDI1MTRkODBlZTM4NWRhODRjYTM4YWY0NTgyZThmNTRiYjRjZmIzOSJ9.qLXirUDL8GJjkg3LS47_J1LEpdA5j02VgyfUrt6RrpY

controller 增加一个middleware 作为checking

Route::middleware('auth:mini')

具体实现类是
这个作为jwt入口
 Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
 php artisan  jwt:secret

该命令可以重新生成jwt 私钥

Categories
K8S

Traefik Controller

K3S 默认安装 Traefik 作为ingress 控制器

默认没有开启dashboard 且 占用了各个node的80 和 443 端口

traefix配置在kube-system 命名空间内

一个例子 暴露8081 的nexus-service

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: nexus-ingress
  namespace: nexus
spec:
  entryPoints:
  - web
  routes:
  - match: Host(`nexus.local`) # 域名
    kind: Rule
    services:
      - name: nexus-service  
        port: 8081
Categories
K8S

APISIX

apisix 作为流量网关

其本身数据通讯以来etcd

页面配置以来apisix-dashboard

以后是三个docker镜像的启动配置

containerd 脚本

apisix

#!/bin/sh
ctr run --detach --net-host --mount type=bind,src=/home/pi/apisix/apisix/config/conf.yaml,dst=/usr/local/apisix/conf/config.yaml,options=rbind:rw 192.168.0.30:30003/apache/apisix:latest apisix

dashboard

#!/bin/sh
ctr run -d --net-host --env DASHBOARD_LISTEN_IP=0.0.0.0 --env DASHBOARD_LISTEN_PORT=9000 --mount type=bind,src=/home/pi/apisix/apisix-dashboard/config/conf.yaml,dst=/usr/local/apisix-dashboard/conf/conf.yaml,options=rbind:rw 192.168.0.30:30003/apache/apisix-dashboard:latest apisix-dashboard

etcd

#!/bin/sh
ctr run --detach --net-host --env ALLOW_NONE_AUTHENTICATION=yes --env ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379 --env ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 192.168.0.30:30003/bitnami/etcd:latest my-etcd

apisix 和 dashboard都指定了配置文件(十分重要 对接promethus + grafana 也是在这里暴露一个metric作为endpoint)

在promethus.yml添加一个job

scrape_configs:
- job_name: 'apisix'
  static_configs:
    - targets: ['apisix:9091/metric'] 更改为指定apisix 的endpoint
Categories
linux

设置静态IP

一般通过命令nmtui设置

Categories
linux

linux 硬盘管理常用命令

dd

硬盘复制用命令 镜像复制命令

例子

sudo dd if=openwrt-image.img of=/dev/mmcblk0 bs=4M status=progress
复制当前目录下 openwrt-image.img 镜像  到/dev/mmcblk0 的硬盘

sudo dd if=/dev/mmcblk1 of=/dev/mmcblk0 bs=4M status=progress
将/dev/mmcblk1整个硬盘复制到/dev/mmcblk0  /dev/mmcblk0容量大于/dev/mmcblk1

sudo dd if=/dev/zero of=/dev/mmcblk0 bs=4M status=progress
清空控盘内容(全写0)

fdisk

管理查看硬盘分区信息

例子

sudo fdisk /dev/mmcblk0  
然后会进入硬盘命令行子命令交互空间

df

查看硬盘占用情况

df ./
展示当前目录所在硬盘分区占用情况

df -h
展示系统硬盘分区占用情况  包括挂载点信息

mount

挂载分区到某个挂载点

sudo mount /dev/mmcblk0p2 /mnt
其实一般当自动插入sd卡 或者USB就会自动挂载到这里
但是要改变挂载方式(可读可写) 就要先卸载在挂载

sudo mount -o rw /dev/mmcblk0p2 /mnt
增加-o rw 即为可读可写

umount

卸载分区

sudo umount /dev/mmcblk0p2

ln

这个命令可以为文件夹和文件设置硬链接和软连接

个人更加推崇软连接(硬链接是硬盘级别内部的连接 不能跨硬盘,软连接可以)

ln -s /path/to/source /path/to/destination

/etc/fstab

这个文件用来设置文件系统自动挂载

sudo blkid
列出系统所有分区的uuid

/etc/fstab 添加一行

UUID=1234-5678 /mnt ntfs rw 0 0

UUID=1234-5678:替换为你在步骤 1 中获取的 UUID。
/mnt:替换为你创建的挂载点。
ntfs:替换为你的文件系统类型(例如 ext4、ntfs 等)。
rw:默认挂载选项,包括 rw(读写)、suid、dev、exec、auto、nouser 和 async。
0 0:表示不进行备份和不进行文件系统检查。

Categories
K8S

K3S PVC local drive SD卡扩容

默认node 实体机器 PVC文件夹

/var/lib/kubelet/pods/<pod-uid>/volumes/kubernetes.io~csi/<pvc-name>/mount

可以通过 yaml 改变路径

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /mnt/data
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - your-node-name

通过 spec.local.path 设置指定路径

Categories
K8S

K3s 初始化

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh

或者用我的 脚本install-agent 来安装

http://gitea.robinluo.top/robin/robin-k8s-yaml-script/src/branch/master/192.168.0.34

Categories
go

wxapkg 小程序源码反编译工具

我的fork link

https://github.com/RobinLJB/wxapkg

https://gitee.com/robinljb/wxapkg.git

http://gitea.robinluo.top/robin/wxapkg.git

基于go的微信小程序 反编译工具

有空可以自己尝试源码编译

PC 微信小程序目录

C:\Users\15699\Documents\WeChat Files\Applet\wxd7114bed517d1b84

Categories
K8S

安装Nexus3 后 部署docker仓库

  1. 导航到“仓库”部分。
  2. 点击“创建仓库”按钮,选择“docker (proxy)”或“docker (hosted)”类型。
  3. 根据你选择的类型配置仓库。
  4. 选择“docker (hosted)”,则可以管理本地Docker镜像。

具体配置页面截图

开启http服务 多开通8082 作为docker 仓库服务端口(only http) 内置的https 会有证书问题

nexus 添加 docker 账号密码校验 Realms (可以允许docker login)