首页
归档
分类
标签
更多
留言板
说说
关于
Search
1
饥荒联机版控制台代码大全
1,024 阅读
2
编译安装带 Brotli 压缩的 Nginx
930 阅读
3
Obsidian多端快速同步插件
901 阅读
4
树莓派+EC20模块实现连接蜂窝网和短信收发
887 阅读
5
EC20通过gammu接收短信再转发优化
865 阅读
软件
CSS
Python
MySql
Java
typecho自定义
Vue
学习笔记
Linux
Shell脚本
Nginx
树莓派
邮件
拍照
热点
ec20
云盘
系统烧录
好玩
饥荒
硬件
工具
笔记
随心记
登录
Search
标签搜索
树莓派
Linux
Java
CSS
饥荒
小妙招
个人热点
nextcloud
云盘
DHT11
学习笔记
树莓派拍照
Nginx
MySql
ESP
娱乐
ec20模块
文件共享
git
图床
Mango
累计撰写
51
篇文章
累计收到
7
条评论
首页
栏目
软件
CSS
Python
MySql
Java
typecho自定义
Vue
学习笔记
Linux
Shell脚本
Nginx
树莓派
邮件
拍照
热点
ec20
云盘
系统烧录
好玩
饥荒
硬件
工具
笔记
随心记
页面
归档
分类
标签
留言板
说说
关于
搜索到
2
篇与
的结果
2024-07-23
EC20通过gammu接收短信再转发优化
前引在接收到短信之后会将内容较大的短信内容拆分到不同文件中保存,在之前的自动转发脚本转发短信文本内容不全解决最近在阅读gammu官方文档的时候发现官方有个Processing message text in Python 的示例:Following script (if used as RunOnReceive handler) written in Python will concatenate all text from received message:#!/usr/bin/env python import os numparts = int(os.environ["DECODED_PARTS"]) text = "" # Are there any decoded parts? if numparts == 0: text = os.environ["SMS_1_TEXT"] # Get all text parts else: for i in range(1, numparts + 1): varname = "DECODED_%d_TEXT" % i if varname in os.environ: text = text + os.environ[varname] # Do something with the text print("Number {} have sent text: {}".format(os.environ["SMS_1_NUMBER"], text))这个python脚本能将在不同文件中的短信内容拼接,刚好能够实现我们的需求,将这个python代码转写为shell代码,和之前的短信转发代码组合后的新代码:#!/bin/bash numparts=${DECODED_PARTS} text="" if [ "$numparts" -eq 0 ]; then text=${SMS_1_TEXT} else for i in $(seq 1 $numparts); do varname="DECODED_${i}_TEXT" if [ ! -z "${!varname}" ]; then text="${text}${!varname}" fi done fi echo "${text}" |mutt -s "树莓派转发${SMS_1_NUMBER}短信" mstzf@foxmail.com就能够完美实现短信转发功能gammu官网链接:{% link RunOnReceive,Gammu,https://docs.gammu.org/smsd/run.html#index-7 %}ec20模块使用:{% link 树莓派+EC20模块实现连接蜂窝网和短信收发,TeohZY,https://blog.teohzy.com/post/raspi-ec20/index.html %}
2024年07月23日
865 阅读
0 评论
0 点赞
2024-04-08
树莓派+EC20模块实现连接蜂窝网和短信收发
软硬件树莓派ec20wvdialgammuSIM卡EC20模块概述EC20-CE是移远通信最近推出的LTE Cat 4无线通信模块,采用LTE 3GPP Release 11 技术,支持最大下行速率 150 Mbps和最大上行速率50 Mbps;同时在封装上兼容移远通信多网络制式LTE EC21系列、EC25系列和EG25-G 模块,实现了3G网络与4G网络之间的无缝切换。EC20-CE采用镭雕工艺,镭雕工艺具有外观更漂亮、金属质感强、散热更好、信息不容易被抹除、更能适应自动化需求等优点。EC20-CE内置多星座高精度定位GNSS(GPS/GLONASS/BDS/Galileo/QZSS)接收机;在简化产品设计的同时,还大大提升了定位速度及精度。EC20-CE内置丰富的网络协议,集成多个工业标准接口,并支持多种驱动和软件功能(适用于Windows 7/8/8.1/10/11、Linux、Android等操作系统下的USB驱动等),极大地拓展了EC20-CE在M2M领域的应用范围,如CPE、路由器、数据卡、平板电脑、车载、智能安全以及工业级PDA等。产品特性更多详情可到官网查看{%link LTE EC20-CE,QUECTEL,https://www.quectel.com.cn/product/lte-ec20-ce %}产品手册 Quectel_Product_Brochure_CN_V7.8)查看设备是否挂载成功使用命令sudo ls /dev |grep ttyUSB挂载成功会有如图输出要是没有看到设备则检查设备是否稳定插入、更换USB口或者重启设备之后再重新使用命令查看拨号上网wvdial安装wvdial是一个方便使用的PPP拨号模块,它能调用调制调节器,并通过PPP上网,无需像手动拨号一样配置繁琐的文件sudo apt update sudo apt install wvdial配置修改配置文件sudo vim /etc/wvdial.conf可以继续使用 [Dialer Defaults]也可以重新根据自己需要添加,我这里为了没有多余手机卡,也为了方便输入命令,就直接使用电信/移动SIM卡使用以下配置[Dialer Defaults] Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Modem Type = Analog Modem Modem = /dev/ttyUSB3 Baud = 115200 New PPPD = yes ISDN = 0 Phone = *99# Username = card Password = card联通卡使用以下配置[Dialer Defaults] Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Init3 = at+cgdcont=1,"ip","uninet" Modem Type = Analog Modem Modem = /dev/ttyUSB3 Baud = 115200 New PPPD = yes ISDN = 0 Phone = *99# Password = card Username = card配置来源于 Quectel EC20 在 Linux 上的使用在配置文件中大部分都不需要自己调整,只有Modem和Baud需要根据自己设备情况进行调整Modem:根据情况选择合适的设备我的这个ttyUSB2和ttyUSB3都能正常使用Baud:根据情况选择合适的波特率,对于ec20来说9600-115200都可以启动wvdialsudo wvdial查看网络设备ifconfig可以看到多了ppp0和wwan0两个设备正常情况还无法访问网络,因为默认路由在其他网络设备中,需要重新配置路由配置路由查看路由sudo route配置路由的方式有很多种,我这里的方法比较简单粗暴,需要具体配置的可自己查找方法sudo route add default dev ppp0该命令会在路由表中添加一条新的默认路由在每次重启后都会刷新路由,可以将命令加到/etc/rc.local中,每次开机都执行添加方法sudo vim /etc/rc.local在exit 0前添加su - root -c `route add default dev ppp0`通过systemctl来管理wvdial开机自启wvdial的方法有很多种,并不一定要使用systemctl最简单的就是和添加路由一样,在/etc/rc.local中添加启动命令sudo vim /etc/rc.local # 添加 wvdial &编写控制wvdial启动和检测wvdial运行脚本新建sh脚本文件,可以放到你想存放的地方我这里在root用户下/root/shell中sudo mkdir /root/shell && cd shell # 名字可以任起 sudo vim onwvdial.shwvdial控制脚本内容#!/bin/bash DEVICE_NAME="/dev/ttyUSB3" # 和wvdial配置设备一致 LOG_FILE="/var/log/wvdial_on.log" # 日志文件存储位置 PROCESS_NAME=(wvdial pppd) # 需检查占用软件 # 定义函数检查进程是否占用设备 check_device_usage() { local process_name=$1 local device=$2 local pids=$(pgrep -f "$process_name") if [ -z "$pids" ]; then return fi for pid in $pids; do echo "pid:$pid" local device_count=$(lsof -p "$pid" 2>/dev/null | grep -e "$device" | wc -l) if [ "$device_count" -gt 0 ]; then echo "占用设备:$device" kill $pid fi done return } function check_wvdial() { if pgrep -x "wvdial" >/dev/null; then return 0 # wvdial 进程在运行 else return 1 # wvdial 进程未运行 fi } for process in $PROCESS_NAME; do echo "进程名: $process" check_device_usage $process $DEVICE_NAME done wvdial >> "$LOG_FILE" 2>&1 & route add default dev ppp0 while true;do if ! check_wvdial;then echo "$(date +"%Y-%m-%d %H:%M:%S") - wvdial 进程未运行,正在重新启动..." >> "$LOG_FILE" wvdial >> "$LOG_FILE" 2>&1 & fi sleep 120 done该脚本包含功能:停止wvdial启动前所需设备的占用启动wvdial添加ppp0默认路由每120秒检测wvdial是否运行记录启动、错误日志设置可执行权限sudo chmod u+x /root/shell/onwvdial.sh编写systemctl控制文件sudo vim /etc/systemd/system/wvdial_on.service配置文件内容如下:[Unit] Description=Safe Start Wvadil After=dev-ttyUSB3.device Requires=dev-ttyUSB3.device [Service] User=root Group=root ExecStart=/root/shell/onwvdial.sh # 路径根据自己配置修改 [Install] WantedBy=multi-user.target 启动服务systemctl daemon-reload systemctl start wvdial_on.service systemctl enable wvdial_on.service设置自启动后就不需要在/etc/rc.local中添加修改路由和启动wvdial命令了配置防火墙如果在ec20模块连接4G网络后还需要使用wifi则需要配置防火墙,不需要则不用配置sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE sudo iptables -A FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o ppp0 -j ACCEPT 将防火墙规则写入文件 sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"顺序执行命令即可收发短信安装软件gammusudo apt install gammu gammu-smsd配置gammu使用命令sudo gammu-config配置可参考我的或者直接修改/root/.gammurc,效果是一样的如果没有/root/.gammurc文件就使用命令[gammu] port = /dev/ttyUSB2 model = connection = at19200 synchronizetime = yes logfile = logformat = nothing use_locking = no gammuloc =修改 /etc/gammu-smsdrc[gammu] # Please configure this! port = /dev/ttyUSB2 connection = at19200 # Debugging #logformat = textall # SMSD configuration, see gammu-smsdrc(5) [smsd] service = files logfile = syslog RunOnReceive = /root/msmtp/sh/send-smsd.sh # 发送邮件脚本 # Increase for debugging information debug = yes #debuglevel = 0 # Paths where messages are stored inboxpath = /var/spool/gammu/inbox/ outboxpath = /var/spool/gammu/outbox/ sentsmspath = /var/spool/gammu/sent/ errorsmspath = /var/spool/gammu/error/编辑收到短信后自动发送邮件脚本树莓派配置邮件这里不再赘述,可以自行搜索,或者参考我之前的一篇博客{% link 树莓派开机自动发送邮件,TeohZY,https://blog.teohzy.com/posts/smpxjfsyj/ %}编辑脚本vim /root/msmtp/sh/send-smsd.sh文件路径根据自己需要修改#!/bin/bash for i in `seq $SMS_MESSAGES` ; do if [ $i -eq 1 ]; then phone="$SMS_1_NUMBER" fi tmp="$(eval echo '$'SMS_${i}_TEXT)" message="$text$tmp" done echo "$message" |mutt -s "树莓派短信转发" xxx@163.com重启gammusystemctl restart gammu-smsd.service短信测试向目标号码发送短信后邮箱能收到短信通过终端向其他号码发送短信gammu-smsd-inject TEXT 目标号码 -text '短信内容' -unicode如果收到短信说明配置成功短信发送失败踩坑查看端口占用sudo lsof /dev/ttyUSB2如果有其他进程和gammu-sms占用设备,可以使用kill命令结束非必须进程设备波特率和wvdial重复检查wvdial配置和gammu配置,如果wvdial已经使用了ttyUSB3和波特率115200则gammu配置中就不要再使用相同设备和波特率,可以使用ttyUSB2和波特率at19200ModemManager占用设备查看设备后发现有进程ModemMnana在使用设备,可以停用ModemManager需要考虑实际使用情况来判断,在确认ModemManager确实不是必要软件后再进行操作sudo systemctl disable ModemManager.service sudo systemctl stop ModemManager.service
2024年04月08日
887 阅读
0 评论
0 点赞