Uncategorized

Vector DaVinci学习笔记:数据类型、接口以及SWC定义

在我学习SOME/IP过程中,涉及到了AUTOSAR常用的数据类型定义,手头上正好有Vector 的DaVinci工具,想着能否从AUTOSAR层面再递进一个层次对这个话题的学习,研究研究能否用DaVinci复刻一个之前一直用的那个SOME/IP示例数据库。 我手头有DaVinci的Developer和Configurator的License,可我没有参与具体的项目没有SIP包,所以我的电脑连Configurator装都装不上去,联系Vector售后看是否有Demo版本的SIP,至少采购DaVinci的License花了钱的至少能让我熟悉熟悉,可惜是沟通了好久无果,遗憾只能只学习学习DaVinci Developer,暂时没机会去了解Configurator了。 详细研究了一段时间Developer这个工具,我意识到我并不能从0复刻出来之前那个数据库。根据AUTOSAR体系结构的定义最高抽象为三层:应用软件层(Application Layer),运行时环境层(Runtime Environment, RTE)和在微控制器上运行的基础软件层(Basic Software, BSW)。而DaVinci Developer更多是对应用软件层做接口设计,对于系统相关的设定是不在其负责的范围内。对于我想要做的事情:设定ADAS和CAMF两个SWC并位于两个ECU或两个域中,其通过SOME/IP进行连接,传输的内容是一个多层嵌套的复杂结构体,这三件事可能只有第三个可以在Developer工具中完成,甚至ADAS和CAMF之间的接口,都体现不出来这是一个SomeIP Service,下边会具体介绍。 我的是Classic AUTOSAR工具,其主要编程语言是C,在图形化界面设计完成各个功能模块SWC后,可以生成对应的Contract Phase Headers 和Implementation Templates,从中可以看到工具将其定义的数据类型整理成C语言支持的数据结构,以及通过大量的宏定义将一些常量命名为人类友好可读的形式。还有就是工具定义了很多的接口用于SWC与之后的RTE进行功能调用数据传输。对于功能模块SWC也生成了空函数,便于后期具体逻辑填入从而实现完整的功能。 整体来说我对Vector DaVinci Developer的理解是,帮助我们在一个C语言功能开发的项目中定义头文件,通过工具的严谨性来保证代码开发方式下人类容易发生的低级错误,在此同时也会对C语言的灵活性做出一定的限制,避免一些C语言骚操作的使用不当造成未知的隐患。整体能感受到工具的目是降低数据类型定义的复杂度和出错概率,提高C语言语法使用的正确性。我们一步一步看一下工具的使用吧。 首先在DaVinci Developer中新建一个Workspace,对于要使用的AUTOSAR的版本我选择了最新的,在这儿如果是具体项目使用,就需要和整个项目所用的版本保持一致。从这个下拉框我们也可以看到,对于AUTOSAR版本的定义之前是X.Y.Z的形式,从某一个节点后改成了RYY-MM的格式,现在这种形式感觉直观了很多。 接下来我们整体看下这个工具的主界面,比较常用到的就是下边的几个框,其中1是来查看我们定义的不同元素的视图切换按钮,通过Types/Packages/Files不同维度,来看我们定义的Data Types/ Constants/ Components 等不同层级的元素。框2即为查看具体内容的地方。这次学习笔记后边大部分内容主要就是介绍这里边的各个项。 图3的框是灰的,在手册中看到这是由于我的Workspace是单独由DaVinci Developer生成而造成的,如果是配合了DaVinci Configurator的话,框3的功能既可以解锁。不过通过其他的途径我们可以使用其部分内容比如Software Design,Data Type Mapping等,后边也会有提到。 框4是的按钮可以按照AUTOSAR标准来检查我们的设计和配置是否有错误。可以帮我们做一些标准一致性上的检查,还是很实用的。框5是看我们鼠标当下选中的元素的具体属性信息的。 模仿之前数据库我计划是设计ADAS/CAMF两个SWC,之间的数据接口使用的TrafficSignDetection结构体。我额外设计了一个叫做Preprocessing的SWC,来模拟一个DistanceToSign的输入。在DaVinci Developer设计SWC时候有Composition Component Types 和Application Component Types两个概念,主要的区别是Composition可以理解成功能整体,而Application是组成整体的最小模块。Composition可以包含其他的Composition和Application,而Application是最小逻辑单位了不能再继续拆分。在这里我配置了一个ADAS_CAMF_Composition,我们假设这即为摄像头自动驾驶系统,然后这个系统由三个子模块组成:ADAS, CAMF 和Preprocessing,如下图。 双击我们新建的Composition,即进入了Software Design的界面了。可以看下图我这里的结构,一个Composition下挂3个Application,选中顶层Composition可在中间Interface Graphic界面看整个功能的对外接口,当前我的示例中输入为一个DistanceToSign_Application_Port_Interface_Comp_Input, 输出为DistanceToSign_Application_Port_Interface_Comp_Output。 切换在Structure Graphic视图,可以直观看到整个功能里边的模块是信号怎么流传的。我的学习示例中整个功能唯一的输入先送到Preprocessing模块,然后再原封不动透传到ADAS模块,假设再ASAS里我们做了一些处理,然后输出一个TrafficSignDetection结构体到CAMF,再在CAMF里边做一些处理,输出一个DistanceToSign作为整个功能的输出。 接下来从0开始看下这个例程中数据类型是怎么配置的。以Speed和signDistance为例,下边截图是对于Speed的Unit、CompuMethod 以及 Int To Phys […]

Vector DaVinci学习笔记:数据类型、接口以及SWC定义 Read More »

德国中国(新生儿)疫苗对比

要准备着给即将到来的新生儿打疫苗,了解到有很多必须接种的有一些是自费接种的,搞不明白哪些是真的推荐自费的哪些是医院用来营收的,我想着对比一下德国和中国的疫苗免疫体系,计划从中找点启发。 首先是中国儿童免疫程序表: 接下来是德国的儿童免疫程序表: ✅ 共同接种的疫苗项目(中德都有) 疾病 中文疫苗名称 英文缩写(中国) 德国对应名称 说明 乙肝 乙肝疫苗 HepB Hepatitis B 接种时间略有差异,中国更早 卡介苗(结核) 卡介苗 BCG – 德国不常规接种,仅推荐给高风险人群(非普种) 脊髓灰质炎 脊灰灭活疫苗、脊灰减毒活疫苗 IPV, bOPV Poliomyelitis 德国只用灭活疫苗(IPV) 百日咳 百白破疫苗(含) DTaP Pertussis 同为联合疫苗成分 白喉 百白破疫苗 / 白破疫苗 DTaP / DT Diphtherie 同上 破伤风 百白破疫苗 / 白破疫苗 DTaP / DT Tetanus 同上 麻疹 麻风腮三联疫苗 MMR Masern 接种时间略有不同

德国中国(新生儿)疫苗对比 Read More »

在德国补打疫苗推荐

下边这一段是之前朋友想我咨询在德国需要补哪些疫苗我给到的回复,当时研究了好久自己补了很多,所以时不时就有朋友问,之前我就把这一段发给他们,现在感觉可以记录在这里,有需要在德国补打疫苗的可以参考一下: 疫苗推荐更新:刚刚和医生详细沟通了一下,并且拿我自己总结的小时候打过的疫苗让医生看看哪些需要补打,很多错过的就错过了,主要是针对婴幼儿时期容易生的病。剩下的还有这些: DPPT(破伤风、白喉、骨髓灰质炎和百日咳): 每十年补打一Hepatitis A&B(甲肝乙肝): 每十年补打一次Influenza(流感): 每年一针所以小时候应该都打过,只是国内不知道要不要每十年补打,我身边人包括自己做到这一要求的不多。所以可以和医生讲价情况补打一次MMR(麻疹、腮腺炎、风疹):我上次没问医生也没主动提这个疫苗,今天问了下医生说小时候没接种啊!刚刚查了一下这个疫苗中国2008年是加入的免疫计划,所以2008年之前出生的可能没有接种过。而这个疫苗在德国是儿童时期强制接种的。医生说现在很多公共场合区域就需有对这个疫苗的接种证明。我今天医生这个需要再打,医生说以前接种过得找接种的地方去查记录,没有记录的就要重新接种,医生讲,医生看记录时要注意,一些疫苗的接种需要有 MMR 接种证明才能上岗。于是今天被捅住打了一针 MMR。 注意:DPPT 需要打一针,Hepatitis 需要打 3针,第一针第二针间隔1个月,第二针第三针间隔6个月。另外不同疫苗之间最短间隔 4周,如果不同疫苗间隔少于4周,需要医生评估。像今天我打 MMR 同周上次甲肝乙肝刚过去 2周,违背了疫苗注射的推荐间隔4周的要求,就是护士拿着接种单去找医生做了二次确认才来给我注射。 最终版总结:DPPT(破伤风、白喉、骨髓灰质炎和百日咳):每十年补打一针,Hepatitis A&B(甲肝乙肝):每十年补打一次,三针Influenza(流感):每年,一针MMR(麻疹、腮腺炎、风疹):2008年前出生,在德国生活推荐补打,2针 Reference:https://www.bundesgesundheitsministerium.de/themen/praevention/impfungen/schutzimpfungen.html http://www.caixin.com/2020-01-04/101500751.html http://www.chinacdc.cn/jkzt/ymyjz/zswd_10960/201904/t20190426_201664.html https://www.chinacdc.cn/jkyj/mygh02/jswj_mygh/myfw_mygh/202505/U020250528538419216264.pdf

在德国补打疫苗推荐 Read More »

华硕路由器梅林固件设置IPv6防火墙

之前在家里设置了一个影音库,与公网通过IPv6连接,实现pt上传积分和从外部对家里的多媒体资源访问的需求,我的家庭影音库。当时对于家庭路由器防火墙的设置,是通过静态唯一地址设置的,后来发现一个问题,在路由器重新拨号,或者时间够久的情况下中国移动端会改变IPv6前缀,这就出现了一个问题,我们通过上篇文章操作的防火墙设置,其中的IP地址已经不正确了,造成pt上传赚积分也赚不到了,从外网也连不到我家里的NAS媒体资源。所以使用了半年多以来,几乎每一两个月都得重新设置一遍IPv6防火墙,挺烦的。 于是我查好资料看有没有通过类似于通配符的方式设置防火墙,这样子及时前缀变了,但是依旧能映射到唯一的硬件设备。还真有解决方案,不过由于我是使用的梅林版的华硕路由器,有一些查出来的对原版梅林固件好使的方法,在我这里不适用,我找啊找终于到到适合我的方式。如果也有小伙伴使用华硕路由器结合梅林固件,需要在动态IPv6的情况下设置防火墙,可以参考一下我的方法。 首先IPv6设置里边对于子网的IP选择Stateless,这样子路由器给设备分配的IP后边4段会根据路由器的Mac地址结EUI-64算法生成唯一设备后缀地址。然后我们在NAS设备里看下实际分配的地址,然后在华硕路由器里边IPv6防火墙本地 IP 地址要按 0::a:b:c:b/0::ffff:ffff:ffff:ffff 的格式进行填写,其中 a:b:c:d 部分替换为实际设备 IP 地址的后四段。端口部分可以一次填入多个,使用英文逗号分隔,例如:5000,5001,5006,5999,8096,16681。 查询各种帖子了解到,对于华硕路由器,可以设置为 ::a:b:c:d/::ffff:ffff:ffff:ffff格式。也有帖子提到对于梅林改版固件,不能留空双冒号,即为0:0:0:0:a:b:c:d/0:0:0:0:ffff:ffff:ffff:ffff 格式。这几种方式在我这里会使iptable配置报错,造成公网的IP地址丢失,从而整体IPv6都不可用了。有帖子说这是特定版本梅林的Bug,第一位的0不能省略,确实在我这里实践好使。 设置后保存重启我们试一下,路由器拿到了新的前缀,然后pt工具也可以看到与公网联通了,上传通路正常。 觉得有帮助的小伙伴来点个赞啊。   Reference: https://post.smzdm.com/p/a2xx273n/ https://www.right.com.cn/forum/thread-8417643-1-1.html https://www.cnblogs.com/osnosn/p/11781359.html https://post.smzdm.com/p/a25gmdoq/ https://zhuanlan.zhihu.com/p/665423070 https://www.zhihu.com/question/363164098 https://www.right.com.cn/FORUM/thread-4108336-1-1.html  

华硕路由器梅林固件设置IPv6防火墙 Read More »

低成本监控私有云解决方案:小米摄像头+路由器+U盘

家里上一代的监控摄像头还是十几年前部署的,当时储存方案是本地microSD卡和远程FTP,限制于当时的技术,摄像头分辨率比较低,同时远程控制功能也比较基础,虽然厂家提供了DDNS动态域名解析,但是也需要家庭宽带有公网IP并同时设置了端口映射才能远程访问到。相比于现在产品,最大的欠缺是实时预警,老款做不到在第一时间觉察家中有异样。在旧设备平稳运行了十几年后,最近发现设备不工作了,电源灯不亮,拆开看到电容都鼓包了,感觉是真到了设计寿命终止的时刻了,于是着手调研更换一批新的设备。 研究了一圈目前市面上比较有名的家用监控摄像头,最终锁定在小米和萤石这两个品牌上。前者入围是由于小米在物联网家用智能设备做的确实很不错,米家生态真的非常完整且成熟;后者入围是看到萤石是海康威视旗下针对家庭用途推出的产品,信赖海康在公共安全监控领域的技术积淀。这两个品牌的产品我都亲自体验了,总体给人的感觉是基础功能都差不多且基本够用,对我来说比较关注手机远程控制,云存储,画面变动检测,远程报警功能,这两个品牌解决方案都能满足。我还挺关注在本地SD卡存储之余还需要云存储,主要是不太放心本地SD卡储存稳定性,以及怕在极端情况下有人闯入家中损坏摄像头,造成储存介质丢失,这样就失去了监控的意义。 两个品牌云存储费用有一些区别,小米7天滚动存储是188一年,萤石是对于活动录像139(160原价)一年,可以理解成只存储带事件的那一段,如果是全部存储价格高达了799(原价999)元。 最终我给家里大批量部署选择了小米品牌,但是原因不是上边提到的云存储价格,是因为我连188都嫌贵😂。每台设备每年188,而我至少是有4台设备,将来可能有需要还会继续增加,加一块这费用就可太高了。我想自己实现云存储这个效果,这就是我标题提到的:低成本监控私有云解决方案:小米摄像头+路由器+U盘。 经过查询以及亲自体验知道小米摄像头支持Samba协议将视频转存到局域网中的NAS服务器里,而NAS只是个代称,只要是Wifi同一个网络中支持Samba储存协议的设备都可以,最直接的就是路由器本身了。现在绝大多数的家用路由器都有USB接口,支持Samba协议将U盘设置成共享网盘。我的路由器AC86U其中的一款,在硬件设备上,把U盘插到这里,如下图。 这里有个点需要注意下,若路由器中提供了USB3.0(蓝色)和USB2.0(白色)两种接口,最好使用USB2.0,因为USB3.0会和2.4G Wifi造成干扰,影响Wifi无线连接的稳定性。一些路由器会提供一个选项,大意是降低USB3.0的干扰,原理是主动降低两者的性能,这终究不是我们想要的效果,对于我们的需求,USB2.0足够了,就像我上图,U盘插到了左边白色的槽中。 在路由器设置页面,已经可以看到USB2.0高亮代表识别到挂载了一个设备,点击然后格式化一下,建议使用NTFS格式,带日志,对于文档安全性好一些。在右侧信息一栏可以看到容量用掉了多是还剩多少,在中间那个长条也是显示已用容量,如下图。 我所用的华硕路由器还可以执行健康度检查,隔一段时间可以运行一下,看看这个U盘有没有出现什么问题。当设置好后,点击左边“USB相关应用”,二级菜单选择“服务器中心”,三级打开“网络共享(Samba)/云端硬盘”,在这里就可以设置Samba共享网盘的信息了。在这里建议将允许访客登入关掉,以防止知道你家Wifi后直接就可以看到网上邻居共享文件家中存放的监控视频。在下方红框内可以设置共享网盘的用户名密码,以及开放的文件夹权限了。建议新建一个文件夹而不是存在U盘根目录,然后将权限设置成读写(R/W)。 当我们设置好后,在米家应用小米摄像头设置页面,我们已经能够看到存储设置下,NAS已经不在是灰色,变成了黑色可用状态了,点击进入输入一些基本用户名密码信息,然后选择要存到的对应文件夹,这里可以看到识别到的文件夹名字,就是我们在路由器中设置的名字。一切设置好后就可以看到小米摄像头可以正常转存视频到路由器下的U盘了,这里还有一些设置比如说视频储存时常设置,这个可以理解成滚动存储,根据自己U盘大小按需设置。上传时间间隔建议选择实时,这样才能达到我们的目的,及时转存摄像头拍下的数据到云端。   到目前为止基本上我们的私有云滚动存储就设置完了,在这里有两个可以优化的点,可以进一步加强储存设备的稳定性,首先是若无特别需求的话,在存储卡设置中将录制模式设定成录制移动画面,这样可以大幅降低SD卡可U盘的负担。另外如果条件允许的话,强烈建议将U盘换成移动硬盘,或者SSD U盘,提高硬件的可靠性。 之后可以在电脑端查看共享网盘的内容,在同一网络下的话,在Network中大概率自动就可以识别到共享网盘。注意Mac客户端需要切换一下smb登录用户名为路由器中设置的值,因为Mac默认会用自己用户名登录;Windows下的话,一些电脑可能默认没有打开smb服务,表现是网络中没自动识别共享网盘,或者点击\\192.168.50.1提示缺APP。网络上找一下教程开启一下Windows smb服务即可。 试用了一段时间,效果还是很不错的。这样设置后,相当于监控摄像头拍摄到的画面存储了两份,一份在摄像头中的SD卡中,另外一份存储在了私有云我们U盘中,实现了双保险。在极端情况下假设不法分子进入室内后破坏掉我们的摄像头,损坏了其中的SD储存卡,那么在物理损坏摄像头前最后的视频,还会留存在我们私有云U盘中一份的,达到了和官方云服务相同的目标。并且可以同一存储空间挂多个摄像头,比如说我目前设置好了两个,一个安装在客厅,一个安装在地下室,由于在同一个网络,都二次备份到我路由器同一个U盘里,通过不同文件夹来区分。 下边说一下另一个品牌:萤石。之所以没有选择这个,是因为这个品牌不支持SMB或者FTP这两个常见较容易搭建的网络存储空间。若想搭建自己私有云远程备份,就需要用到萤石官方的电脑上位机软件,或者在NAS中运行Surveillance Station通过萤石支持的RSTP协议进行管理。这样子一下子成本就高了起来,要不就用一台24小时开机的电脑,要不就是买一个NAS。虽然我自己有NAS,但是我不愿意长期运行一个软件,这对我NAS的寿命也有影响,萤石的解决方案远不如SMB/FTP轻巧方便。但是萤石有几个功能非常实用,而这部分小米是做不到的,就像下图的“设备下线提醒”,“电话提醒服务”,“在线值守”如下图。对于家庭来说,设备下线提醒很有必要的,有时候设备由于一些原因已经离线很久了,但是用户并没有及时察觉。另外两项对于商家感觉很有必要,当出现异常情况,APP通知可能不能及时看到,但是打来一个电话这优先级还是很高的,将异常及时送达的效果也高很多。在线值守的话,更像是用AI的能力在检测一切可能出现的异常。总之感觉下来,可能也与萤石是海康产品的原因,很多的功能有很重的商用设备的味道,就比如远程管理的模式和这几个额外服务,像是一个商用摄像头的简化版拿过来民用。总之是各有各的好处和特点,如果他们俩能够相互学习借鉴一下,那就更好了。 至此小米摄像头+私有云搭建就结束了,最后放一张我的摄像头照片吧,房顶射灯不怎么用,将一个射灯电源去掉,然后将小米摄像头底座用强力双面胶粘到那个灯上,大小刚刚好,美观程度也还行,喜欢。 觉得有用的话,点赞评论告诉我一下吧。^_^

低成本监控私有云解决方案:小米摄像头+路由器+U盘 Read More »

华硕AC86U路由器改装散热

家中路由器放在弱电箱里,由于封闭环境空气不流通,芯片过热路由器经常挂掉,表象就是WiFi信号能搜到但是连不上,只能重启解决。到了夏天比较热那段时间,以及到了冬天地暖开始供热,这种现象更加频繁,非常非常地影响正常使用。网上搜索信息了解到AC86U这款路由器芯片和散热片之间是用导热垫连接的,热传导性能相对较差,芯片的热量并不能有效通过厚厚导热垫传给金属散热片。同时我的AC86U又放在密闭空间,空气对流差,更加不利于路由器芯片散热。于是我将AC86U做一定程度的改造,将导热垫换成导热铜片,并添加硅胶增强贴合性,同时去掉外壳直接将AC86U的PCB板放在弱电箱使用,从而有效缓解了芯片温度过高路由器死机问题。 首先将AC86U外壳打开,有两个螺丝需要拧下,在下图的背面红框处。 然后慢慢撬开前后壳塑料勾子,取下前壳。 PCB板正面有几个螺丝与路由器后壳固定,拆掉螺丝同时卸掉天线和螺丝,就可以拿下路由器后板,如下图PCB正反面。 拆掉导热板中间和四周的螺丝,就可以将导热板拿下了,此时可以看到芯片和导热板之间,是用厚厚的导热垫连一块的,就在这一块瓶颈,让整个AC86U散热很差。我们要做的就是将这三个导热垫换成铜片和导热硅胶,加强导热性能,就像电脑CPU散热器的一样。 准备好导热铜片和硅胶,铜片是我经过测量后在淘宝订做的,两颗小芯片用的是12mm*12mm*2mm尺寸,大芯片用的是15mm*15mm*2mm尺寸,放在那个方框里刚刚好。 先在芯片上涂上硅胶,然后将导热铜片放在芯片上,如下图。然后再在铜片上涂上硅胶,装回金属散热片。 由于我的AC86U是放在家中的弱电箱里,可以关门是个密闭空间,同时也没太多灰层,我决定不装外壳,直接裸奔使用。找了一个架子与地面隔开,减少冬天地暖的影响,还挺合适。 经过了一段时间的观察,可以说效果惊艳。长期使用三颗芯片温度甚至都没有超过55°,也没再出现过死机的现象,至此AC86U散热改造就完成了,效果非常满意。 随手测了一下网速,家中宽带也很给力,500M宽带能跑满。 之后有空再记录一下出门在外连回家中内网的方案,也是挺好玩的,占坑。

华硕AC86U路由器改装散热 Read More »

对讲机信道总结

民用对讲机:公共频道,409-409.990MHz,功率低于0.5W,免执照可使用 信道 频率(MHz) 1 409.7500 2 409.7625 3 409.7750 4 409.7875 5 409.8000 6 409.8125 7 409.8250 8 409.8375 9 409.8500 10 409.8625 11. 409.8750 12 409.8875 13 409.9000 14 409.9125 15 409.9250 16 409.9375 17 409.9500 18 409.9625 19 409.9750 20 409.9875 业余电台:业余频道,430-440MHz,需要执照和操作证,常用信道划分: 信道 频率(MHz) 1 430.1375 2 430.4375 3 431.1375 4 431.4375 5

对讲机信道总结 Read More »

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 »

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 发送验证邮件失败 Read More »