通过AT指令操作串口收发短信

在之前配置短信语音网关的时候买了一台华为EC122(CDMA)插电信卡使用,配置到gammu之后执行发送命令提示SMSC没有配置。
查了一下貌似CDMA没有什么短信中心号的东西。

且这台设备好多操作指令都是华为自定义的,gammu无法直接操作。
决定自己写程序操作设备串口实现短信收发。

基本思路:
1、程序文件打开串口设备,轮询串口返回;
2、当接收到+CMTI指令的之后解析指令的值,例如:+CMTI:”ME”,37,该指令意思是接到一条短信,存储在手机内存,存储Index为37;
3、通过指令:AT^HCMGR=37,读取短信内容,短信内容编码为UCS2格式,需要进行转码;

4、发送短信指令:AT^HCMGS=”电话号码” \CR\CL 之后跟着短信内容,然后输入Ctrl+Z即可发出。发送之前确认一下当前发送短信的内容格式:AT+CMGF,0为PDU格式,1为Text格式。

HUAWEI CDMA AT Command文档
Ref: http://www.letswireless.com/asp_bin/downfile/2009929121443234.pdf

TODO: 理论上上网卡总是可以通过程序操作串口发送AT指令进行操作,后续考虑完全自己实现,连gammu都不用了。

 

根宝了不起

作为一个伪球迷,昨天也是一个相当开心的日子:上海上港足球俱乐部夺得中超联赛冠军。
这是中国顶级足球联赛冠军时隔23年重回上海(上一次还是1995年,根宝带领的申花)。

我倒是基本上一直粉球星不太粉球队,比如之前德国队的巴拉克、西班牙队的托雷斯,再到武磊,差不多是2013年前后开始粉武磊。

早上刷微博,看到一张图,从昨天晚上开始累积的情绪瞬间释放 在中环上 止不住的泪流满面,触碰到心里柔软的地方。

还有多少人记得当年的根宝足球网?

 

短信语音网关的一些记录

Just For Fun. 这些事情就是乐趣本身,有人从看剧中获得满足感,有人从游戏中获得满足感,而我的乐趣来源更多是折腾这些东西,这些也都是我的小玩具。

事情要回到年初:换了iPhone之后,由于没有双卡,不得不随身带2个手机,作为热点以及小号。

期间有尝试过找一些解决方案,比如使用SIM800的扩展板接到NanoPi上实现自动接收转发短信,但是扩展板就成本来讲还是略高,暂时搁置。

直到前几天看到可以使用“上网卡”来实现发短信以及语音电话功能,瞬间选择就多了不少。3G时代的各种品牌的上网卡在闲鱼上淘淘,20块包邮就可以到手,成色非常新,原盒包装都还在。

作了一番调研,选择主要有两大品牌:华为和中兴ZTE。这类设备的英文名称一般是叫做:USB 3G Modem Dongle,如果是搜索英文资料可以基于这个关键词搜索。

抱着试试看的态度先买了一个中兴的MF190,是一款WCMDA的联通3G上网卡,默认开启短信功能,没有提供语音电话功能(插上卡之后拨打该号码会提示正在通话中),接到电脑可以正确识别出,虽然是联通定制款上网卡,但是插入移动的SIM卡也是可以正常收发短信,只不过需要一点点设置,该上网卡默认首选的网络制式是3G的WCMDA,这种制式移动SIM卡不支持,需要将网络制式调整为GPRS,这样就可以了,具体操作如下:

1、eject /dev/sr0 (设备名称根据实际情况确定),弹出网卡的cdrom之后,网卡就会切换为modem运行模式;
2、连接到设备串口,波特率是9600,执行执指令:
      AT+ZOPRT=5(保持在线)
      AT+ZCDRUN=8(禁用CD自动运行)
      AT+ZSNT=1,0,0(切换为GPRS网络)
      AT+COPS?(执行该命令可以查询当前连接的移动网络名称,如正常则会返回China Mobile相关字样)
3、执行完上述指令之后可能需要根据实际情况重新插拔上网卡才会生效;
4、语音电话功能网上找了很多资料都没有找到如何开启,也罢,单纯作为短信使用。

操作成功之后又在咸鱼淘了3台MF190,有点冲动了。

说完了中兴,现在说说华为。
华为相关的案例以及资料比中兴更多,看来通信类的产品还是首选华为,因为用的人多,遇到问题更容易解决。

选择了一台E261的联通3G上网卡,可以解锁实现语音通话功能,昨天刚到手还没有时间去折腾,周末再补充。

插曲:关于USB Hub的选择,一下子买了这么多USB上网卡,NanoPi只有一个USB,完全不够用,势必要买个USB Hub,作了一番调研,主要选择如下,按照网上的评价排名:

1、西普莱,之前也没听过,在SMZDM看评论有人提到说做工很好,搜索了一下,不少人买这个牌子的Hub做群控,看来品质还可以;
2、Anker,国人做的牌子,主要面向海外市场,做工以及口碑不错,但是国内只能淘宝或者咸鱼淘淘了;
3、Orico,据说是给Anker代工的,京东有一款京造的USB Hub好像也是Orico做的,但是口碑上不太好,据说容易坏,但是他们的Hub用的是威盛的USB Hub芯片,所以打算选择他们家的产品;
4、绿联,之前买过不少他家的线材,也买过一个USB 3.0的一拖四的Hub,轻度使用下来倒也正常,没出过什么问题,接的都是低功率设备,对电源没什么要求;

3G上网卡通信峰值电流要求可能高达1A,所以Hub务必需要带独立辅助电源,电源功率上来看,绿联有24W的,Orico 有36W的,Anker有高的60W的产品,综合下来比较倾向于Orico的36W产品,继续咸鱼淘淘。

最终选择了西普莱10口的Hub。


短信服务软件的选择:
1、kannel,最先研究的方案,细节的配置较多比较繁琐,暂时不考虑
2、smstools,第二研究的方案,已经配置好能够收发短信了,但是嫌麻烦:短信需要转码处理
3、gammu,第三研究的方案,自带数据库存储接口,短信接收到之后可以配置直接存入数据库,很方便

配置记录:
1、后端服务使用gammu,配置存储为:MySQL SQLITE
2、在gammu的RunOnReceive配置项设置触发脚本,在接收到短信的时候执行,可以在脚本里处理长短信合并,以及调用WebHook等等,更多功能就发挥自己想象力了

最终我们是要将操作系统接收到的短信让我们自己的手机可以看到,那么方式无外乎以下几种:
1、直接转发,这个最简单,但是如果是没有短信套餐的话,转发短信是需要额外付费的,我希望成本最小化,1毛钱都不想多付
2、通过邮件发送,这种可能会被邮件服务商拦截为垃圾邮件,邮件的及时性也是一个问题,作为可选方案
3、通过微信推送,这个需要申请公众号才能操作推送服务,虽然有ServerChan已经提供了这类功能,但是短信内容隐私性比较强,还是选择自己搭建服务比较可靠,暂不考虑
4、集成第三方的推送服务比如有人使用PushOver来实现,PushOver也是需要付费,暂不考虑
5、提供Web网页访问接口,需要的时候访问网页即可获得短信内容,手机上只需要保存一个网页的快捷方式即可,目前定下这个方案。

处理流程:
1、创建一张新表,比如叫做pushsms(ID, PhoneID, SenderNumber, Message, CreateAt)
2、接收到短信之后触发脚本,存储到pushsms表,如是长短信,还需要进行短信合并
3、新建一个脚本从pushsms读取短信提供Web访问

处理好短信之后接下来就是搭建一个VoIP网关,转发通话至手机,基本思路:
1、先构建VoIP网络,外线呼入使用USB Modem接入,可以设置通话路由规则,很灵活
2、手机安装VoIP客户端,配置接入自己搭建的VoIP网关,分配内网分机号,当小号手机有电话呼入的时候VoIP网关转发通话至手机的分机号,实现通话功能
3、待续,周末继续折腾





 

42-写给时光君

时间过的久,记忆模糊了,有时候连自己都会忘记当初的样子了,还是记录一下。

About 42,这个是蛮久之前在TK微博看到的,看了一下释义:

42,是道格拉斯·亚当斯所作的小说《银河系漫游指南》中“生命、宇宙以及任何事情的终极答案”的答案,由于该作品的广泛流传,而成为在其他行业借此对该作品的致敬。

在故事中,一个具有高度智慧的跨维度生物种族为了找出一个能够回答终极问题的简单答案,所以制造了一台名叫“深思(Deep Thought)”超级电脑来计算,深思花费750万年来计算和验证,最后回答答案是42。当被继续要求提供所谓的终极问题时,深思表示无法直接给出,但可以给出制造一台更大的超级计算机来计算,该种族按照方案制造了这台超级计算机,而这台计算机就是地球。该种族花费了漫长的等待去获得结果,但可惜的是,经过1000万年,在快得出结果的前5分钟,地球因为阻挡了预定兴建的星际间高速公路的路线,被Vogons族毁灭,未能给出最后的结果。

把一些事情做了了结,放下最后一点值得牵挂的事情,倒也轻松下来,回想一下,很多时候都会被这些悬而未决的事情弄的很焦虑。

今年整个市场都在回撤,个人理解下来中美贸易摩擦只是一个借口,内因更大。千万不要小瞧这些顶层制度的参与者,有句话讲:中国最顶级聪明的人都是去从政,美国最聪明的人都是去做金融。

 

家庭网关的配置记录

主要的诉求:

1、能够在外部网络随时接入到家里的内网、访问家里的各种设备;

2、家里的一些家电也带网络控制功能(所谓的智能家电),后续希望能够通过这个小网关实现电器自动控制和调节。

家庭网络情况:

上海电信500M(下行)/50M(上行)。

电信接入设备:烽火通信SDN网关,型号是 HG2821T-U,电信目前新开户以及升级上来的网络都是采用这种SDN网关,目前网上暂未找到成熟的方案进入设备进行一些配置。好在电信提供了APP跟网关设备绑定之后可以设置DMZ和UPnP,但是第一次在APP设置之后未生效,重启网关也无效。无奈拨打了电信的报修电话,电信工作人员上门之后给出的解决方案是换设备改桥接,当天工作人员换了三台设备都没有成功,约了第二天再换设备来处理,不过当天晚上的时候再试DMZ和UPnP倒是能用了。

网关接入设备:

NanoPi 2 Fire,2016年初以99元的价格购入,当时玩了一个月,安装了Ubuntu Mate,原计划是把这个小板子作为自己的开发环境使用,无奈IO性能太差,之后一直在角落里吃灰。后来买了一台ASRock的Beebox N3150作为开发机使用至今,N3150这里不展开说明。

NanoPi 2 Fire采用了三星S5P4418 SoC,1G内存,千兆网口,板子尺寸大概三分之二个信用卡大小,这个配置相对来说很不错,但是SoC发热比较大,正好有个闲置的USB风扇,对着吹用来降温。

技术方案选择:

1、VPN方案:WireGuard

2、电信网关设置DMZ到NanoPi 2 Fire

3、在操作系统镜像折腾上耗费了比较多的时间,NanoPi官方最新的镜像是4.4内核,刷到板子里不能用,发现原来新的镜像是适配新板子,对老版本的板子没有兼容。老版本的镜像是3.4内核,由于WireGuard最低需要3.10内核支持,一开始打算移植3.4内核的东西至3.16内核(LTS),也买好了串口线接入以备内核调试,尝试了2天最终还是放弃,主要原因是涉及的东西比较多,自己也不擅长这块,进展缓慢,时间投入不值得,不过对嵌入式系统的启动机制倒是了解的比较清楚以及对内核源码的结构加深了印象。最后选择了DietPi作为系统镜像而非官方镜像,DietPi官方没有提供NanoPi 2 Fire的镜像,有NanoPi M2的,查了一下资料发现NanoPi M2跟NanoPi 2 Fire的配置除了WiFi和蓝牙模块其他基本一样,尝试刷入M2的镜像到NanoPi 2 Fire,顺利启动。DietPi的镜像十分精简,镜像压缩包只有几十兆,十分推荐使用,DietPi也有树莓派的镜像。总结一下:国产板子的性价比很好,但是后续支持以及生态上还是差的比较多,出现问题自己研究解决比较痛苦,如有可能还是选择用户多的板子。

4、由于缺乏了原生内核支持,WireGuard的技术实现方案上选择了wireguard-go,目前使用下来良好。同时wireguard-go在比如MacOSX等没有原生内核支持的操作系统也可以使用。

待续。接下来记录一下折腾Home Assistant的东西。

 

焦虑、恐惧以及野望

每天都面临着很多种选择,出去的,归来的。

往往是离开才会更想念,永远珍惜身边的人。

心中满是愧疚,算是整个职业生涯最艰难的时刻,老板们倒是基本上是在安慰以及鼓励,真的好艰难。

抑或是对自己的要求太高。

身边都是一些90后的小孩子,在他们的这个年级嗬,快快乐乐。

只言片语,随便写写,记一点小事。

做不完的事情,小伙子的成长比想象的慢了一些,还有一些拔尖的小孩。