UNPKG

signalk-mqtt-import

Version:

SignalK plugin to selectively import data from MQTT with webapp management interface

176 lines 4.34 kB
import { Request, Response } from 'express'; import { MqttClient } from 'mqtt'; import { ServerAPI, Plugin, Delta, Update, PathValue, Context, Path, Timestamp } from '@signalk/server-api'; export type SignalKApp = ServerAPI; export type SignalKDelta = Delta; export type SignalKUpdate = Update; export type SignalKValue = PathValue; export type SignalKContext = Context; export type SignalKPath = Path; export type SignalKTimestamp = Timestamp; export interface SignalKPlugin extends Plugin { config?: MQTTImportConfig; } export interface MQTTImportConfig { enabled: boolean; mqttBroker: string; mqttClientId: string; mqttUsername: string; mqttPassword: string; topicPrefix: string; } export interface ImportRule { id: string; name: string; mqttTopic: string; signalKContext: string; signalKPath: string; sourceLabel: string; enabled: boolean; payloadFormat: 'full' | 'value-only'; ignoreDuplicates: boolean; excludeMMSI?: string; transformValue?: (value: any) => any; } export interface MQTTConnectionStatus { connected: boolean; broker: string; clientId: string; } export interface MQTTMessage { topic: string; payload: string; timestamp: string; } export interface ApiResponse<T = any> { success: boolean; data?: T; error?: string; message?: string; } export interface RulesApiResponse extends ApiResponse { rules?: ImportRule[]; mqttConnected?: boolean; } export interface MQTTStatusApiResponse extends ApiResponse { connected?: boolean; broker?: string; clientId?: string; } export interface StatsApiResponse extends ApiResponse { stats?: { totalRules: number; enabledRules: number; messagesReceived: number; mqttConnected: boolean; }; } export interface TypedRequest<T = any> extends Request { body: T; params: { [key: string]: string; }; query: { [key: string]: string; }; } export interface TypedResponse<T = any> extends Response { json: (body: T) => this; status: (code: number) => this; } export interface PluginState { mqttClient: MqttClient | null; importRules: ImportRule[]; lastReceivedMessages: Map<string, number>; selfVesselUrn: string | null; rulesFilePath: string | null; currentConfig?: MQTTImportConfig; } export interface MQTTClientOptions { clientId: string; clean: boolean; reconnectPeriod: number; keepalive: number; username?: string; password?: string; } export interface TopicParseResult { context: string; path: string; vesselId?: string; mmsi?: string; } export interface MessageProcessingResult { signalKData: SignalKDelta | null; processed: boolean; error?: string; } export interface RuleMatchResult { rule: ImportRule | null; matches: boolean; excluded: boolean; reason?: string; } export type PayloadFormat = 'full' | 'value-only'; export type MessageKey = string; export interface PluginError extends Error { code?: string; details?: any; } export interface VesselUrn { full: string; mqtt: string; mmsi: string; isSelf: boolean; } export interface RuleUpdateRequest { rules: ImportRule[]; } export interface ImportStats { totalRules: number; enabledRules: number; messagesReceived: number; mqttConnected: boolean; topicsSubscribed: number; lastMessageTime?: string; } export interface DefaultRuleConfig { id: string; name: string; mqttTopic: string; enabled: boolean; payloadFormat: PayloadFormat; ignoreDuplicates: boolean; } export interface MessageCache { key: string; timestamp: number; count: number; } export interface TopicSubscription { topic: string; qos: number; ruleIds: string[]; } export interface ContextExtractionResult { context: string; path: string; vesselId: string; isSelfVessel: boolean; } export interface MMSIExclusionResult { excluded: boolean; mmsi: string | null; reason?: string; } export interface RuleValidationResult { valid: boolean; errors: string[]; warnings: string[]; } export interface PersistentStorage { filePath: string; lastModified: number; rules: ImportRule[]; } //# sourceMappingURL=types.d.ts.map