Connect IoT - CSV文件驱动程序#
逗号分隔值(CSV)文件是一个用逗号分隔值的分隔文本文件。CSV文件以纯文本格式存储表格数据(数字和文本)。文件的每一行都是一条数据记录。每条记录由一个或多个用逗号分隔的字段组成。使用逗号作为字段分隔符是此文件格式的名称来源。
数据类型#
这些是受支持的特定数据类型:
| 名称 | 描述 |
|---|---|
| 字符串 | 字符串值 |
| 布尔值 | 布尔值 |
| 整数 | 整数值 |
| 十进制 | 十进制值 |
| 对象 | 结构化值 |
异常流程参数#
异常流程支持以下参数,用于定义通信参数以及驱动程序的预期行为:
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| 路径 | 字符串 | "" | 要监视文件更改的位置的路径。如果未提供任何值,则不会创建观察程序,因此不会触发任何事件。 | |
| fileMask | 字符串 | "*/.csv" | 观察程序用来识别要处理的文件的glob模式。使用类似于https://globster.xyz/ ⧉的工具尝试使用有效值。 | |
| hasHeader | 布尔值 | True | csv文件是否具有标头? | |
| delimiter | 字符串 | "," | 字段分隔符是什么? | |
| initialLinesToIgnore | 整数 | 0 | 文件开头要忽略的行数 | |
| commentChar | 字符串 | "" | 如果设置,该字符后面的所有文本将不会被处理 | |
| numberOfLines | 整数 | 1 | 每轮要读取的每个文件的行数 | |
| skipEmptyLines | 布尔值 | True | 解析器是否应忽略空行? | |
| archivePath | 字符串 | "" | 计划在处理后用于存档文件的目录。以后可以在要执行的可用操作中将此值用作变量。 | |
| watcherType | 枚举 | Chokidar NSFW | Chokidar | 要使用的观察程序类型。根据选择,需要不同的设置。Chokidar是最佳的整体选项,但当存在多个文件时,CPU和内存占用率高,启动速度变慢。在其他情况下,NSFW性能更佳。测试两者以确定最佳选项。 |
| ignoreInitial | 布尔值 | False | 用于定义在启动/重新启动期间是应处理还是忽略已创建、更改或删除的文件的标志 | |
| pollingInterval | 整数 | 100 | 文件系统轮询的时间间隔(以毫秒为单位) | |
| alwaysStat | 布尔值 | True | 始终获取观察程序标识的文件的其他属性(大小、时间戳等)。需要额外的操作系统资源。 | |
| depth | 整数 | 0 | 要监视的子目录数。数目越多,观察程序所需的内存/CPU/时间就越多。 | |
| awaitWriteFinish | 布尔值 | True | 仅在文件完成写入时触发观察程序事件。 | |
| awaitWriteFinishStabilityThreshold | 整数 | 2000 | 在触发事件之前,文件大小保持不变的时间(以毫秒为单位)。 |
特定于Chokidar观察程序类型的异常流程参数#
Chokidar观察程序类型具有一些仅它知道的设置。如果使用其他类型,则这些设置不会产生任何影响。
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| watcherMode | 枚举 | FileSystemEvents Polling | Polling | 要成功通过网络监视文件(以及在其他非标准情况下),通常需要使用Polling,但这可能会导致CPU利用率高。FileSystemEvents是监视本地文件最有效的方法。 |
| pollingBinaryInterval | 整数 | 300 | 文件系统轮询二进制文件的时间间隔(以毫秒为单位) | |
| awaitWriteFinishPollInterval | 整数 | 100 | 文件大小轮询间隔 | |
| atomic | 整数 | 100 | 使用“原子写入”而不是直接写入源文件的编辑器时,自动筛选定义的值(以毫秒为单位)内出现的工件。如果定义为0,则禁用此功能。 |
扩展参数#
与其他异常流程驱动程序一样,还需要一些额外参数来对预期行为提供更多上下文。
属性#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| propertyType | 枚举 | FileContent FileName RelativePath FullPath Size IsFile IsDirectory AccessTime CreationTime UpdateTime EndOfFile | FileContent | 提供属性的含义,并在发生特定事件时根据它接收值。FileContent 文件中字段的表示形式FileName 正在处理的文件的名称RelativePath 正在处理的文件的相对路径FullPath 正在处理的文件的完整路径Size 文件大小IsFile 表示句柄是否为文件的标志IsDirectory 表示句柄是否为目录的标志AccessTime 上次访问文件的日期和时间CreationTime 创建文件的日期和时间UpdateTime 上次更新文件的日期和时间EndOfFile 表示文件已到达末尾的标志 |
| identifierType | 枚举 | 名称 索引 无 | 名称 | 标识字段数据的方法(在属性设备ID中定义)。仅在propertyType为以下项时适用 FileContent |
事件#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| EventTrigger | 枚举 | NewFile DeletedFile ChangedFile NewData | NewData | 指示将触发事件的操作系统操作。NewFile 检测到新文件时DeletedFile 删除文件时ChangedFile 更改文件时NewData 创建/更改文件时,触发包含数行的事件(可配置) |
命令#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| commandType | 枚举 | 存在 复制 重命名 删除 移动 CreateFile ReadFile CreateDirectory EmptyDirectory 装载 MoreDataRequest | MoreDataRequest | 指示将执行的命令类型。Exists 检查文件或目录是否存在Copy 将文件或整个目录从一个位置复制到另一个位置Rename 重命名文件或目录Delete 删除文件或目录Move 移动文件或目录CreateFile 创建数据或将数据附加到文件中ReadFile 读取现有文件的全部内容CreateDirectory 创建新目录EmptyDirectory 删除目录的所有文件和子目录Mount 将网络驱动器位置装载到本地路径中MoreDataRequest 处理数据后,请求下一个数据块。 |
内部驱动程序接口#
此异常流程驱动程序提供了一组接口,可用于简化在控制器工作流中的使用。本节旨在详细介绍它们。尽管这些接口大多数(如果不是全部)都有专门设计的任务来使用它们,但用户可以在驱动程序定义实体中自由地重新定义它们。
属性#
| 名称 | PropertyType | 数据类型 | 描述 |
|---|---|---|---|
| FileName | FileName | 字符串 | 监视的目录中标识的文件的名称。将包括扩展名,但不包括目录路径。 |
| FullPath | FullPath | 字符串 | 文件名及其在本地系统中的完整路径。 |
| FileSize | Size | 整数 | 文件大小 |
| EndOfFile | EndOfFile | 布尔值 | 文件已到达末尾 |
| ExampleField | FileContent | 字符串 | 用标头名称标识的CSV文件的字段示例 |
| ExampleField2 | FileContent | 字符串 | 用索引(第二项)标识的CSV文件的字段示例 |
事件#
| 名称 | EventTrigger | 更新的属性 | 描述 |
|---|---|---|---|
| OnNewFile | NewFile | FileNameFullPathFileSize | 当观察程序检测到先前未识别的文件出现时,将引发此事件。 触发时间可能取决于某些设置,如 watcherMode、awaitWriteFinish、awaitWriteFinishStabilityThreshold以及其他设置。 |
| OnFileChanged | ChangedFile | FileNameFullPathFileSize | 当观察程序检测到已识别的文件(并触发了OnNewFile事件)并且它以某种方式被更改时,将引发此事件。触发时间可能取决于某些设置,如 watcherMode、awaitWriteFinish、awaitWriteFinishStabilityThreshold以及其他设置。 |
| OnFileDeleted | DeletedFile | FileNameFullPathFileSize | 当观察程序检测到先前被识别但现在被删除(或移动到其他位置)的文件时,将引发此事件。 |
| OnDataAvailable | NewData | FullPathExampleFieldExampleField2EndOfFile | 读取和解析文件中的数据时触发 |
命令#
本节中列出的所有命令路径都可以使用以下令牌来简化使用:
| 名称 | 描述 | 示例 |
|---|---|---|
${Path} | 将令牌替换为设置期间定义的path设置 | ${path}\file.csv 变为 c:\watchedDirectory\file.csv |
${Archive} | 将令牌替换为设置期间定义的archive设置 | ${archive}\newFile.csv 变为 c:\archive\file.csv |
| 名称 | CommandType | 参数/类型/默认值 | 描述 |
|---|---|---|---|
| MoreDataRequest | MoreDataRequest | path /字符串/"" | 处理数据后,请求下一个数据块 |
| FileOrDirectoryExists | Exists | path /字符串/"" | 检查path位置是否存在 |
| CopyFileOrDirectory | Copy | source /字符串/""destination /字符串/""overwrite /布尔值/falsepreserveTimestamps /布尔值/falserecursive /布尔值/trueattempts /整数/1sleepBetweenAttempts /整数/1000 | 尝试将source位置(文件或目录)复制到destination位置。如果失败,则将重试attempts次,每次等待sleepBetweenAttempts毫秒。如果它是目录并且 recursive设置为true,则还会复制所有子目录。 |
| RenameFileOrDirectory | Rename | source /字符串/""destination /字符串/""attempts /整数/1sleepBetweenAttempts /整数/1000 | 尝试将source位置(文件或目录)重命名为destination位置。如果失败,则将重试attempts次,每次等待sleepBetweenAttempts毫秒。 |
| MoveFileOrDirectory | Move | source /字符串/""destination /字符串/""overwrite /布尔值/falseattempts /整数/1sleepBetweenAttempts /整数/1000 | 尝试将source位置(文件或目录)移动到destination位置。如果失败,则将重试attempts次,每次等待sleepBetweenAttempts毫秒。 |
| DeleteFileOrDirectory | Delete | path /字符串/""/attempts /整数/1sleepBetweenAttempts /整数/1000 | 已删除path位置(文件或目录)。如果失败,则将重试attempts次,每次等待sleepBetweenAttempts毫秒。 |
| CreateFile | CreateFile | path /字符串/""content /字符串/""encoding /字符串/"utf8"mode /整数/0o666flag /字符串/"w"attempts /整数/1sleepBetweenAttempts /整数/1000 | 尝试写入path位置中的某文件。如果失败,则将重试attempts次,每次等待sleepBetweenAttempts毫秒。mode将使用unix格式定义文件属性/权限,但采用十进制值。flag确定如何访问文件(写入、重写、附加等)。以下位置介绍了支持的标志: https://nodejs.org/api/fs.html#fs_file_system_flags. ⧉ |
| ReadFileContent | ReadFile | path /字符串/""encoding /字符串/"utf8"attempts /整数/1sleepBetweenAttempts /整数/1000 | 尝试读取path位置中文件的内容。如果失败,则将重试attempts次,每次等待sleepBetweenAttempts毫秒。 |
| CreateDirectory | CreateDirectory | path /字符串/""attempts /整数/1sleepBetweenAttempts /整数/1000 | 尝试在path位置创建新目录。如果失败,则将重试attempts次,每次等待sleepBetweenAttempts毫秒。 |
| EmptyDirectory | EmptyDirectory | path /字符串/""attempts /整数/1sleepBetweenAttempts /整数/1000 | 尝试删除path位置的所有文件和子目录。如果失败,则将重试attempts次,每次等待sleepBetweenAttempts毫秒。 |
驱动程序扩展#
此异常流程驱动程序提供了一组扩展,允许自定义执行独立于关联的驱动程序定义的操作。这意味着您可以使用自定义获取/设置节点值,而无需描述它们。
这在访问共享的设备数据或者由于过于复杂而无法使用常规机制访问的设备数据时特别有用。在需要访问命名约定可能因设备而异的数据时也很有用。
对象#
对象是作为参数传递或作为结果值返回的结构。
RegisterHandler#
| 名称 | 类型 | 描述 |
|---|---|---|
| 类型 | 字符串 | 要注册通知的事件的ID。示例: connect.iot.driver.fileBased.event.ChangedFile_1234567891011 |
UnregisterHandler#
| 名称 | 类型 | 描述 |
|---|---|---|
| 类型 | 字符串 | 要注销通知的事件的ID。示例: connect.iot.driver.fileBased.event.ChangedFile_1234567891011 |
ExecuteCommand#
| 名称 | 类型 | 描述 |
|---|---|---|
| command | JSON对象 | 包括命令名称、设备ID和参数类型 |
| parameters | JSON对象 | 参数名称和值。 |
方法#
注册事件通知#
通知异常流程驱动程序在特定事件发生时引发该事件。
void connect.iot.driver.fileBased.registerEvent(data: RegisterHandler)
Note
事件将发布到侦听器connect.iot.driver.fileBased.,并附加注册的事件的名称以及随机ID。例如: connect.iot.driver.fileBased.event.ChangedFile_1234567891011
注销事件通知#
通知异常流程驱动程序在发生特定事件时停止引发事件。
void connect.iot.driver.fileBased.unregisterEvent(data: UnregisterHandler)
示例#
通知 connect.iot.driver.fileBased.unregisterEvent
执行命令#
执行自定义命令。
any connect.iot.driver.fileBased.executeCommand(data: ExecuteCommand)
示例#
SendRequest connect.iot.driver.fileBased.executeCommand