npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

yeedriver-simple-serial

v1.0.8

Published

simple serial driver for yeedriver

Readme

yeedriver-simple-serial

通用数据类的驱动,与485/modbus不同,这些数据会主动上报的

options说明

  • 基本配置 目前可能有两种,串口或是网络的 如果是串口的,那么就会有serial配置项

      .serial
      {
          .path   串口路径 如/dev/ttyUSB0等,注意主程序需要和操作权限
          .opts   serialport所对应的参数信息
      }
        

    如果是网络的,那么就有net配置项

      .net
      {
          .type  网络类型  client/server
          .ip    ip地址  如果.type是server,这个地址是监听地址,可以是0.0.0.0 如果是client,就是需要连接的目标ip地址
          .port  端口号  如果是server,就是监听端口,如果是client,就是要连接的目标端口
      }

    如果.serial和.net同时配置了,那么.serial优先

  • sids配置

      sids是一个对象: 设备id和设备类型
      {devId:devType}

应用说明

通用数据驱动类,在根目录下提供一个框架,根据配置启动drivers内相应的实例 驱动根据配置,调用相应的RWActuator来实例化数据读写 驱动根据配置中的sids信息,生成相应的ClassFactory,并且由ClassFactory来创建相应的设备实例

当收到数据时,让每个实例都执行一次OnData分析动作,实例根据自身的配置,检查数据格式是否符合自身的要求,并且分析获取相应的数据 因此,有多少个实例,串口数据可能会被处理多少次,实例注意不得修改串口传入的数据

##实现说明

  • 如果一个类型下面有多个设备,没有做优化处理的话,每次数据到达的时候,每个设备都进行一次OnData操作解析,同一种类型的数据,完全可以只需要解析一次就可以。
  • 使用一个ClassFactory来进行同一种类型设备的创建、数据解析工作,每次需要创建设备时,由ClassFactory来创建和管理,而收到数据时,由ClassFactory来进行数据解析,数据解析完毕后,由相应的的ClassFactory的实例来调用相应的设备进行处理
  • 使用相应的RWActuator来实现读写数据的抽像

RWActuator

实际的读写类,根据目前的不同,可以分为串口类和网络类,该类具有以下的功能:

  • 自动恢复功能,open以后,如果发生错误,将会进行自动重连
  • 异步/同步转换功能,因为串口或是网络,打开和关闭都是异步的,通过类后,调用者就是同步的;类内部有状态机进行管理,因此调用者无需考虑端口是否真实打开
  • 数据事件, 当实例收到数据时,emit('data',data)事件,调用者使用on('data')即可以处理相应的数据,data是一个数组
  • 数据写入 RWActuator提供三种写入的函数:
    • write(data),写入一串数据,data是一个数组,不关心写入的结果
    • writeP(data,timeout),写入一串数据,返回一个Promise,当数据被写入到相应的Buffer后再返回 data是一个数组, timeout是超时时间值,如果为0,则没有超时
    • writeDrainP(data,timeout),写入一串数据,返回一个Promise,当数据被完全写入到端口后返回 data是一个数组, timeout是超时时间值,如果为0,则为默认值:10秒

##使用说明

###类扩展说明 ####DevBase类

DevBase 基础类,定时了类的框架,所有的应用都需要从该框架继承

   OnTick()     框架每隔50ms调用一次该函数,用于继承类的超时管理
   
   
   setTimeout(ms100) 设置超时值,当超时该时间值收不到数据时,状态自动恢复成STATE.IDLE
      ms100,超时值,以100ms为单位
   
   STATE={IDLE:0}  定义了一个通用的状态,空闲

####ClassFactory 类工厂,不同类型的数据解析器,需要生成一个对应的ClassFactory,ClassFactory做以下的工作:

  • 当数据到达时,ClassFactory的OnData函数将被调用,相应的ClassFactory的实例进行数据解析

      OnData(data)  数据处理函数,每个继承类都需要重写该函数
             data是一个数组
               

    每个继承类必须重写OnData函数

  • ClassFactory的OnTick每50ms被调用一次,Class会根据内部的this.devices里的设备,调用设备的OnTick,由设备实现超时管理

  • ClassFactory需要实现一个CreateClass(devId)函数,用于创建一个新的设备实例

##驱动类说明

TLMeter类

是天信无线水表的驱动类,该水表通过无线远传数据,每隔1小时上传一次数据,数据通过串口汇报,数据是类似DLT/645 97协议的