人间烟火气,最抚凡人心
Passerby
Merlin梅林cfddns重启后自动更新失效
我是用koolshare软件中心的cfddns插件来实现动态域名的需求,用来连接家中设备。在配置页面设置了60分钟自动更新一次,在保存后通过日志检查自动更新命令允许正常,能够按照预设的周期看到如下Log: Jan 21 14:10:00 crond[546]: USER admin pid 1438 cmd /koolshare/scripts/cfddns_update.sh 可是当路由器重启后,cfddns定时更新并不能正确执行,看作者Github的issue,也有其他人遇到类似的问题,应该是插件开发中还有缺陷。于是我查了查cfddns是通过crontab将定时脚本记录在了/tmp/var/spool/cron/crontabs/admin中,而根据Merlin的帮助Wiki,这个位置是记录在RAM里的,重启就失效了,建议将脚本保存在jffs分区,并通过init-start脚本实现开机再次写入。所以对于我遇到的这个cfddns可以用这个办法解决,通过vi /jffs/scripts/init-start 创建一个新文本,填入以下内容,其意义是每次重启会自动同步一次,然后每隔1440分钟(一天)再自动同步一次。 #!/bin/sh /koolshare/scripts/cfddns_update.sh echo “*/1440 * * * * /koolshare/scripts/cfddns_update.sh #cfddns_update#” >> /tmp/var/spool/cron/crontabs/admin 之后将文件赋予执行权限: chmod a+rx /jffs/scripts/init-start 注意通过这样子设置的更新周期不会反向同步到cfddns网页设置的那个窗口中,实际定时任务间隔以上边脚本中数字为准。到此cfddns脚本自动更新任务就设置完成了,重启一下,试试吧! Reference: https://github.com/RMerl/asuswrt-merlin.ng/wiki/Scheduled-tasks-(cron-jobs) https://bugxia.com/946.html https://github.com/geek5nan/koolshare-cfddns/issues/5
Merlin梅林cfddns重启后自动更新失效 Read More »
Merlin梅林老版本固件软件中心无法显示插件
最近打算将我的R7000拿回家里使用,发现koolshare软件中心检测不出版本,经过查询是由于koolshare更改过域名,老版本内置的域名失效,所以无法连接服务器,需要更新一下配置里边的软件中心域名信息。 ssh或者telnet登录到路由器中,输入以下命令: sed -i ‘s/koolshare.ngrok.wang/ks.ddnsto.com/g’ /koolshare/scripts/ks_app_install.sh sed -i ‘s/koolshare.ngrok.wang/ks.ddnsto.com/g’ /koolshare/webs/Main_Soft_center.asp 在我更改后也没有重启,再次打开软件中心的时候,就显示找到了最新1.4.8版本的软件,点击按钮成功完成插件的更新。 Reference: https://www.koolcenter.com/posts/57
Merlin梅林老版本固件软件中心无法显示插件 Read More »
Jenkins 发送验证邮件失败
最近在玩Jenkins想配置一个邮件提醒,在正确配置了SMTP服务器账号密码信息后,点击发送测试邮件死活发不出去,并报下边的错误。我检查了很多遍我的配置,并且从其他一个服务器拿过来一个在用的确认没错的配置以及账号尝试发送还是不成功。查了很多帖子,原来是这里发送邮件的账户,应该与上边填写的系统管理员账户(System Admin e-mail address)一致,修改后示例邮件发送成功。看来这个Jenkins坑还不少啊。 java.net.SocketException: Connection or outbound has closed at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:1297) at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:116) at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81) at java.base/java.io.BufferedOutputStream.flush(BufferedOutputStream.java:142) at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2429) Caused: jakarta.mail.MessagingException: Can’t send command to SMTP host; nested exception is: java.net.SocketException: Connection or outbound has closed at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2431) at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2418) at com.sun.mail.smtp.SMTPTransport.close(SMTPTransport.java:1394) at jakarta.mail.Transport.send0(Transport.java:233) at jakarta.mail.Transport.send(Transport.java:100) at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.java:714) at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:710) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:397) at
Jenkins设置系统语言
最近玩一玩Jenkins,在安装好默认的配置下,语言是中英文混杂,看着太别扭了,有些中文翻译也很别扭,我感觉还有可能有误导嫌疑,于是我想讲系统语言设置成英文,可是在配置页面找了好几遍竟然没找到,查了下原来是需要一个插件才能完成这个基本的功能: Locale: https://plugins.jenkins.io/locale/ 安装好后在系统设置页面找到Locale栏,Default Language输入en_US并且勾选“Ignore browser preference and force this language to all users” 即可将默认语言更改为英文。 这个locale用的是Linux格式,即xx_YY ,比如zh_CN。可以在Linux上运行locale -a查看所有可用的locale。 Reference: https://blog.csdn.net/nklinsirui/article/details/89576475
Linux SSH 更换登录端口
登录到服务器的,然后修改/etc/ssh/sshd_config 配置,添加新的一行: Port 123 后边按个数字就是自己设定的端口号。在这个文件中有一行注释掉的 #Port 22 也可以将#去掉,然后将数字换掉,意义一样。
CAN FD总线基础
学习笔记系列之CAN FD总线。 之前一篇笔记记录了CAN总线基础:https://blog.shuspieler.com/3649/ , 在这继续记录CAN FD的知识。 如果用一句话总结CAN FD和CAN的区别的话,就是为了加大数据吞吐率,在Payload使用了不同的传输频率,头部尾部保持不变,从而在相同的时间长度,传输了更多的数据,就像下图所示。 CAN FD协议需要新的控制器,而新的控制器是兼容老的CAN协议的,也就是说CAN FD控制器可以向下兼容与CAN控制器通信。有时候车身CAN控制器可以混杂部署,比如通过将一部分CAN控制器设置成休眠模式,就可以在CAN FD控制器之间进行高速传输,比如刷新ECU的时候。通常通过CAN需要传输几小时,通过CAN FD就可以大大减少这个时间。 下边是CAN FD和CAN 帧的对比图: 首先是CAN FD没有remote frame这个帧了。也不难想到,首先是这个用的确实不多,其次remote frame没有Data Field,而CAN FD 和CAN区别就在这里,所以remote frame就失去了其意义。在数据帧中,RTR也被换成RRS(Remote Request Substitution),并且保持显性电位。在帧头的SOF,IDE,以及帧尾的ACK,DEL,EOF以及ITM(Intermission Field)都与CAN总线一致。 CAN FD和CAN的帧主要区别位于IDE和ACK之间。如下图所示,两者的区分是那个r保留位,当r是显性电平逻辑0时候,代表这是一个传统的CAN帧,当r是隐性电平逻辑1时候,说明这是一个CAN FD帧,同时这个保留位r有了一个名字FDF: Flexible Data Rate Format。 CAN FD控制器可以发送和接收传统CAN帧以及CAN FD帧,传统CAN控制器在接收CAN FD帧由于显性电平r是不符合规则从而会报错,然后将通过错误帧应答,也就是说,传统CAN并不能解析CAN FD数据,按照错误帧处理。 CAN FD中有一个新的帧叫做BRS(Bit Rate Switch),当这一位是显性时,中间部分数据传输速率baud rate 2 和帧头帧尾传输速率baud rate 1 是相同的,这种情况下CAN FD并不能起到加速速率传输的效果。当这一位是隐性时候,中间部分数据传输速率变为 5Mbit/s,这是一个在实验室大量验证证实在绝大多数车身网络这是比较可靠的值。BRS的值决定了中间部分从BRS起到ACK之前的速率。 ESI全称Error State Indicator,这一位是显性代表这个节点是Error Active状态,如果这一位是隐性,代表这个节点是Error
CAN总线基础
学习笔记系列之CAN总线。 基础知识已经学习过很多次了,可是时间久了对于一些细节的记忆就会模糊不清,每次资料看别人的总结还不如自己也总结一下,之后看自己的笔记就好了。 CAN (Controller Area Network) 在1980年由Bosch提出并于1994年进行了标准化(ISO 11891-1)。时至今日,CAN依旧在汽车动力总成,底盘等领域有着广泛的应用。CAN可以提供非常可靠的数据传输,以及满足很多情况下对于实时性的要求。 CAN标准可以再细分为高速和低速两种不同的子协议,主要区别在于物理层的电压不同从而最大传输速率有区别,低速CAN(CAN Low Speed)遵循 ISO 11891-3 标准,最高传输速率为 125 kbit/s. 高速CAN(CAN High Speed)遵循 ISO 11898-2 标准,最高传输速率为 1Mbit/s。通常我们汽车领域用高速CAN并且设置速率为 500 kbit/s,同时低速CAN也有特有的优势,比如说抗干扰能力强。 下边这张图对比了我们熟知的OSI七层模型和CAN 模型的对比。 通常情况下,CAN协议通过硬件控制器(CAN controller)的形式实现,物理信号的收发通过CAN收发器(CAN Transceiver)进行。通常选择非屏蔽双绞线来连接CAN收发器,传输距离不超过40米,并且在两端需要连接两个120 欧姆的电阻(仅高速CAN,低速CAN不做要求),以防止信号反射造成干扰。协议还规定了,一条CAN总线最多连接32个节点。 由于不同信号有着不同的传输频率的需求比如有的传输周期是10毫秒有的是100毫秒,所以也就催生了CAN控制器(CAN Controller)分为带储存(缓存)型和不带缓存型两种。不过对于上层控制器来说,一致都是将CAN控制器当作一个“储存芯片”对待,从中读出和写入数据。 双绞线可以有效地降低电磁干扰,在CAN总线(CAN Bus)中这两条线分别被称作 CAN high line (CANH) 和 CAN low line (CANL). 在网络物理层基于差分电压传输,这种模式可以有效消除电机,点火系统等开关造成干扰电压冲击带来的影响。 对于高速CAN,协议定义差分电压0伏代表逻辑1,并被称为隐性; 差分电压2伏代表逻辑0,被称为显性。有点绕,但是一定要记清楚! 关于高速CAN和低速CAN差分电压的规定如下图: 以高速CAN为例子,理解为何差分为2逻辑为1,是显性;而差分为0逻辑为0,是隐性,可以结合下午CAN收发器(CAN Transceiver) 物理实现来理解: 同时显性会覆盖隐性,也就是说,当同一时刻不同的节点有发送显性也有发送隐性,那么在总线上会展示成为显性,只有当所有的节点都发送隐性的时候,总线才会展示成隐性。我是这样记忆的,假设我们有多个TxD,只有所有的Driver都发送逻辑1:隐性,也就是所有上边和下边的三极管都是断开状态(Driver输出0),那么对于Receiver才能测出差分电压为0,单反有一个TxD发送了逻辑0,就是有一对上下三极管是接通状态(Driver输出1),那么CANH和CANL就分别接到了VCC和GND,那么Receiver检测的差分电压就是2V。当然现实情况会有一定的误差,CAN协议规定当差分电压大于0.9伏才能被认为是显性(逻辑1),差分电压小于0.5V才能被认为是隐形(逻辑0)。 对于低速CAN,协议规定差分信号是5V代表逻辑1,差分信号是2V代表逻辑0。根据CAN协议逻辑,可以看出显性和隐性是AND逻辑。就是说有一个发逻辑0(显性),结果就是逻辑0(显性)。 在CAN通信中,节点是以广播的形式发出信息的,所有节点都可以接收,然后根据其中的ID号过滤来确定是否试自己需要的信息。在数据格式上,CAN的Frame共有三种形式:Data
敏捷和Scrum
Manifesto for Agile Software Development We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That
控制变量法下的鼻炎
大约七八年前我在郑州读书的时候,我患有非常严重的鼻炎。那时候郑州空气污染很重,一年之中鼻炎最严重的就是送暖的第一周,我甚至能够根据我鼻炎的程度,感知学校是不是开始暖气送暖了。2014年冬天我去到了德国,当时还想着去体验一下那里的优质医疗,由于也都是免费的,想着读书之余,把鼻炎根治一下。但是神奇的是,那年冬天一天鼻子难受都没有过,甚至之后接下来的七年,也完全没有再犯过。我甚至都以为我的鼻炎自己好了,因为都七年了,一丁点事情都没有,很是开心。逐渐地逐渐地,我甚至都快忘了我有鼻炎的毛病,直到今年冬天。 今年回国来到北京生活,真的领略了大家说的北方冬天的空气以及大家口中所说的北京不适宜生存是什么意思。空气长期保持在一个不干净的状态,到了秋冬加上环境干燥,我熟悉的七八年前鼻炎的体验终于又回来了,原来我鼻炎并没有自动好,只是在德国的那七年,一次都没犯过罢了。到了今天实在扛不住的时候,我终于妥协了,开始吃下火药和消炎药。自诩体格非常好,印象中已经七八年没吃过药了,我完全想不起来上次吃药是啥时候,这次重拾小药片,纪念一下。。。 三四月份刚回来时候也有一定程度鼻炎过敏,那时候我猜可能是花粉,之前没过敏过,体验下来也是挺难受的,从那时起养成了看空气质量的一个习惯。我发现同一个地儿的空气质量与所用的手机有关系,以及是用百度或者谷歌查询有关系。比如下边的几个例子,两个是春天同一天拍的,中午用苹果查出来AQI是22评级是非常好(Excellent)而右边三星同一时间查出来的是AQI是52评级是中等(Moderat)。另一张晚上用苹果查出来的是55评级是很好(Good),右边三星查出来是85评级很差。这几天由于我鼻子很难受,我又对比了一下,中午时间苹果AQI是88评级是很好(Good),三星AQI是101评级是非常差(sehr schlecht)。真的很有意思,同一时间同一地点的空气质量,竟然与用户使用的手机品牌有关系,也是长知识了。