TAIDONG - 2023年4月 https://www.zhangtaidong.cn/2023/04/ zh-CN TAIDONG's Blog Sat, 29 Apr 2023 18:53:00 +0800 Sat, 29 Apr 2023 18:53:00 +0800 PostgreSQL 安装与配置 https://www.zhangtaidong.cn/archives/249/ https://www.zhangtaidong.cn/archives/249/ Sat, 29 Apr 2023 18:53:00 +0800 TAIDONG PostgreSQL 安装与配置

软件环境
操作系统
PostgreSQL 数据库可运行在 Linux、Mac OS、Windows 平台,默认端口为 5432。

软件版本
SuperMap GIS 服务器支持 9.6 及以上版本的 PostgreSQL。

Windows系统上安装PostgreSQL
PostgreSQL 为 Windows 操作系统提供了基于二进制安装包的安装方法。本文以 PostgreSQL 9.6.12 版本为例,简要介绍一下安装流程:

进入 PostgreSQL 官网下载 .exe 格式的安装文件,注意选择与您的操作系统位数相同的版本。

打开安装文件,按照提示逐一设置 PostgreSQL 安装路径、数据存储路径,初始管理员用户的密码、PostgreSQL 服务监听端口、运行时语言环境,完成安装。

注意:

PostgreSQL 的初始管理员账号是 postgres。
PostgreSQL 默认使用的端口为 5432。
选择语言环境时,如果选择中文字符集,可能会导致查询和排序结果不正确。建议选择“C”,即不使用区域。
Linux系统上安装PostgreSQL
PostgreSQL 为 Linux 操作系统提供了基于二进制安装包以及基于源码两种安装方法。本文以 PostgreSQL 9.6.12 版本,64 位 Linux 操作系统为例,简要介绍一下基于二进制安装包的安装流程:

进入 PostgreSQL 官网下载二进制安装包 postgresql-9.6.12-1-linux-x64.run。

修改安装包的权限为可读写:

chmod 755 postgresql-9.6.12-1-linux-x64.run

进入安装包所在目录,通过如下命令安装数据库:

./postgresql-9.6.12-1-linux-x64.run

设置数据库安装目录、数据存储路径以及服务端口号。这里使用默认路径和 PostgreSQL 的默认端口号 5432,直接回车即可。

选择数据库编码格式,可以选择 “C”,即不使用区域。

等待数据库安装完成即可。

使用PostgreSQL
开启远程访问
PostgreSQL 默认禁止非本机访问,如果 SuperMap GIS 服务器和 PostgreSQL 不在同一台机器中,需要修改 PostgreSQL 的配置文件。进入 %PostgreSQL_HOME%/data 目录,将 postgresql.conf 文件中 listen_address 值由 'localhost' 修改为 '*',示例如下:

listen_addresses = '*'

然后在 %PostgreSQL_HOME%/data/pg_hba.conf 文件中

IPv4 local connections:

host all all 127.0.0.1/32 md5

行后添加如下一行:

host all all 0.0.0.0/0 md5

保存并重启 PostgreSQL 后,即可实现 PostgreSQL 的远程访问。

登录PostgreSQL
配置了 PostgreSQL 的环境变量后,通过如下命令,登录 PostgreSQL:

psql -h 127.0.0.1 -p 5432 -U postgres

-h:PostgreSQL 数据库的地址。如果 PostgreSQL 安装在本机上,则为 127.0.0.1。如果远程连接PostgreSQL,则需要改为 PostgreSQL 所在机器的 IP 地址。
-p:PostgreSQL 数据库的端口号,默认为 5432。
-U:PostgreSQL 数据库用户的用户名。postgres 为默认的管理员用户名。
创建数据库
通过如下命令创建新数据库:

create database [数据库名] ;

例如:

create database iportal ;

创建数据库后,就可以使用该数据库进行安全信息存储以及 iPortal 的门户数据存储了。

注意:

1.由于部分版本的 PostgreSQL 的数据库服务只监听 Localhost 地址,当 iServer 与 PostgreSQL 不在同一机器时,可能会出现 iServer 连接 PostgreSQL 服务失败的情况。您需要配置 PostgreSQL 的配置文件 postgresql.conf,设置:

listen_address='*'

表示允许其他机器通过 IP 或域名访问 PostgreSQL 数据库服务。

  1. PostgreSQL 的安全策略默认仅允许本机的用户访问,当 iServer 与 PostgreSQL 不在同一机器时,可能会出现 iServer 使用 PostgreSQL 的系统用户访问不了 PostgreSQL 服务的情况。您需要在 pg_hba.conf 文件中添加访问策略,允许指定网段的主机可以访问,设置内容如下 :

host all all 192.168.112.0/24 md5

host:表示安装 PostgreSQL 的主机

第一个 all:主机上的所有数据库实例

第二个 all:所有用户

192.168.112.0/24 :表示可使用合法的用户信息来访问的网段,您可以将 '192.168.112.0' 替换为您期望的网段。

md5:验证方式

]]>
0 https://www.zhangtaidong.cn/archives/249/#comments https://www.zhangtaidong.cn/feed/2023/04/
Air780E + ESP32S3 短信转发器 https://www.zhangtaidong.cn/archives/244/ https://www.zhangtaidong.cn/archives/244/ Sun, 23 Apr 2023 19:46:00 +0800 TAIDONG 要求

利用ESP32驱动Air780E实现短信转发,兼容合宙ESP32S3和ESP32C3

功能

自动转发收到的短信,短信内容支持多种语言(其实就是ASCII和UCS-2字符集),目前已测试过英文、中文、日语、俄语字符

支持多个推送平台,目前接入:
LuatOS社区提供的推送服务器
Bark
Server酱
钉钉机器人
推送加 PushPlus

修改脚本,刷入ESP32

修改config.lua
修改config.board_type为正确的型号,可选值见注释
修改config.wifi,填入无线网络的SSID和密码
修改config.notification_channel,将要启用的通知通道的enabled配置置为true,并填写推送平台相关配置
烧录脚本
将firmware目录中对应的固件烧入开发板
将所有lua脚本下载至开发板
2023-04-23T11:32:29.png
将开发板上电开机,等待初始化完成后,即可转发短信到配置的通知通道。


LED灯状态含义

2023-04-23T11:37:08.png
ESP32S3
C3的D4或S3的LED A为初始化状态灯,闪烁代表正在初始化,常亮代表初始化完成,准备转发短信
C3的D5或S3的LED B为工作状态灯,平时长灭,收到新短信后高频闪烁,转发完成后熄灭

Air780
POW灯为电源指示灯,通电后常亮。注意,这个LED不代表开机状态,只要板子有电这个灯就会亮
NET灯为网络状态指示灯,长亮短灭代表正在初始化蜂窝网络,短亮长灭代表网络注册成功,可以接收短信


Firmware目录下的文件说明
LuatOS-SoC_V1004_ESP32C3_classic.soc对应ESP32C3 经典款
LuatOS-SoC_V1004_ESP32C3_lite.soc对应ESP32C3 简约款
LuatOS-SoC_V1004_ESP32S3.soc对应ESP32S3

固件均通过合宙云编译精简掉了不需要的功能,以保证内存空间充足。LuaTools自动下载的固件不能用,系统启动之后内存就不够用了,发不出去HTTP请求。

目前固件包含gpio、uart、pwm、wdt、crypto、rtc、network、sntp、tls、wlan、pm、cjson、ntp、shell、dbg。

]]>
1 https://www.zhangtaidong.cn/archives/244/#comments https://www.zhangtaidong.cn/feed/2023/04/
使用Air724ug开发板进行短信转发 https://www.zhangtaidong.cn/archives/235/ https://www.zhangtaidong.cn/archives/235/ Sat, 22 Apr 2023 19:05:00 +0800 TAIDONG
  • 需求

  • 老方案: 树莓派+ec20 + 卡托 + gammu-smsd进行处理转发,不是很稳定,所以寻找替代方案。

    • 硬件

    air724ug 开发板。支持LuatOS 进行二次开发

    • 软件

    LuatOS 链接: 地址

    下载工具

    Luatools: 调试下载固件工具: 地址
    驱动:调试下载固件使用的驱动: 地址
    LuatOS 固件:使用LuatOS-Air固件 地址

    • 烧录固件

    固件选择: Luat_RDA8910_TTS_NOLVGL_FLOAT 这个版本,支持TTS,不支持蓝牙
    使用Luatools将固件和上层的lib烧录进入air724ug

    • 二次开发短信转发Lua脚本

    PROJECT = "SMS_Forwarder"
    VERSION = "1.0.0"
    BARK_URL = "https://api.day.app/M8xxxxxxxx/"
    
    require "sys"
    require "http"
    require "sms"
    require "common"
    require "cc"
    require "audio"
    require "net"
    
    -- HTTP 回调,显示调试信息用
    function httpCallback(result, prompt, head, body)
        if result then
            print("HTTP", prompt, body)
        else
            print("HTTP Request Failed. ", prompt)
        end
    end
    
    -- 推送信息到BARK
    function notifyToBark(msg)
        http.request(
            "GET",
            -- BARK_URL..string.urlEncode(msg),
            BARK_URL..string.rawurlEncode(msg), -- 对内容中文进行编码
            nil, -- 不指定证书
            nil,
            nil,
            30000, -- 发送超时,ms
            httpCallback, -- 回调
            nil
        )
    end
    
    --[[
    num:短信号码,ASCII码字符串格式
    data:短信内容,字符串格式
    datetime:短信日期和时间,ASCII码字符串格式
    ]]
    function smsCallback(num, data, datetime)
        print("SMS FROM ", num, " IN ", datetime)
        print(data)
    
        data = common.gb2312ToUtf8(data) -- 短信编码要转换为目标平台支持的UTF-8
        -- data = string.gsub(data, "*", "\\*") -- Telegram 特殊字符转义
        -- data = string.gsub(data, "_", "\\_") -- Telegram 特殊字符转义
        notifyToBark(data.."。from:"..num)
    end
    
    call_in = false
    
    -- 电话拨入回调,在这里发送通知并接通电话
    function call_incoming(num)
        print("CALL FROM ", num)
        if not call_in then
            call_in = true
            notifyToBark(num.." 给您来电")
            cc.accept(num)
        end
    end
    
    -- 电话接通回调,这里播放TTS通知对方
    function call_connected(num)
        print("CALL CONNECTED")
        call_in = false
        --通话中向对方播放TTS
        audio.play(7,"TTS","您好,机主无法接听您的来电,请使用短信联系机主。",7,nil,true,2000)
        --30秒之后主动结束通话
        sys.timerStart(cc.hangUp,30000,num)
    end
    
    -- 电话挂断回调,停止TTS
    function call_disconnected(discReason)
        print("CALL DISCONNECTED")
        call_in = false
        sys.timerStopAll(cc.hangUp)
        audio.stop()
    end
    
    -- 定时任务:每天发送短信到10001查询流量
    sys.timerLoopStart(
        function()
            sms.send("10001", "108", nil, nil)
        end
    , 24*60*60*1000
    )
    
    --加载网络指示灯和LTE指示灯功能模块
    --根据自己的项目需求和硬件配置决定:1、是否加载此功能模块;2、配置指示灯引脚
    --合宙官方出售的Air720U开发板上的网络指示灯引脚为pio.P0_1,LTE指示灯引脚为pio.P0_4
    require "netLed"
    pmd.ldoset(2,pmd.LDO_VLCD)
    netLed.setup(true,pio.P0_1,pio.P0_4)
    
    --设置短信回调
    sms.setNewSmsCb(smsCallback)
    
    --禁用RNDIS,防止跑流量
    ril.request("AT+RNDISCALL=0,1")
    
    --注册电话回调
    sys.subscribe("CALL_INCOMING", call_incoming)
    sys.subscribe("CALL_CONNECTED", call_connected)
    sys.subscribe("CALL_DISCONNECTED", call_disconnected)
    
    --每1分钟查询一次GSM信号强度
    --每1分钟查询一次基站信息
    net.startQueryAll(60000, 60000)
    
    -- 系统初始化
    sys.init(0, 0)
    sys.run()

    1. 将 BARK_URL 改成自己对应的bark app 推送地址
    2. 如果使用其他推送,修改 notifyToBark 函数,实现相关逻辑
    3. 默认开启了来电提醒,会将来电号码推送给手机,如果不需要 将notifyToBark(num.." 给您来电")注释掉
    4. 默认开启了来电自动接听,并且播放TTS语音提醒,如果不需要,注释掉电话相关的回调注册
    ]]>
    0 https://www.zhangtaidong.cn/archives/235/#comments https://www.zhangtaidong.cn/feed/2023/04/