2024年3月

        作为听着广播电台里的轻音乐开始古典音乐启蒙的人,我一直对轻音乐情有独钟。说到轻音乐队,众说周知的是三大轻音乐队,但上世纪六十年代的Pery Faith的乐队演奏了无数影视乐曲,却成为普通人耳熟能详却不为人所知的所在。《Percy Faith's Greatest Hits》这张专辑收录的乐曲即使不是耳熟能详,也让人一见如故:

        买到这张黑胶唱片可不容易!
微信图片_20240311084943.jpg

        结合domoticz系统的构建,2018年在楼顶安装了家用气象站,气象站采用一套HAM友提供的套件,弃用其温度百叶箱(内含主控)及无线液晶屏等显示部件,保留套件中风向风速传感器及雨量传感器,增加一个百叶箱,用BM280测量温湿度与气压,用一块NODEMCU作为主控芯片,测量计算风向风速雨量等信息,通过2.4G无线局域网向Domoticz和OneNET发送数据。这一版气象站问题还是不少的,最大的问题是架设在屋顶,与家里路由器隔了一个带有屏蔽作用的钢筋混凝土的屋顶,WIFI连接十分不稳定,经常出现掉线的情况,想了很多办法,包括在阳台增设无线中继放大器等,始终无法彻底解决连接不稳定问题,曾经考虑过改用有线联网,但气象站的百叶箱太小,放不下ethernet模块和POE模块,加之感觉这套系统中风向风速等传感器的技术比较玩具,例如风向是八个干簧管,通过串接不同阻值电阻指示八个方向,无法准确测量风向,风速是风杯旋转时干簧管通断产生脉冲信号等,雨量传感器虽然采用的是翻斗式的设计,但其受雨口并未按照国标设计等,也就凑合用了下来。
微信图片_20240311084953.jpg

        最近这套系统彻底没数据了,断电重启也无效,这才下定决心进行换版重制。这次选用RS485接口的气象站组件,内置了温湿度气压,以及超声波风向风速传感器,还有一个光学雨量传感器。超声波测量风向风速似乎已经相对成熟,但采用光学方法测量雨量倒是没有想到,搜索了一番发现,似乎这也是一种得到承认的方法,那就试试吧。采用RS485组件的优点是一是数据读取方便,因其采用modbus协议,一个RS485设备可以集成多种传感器,只要发送指令读取每个传感器对应的寄存器数据即可,二是RS485传输距离长,一根RS485电缆从屋顶连下来,主控模块也可放在室内,防护更好,也方便后期调整升级固件。这次采用ethernet连接,不会再出现连接不稳定现象。
微信图片_20240311084931.jpg

        调试过程中的技术问题及解决要点如下:

  • Arduino的MODBUS RS485库有很多,作为主站控制的话,SensorModbusMaster是最好用的。虽然作者说这个库用于带自动收发的芯片,例如MAX13487的时候效果更好,但试验下来,如果只用9600这样波特率的话,MAX485芯片工作也完全正常。
  • RS485接口电路中AB之间的终端电阻是用于阻抗匹配的,用来减少反射,但是如果RS485接线本身不长的话,加上终端电阻反而是有害无益,调试时发现读取数据很不稳定,设置了8N1的串口协议有时候只能读出7bit数据,百思不得其解,去掉终端电阻就一切正常了。而且加上终端电阻后将大幅度拉低AB间电平,所以加不加,最好试验着看。
  • 有人串口ethernet模块如果出现发送的数据语法格式无误,但就是返回代码400的话,大概率是串口工作模式没有处在正确模式上,即发送数据时还处于命令模式,或发送命令模式时还处于数据透传模式,但是ethernet工作过程中可能会出现各种情况,编写程序时难以穷尽所有情况,所以一个讨巧的办法是在进入命令模式时先发送一遍进入数据透传模式,反之亦然,这样如果工作模式正确最多返回一条-1错误,不影响程序正常运行,但如果工作模式不正确,则正好可以纠正到程序设计模式上来,后续工作就一切正常了。

        domoticz总的来说是算稳定的开源系统,但自己增加功能势必遇到各种稀奇古怪的问题,domoticz中文区半死不活,domoticz.com访问又被拒绝,解决问题还是颇费时间。当然有些问题属于自己对raspbian还没有烂熟于心的缘故,raspberry pi遇到问题搜索大法不一定管用,国内搜索质量良莠不齐,很多解答随着软件版本的更新已失效,最高效的方式还是把问题转换为英文,在google上搜索往往第一页还没有翻完就找到答案。以下是一些记录备忘,此文将不定时更新。

  • raspberry pi的定时任务设置问题。经常遇到定时任务设置了但是没有起作用的情况,而且好像crontab在不同位置有不同文件,有的配置文件还与用户账号有关。试验下来,用这个命令没问题: crontab -e ,要想更保险一点,执行的脚本用绝对路径。修改完了后不要忘记sudo service cron restart重启服务。
  • domoticz的开关等可以设置开或关时触发动作,但语句开头必须是http://或https://或script://,执行脚本时语句格式是:

    scripts:///home/xx/xxx.../xxx.py
    scripts:///home/xx/xxx.../xxx.sh
    scripts:///home/xx/xxx.../xxx.lua

    等等,如果设置了执行脚本但是没有起作用,大概率是被执行脚本没有打开执行权限,脚本执行后日志中返回错误码32256或512都是这个问题,进入脚本目录执行sudo chmod +x XXX.pysudo chmod 755 XXX.py即可,如果还不行就写个sh脚本,把执行命令等写进去,设为执行这个sh脚本就可以,貌似用这个方法被执行脚本打开不打开执行权限都没有关系。

  • domoticz.com屏蔽国内IP后,官网论坛可以访问https://en.domoticz.cn/forum/,官网WIKI可以访问https://en.domoticz.cn/wiki/Main_Page。貌似国内的镜像站?

        往微信推送信息,Server酱是最方便的办法。注册,获得一个KEY,再在微信上弄个企业微信的链接,就可以通过post https://sctapi.ftqq.com/.send?title=short_title&desp=long_content来推送信息,SENDKEY是你的发送密码,title后面是推送标题,desp后面是推送内容,内容用markdown语法,可以是文字、图片、链接或者几者的混排,但它用的好像是commonmark.org的语法,有些通用写法它不一定认。你用什么语言POST都可以,当然用python是最方便。

        于是我:

用它来推中央气象台的各种气象图微信图片_20240304114327.jpg

用它来推定制的天气预报微信图片_20240304114336.jpg

用它来推domoticz的实时数据微信图片_20240304114318.jpg

用它来推前一晚流星监测站的监测结果微信图片_20240304114355.jpg

        总之想推什么推什么,用python写个简单的脚本抓取想要推送的信息,然后通过Server酱推送就好。把脚本丢到树莓派上,设个定时任务,就可以定时推送啦。

        Domoticz控制开关用ESP-01S是最方便的办法。ESP-01S烧录ESPEasy固件后,可以不用编程,仅仅经过简单设置就可以在Domoticz中使用。之前在淘宝买过ESP01继电器板,用来控制灯光等需要外接电源模块,颇为不便,最近看到https://www.instructables.com/Home-Automation-Using-ESP01/上的印刷电路板,设计科学,将电源模块也集成在电路板上,外接电器十分方便,下载印刷电路板图制作后,试验成功。有几年没有烧录ESPEasy了,一些步骤不太记得,费了一些功夫,把流程记录如下,以后再用也方便些。

  • 先下载ESPEasy固件和烧录器,最新版在https://github.com/letscontrolit/ESPEasy/releases,其中也有历史固件。不一定要下载最新版,要选择下载ESP8266系列的固件。
  • 将ESP-01S插在编程器上,烧录ESPEasy固件,注意要选择1M那个版本的固件,不能用4M1M版本的。
  • 烧录完毕后按编程器上的复位按钮,稍后在wifi列表中连接新出现的ESP_0的SSID,连接密码是configesp。
  • 浏览器会自动弹出配网窗口,如果没有弹出,在浏览器中输入192.168.4.1,进入配网界面,选择ESP-01S需要连接的网络SSID,输入密码保存。模块配网后会重启,显示模块的IP地址。如果没有显示,切换网络到局域网上,在局域网内寻找新联网设备,记录IP地址。
  • 在浏览器中进入模块IP地址,进行配置。模块配置可以看https://blog.csdn.net/lionwerson/article/details/104417481,其实最好是对比之前已经做好的配置进行配置。

        几点Tips:

  • 不同的继电器板有不同的控制逻辑,比如原来在淘宝上买的继电器板是低电平导通,网上这个继电器板电路则是高电平导通,如要上电即导通,则设置中“Hardware”中GPIO-0模式要设置为Output Low。
  • Domoticz增加新的开关要到设置-硬件中找到之前设置的Dummy,点“创建虚拟传感器”,选择传感器类型为开关,输入一个名字,在开关页面就可以看到新建的开关。
  • ESP-01S与ESP-01的区别是前者的IO口已经内置上拉电阻,不需要在电路板上再行设置,所以尽量选择ESP-01S。这个网站也讲了两者区别和ESPEasy的配置过程https://sancla.com/domoticz/esp8266-with-esp-easy/
  • 不同版本的easyesp烧录器各有不同,较新版本固件的烧录器除了要选择固件版本,还要选择烧录起始地址,地址选0x00000000即可。

微信图片_20240303230103.jpg