signalk-mqtt-import
Version:
SignalK plugin to selectively import data from MQTT with webapp management interface
176 lines • 4.34 kB
TypeScript
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