Passerby

在德国补打疫苗推荐

下边这一段是之前朋友想我咨询在德国需要补哪些疫苗我给到的回复,当时研究了好久自己补了很多,所以时不时就有朋友问,之前我就把这一段发给他们,现在感觉可以记录在这里,有需要在德国补打疫苗的可以参考一下: 疫苗推荐更新:刚刚和医生详细沟通了一下,并且拿我自己总结的小时候打过的疫苗让医生看看哪些需要补打,很多错过的就错过了,主要是针对婴幼儿时期容易生的病。剩下的还有这些: 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 »

SomeIP学习笔记:使用CANoe调试/仿真SomeIP服务

从上一篇文章(SomeIP学习笔记:基础知识)的介绍可看出SOME/IP标准预先定义了很多很实用的数据类型,可在实际项目中可能处于兼容性的需求,不完全依照上边数据类型原始定义使用,可能会结合着信号矩阵有进一步的定义,比如说有Offset和Scale的设置等。 接下来记录一下用CANoe怎样调试或者模拟AUTOSAR环境下的SOME/IP通信,在这里我使用的是CANoe SP5的一个SOME/IP例程:Basic AUTOSAR SOME/IP Event,如下图。 这个样例是使用Simulation Setup模式结合了一个ARXML创建的,已经有了很好的Pannel,对于我们学习Simulation消息订阅很方便。在下边两个框CAMF和ADAS,我们可以点击Enable Service或者Subscribe Service, 从上边的Trace窗口可以看到对应的服务端、客户端相应的Offer Service、Find Service、Subscribe Event group以及Stop Subscribe Event group的报文。 这个报文其实现原理主要依赖了三大块:CANoe的SOME/IP协议栈、示例ARXML数据库以及几个节点的CAPL代码。 其中示例ARXML数据库定义了一个服务端(Provider: CAMF)和一个客户端(Consumer: ADAS),规定了其支持的服务类型:即一个名叫ADASDisplayInfo的Event 事件通知,然后这个事件传输的变量叫做DetectedTrafficSign,类似于一个结构体,里边有SignType、DistanceToSign以及Realiabiliy变量,以及每个变量的更加细致的定义。 然后CAPL代码一方面实现了对于变量的填充,另一方面调用CANoe的SOME/IP协议栈进行Event Notification的发送以及SD服务发现事件订阅的过程。 最后SOME/IP协议栈提供了底层的交互支持,以及对CAPL的API调用的支持,从而非常简单实现服务发现订阅以及发送接收。 在这个例程默认的界面下,可以尝试点击那些按钮来从trace看服务端怎样发送报文Offer一个Service,以及客户端怎样发送报文Find 一个Service,以及服务订阅上后ACK是什么样,还有到了真正Event Notification的报文是什么样。这对于基础的SOME/IP报文熟悉还是非常有帮助的。 而截至目前所能模拟的通信都很依赖ARXML对于Service的定义,我想记录的更多的是对于自定义SOME/IP的学习以及调试方法。以这个ARXML中的服务为例,首先我们需要将其转换成CANoe可编辑的模式,使用CANoe自带的小工具将其转换成可编辑的数据库格式vCODM。 接下来就用不到这个例程了,我们把刚刚转换号的vCODM数据库存到某个文件夹,然后以此为例记录一下怎样使用CANoe的SOME/IP协议栈来自定义数据库模拟一个服务。 我们新建一个空的工程,使用Communication Setup模式,然后在红框1 和红框2处倒入刚才我们转换完成的数据。红框3我们下一步再点击,接下来将两个节点设置成仿真模式,以及将Real Bus换成Simulated Bus模式,现在运行一下看看效果。 点击运行后到Trace窗口看到,并没有像Simulation Setup 的例程那样有Service Offer、Service Find 以及Subscribe信息。 这个区别的主要原因是例程中数据库并没有开启服务发现SD协议,而例程中通过CAPL命令实现了Service Offer以及Service Subscribe。由于我们新建的没有这些脚本,所以从Trace来看并没有任何SOME/IP相关的数据。 在一开始我们了解到SOME/IP有一个SD服务发现的协议,在这儿没有起作用,是因为在数据库中,示例数据库这个设置处于关闭状态。我们在刚才按钮3的地方进入数据库编辑页面,然后将Discovery Technology协议从None 改成SOME/IP Service Discovery,这样子协议栈就会自动执行服务发现过程,保存运行然后我们再观察Trace窗口,有时候需要重新加载一下数据库才能生效。 现在看到已经有了Service Offer、Service Find、Subscribe Event group

SomeIP学习笔记:使用CANoe调试/仿真SomeIP服务 Read More »

SomeIP学习笔记:基础知识

在整车功能开发以及调试过程中,ECU与ECU之间使用车载以太网的比例越来越多,所以区别于之前的CAN总线报文的,对于以太网数据包的抓取和分析越来越普及了,而其中又绕不开SOME/IP,每一个搞过车载功能开发都或多或少接触过或者使用过SOME/IP。我在了解这个协议过程中走了不少弯路,后来发现并没那么复杂,于是打算把自己的心得记录下来。 主要从3个角度记录我所学习的SOME/IP,首先是一些基本的知识,其次是怎样用Vector CANoe来调试一个结合了AUTOSAR通信,包括怎样在CANoe里边调整数据库实现自定义调试;最后做一个实践,使用开源的SOME/IP协议栈vsomeip,来和我们CANoe的SOME/IP协议栈做一个真实的通信。 SOME/IP基础知识 SOME/IP是基于TCP/UDP/IP协议之上的应用层协议,很像网络开发中前后端交互的HTTP的方式。如果之前做过前后端的开发,对于客户端和服务器的连接有一定的知识储备,那么在了解SOME/IP的过程中会觉得很简单的。SOME/IP依托于TCP或UDP,所有的数据都是作为TCP/UDP的Payload通过IP协议进行传输。可以理解成在Payload中又做了进一步的切分,并且比特位以及长度做了事先约定,例如下图中的前16个Bit固定为Service ID,紧接着的16个Bit为Method ID或者Event ID。 目前网络中常见的SOME/IP学习路径和学习资料,包括我之前看的一些,大多是在CAN总线技术路线以及实现方式的基础上介绍SOME/IP的特点以及技术细节的,很多从以太网IP以及UDP和TCP开始讲起,然后再说到SOME/IP的各种Header头部还有服务订阅等等内容,这样的一个学习路径,非常容易把很多的类似的概念参合到一起,比如IP层、UDP、TCP以及SOME/IP都有Header头部,IPv4和IPv6头部又不一样,TCP的三次握手四次挥手和SOME/IP的Subscribe订阅以及UDP和Notification,太太太容易混淆了。可能看了好久还觉得云里雾里,觉得这个太高深了,其实真的SOME/IP没啥,将其理解成ECU之间的HTTP类似协议,下层依赖的TCP/UDP和电脑手机服务器用的没有任何区别,明白这个就已经学会了一大半。关于车载以太网和普通以太网的区别,我在另外一个学习记录贴中有记录,一句话总结就是物理层数据链路有区别,到了IP层以上就完全一样了。 不过从另外一个角度也可以理解,很多汽车软件的开发人员是从传统技术栈比如CAN总线时代过来的,对于以太网的了解不像互联网人那样深入,所以有一定的需求再详细了解一些IP/TCP/UDP的知识。我的建议是将这两部分分开学习,先回顾一下计算机网络,七层协议啥的,再了解一个应用层协议比如HTTP,最后再详细学习SOME/IP,绝对会事半功倍,发现真的好简单,半天时间SOME/IP入门足够。 另外在车载应用开发中,SOME/IP的Payload部分填充,考虑到和其他ECU以及功能的兼容性问题,会使用AUTOSAR的规则定义方式,这和CAN总线的Frame帧非常的像。在CAN总线Data Field数据场一次最多传输8字节,通常会把这对应的64个比特拆分成传输数据的最小量,比如一个布尔型只分配1个比特,然后一个0-255的Uint8只分配8个比特,总共8字节64比特能拆分成很多个Signal信号,从而有限的资源传输更多数据,各个Bit对应的Signal信号长度以及数据类型的记录成一个表格,即得到了CAN总线数据库DBC。在车载SOME/IP开发中Payload部分多数情况下也沿用了类似的思路,所以在Payload部分解析也需要一些额外的信号矩阵,结合了SOME/IP支持的数据结构和AUTOSAR数据结构,就能组合出很多复杂的结构体,实现更多上层应用间的数据传输。 这样的实现方式也可以很好的复用迁移传统汽车行业稳定成熟的软件解决方案,在必要的情况下,只需要在传输层做一些技术更新,核心逻辑不需要任何变动,从而降低潜在的风险。但是这一块是互联网人来做汽车软件的话,可能就不是很熟悉了,尤其对于不常见的Bit位的数据拆分,再结合这大端小端数据类型,还有信号矩阵有Scale放大缩小以及Offset偏移,八成互联网人转过来的开发第一次会搞错。建议之前对于汽车总线了解较少的开发人员可以系统学习一下CAN总线以及结合项目了解一下AUTOSAR信号矩阵,可以避免很多低级的错误。 传统车载网络CAN总线在面向信号的数据传输中,发送方会根据自身需求(如数值更新或变更时)主动发送信息,而无需考虑网络中是否有接收方当下需要这些数据。与之不同的是面向服务的数据传输模式即发送方仅当网络中至少存在一个接收方需要该数据时才会进行传输。这种方式的优势在于避免了不必要的数据对网络及所有连接节点造成的负载。因此,面向服务的数据传输要求服务器必须通过某种方式获知哪些接收方正在等待其数据。在SOA架构中,服务是构成系统的基本单元,它代表了系统中的某个功能或操作。服务通过明确的接口与外界进行交互,实现了功能的封装和重用。SOA架构的核心就是服务,它通过将应用程序划分为一系列的服务来降低系统的复杂度,提高系统的灵活性和可维护性。在SOA中,服务是通过其接口被定义和访问。接口是服务与外界交互的桥梁,它定义了服务的输入、输出和行为规范。在SOA架构中,以太网通信作为服务的传输载体,负责在不同的ECU或服务之间传递数据和信息,根据AUTOSAR平台的规范与推荐,一般选择以太网应用层协议SOME/IP协议或者DDS协议作为跨域通信协议。 在SOME/IP协议中,服务接口被明确划分为三种类型: Event、Field、Method,每种类型都服务于不同的通信需求。 Event and Field Notification 服务器基于活跃订阅发送的内容可呈现两种格式:事件通知(Event Notification)和字段通知(Field Notification)。这两种格式的共同特性是事件驱动生成机制,但其数据结构存在本质差异: 事件通知Event:采用自包含的静态快照形式,其字段填充的属性仅反映事件触发时的瞬时状态,与历史事件无任何关联 字段通知Field:包含具有时序关联性的动态值,除当前值外还隐含历史状态。因此字段可扩展为包含Getter/Setter方法,允许客户端对目标内容进行读写操作。 需要特别说明的是,在SOME/IP协议中,事件总是以事件组(Event group)的形式进行组织,客户端仅能订阅整个事件组,而无法单独订阅组内某个特定事件。Field的Setter/Getter 方法遵循请求/响应(REQUEST/RESPONSE)模式,变更通知则通过事件机制实现,所有订阅操作都需通过SOME/IP服务发现(SOME/IP Service Discovery)协议完成。 Method 另一种数据交换方式是通过方法调用(Method Call)实现信息传递。客户端通过发起远程过程调用(Remote Procedure Call, RPC),触发目标服务器上的函数执行。具体流程如下: 调用过程:客户端通过网络发送请求来调用服务器函数,该请求可包含作为参数传递至被调用方法的数据; 响应机制:服务器执行函数后,可能通过响应消息向客户端返回执行结果。 需注意,当客户端主动调用函数时,通常意味着需要获取返回数据,通常被称作RR模式(Method Request with Response),但服务器方法也可能不返回任何值(Void类型),常被称作FF模式(Method Fire & Forget),此时客户端在确认方法被成功调用后即完成整个流程。 Service Discovery 为了让客户端能够获知当前可用的服务,SOME/IP-SD(服务发现协议)提供了两种动态服务发现机制: 服务提供(Offer Service): 服务器通过该机制向网络宣告其提供的所有可用服务 每个设备通过组播(multicast)方式广播消息 消息内容包含该设备提供的所有服务列表 传输层采用UDP协议 服务查找(Find

SomeIP学习笔记:基础知识 Read More »

回国三年

从2022年3月回国到现在已经过去三年多了,这期间整个生活感觉发生了巨变,说是人生十字路口一点不为过。太多的感慨已经逐渐消淡,于是想着赶紧记下来。 从我准备回国生活就是充满了身边人的不理解以及对我的各种疑问。当时我在德国拿着大厂的永久合同,所在的行业全球顶尖,所在的部门也是大厂中最重视的一部分,想换永居或者入籍都是分分钟的事。在这个高福利国家,很多人削尖脑袋想去都去不了,而我却选择了回到卷的要死的国内,确实让人很难理解。 我的那个选择当然是深思熟虑决定的,不是脑袋一热想一出是一出。很多事情只有合适了才是最好的。在德国有体面的工作、超长的假期、全球旅行的便利条件以及不为基础保障而烦恼的社会制度,但是我在那里刚工作没多久就感受到了事业瓶颈以及生活上的无聊。稳定但是枯燥的工作内容让我有了毕业即退休的感觉,而生活上疏远的人际关系让我感受到了前所未有的孤独,身体上轻松但是精神上压抑,这不是我期望的生活状态。 回到国内生活后,明显我比之前快乐了很多。工作上由于项目在初期,不像德国那么成熟、分工那么细,很多内容都需要自己去做,反而是让我有机会接触更加完整的行业知识和细节。生活上有趣的活动我的业余时间几乎安排不过来,虽然外企假期多加班少、工作生活平衡,但是我在国外憋太久,太多想去的想玩的活动都由于时间不够或冲突而安排不过来。甚至给我一种感觉是,下班以及周末比工作日还要忙。在吃喝上更是无限满足,我身边有很多人由于说服不了自己的胃然后选择回国生活的,中国美食对于我回国这件事上也是有很大的比重。 如果说在国内生活的弊端,那也是切切实实能够亲身感受到的。首先是回到国内薪水降了很大一个比例,工作量增加了差不多一点五倍。国内的外企工作生活平衡,在德国的福利社会面前还是差太远的。整体公民素质也是有差距的,这个很难自欺欺人。记得我刚回国时候首先很不适应的就是过马路,习惯了在欧洲恨不得离一百米过来的车就开始减速,在国内车和人抢着走,并且与有没有人行道也无关。刚回国第一周每次过马路都要过好久,小心翼翼等好久都过不去。另外还有环境问题、食品安全问题,回国前三天我是必拉肚子,而从中国到德国却没有这样的现象,目前还有一个问题困扰我很久的问题是回国一年后就开始血脂升高,高于标准值,并且一直靠饮食调整降不下去,这在德国生活的七年完全没发生过,我猜测大概率是国内重油重言以及原料不健康导致的。国外的白人饭虽然难吃,但是在食品卫生健康层面是断崖式领先的。 这些还都是表面,深层的差距可能回国几年后才体现。在德国不是个事的问题,在国内生活可能是一辈子都跨不过去的大坎,比如住房、子女教育和医疗。在德国时候我同事贷款买房,利率是0.36,同期国内差不多利率是6个点;在德国子女教育全都免费,在国内的话一张户口页卡死了子女在大城市接受平等教育的权力;医疗也是有很大差距,德国全民医疗,不用太担心突发重症压垮个人和家庭,在中国的话,绝大多数家庭是扛不住家庭成员重病对整个家庭的打击。 之前听播客有个嘉宾总结到:德国社会以及政府为居民兜住了底,普通人也可以过着体面有保障的生活,但同时也封住了顶,大锅饭让个人收获与付出相关性降低,使劲折腾可能也和周边人差不太多,同时整个社会也不鼓励及提供想折腾的环境;中国社会上限无限,只要肯折腾向上的想象空间可以无限大,但是向下的时候却是万丈深渊,一旦在向上攀爬过程中滑落,可能发生的后果都不敢想象。这可能就是中产始终焦虑的原因,即没有稳定的安全感,某一个阶段某一个决策一旦出问题,一旦开始恶性循环,对个人对家庭可能就是灭顶之灾。 这么多的得失,我的选择是什么呢?答案很明显,我选择回到自己祖国的怀抱。回过头看我对我的选择后悔吗?讲真,在很多个遇到坎坷的瞬间有点怀念在德国无忧无虑的时光,但是整体上我还是认可我的选择。目前回国已经三年(甚至四年),我很积极地打理着我在国内的生活,努力在大城市扎根,认真平衡工作和家庭之间的冲突,享受着忙碌生活中的充实感。这些年期间回国的同学也有不少又反流回德国了,对于他们我也是能够充分的理解,因为确实是没有绝对的好与坏,适合的才是最好的。对于我、对于当下,我坚定地选择并且享受着在国内的工作生活。 (原文写于2025年5月,于2026年6月进行了二次修改)

回国三年 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 »

车联网C-V2X学习笔记

V2X是什么 参与V2X量产相关的项目于有一段时间了,终于终于现在对这个领域有了一个轮廓性的了解,真是不容易,功能虽小,但是将其用到量产,涉及到的知识却非常的广泛,趁着现在还没忘掉,打算沉淀成一篇笔记。 V2X,全称Vehicle-to-Everything,中文意思是“车对一切”。它是一种让车辆能够与周围环境中的各种实体进行数据交换的通信技术,是万物互联在汽车出行领域的拓展。这些实体包括: 其他车辆(V2V):车辆之间可以互相通信,共享速度、位置、转向等信息,提前预警潜在的碰撞风险,提前做行驶规划,让车与车有了直接的交互。 行人(V2P):车辆可以通过感知到附近的行人,尤其是盲区的行人非机动车,并采取相应的避让措施。 道路设施(V2I):车辆可以直接与周边交通信号灯、路标等基础设施进行通信,获取实时准确的交通信息。 网络(V2N):车辆可以连接到互联网,获取天气、路况以及更远处交通事故等信息等信息。 形象地说,常规的ADAS是给车辆装上了眼睛,让车辆自己可以观察周边环境进行一定程度的自动驾驶。而V2X就像给车辆装上了一张嘴巴和一对耳朵,可以说出自己的情况,以及听到周边车辆他们遇到的事情,这让更高级级别的自动驾驶成为可能。 V2X技术路线 目前,V2X主要有两大技术路线:DSRC和C-V2X: DSRC(IEEE 802.11p)技术:由IEEE主导标准制定,提供短距离无线传输技术,以车车和车路通信为主要方式。 C-V2X技术:包括LTE-V2X和NR-V2X,由3GPP主导标准制定。C-V2X是将蜂窝通信技术和直通通信技术有机结合得车联网无线通信技术,同时支持车-车直通通信和蜂窝通信两种方式,支持车车、车路、车人以及车网等各类应用。 简单的说,对于车联网这个新的需求,尤其直通技术上,DSRC是将WiFi协议魔改过来得技术,而C-V2X是将无线通信LTE以及4G魔改来的技术。虽技术严谨路线有所区别,但是要解决的遇到的问题是大致一致的,IEEE 802.11p和C-V2X以及NR-V2X主要体现在无线接入技术的不同上。在协议其中C-V2X尽量重用蜂窝系统已有的上层协议,将研究重点聚焦于接入层的物理层和媒体接入技术。DSRC包括两类,用于ETC的DSRC和基于802.11pde DSRC,两者是不同的技术。两种技术路线相似的网络层可支持IP协议栈,同时考虑IP协议栈的开销以及低时延传输要求,,也可采用非IP传输支持上层应用。在《蜂窝车联网(C-V2X)》一书中有一个图表,很清晰对比出DSRC、LTE-V2X以及NR-V2X协议层的区别和联系。 适用范围和趋势 DSRC仅在部分早期部署国家(如日本、欧洲)保留残余应用,而LTE-V2X在中、美、韩等国已成主导技术。C-V2X(尤其是LTE/NR-V2X)凭借技术演进、政策支持和商业成熟度,将在不久的将来全面取代DSRC,成为智能交通和自动驾驶的核心通信标准。 关键技术标准 对于LTE-V2X有一个标准对其做出了总体技术要求:《YD_T 3400-2018 基于LTE的车联网无线通信技术 总体技术要求》,从很大范围的对其总体业务、系统架构以及功能需求做了一些规范性要求。比如说:有效通信距离、移动速度、通信时延、传输可靠性、覆盖要求、消息发送频率要求、消息大小要求、架构模型、接口、功能实体、高层功能、无线功能、标识以及功能描述和消息流等。 附录还有基于LTE车联网应用场景及需求部分,对于一些常见场景,可以了解其场景描述、预期效果和需求分析等内容。主要包含这些场景: 安全应用: 前方静止车辆告警 前方慢速车辆告警 紧急电子刹车灯告警 逆向超车提示 逆向行驶告警 换道决策辅助提示 交叉口防撞提示 异常车辆提示 道路危险状况提示 道路施工告警指示 协作式自动巡航控制 协作式高速公路车辆自动系统(直线) 前向碰撞预警 汇入主路辅助/碰撞告警 紧急车辆提示 非机动车横穿预警/行人横穿预警 道路湿滑/危险路段提醒 左转辅助/告警 闯红灯(/黄灯)告警 交通效率提升 道路限速提示 交通信号灯提醒 交通信息及路线推荐 增强得路线指引和导航 专用道路管理 限行管理 车载标识 车速引导 信息娱乐服务 服务信息公告

车联网C-V2X学习笔记 Read More »

OpenWrt路由器通过CLI命令修改Wifi无线设置

我爸菜园子怕别人偷菜让我帮忙给装一个监控,这样有人进入就会报警,并且实时可以看到菜园子情况。 平房没有网络我打算给那里放一个CPE,插一张副卡用来给监控提供网络。手头有一个之前帮忙测评用的工程版CPE,想着物尽其用,设置了一下发现不能改变SSID,可能是工程版原因软件还不完善,也凑合着能用可是特别挑战我的强迫症。由于我知道这个CPE的固件是通过OpenWrt魔改过来的,于是我尝试能不能通过命令的方式来改一下SSID,结果还真做到了。这里简单记录一下步骤: 首先打开NRadio的ssh开关,浏览器打开: http://192.168.66.1/cgi-bin/luci/admin/system/security 然后使用uci命令来修改OpenWrt的网络设置。可以先用uci show network 和uci show wireless来看下当前设置: 从中可以看到我们比较关心的是wireless.wlan0.ssid=NRadio-0CBE-2.4G 和wireless.wlan1.ssid=NRadio-0CBE这两项,这和网页里看到的内容是相同的,但是网页配置端由于未知bug修改不了。我在这里尝试用uci命令修改: 然后保存更改: 重启后生效。 Reference:https://blog.csdn.net/qq_35718410/article/details/53113894

OpenWrt路由器通过CLI命令修改Wifi无线设置 Read More »

果敢表达 Assertiveness

在吴老师的《果敢表达》课程中真是有很多的反思和收获,把很理论的东西讲透彻说明白,很不容易一件事,尤其这种心理上人际关系等很飘渺的话题上更甚,而这门课却真的做到了,三天时间不枯燥不无聊,也没有拗口脑洞的理论去烧脑,循序渐进如沐春风地就跟着老师把这个体系逐步在脑中建立了起来,虽然回到现实中遇到的事情会更复杂各种利益无数的忧虑更加盘根错节,但是脑中有了框架后就能够知道怎样内观自己的情绪,以及应该怎样去应对目前的处境。理论了解到实际运用还有很多路要走,可是我知道了让自己变果敢自己应该努力的方向,而不是一直停留在被情绪牵着走的处境中。这门课让我重新思考全技能培训的重要性和意义,更多的是对自己进一步的认知,这是意料之外,但是是让我惊喜且珍惜的收获。

果敢表达 Assertiveness Read More »

我的家庭影音库

买了个大电视,想着周末宅在家看看剧多爽啊。虽然也有NAS也用了好久了,可好长一段时间电视与NAS之间还是用的U盘,或者是SMB读盘,每次都挺繁琐的,并且也十分的不优雅,可以犯懒一直就这么将就着。最近看《XXX》很想在通勤的路上用手机看家中我NAS里边的资源,于是周末痛下决心将我的影音库搞搞好。 我的整体方案如下: 宽带:移动1000M下行,100M上行,Native IPv6 Router: ASUS RT-AX86U NAS:Synology DS920+ Data Source:byr.pt Download tool:qBittorrent 客户端硬件:iPhone,iPad,Android TV 客户端软件:Infuse,Kodi + Jellyfin plugin 服务端软件:WebDAV,Jellyfin Server 由于有整备资源挂pt以及在外边有访问回来的需求,路由器桥接并拥有公网IP是很多需求的前提。在我所在的城市尤其XXXX是个大内网,IPv4是极稀缺的资源,这个基本别想了,不过还好IPv6已经很成熟了,观察使用了很多年,除了极个别老式路由器的WiFi还不支持,其余大多数的地儿都有IPv6接入了。对于我而言,将光猫改成桥接,然后路由器端设置好PPPoE拨号,关于IPv6再简单设置下,就差不多OK了。 可以通过电脑连上路由器,通过http://test-ipv6.com/ 来看下是否IPv6连接正常,或者直接通过群晖控制面板,看下是否能拿到一个正确IPv6地址。 这些都OK后需要解决一个数据源的问题,这块儿就得各显神通了,每个人情况都不一样。我说下我用到的工具,主要数据源来源于pt,同时需要NAS长时间挂机刷积分。群晖自带的Download Station内置Transmission就可以满足这个需求,可看很多帖子说这个用着很烂,都在说通过Docker自己安装的qBittorrent才好用并且在上传方面也抢流量神器。我一开始使用的是Downlaod Station,这次要好好整备一下,于是就安装了Docker版本的qBittorrent。各种配置其实挺繁琐的,用了很长一段时间相对比,没感觉明显的在上传方面有天翻地覆的差别。用户界面上也就那样,没感觉好太多。唯一我觉得相对比较方便的就是当资源下载完毕后,软件支持更改储存路径,这有利于我们之后对于电影以及剧集的分类管理,以及一些同一类的影片统一管理。在Download Station中只能设置一个统一的下载文件夹,不能分类,也不能下载后移动分类,当后期资源库数量多了就不太方便了,尤其想保种刷上传情况下。两个工具我都用了够长时间,个人建议如果不是特别极致的发烧友,打算弄一个特别牛逼的家庭影音库的话,多数情况下Download Station就够了,qBittorrent很繁琐增益也没想的那么高,不太值得。 另外有一点提醒,在Download Station中一些设置需要改一改,默认的是不行的容易上传没速度,在pt网站拿不到积分。 资源问题解决了,那么我们开始处理客户端问题。我陆陆续续尝试了很多,比如TV原生的资源管理器读取SMB资源,Kodi连接NAS然后加各种插件刮削等等,最终选择了Infuse和Kodi+Jellyfin组合这种形式,其中Infuse用在苹果生态中,效果简直是太赞了,不管是用户UI,设置复杂度,使用便捷度以及视频海报刮削质量,可以说都是一流,试过的其他的工具根本没法比。在NAS的服务端设置也比较简单,只需要安装WebDAV插件,基本上不用怎么设置,根据默认直接运行就OK。 就如上文提到我有外出访问家中NAS资源的需求,所以我们还需要再设置以及确认一下我们DDNS有没有设置完毕,这样我们就不用担心路由器重启IP改变。群晖真的是特别的用户友好,在控制面板外部访问中,我们就可以使用群晖的免费服务,来设置一个固定域名,用于之后对这台NAS的连接。刚刚也提到我用的移动宽带没有IPv4只有IPv6,所以在设置中我只开启了后者。 群晖给的DDNS域名已经很好记了,我想更好记一点,于是我在这CNAME将我的一个域名设置成群晖DDNS域名的别称,更简单了。 接下来想外部访问,还需要在路由器设置一下防火墙端口,是从外界可以连入。IPv6这对于路由器有了一定的要求,有一些老旧的或者低端的不能开启IPv6或者不能设置防火墙参数,这就凉凉了。pt上传刷积分另外一个必要前提条件也是公网端口并可连入,所以建议在路由器上多留一些预算,搞个好点儿的。下图是我的路由器中关于IPv6的防火墙配置。其中本地IP是NAS获取到的地址,通信协议根据自己用到的工具不同而不同,比如我的话,16881和5999是pt相关,5006是WebDAV,8096是Jellyfin后边Android TV用到,5000和5001是群晖自己管理页面用到的。 接下来就是对于Infuse移动端的设置了,真的是极其的简单,可以说就4个内容:域名,用户名,密码和端口。 连接成功就开始进行刮削海报建立视频库了,耗时取决于视频的数量。刮削完毕在首页就可以看到颜值超高的家庭影音库了。我尝试了用手机流量,以及另外一个宽带的WiFi来观看,那真叫一个丝滑,画质及其清晰的同时,一丁点卡顿也没有。这可能受益于我家中NAS上传带宽有100M,手机5G下载速率也很给力的原因。另外客户端不仅可以在线观看,也可以离线下载的手机,可以节约流量或者下载到平板中,真的是很方便。 在iPad端也是无可挑剔的优雅美观。 剩下一个大电视是Android系统,我之前尝试Kodi挂载SMB,使用各种方法进行刮削,比如路由器魔法,免Host插件,豆瓣插件等等等等,效果都很差,不可接受的地步,于是最终投入了Jellyfin的怀抱。首先我们需要在NAS安装服务端,很多帖子提到建议安装Docker版本的Jellyfin,鉴于现在国内Docker官网上不去了,在NAS中安装Docker难度瞬间提高,我尝试使用套件中心社群版的Jellyfin,很流畅很好用的,只需要简单点击几下即完成安装。其中有一个小插曲,在安装完毕Jellyfin并运行后,第一次要设置媒体库地址但是看不到我在NAS中的文件夹,查了一些资料得知是插件没有相应的文件夹权限,按照下边截图操作一下解决问题:共享文件夹–>编辑–>权限–>系统内部用户账号–>sc以及Jellyfin相关的用户–>授予可读写。 在电视端也需要有相应的配置,是一个Kodi的插件。看Jellyfin官网有两种不同的插件可供选用,第一种叫做 Jellyfin for Kodi,其特点是安装好后,影片出现在原生的Kodi媒体库中,用户体验上和之前Kodi自己加载媒体库没有任何区别。另外一个叫做JellyCon,看介绍说安装好后查看影片是在打开插件的目录下。我安装的第一种,用起来体验很不错,比Kodi原生的效果强太多了。但是安装步骤还是挺繁琐的,需要在Kodi下进行很多的操作。有需要的小伙伴还是根据官网最新的介绍步骤一步一步走,官网讲解的很详细清晰的。 https://jellyfin.org/docs/general/clients/kodi/ 另外Jellyfin是有Android 原生的apk的,UI颜值也很高,很易用。但是我在我的电视上遇到声音画面会逐步不同步的现象,很影响体验,所以最终我选择了Kodi + Jellyfin for Kodi plugin。小伙伴可以先试下Jellyfin官方apk本身,如果没有声音画面不同步现象的话,建议就直接用这个就OK了,效果不比我的那个方案差。 Jellyfin和WebDAV+Infuse方案有个很大的不同是WebDAV+Infuse服务端即NAS只负责文件传输,所有解码工作是放在可客户端也就是Infuse里。理论上节约NAS资源但是使用更多的手机或者平板的算力。而Jellyfin的话服务端可以与客户端协商,若不需要转码可以原画传输,若客户端能力比较弱比如手机屏幕小,那么Jellyfin在服务端NAS上会将视频转码成客户端最佳的格式和尺寸后再传给客户端。默认情况下Jellyfin使用CPU来做这个转码步骤,细心的同学可能就会观察到默认配置下当使用Jellyfin播放时候NAS的CPU占用率特别高,几乎一直保持90%以上。互联网很多教程来设置基于Docker的Jellyfin打开硬件加速的方法,由于我是通过套件中心下载的,没有那些教程中的设置选项,我尝试了直接发现可以直接在基于套件中心的Jellyfin下打开硬件加速,更简单,只需要将以下几个勾选,然后重启Jellyfin就OK了。我的理解基于套件中心的软件默认就是高权限的。 为了更加清晰明了对比差异,我分别在关闭以及开启转码硬件加速的情况下,观察了CPU的占用率,可以看到,在相同视频源相同播放环境下,关闭硬件加速CPU平均负载约88%,开启硬件加速CPU平均负载24%,差别是相当明显的。 在NAS运行了Jellyfin服务端后,不仅仅可以用在Android

我的家庭影音库 Read More »