Skip to content

Latest commit

 

History

History
1191 lines (979 loc) · 67.7 KB

README.md

File metadata and controls

1191 lines (979 loc) · 67.7 KB

@iobroker/socket-classes

This library is used at least for the following adapters:

Usage as admin

const TTL_SEC      = 3600;

const SocketAdmin  = require('@iobroker/socket-classes').SocketAdmin;
const ws           = require('@iobroker/ws-server');
const session      = require('express-session');
const utils 	   = require('@iobroker/adapter-core'); // Get common adapter utils
const AdapterStore = require(utils.controllerDir + '/lib/session.js')(session, TTL_SEC);

const store = new AdapterStore({adapter});

const io = new SocketAdmin(adapter.config, adapter, objects);
io.start(
    server,
    ws,
    {
        userKey: 'connect.sid',
        store,
        secret: adapter.config.secret
    }
);

// subscribe on all object changes
io.subscribe('objectChange', '*');


// later
io.close();

Usage as socket (ws or socketio)

const TTL_SEC      = 3600;

const ws           = require('@iobroker/ws-server');
const SocketWS     = require('@iobroker/socket-classes').SocketCommon;
const session      = require('express-session');
const utils 	   = require('@iobroker/adapter-core'); // Get common adapter utils
const AdapterStore = require(utils.controllerDir + '/lib/session.js')(session, TTL_SEC);

const store = new AdapterStore({adapter});

const settings = adapter.config;
settings.crossDomain = true;
settings.ttl = settings.ttl || TTL_SEC;

const io = new SocketWS(settings, adapter);
io.start(server.server, ws, {userKey: 'connect.sid', checkUser, store, secret: adapter.config.secret});


// later
io.close();

GUI subscribes

GUI client can send to desired instance the subscribe message

    socket.emit('clientSubscribe', 'cameras.0', 'startCamera', { width: 640, height: 480 }, result => console.log('Started: ' + result));

The instance 'cameras.0' will receive message clientSubscribe with information who want to receive messages.

adapter.on('message', obj => {
    if (obj?.command === 'clientSubscribe') {
        if (obj?.message.type && obj.message.type.startsWith('startCamera/')) {
            const [, camera] = obj.message.type.split('/');
            // start camera with obj.message.data
            // ...
            
            // inform GUI that camera is started
            adapter.sendTo(obj.from, obj.command, {result: true}, obj.callback);
            this.subscribes = this.subscribes || [];
            this.subscribes.push({sid: obj.message.sid, from: obj.from, type: obj.message.type, camera});
        }
    } else if (obj?.command === 'clientUnsubscribe' || obj?.command === 'clientSubscribeError') {
        if (obj?.message.type && obj.message.type.startsWith('startCamera/')) {
            const [, camera] = obj.message.type.split('/');
            if (this.subscribes) {
                const pos = this.subscribes.findIndex(s => s.sid === obj.message.sid && s.from === obj.from && s.type === obj.message.type);
                if (pos !== -1) {
                    this.subscribes.splice(pos, 1);

                    // stop camera
                    // ...
                }
            }
        }
    }
});

and after that client will receive messages from instance

function sendImage(camera, data) {
    this.subscribes.forEach(it => {
        if (it.camera !== camera) {
            return;
        }
        // send image to GUI
        adapter.sendTo(it.from, 'im', {m: it.type, s: it.sid, d: data});
    });
}

Web Methods

List of commands

Commands

authenticate(callback)

Wait till the user is authenticated. As the user authenticates himself, the callback will be called

  • callback (isUserAuthenticated: boolean, isAuthenticationUsed: boolean) => void) => void: Callback (isUserAuthenticated: boolean, isAuthenticationUsed: boolean) => void

error(error)

Write error into ioBroker log

  • error Error | string: Error object or error text

log(text, level)

Write log entry into ioBroker log

  • text string: log text
  • level ioBroker.LogLevel: one of ['silly', 'debug', 'info', 'warn', 'error']. Default is 'debug'.

checkFeatureSupported(feature, callback)

Check if the same feature is supported by the current js-controller

  • feature SupportedFeature: feature name like CONTROLLER_LICENSE_MANAGER
  • callback (error: string | Error | null | undefined, isSupported?: boolean) => void) => void: callback (error: string | Error | null | undefined, isSupported: boolean) => void

getHistory(id, options, callback)

Get history data from specific instance

  • id string: object ID
  • options ioBroker.GetHistoryOptions: History options
  • callback (error: string | Error | null | undefined, result: ioBroker.GetHistoryResult) => void) => void: callback (error: string | Error | null | undefined, result: ioBroker.GetHistoryResult) => void

httpGet(url, callback)

Read content of HTTP(s) page server-side (without CORS and stuff)

  • url string: Page URL
  • callback (error: Error | null | undefined | string, result?: {status: number; statusText: string}, data?: string) => void: callback (error: Error | null, result?: { status: number; statusText: string }, data?: string) => void

sendTo(adapterInstance, command, message, callback)

Send the message to specific instance

  • adapterInstance string: instance name, e.g. history.0
  • command string: command name
  • message any: the message is instance-dependent
  • callback (result: any) => void) => void: callback (result: any) => void

sendToHost(host, command, message, callback)

Send a message to the specific host. Host can answer to the following commands: cmdExec, getRepository, getInstalled, getInstalledAdapter, getVersion, getDiagData, getLocationOnDisk, getDevList, getLogs, getHostInfo, delLogs, readDirAsZip, writeDirAsZip, readObjectsAsZip, writeObjectsAsZip, checkLogging, updateMultihost.

  • host string: Host name. With or without 'system.host.' prefix
  • command * 'shell' | 'cmdExec' | 'getRepository' | 'getInstalled' | 'getInstalledAdapter' | 'getVersion' | 'getDiagData' | 'getLocationOnDisk' | 'getDevList' | 'getLogs' | 'getLogFile' | 'getLogFiles' | 'getHostInfo' | 'getHostInfoShort' | 'delLogs' | 'readDirAsZip' | 'writeDirAsZip' | 'readObjectsAsZip' | 'writeObjectsAsZip' | 'checkLogging' | 'updateMultihost' | 'upgradeController' | 'upgradeAdapterWithWebserver' | 'getInterfaces' | 'upload' | 'rebuildAdapter' | 'readBaseSettings' | 'writeBaseSettings' | 'addNotification' | 'clearNotifications' | 'getNotifications' | 'updateLicenses' | 'upgradeOsPackages' | 'restartController' | 'sendToSentry'*: Host command
  • message any: the message is command-specific
  • callback (result: {error?: string; result?: any}) => void) => void: callback (result: { error?: string; result?: any }) => void

authEnabled(callback)

Ask server is authentication enabled, and if the user authenticated

  • callback (isUserAuthenticated: boolean | Error | string, isAuthenticationUsed: boolean) => void) => void: callback (isUserAuthenticated: boolean | Error | string, isAuthenticationUsed: boolean) => void

logout(callback)

Logout user

  • callback ioBroker.ErrorCallback: callback (error?: Error) => void

listPermissions(callback)

List commands and permissions

  • callback (permissions: Record< string, {type: 'object' | 'state' | 'users' | 'other' | 'file' | ''; operation: SocketOperation} >) => void: callback (permissions: Record<string, { type: 'object' | 'state' | 'users' | 'other' | 'file' | ''; operation: SocketOperation }>) => void

getUserPermissions(callback)

Get user permissions

  • callback (error: string | null | undefined, userPermissions?: SocketACL | null) => void) => void: callback (error: string | null | undefined, userPermissions?: SocketACL | null) => void

getVersion(callback)

Get the adapter version. Not the socket-classes version!

  • callback (error: string | Error | null | undefined, version: string | undefined, adapterName: string) => void: callback (error: string | Error | null | undefined, version: string | undefined, adapterName: string) => void

getAdapterName(callback)

Get adapter name: "iobroker.ws", "iobroker.socketio", "iobroker.web", "iobroker.admin"

  • callback (error: string | Error | null | undefined, adapterName: string) => void) => void: callback (error: string | Error | null | undefined, version: string | undefined, adapterName: string) => void

clientSubscribe(targetInstance, messageType, data, callback)

Client subscribes to specific instance's messages. Client informs specific instance about subscription on its messages. After subscription, the socket will receive "im" messages from desired instance The target instance MUST acknowledge the subscription and return result

  • targetInstance string: Instance name, e.g., 'cameras.0'
  • messageType string: Message type, e.g., 'startRecording/cam1'
  • data any: Optional data object, e.g., {width: 640, height: 480}
  • callback (error: string | null | Error | undefined, result?: {accepted: boolean; heartbeat?: number; error?: string}) => void: Callback (error: string | null, result?:{ accepted: boolean; heartbeat?: number; error?: string; }) => void

clientUnsubscribe(targetInstance, messageType, callback)

Client unsubscribes from specific instance's messages. The target instance MUST NOT acknowledge the un-subscription

  • targetInstance string: Instance name, e.g., 'cameras.0'
  • messageType string: Message type, e.g., 'startRecording/cam1'
  • callback (error: string | null | Error | undefined) => void) => void: Callback (error: string | null) => void

getAdapterInstances(adapterName, callback)

Read all instances of the given adapter, or all instances of all adapters if adapterName is not defined

  • adapterName string | undefined: adapter name, e.g. history. To get all instances of all adapters just place here "".
  • callback (error: null | undefined | Error | string, instanceList?: ioBroker.InstanceObject[]) => void) => void: callback (error: null | undefined | Error | string, instanceList?: ioBroker.InstanceObject[]) => void

Objects

getObject(id, callback)

Get one object.

  • id string: Object ID
  • callback (error: Error | undefined | string | null, obj?: ioBroker.Object) => void) => void: Callback (error: string | null, obj?: ioBroker.Object) => void

getObjects(list, callback)

Get all objects that are relevant for web: all states and enums with rooms. This is non-admin version of "all objects" and will be overloaded in admin

  • list string[] | null: Optional list of IDs
  • callback (error: Error | undefined | string | null, objs?: Record<string, ioBroker.Object>) => void) => void: Callback (error: string | null, objs?: Record<string, ioBroker.Object>) => void

subscribeObjects(pattern, callback)

Subscribe to object changes by pattern. The events will come as 'objectChange' events to the socket.

  • pattern string | string[]: Pattern like system.adapter.* or array of IDs like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: Error | undefined | string | null) => void) => void: Callback (error: string | null) => void

unsubscribeObjects(pattern, callback)

Unsubscribe from object changes by pattern.

  • pattern string | string[]: Pattern like system.adapter.* or array of IDs like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null | Error | undefined) => void) => void: Callback (error: string | null) => void

getObjectView(design, search, params, callback)

Get a view of objects. Make a query to the object database.

  • design string: Design name, e.g., 'system' or other designs like custom, but it must exist object _design/custom. To 99,9% use system.
  • search string: Search name, object type, like state, instance, adapter, host, ...
  • params {startkey?: string; endkey?: string; depth?: number}: Parameters for the query, e.g., {startkey: 'system.adapter.', endkey: 'system.adapter.\u9999', depth?: number}
  • callback (error: string | null | Error | undefined, result?: {rows: {id: string; value: ioBroker.Object & {virtual: boolean; hasChildren: number;};}[];}) => void: Callback (error: string | null, result?: { rows: Array<GetObjectViewItem> }) => void

setObject(id, obj, callback)

Set an object.

  • id string: Object ID
  • obj ioBroker.Object: Object to set
  • callback (error: string | null | Error | undefined) => void) => void: Callback (error: string | null) => void

delObject(id, _options, callback)

Delete an object. Only deletion of flot and fullcalendar objects is allowed

  • id string: Object ID, like 'flot.0.myChart'
  • _options any: Options for deletion. Ignored
  • callback (error: string | null | Error | undefined) => void) => void: Callback (error: string | null) => void

States

getStates(pattern, callback)

Get states by pattern of current adapter

  • pattern string | string[] | undefined: optional pattern, like system.adapter.* or array of state IDs. If the pattern is omitted, you will get ALL states of current adapter
  • callback (error: null | undefined | Error | string, states?: Record<string, ioBroker.State>) => void) => void: callback (error: null | undefined | Error | string, states?: Record<string, ioBroker.State>) => void

getForeignStates(pattern, callback)

Same as getStates

  • pattern string | string[]: pattern like system.adapter.* or array of state IDs
  • callback (error: null | undefined | Error | string, states?: Record<string, ioBroker.State>) => void) => void: callback (error: null | undefined | Error | string, states?: Record<string, ioBroker.State>) => void

getState(id, callback)

Get a state by ID

  • id string: State ID, e.g. system.adapter.admin.0.memRss
  • callback (error: null | undefined | Error | string, state?: ioBroker.State) => void) => void: Callback (error: null | undefined | Error | string, state?: ioBroker.State) => void

setState(id, state, callback)

Set a state by ID

  • id string: State ID, e.g. system.adapter.admin.0.memRss
  • state ioBroker.SettableState: State value or object, e.g. {val: 123, ack: true}
  • callback (error: null | undefined | Error | string, state?: ioBroker.State) => void) => void: Callback (error: null | undefined | Error | string, state?: ioBroker.State) => void

getBinaryState(id, callback)

Get a binary state by ID

  • id string: State ID, e.g. javascript.0.binary
  • callback (error: null | undefined | Error | string, base64?: string) => void) => void: Callback (error: null | undefined | Error | string, base64?: string) => void

setBinaryState(id, _base64, callback)

Set a binary state by ID

  • id string: State ID, e.g. javascript.0.binary
  • _base64 string: State value as base64 string. Binary states have no acknowledged flag.
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

subscribe(pattern, callback)

Subscribe to state changes by pattern. The events will come as 'stateChange' events to the socket.

  • pattern string | string[]: Pattern like system.adapter.* or array of states like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null) => void) => void: Callback (error: string | null) => void

subscribeStates(pattern, callback)

Subscribe to state changes by pattern. Same as subscribe. The events will come as 'stateChange' events to the socket.

  • pattern string | string[]: Pattern like system.adapter.* or array of states like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null) => void) => void: Callback (error: string | null) => void

unsubscribe(pattern, callback)

Unsubscribe from state changes by pattern.

  • pattern string | string[]: Pattern like system.adapter.* or array of states like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null) => void) => void: Callback (error: string | null) => void

unsubscribeStates(pattern, callback)

Unsubscribe from state changes by pattern. Same as unsubscribe. The events will come as 'stateChange' events to the socket.

  • pattern string | string[]: Pattern like system.adapter.* or array of states like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null) => void) => void: Callback (error: string | null) => void

Files

readFile(adapter, fileName, callback)

Read a file from ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string, data: Buffer | string, mimeType: string) => void) => void: Callback (error: null | undefined | Error | string, data: Buffer | string, mimeType: string) => void

readFile64(adapter, fileName, callback)

Read a file from ioBroker DB as base64 string

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string, base64?: string, mimeType?: string) => void) => void: Callback (error: null | undefined | Error | string, base64: string, mimeType: string) => void

writeFile64(adapter, fileName, data64, options, callback?)

Write a file into ioBroker DB as base64 string

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • data64 string: file content as base64 string
  • options {mode?: number} | ((error: null | undefined | Error | string) => void): optional {mode: 0x0644}
  • callback? (error: null | undefined | Error | string) => void: Callback (error: null | undefined | Error | string) => void

writeFile(adapter, fileName, data, options, callback?)

Write a file into ioBroker DB as text This function is overloaded in admin (because admin accepts only base64)

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • data string: file content as text
  • options {mode?: number} | ((error: null | undefined | Error | string) => void): optional {mode: 0x0644}
  • callback? (error: null | undefined | Error | string) => void: Callback (error: null | undefined | Error | string) => void

unlink(adapter, name, callback)

Delete file in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • name string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

deleteFile(adapter, name, callback)

Delete a file in ioBroker DB (same as "unlink", but only for files)

  • adapter string: instance name, e.g. vis.0
  • name string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

deleteFolder(adapter, name, callback)

Delete folder in ioBroker DB (same as unlink, but only for folders)

  • adapter string: instance name, e.g. vis.0
  • name string: folder name, e.g. main
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

renameFile(adapter, oldName, newName, callback)

Rename a file in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • oldName string: current file name, e.g. main/vis-views.json
  • newName string: new file name, e.g. main/vis-views-new.json
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

rename(adapter, oldName, newName, callback)

Rename file or folder in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • oldName string: current file name, e.g. main/vis-views.json
  • newName string: new file name, e.g. main/vis-views-new.json
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

mkdir(adapter, dirName, callback)

Create a folder in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • dirName string: desired folder name, e.g. main
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

readDir(adapter, dirName, options, callback?)

Read content of folder in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • dirName string: folder name, e.g. main
  • options object | ((error: null | undefined | Error | string, files: ioBroker.ReadDirResult[]) => void): for future use
  • callback? (error: null | undefined | Error | string, files: ioBroker.ReadDirResult[]) => void: Callback (error: null | undefined | Error | string, files: Array<{file: string, isDir: boolean, stats: {size: number}, modifiedAt: number, acl: {owner: string, ownerGroup: string, permissions: number, read: boolean, write: boolean}}>) => void

chmodFile(adapter, fileName, options, callback?)

Change a file mode in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • options {mode?: number}: options {mode: 0x644}
  • callback? (error: string | Error | null | undefined) => void: Callback (error: string | Error | null | undefined) => void

chownFile(adapter, fileName, options, callback?)

Change file owner in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • options {owner: system.user.${string}; ownerGroup?: system.group.${string}}: options {owner: 'system.user.user', ownerGroup: 'system.group.administrator'} or system.user.user. If ownerGroup is not defined, it will be taken from owner.
  • callback? (error: null | undefined | Error | string) => void: Callback (error: null | undefined | Error | string) => void

fileExists(adapter, fileName, callback)

Check if the file or folder exists in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string, exists?: boolean) => void) => void: Callback (error: null | undefined | Error | string, exists?: boolean) => void

subscribeFiles(id, pattern, callback)

Subscribe to file changes in ioBroker DB

  • id string: instance name, e.g. vis.0 or any object ID of type meta. id could have wildcards * too.
  • pattern string | string[]: file name pattern, e.g. main/*.json or array of names
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

unsubscribeFiles(id, pattern, callback)

Unsubscribe from file changes in ioBroker DB

  • id string: instance name, e.g. vis.0 or any object ID of type meta. id could have wildcards * too.
  • pattern string | string[]: file name pattern, e.g. main/*.json or array of names
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

Admin Methods

List of commands

Commands

authenticate(callback)

Wait till the user is authenticated. As the user authenticates himself, the callback will be called

  • callback (isUserAuthenticated: boolean, isAuthenticationUsed: boolean) => void) => void: Callback (isUserAuthenticated: boolean, isAuthenticationUsed: boolean) => void

error(error)

Write error into ioBroker log

  • error Error | string: Error object or error text

log(text, level)

Write log entry into ioBroker log

  • text string: log text
  • level ioBroker.LogLevel: one of ['silly', 'debug', 'info', 'warn', 'error']. Default is 'debug'.

checkFeatureSupported(feature, callback)

Check if the same feature is supported by the current js-controller

  • feature SupportedFeature: feature name like CONTROLLER_LICENSE_MANAGER
  • callback (error: string | Error | null | undefined, isSupported?: boolean) => void) => void: callback (error: string | Error | null | undefined, isSupported: boolean) => void

getHistory(id, options, callback)

Get history data from specific instance

  • id string: object ID
  • options ioBroker.GetHistoryOptions: History options
  • callback (error: string | Error | null | undefined, result: ioBroker.GetHistoryResult) => void) => void: callback (error: string | Error | null | undefined, result: ioBroker.GetHistoryResult) => void

httpGet(url, callback)

Read content of HTTP(s) page server-side (without CORS and stuff)

  • url string: Page URL
  • callback (error: Error | null | undefined | string, result?: {status: number; statusText: string}, data?: string) => void: callback (error: Error | null, result?: { status: number; statusText: string }, data?: string) => void

sendTo(adapterInstance, command, message, callback)

Send the message to specific instance

  • adapterInstance string: instance name, e.g. history.0
  • command string: command name
  • message any: the message is instance-dependent
  • callback (result: any) => void) => void: callback (result: any) => void

sendToHost(host, command, message, callback)

Send a message to the specific host. Host can answer to the following commands: cmdExec, getRepository, getInstalled, getInstalledAdapter, getVersion, getDiagData, getLocationOnDisk, getDevList, getLogs, getHostInfo, delLogs, readDirAsZip, writeDirAsZip, readObjectsAsZip, writeObjectsAsZip, checkLogging, updateMultihost.

  • host string: Host name. With or without 'system.host.' prefix
  • command * 'shell' | 'cmdExec' | 'getRepository' | 'getInstalled' | 'getInstalledAdapter' | 'getVersion' | 'getDiagData' | 'getLocationOnDisk' | 'getDevList' | 'getLogs' | 'getLogFile' | 'getLogFiles' | 'getHostInfo' | 'getHostInfoShort' | 'delLogs' | 'readDirAsZip' | 'writeDirAsZip' | 'readObjectsAsZip' | 'writeObjectsAsZip' | 'checkLogging' | 'updateMultihost' | 'upgradeController' | 'upgradeAdapterWithWebserver' | 'getInterfaces' | 'upload' | 'rebuildAdapter' | 'readBaseSettings' | 'writeBaseSettings' | 'addNotification' | 'clearNotifications' | 'getNotifications' | 'updateLicenses' | 'upgradeOsPackages' | 'restartController' | 'sendToSentry'*: Host command
  • message any: the message is command-specific
  • callback (result: {error?: string; result?: any}) => void) => void: callback (result: { error?: string; result?: any }) => void

authEnabled(callback)

Ask server is authentication enabled, and if the user authenticated

  • callback (isUserAuthenticated: boolean | Error | string, isAuthenticationUsed: boolean) => void) => void: callback (isUserAuthenticated: boolean | Error | string, isAuthenticationUsed: boolean) => void

logout(callback)

Logout user

  • callback ioBroker.ErrorCallback: callback (error?: Error) => void

listPermissions(callback)

List commands and permissions

  • callback (permissions: Record< string, {type: 'object' | 'state' | 'users' | 'other' | 'file' | ''; operation: SocketOperation} >) => void: callback (permissions: Record<string, { type: 'object' | 'state' | 'users' | 'other' | 'file' | ''; operation: SocketOperation }>) => void

getUserPermissions(callback)

Get user permissions

  • callback (error: string | null | undefined, userPermissions?: SocketACL | null) => void) => void: callback (error: string | null | undefined, userPermissions?: SocketACL | null) => void

getVersion(callback)

Get the adapter version. Not the socket-classes version!

  • callback (error: string | Error | null | undefined, version: string | undefined, adapterName: string) => void: callback (error: string | Error | null | undefined, version: string | undefined, adapterName: string) => void

getAdapterName(callback)

Get adapter name: "iobroker.ws", "iobroker.socketio", "iobroker.web", "iobroker.admin"

  • callback (error: string | Error | null | undefined, adapterName: string) => void) => void: callback (error: string | Error | null | undefined, version: string | undefined, adapterName: string) => void

clientSubscribe(targetInstance, messageType, data, callback)

Client subscribes to specific instance's messages. Client informs specific instance about subscription on its messages. After subscription, the socket will receive "im" messages from desired instance The target instance MUST acknowledge the subscription and return result

  • targetInstance string: Instance name, e.g., 'cameras.0'
  • messageType string: Message type, e.g., 'startRecording/cam1'
  • data any: Optional data object, e.g., {width: 640, height: 480}
  • callback (error: string | null | Error | undefined, result?: {accepted: boolean; heartbeat?: number; error?: string}) => void: Callback (error: string | null, result?:{ accepted: boolean; heartbeat?: number; error?: string; }) => void

clientUnsubscribe(targetInstance, messageType, callback)

Client unsubscribes from specific instance's messages. The target instance MUST NOT acknowledge the un-subscription

  • targetInstance string: Instance name, e.g., 'cameras.0'
  • messageType string: Message type, e.g., 'startRecording/cam1'
  • callback (error: string | null | Error | undefined) => void) => void: Callback (error: string | null) => void

getAdapterInstances(adapterName, callback)

Read all instances of the given adapter, or all instances of all adapters if adapterName is not defined

  • adapterName string | undefined: adapter name, e.g. history. To get all instances of all adapters just place here "".
  • callback (error: null | undefined | Error | string, instanceList?: ioBroker.InstanceObject[]) => void) => void: callback (error: null | undefined | Error | string, instanceList?: ioBroker.InstanceObject[]) => void

Admin

getHostByIp(ip, callback?)

Read the host object by IP address.

  • ip string: - IP address, e.g., 192.168.1.1. IPv4 or IPv6
  • callback? (error: string | null | Error | undefined, hostObject?: ioBroker.HostObject | null) => void: - Callback function (ip: string, obj: ioBroker.HostObject | null) => void

requireLog(isEnabled, callback?)

Activate or deactivate logging events. Events will be sent to the socket as log event. Adapter must have common.logTransporter = true.

  • isEnabled boolean: - Is logging enabled
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

readLogs(host, callback?)

Get the log files from the given host.

  • host string: - Host ID, e.g., system.host.raspberrypi
  • callback? (error: string | null | Error | undefined, list?: {fileName: string; size: number}[]) => void: - Callback function (error: string | null, list?: { fileName: string; size: number }[]) => void

cmdExec(host, id, cmd, callback?)

Execute the shell command on host/controller. Following response commands are expected: cmdStdout, cmdStderr, cmdExit.

  • host string: - Host name, e.g., system.host.raspberrypi
  • id number: - Session ID, e.g., Date.now(). This session ID will come in events cmdStdout, cmdStderr, cmdExit
  • cmd string: - Command to execute
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

eventsThreshold(isActive)

Enable or disable the event threshold. Used only for admin to limit the number of events to the front-end.

  • isActive boolean: - If true, then events will be limited

getRatings(update, callback?)

Get the ratings of adapters.

  • update boolean | ((error: string | null | Error | undefined, ratings?: Ratings) => void): - If true, the ratings will be read from the central server, if false from the local cache
  • callback? (error: string | null | Error | undefined, ratings?: Ratings) => void: - Callback function (error: string | null, ratings?: Ratings) => void

getCurrentInstance(callback)

Get the current instance name, like "admin.0"

  • callback (error: string | null | Error | undefined, namespace: string) => void) => void: - Callback function (error: string | null, namespace?: string) => void

decrypt(encryptedText, callback)

Decrypts text with the system secret key.

  • encryptedText string: - Encrypted text
  • callback (error: string | null | Error | undefined, decryptedText?: string) => void) => void: - Callback function (error: string | null, decryptedText?: string) => void

encrypt(plainText, callback)

Encrypts text with the system secret key.

  • plainText string: - Plain text to encrypt
  • callback (error: string | null | Error | undefined, encryptedText?: string) => void) => void: - Callback function (error: string | null, encryptedText?: string) => void

getIsEasyModeStrict(callback)

Get if the admin has easy mode enabled.

  • callback (error: string | null | Error | undefined, isEasyModeStrict?: boolean) => void) => void: - Callback function (error: string | null, isEasyModeStrict?: boolean) => void

getEasyMode(callback)

Get easy mode configuration.

  • callback (error: string | null | Error | undefined, easyModeConfig?: {strict: boolean; configs: InstanceConfig[]}) => void: - Callback function (error: string | null, easyModeConfig?: { strict: boolean; configs: InstanceConfig[] }) => void

getAdapters(adapterName, callback)

Get all adapter as objects.

  • adapterName string: - Optional adapter name
  • callback (error: string | null | Error | undefined, result?: ioBroker.AdapterObject[]) => void) => void: - Callback function (error: string | null, results?: ioBroker.Object[]) => void

updateLicenses(login, password, callback)

Read software licenses (vis, knx, ...) from ioBroker.net cloud for given user

  • login string: - Cloud login
  • password string: - Cloud password
  • callback (error: string | null | Error | undefined, result?: License[]) => void) => void: - Callback function (error: string | null, results?: License[]) => void

getCompactInstances(callback)

Get all instances in a compact form to save bandwidth.

  • callback (error: string | null | Error | undefined, result?: Record<string, CompactInstanceInfo>) => void) => void: - Callback function (error: string | null, results?: Record<string, { adminTab: boolean; name: string; icon: string; enabled: boolean }>) => void

getCompactAdapters(callback)

Get all adapters in a compact form to save bandwidth.

  • callback (error: string | null | Error | undefined, result?: Record<string, CompactAdapterInfo>) => void) => void: - Callback function (error: string | null, results?: Record<string, { icon: string; v: string; iv: string }>) => void

getCompactInstalled(host, callback)

Get all installed adapters in a compact form to save bandwidth.

  • host string: - Host name, e.g., system.host.raspberrypi
  • callback (result?: Record<string, {version: string}>) => void) => void: - Callback function (error: string | null, results?: Record<string, { version: string }>) => void

getCompactSystemConfig(callback)

Get the system configuration in a compact form to save bandwidth.

  • callback (error: string | null | Error | undefined, systemConfig?: {common: ioBroker.SystemConfigCommon; native?: {secret: string}}) => void: - Callback function (error: string | null, systemConfig?: { common: any; native?: { secret: string } }) => void

getCompactSystemRepositories(callback)

Get system repositories in a compact form to save bandwidth.

  • callback (error: string | null | Error | undefined, systemRepositories?: CompactSystemRepository) => void) => void: - Callback function (error: string | null, systemRepositories?: { common: any; native?: { repositories: Record<string, { json: { _repoInfo: any } } } } }) => void

getCompactRepository(host, callback)

Get the repository in a compact form to save bandwidth.

  • host string: - Host name, e.g., system.host.raspberrypi
  • callback (result: Record<string, {version: string; icon?: string}>) => void) => void: - Callback function (error: string | null, results?: Record<string, { version: string; icon?: string }>) => void

getCompactHosts(callback)

Get all hosts in a compact form to save bandwidth.

  • callback (error: string | null | Error | undefined, hosts?: CompactHost[]) => void) => void: - Callback function (error: string | null, results?: Record<string, { common: { name: string; icon: string; color: string; installedVersion: string }; native: { hardware: { networkInterfaces: any[] } } }>) => void

States

delState(id, callback?)

Delete a state. The corresponding object will be deleted too.

  • id string: - State ID
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

getStates(pattern, callback)

Get states by pattern of current adapter

  • pattern string | string[] | undefined: optional pattern, like system.adapter.* or array of state IDs. If the pattern is omitted, you will get ALL states of current adapter
  • callback (error: null | undefined | Error | string, states?: Record<string, ioBroker.State>) => void) => void: callback (error: null | undefined | Error | string, states?: Record<string, ioBroker.State>) => void

getForeignStates(pattern, callback)

Same as getStates

  • pattern string | string[]: pattern like system.adapter.* or array of state IDs
  • callback (error: null | undefined | Error | string, states?: Record<string, ioBroker.State>) => void) => void: callback (error: null | undefined | Error | string, states?: Record<string, ioBroker.State>) => void

getState(id, callback)

Get a state by ID

  • id string: State ID, e.g. system.adapter.admin.0.memRss
  • callback (error: null | undefined | Error | string, state?: ioBroker.State) => void) => void: Callback (error: null | undefined | Error | string, state?: ioBroker.State) => void

setState(id, state, callback)

Set a state by ID

  • id string: State ID, e.g. system.adapter.admin.0.memRss
  • state ioBroker.SettableState: State value or object, e.g. {val: 123, ack: true}
  • callback (error: null | undefined | Error | string, state?: ioBroker.State) => void) => void: Callback (error: null | undefined | Error | string, state?: ioBroker.State) => void

getBinaryState(id, callback)

Get a binary state by ID

  • id string: State ID, e.g. javascript.0.binary
  • callback (error: null | undefined | Error | string, base64?: string) => void) => void: Callback (error: null | undefined | Error | string, base64?: string) => void

setBinaryState(id, _base64, callback)

Set a binary state by ID

  • id string: State ID, e.g. javascript.0.binary
  • _base64 string: State value as base64 string. Binary states have no acknowledged flag.
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

subscribe(pattern, callback)

Subscribe to state changes by pattern. The events will come as 'stateChange' events to the socket.

  • pattern string | string[]: Pattern like system.adapter.* or array of states like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null) => void) => void: Callback (error: string | null) => void

subscribeStates(pattern, callback)

Subscribe to state changes by pattern. Same as subscribe. The events will come as 'stateChange' events to the socket.

  • pattern string | string[]: Pattern like system.adapter.* or array of states like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null) => void) => void: Callback (error: string | null) => void

unsubscribe(pattern, callback)

Unsubscribe from state changes by pattern.

  • pattern string | string[]: Pattern like system.adapter.* or array of states like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null) => void) => void: Callback (error: string | null) => void

unsubscribeStates(pattern, callback)

Unsubscribe from state changes by pattern. Same as unsubscribe. The events will come as 'stateChange' events to the socket.

  • pattern string | string[]: Pattern like system.adapter.* or array of states like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null) => void) => void: Callback (error: string | null) => void

Users

addUser(user, pass, callback?)

Add a new user.

  • user string: - User name, e.g., benjamin
  • pass string: - User password
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

delUser(user, callback?)

Delete an existing user. Admin cannot be deleted.

  • user string: - User name, e.g., benjamin
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

addGroup(group, desc, acl, callback?)

Add a new group.

  • group string: - Group name, e.g., users
  • desc ioBroker.StringOrTranslated | null: - Optional description
  • acl Omit<ioBroker.PermissionSet, 'user' | 'groups'> | null: - Optional access control list object, e.g., {"object":{"list":true,"read":true,"write":false,"delete":false},"state":{"list":true,"read":true,"write":true,"create":true,"delete":false},"users":{"list":true,"read":true,"write":false,"create":false,"delete":false},"other":{"execute":false,"http":true,"sendto":false},"file":{"list":true,"read":true,"write":false,"create":false,"delete":false}}
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

delGroup(group, callback?)

Delete an existing group. Administrator group cannot be deleted.

  • group string: - Group name, e.g., users
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

changePassword(user, pass, callback?)

Change user password.

  • user string: - User name, e.g., benjamin
  • pass string: - New password
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

Objects

getObject(id, callback)

Get one object.

  • id string: Object ID
  • callback (error: Error | undefined | string | null, obj?: ioBroker.Object) => void) => void: Callback (error: string | null, obj?: ioBroker.Object) => void

getObjects(list, callback)

Get all objects that are relevant for web: all states and enums with rooms. This is non-admin version of "all objects" and will be overloaded in admin

  • list string[] | null: Optional list of IDs
  • callback (error: Error | undefined | string | null, objs?: Record<string, ioBroker.Object>) => void) => void: Callback (error: string | null, objs?: Record<string, ioBroker.Object>) => void

subscribeObjects(pattern, callback)

Subscribe to object changes by pattern. The events will come as 'objectChange' events to the socket.

  • pattern string | string[]: Pattern like system.adapter.* or array of IDs like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: Error | undefined | string | null) => void) => void: Callback (error: string | null) => void

unsubscribeObjects(pattern, callback)

Unsubscribe from object changes by pattern.

  • pattern string | string[]: Pattern like system.adapter.* or array of IDs like ['system.adapter.admin.0.memRss', 'system.adapter.admin.0.memHeapTotal']
  • callback (error: string | null | Error | undefined) => void) => void: Callback (error: string | null) => void

getObjectView(design, search, params, callback)

Get a view of objects. Make a query to the object database.

  • design string: Design name, e.g., 'system' or other designs like custom, but it must exist object _design/custom. To 99,9% use system.
  • search string: Search name, object type, like state, instance, adapter, host, ...
  • params {startkey?: string; endkey?: string; depth?: number}: Parameters for the query, e.g., {startkey: 'system.adapter.', endkey: 'system.adapter.\u9999', depth?: number}
  • callback (error: string | null | Error | undefined, result?: {rows: {id: string; value: ioBroker.Object & {virtual: boolean; hasChildren: number;};}[];}) => void: Callback (error: string | null, result?: { rows: Array<GetObjectViewItem> }) => void

setObject(id, obj, callback)

Set an object.

  • id string: Object ID
  • obj ioBroker.Object: Object to set
  • callback (error: string | null | Error | undefined) => void) => void: Callback (error: string | null) => void

delObject(id, _options, callback)

Delete an object. Only deletion of flot and fullcalendar objects is allowed

  • id string: Object ID, like 'flot.0.myChart'
  • _options any: Options for deletion. Ignored
  • callback (error: string | null | Error | undefined) => void) => void: Callback (error: string | null) => void

getAllObjects(callback)

Read absolutely all objects.

  • callback (error: null | undefined | Error | string, result?: Record<string, ioBroker.Object>) => void) => void: - Callback function (error: string | null, objects?: Record<string, ioBroker.Object>) => void

extendObject(id, obj, callback?)

Extend the existing object.

  • id string: - Object ID
  • obj Partial<ioBroker.Object>: - New parts of the object, e.g., {common: {name: 'new name'}}
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

getForeignObjects(pattern, type, callback?)

Read objects by pattern.

  • pattern string: - Pattern like system.adapter.admin.0.*
  • type * ioBroker.ObjectType | undefined | ((error: string | null | Error | undefined, objects?: Record<string, ioBroker.Object>) => void)*: - Type of objects to delete, like state, channel, device, host, adapter. Default - state
  • callback? (error: string | null | Error | undefined, objects?: Record<string, ioBroker.Object>) => void: - Callback function (error: string | null, objects?: Record<string, ioBroker.Object>) => void

delObjects(id, options?, callback?)

Delete an object or objects recursively. Objects with dontDelete cannot be deleted. Same as delObject but with recursive: true.

  • id string: - Object ID, like 'adapterName.0.channel'
  • options? ioBroker.DelObjectOptions | ((error: string | null | Error | undefined) => void) | null: - Options for deletion.
  • callback? (error: string | null | Error | undefined) => void: - Callback function (error: string | null) => void

Files

readFile(adapter, fileName, callback)

Read a file from ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string, data: Buffer | string, mimeType: string) => void) => void: Callback (error: null | undefined | Error | string, data: Buffer | string, mimeType: string) => void

readFile64(adapter, fileName, callback)

Read a file from ioBroker DB as base64 string

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string, base64?: string, mimeType?: string) => void) => void: Callback (error: null | undefined | Error | string, base64: string, mimeType: string) => void

writeFile64(adapter, fileName, data64, options, callback?)

Write a file into ioBroker DB as base64 string

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • data64 string: file content as base64 string
  • options {mode?: number} | ((error: null | undefined | Error | string) => void): optional {mode: 0x0644}
  • callback? (error: null | undefined | Error | string) => void: Callback (error: null | undefined | Error | string) => void

writeFile(adapter, fileName, data, options, callback?)

Write a file into ioBroker DB as text This function is overloaded in admin (because admin accepts only base64)

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • data string: file content as text
  • options {mode?: number} | ((error: null | undefined | Error | string) => void): optional {mode: 0x0644}
  • callback? (error: null | undefined | Error | string) => void: Callback (error: null | undefined | Error | string) => void

unlink(adapter, name, callback)

Delete file in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • name string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

deleteFile(adapter, name, callback)

Delete a file in ioBroker DB (same as "unlink", but only for files)

  • adapter string: instance name, e.g. vis.0
  • name string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

deleteFolder(adapter, name, callback)

Delete folder in ioBroker DB (same as unlink, but only for folders)

  • adapter string: instance name, e.g. vis.0
  • name string: folder name, e.g. main
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

renameFile(adapter, oldName, newName, callback)

Rename a file in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • oldName string: current file name, e.g. main/vis-views.json
  • newName string: new file name, e.g. main/vis-views-new.json
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

rename(adapter, oldName, newName, callback)

Rename file or folder in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • oldName string: current file name, e.g. main/vis-views.json
  • newName string: new file name, e.g. main/vis-views-new.json
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

mkdir(adapter, dirName, callback)

Create a folder in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • dirName string: desired folder name, e.g. main
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

readDir(adapter, dirName, options, callback?)

Read content of folder in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • dirName string: folder name, e.g. main
  • options object | ((error: null | undefined | Error | string, files: ioBroker.ReadDirResult[]) => void): for future use
  • callback? (error: null | undefined | Error | string, files: ioBroker.ReadDirResult[]) => void: Callback (error: null | undefined | Error | string, files: Array<{file: string, isDir: boolean, stats: {size: number}, modifiedAt: number, acl: {owner: string, ownerGroup: string, permissions: number, read: boolean, write: boolean}}>) => void

chmodFile(adapter, fileName, options, callback?)

Change a file mode in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • options {mode?: number}: options {mode: 0x644}
  • callback? (error: string | Error | null | undefined) => void: Callback (error: string | Error | null | undefined) => void

chownFile(adapter, fileName, options, callback?)

Change file owner in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • options {owner: system.user.${string}; ownerGroup?: system.group.${string}}: options {owner: 'system.user.user', ownerGroup: 'system.group.administrator'} or system.user.user. If ownerGroup is not defined, it will be taken from owner.
  • callback? (error: null | undefined | Error | string) => void: Callback (error: null | undefined | Error | string) => void

fileExists(adapter, fileName, callback)

Check if the file or folder exists in ioBroker DB

  • adapter string: instance name, e.g. vis.0
  • fileName string: file name, e.g. main/vis-views.json
  • callback (error: null | undefined | Error | string, exists?: boolean) => void) => void: Callback (error: null | undefined | Error | string, exists?: boolean) => void

subscribeFiles(id, pattern, callback)

Subscribe to file changes in ioBroker DB

  • id string: instance name, e.g. vis.0 or any object ID of type meta. id could have wildcards * too.
  • pattern string | string[]: file name pattern, e.g. main/*.json or array of names
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

unsubscribeFiles(id, pattern, callback)

Unsubscribe from file changes in ioBroker DB

  • id string: instance name, e.g. vis.0 or any object ID of type meta. id could have wildcards * too.
  • pattern string | string[]: file name pattern, e.g. main/*.json or array of names
  • callback (error: null | undefined | Error | string) => void) => void: Callback (error: null | undefined | Error | string) => void

Changelog

2.0.11 (2025-02-11)

  • (@GermanBluefox) Code migrated to TypeScript

1.6.2 (2024-12-01)

  • (@GermanBluefox) Caught the error if no authentication and logout called

1.6.1 (2024-10-05)

  • (@GermanBluefox) Added support for iobroker.SocketIO with TypeScript

1.5.6 (2024-06-26)

  • (@GermanBluefox) Corrected call of getObjectView with null parameter

1.5.5 (2024-06-26)

  • (@GermanBluefox) updated packages

1.5.4 (2024-06-02)

  • (@GermanBluefox) extend getCompactInstancesmethod with version information

1.5.2 (2024-05-28)

  • (foxriver76) ensure compatible adapter-core version

1.5.0 (2024-02-22)

  • (@GermanBluefox) Extended getObjects function with the possibility to read the list of IDs in admin

1.4.6 (2023-10-19)

  • (@GermanBluefox) Added publishInstanceMessageAll command

1.4.4 (2023-10-11)

  • (@GermanBluefox) Caught errors by subscribe/unsubscribe

1.4.3 (2023-10-07)

  • (foxriver76) do not await the subscribes anymore

1.4.2 (2023-09-28)

  • (@GermanBluefox) Corrected error by unsubscribing on client disconnect

1.4.1 (2023-09-12)

  • (foxriver76) do not cancel follow subscribes if one subscribe has an error

1.4.0 (2023-09-11)

  • (foxriver76) fixed crash on invalid patterns with js-controller version 5

1.3.3 (2023-08-01)

  • (@GermanBluefox) Implemented subscribing of a client on messages from specific instance
  • (@GermanBluefox) Moved checkFeatureSupported to regular connection and not only admin

1.2.0 (2023-07-07)

  • (foxriver76) fixed crash on invalid patterns with js-controller version 5
  • (@GermanBluefox) extended the getObjects function with the possibility to read the list of IDs

1.1.5 (2023-03-13)

  • (@GermanBluefox) Added command name

1.1.3 (2023-03-12)

  • (@GermanBluefox) Treat json5 as json

1.1.2 (2023-03-03)

  • (@GermanBluefox) Allow deletion of fullcalendar objects

1.1.1 (2022-12-22)

  • (@GermanBluefox) Corrected error with subscribe

1.1.0 (2022-12-22)

  • (@GermanBluefox) Added user check to many commands
  • (@GermanBluefox) Downgrade axios to 0.27.2

1.0.2 (2022-11-08)

  • (@GermanBluefox) Function getObjectsfor web was extended by devices, channels and enums

1.0.1 (2022-10-10)

  • (@GermanBluefox) Fixed error with delObject

0.5.5 (2022-10-09)

  • (Apollon77) Prepare for future js-controller versions

0.5.4 (2022-09-23)

  • (@GermanBluefox) Fixed error in delObjects method

0.5.3 (2022-08-24)

  • (@GermanBluefox) Caught error by subscribing

0.5.2 (2022-08-19)

  • (@GermanBluefox) Added command getCompactSystemRepositories

0.5.0 (2022-07-20)

  • (@GermanBluefox) Buffer conversion errors caught and handled

0.4.12 (2022-07-08)

  • (@GermanBluefox) Corrected getAdapterInstances method

0.4.11 (2022-07-05)

  • (@GermanBluefox) Corrected log transportation

0.4.10 (2022-06-22)

  • (@GermanBluefox) Corrected getAdapterInstances

0.4.9 (2022-06-20)

  • (@GermanBluefox) Do not show error with failed authentication

0.4.7 (2022-06-20)

  • (@GermanBluefox) Allowed overloading system language

0.4.6 (2022-06-20)

  • (@GermanBluefox) updated passport

0.4.5 (2022-06-20)

  • (@GermanBluefox) allowed running socket.io behind reverse proxy

0.4.4 (2022-06-09)

  • (@GermanBluefox) Do not show requireLog message

0.4.3 (2022-06-03)

  • (@GermanBluefox) Allowed call of getAdapterInstances for non admin

0.4.2 (2022-05-23)

  • (@GermanBluefox) Corrected renameFile command for admin

0.4.1 (2022-05-23)

  • (@GermanBluefox) Corrected changePassword command for admin

0.4.0 (2022-05-19)

  • (@GermanBluefox) Added support of socket.io 4.x

0.3.2 (2022-05-19)

  • (@GermanBluefox) Hide warn messages

0.3.1 (2022-05-16)

0.3.0 (2022-05-16)

  • (@GermanBluefox) Process writeDirAsZip locally

0.2.1 (2022-05-12)

  • (@GermanBluefox) fixed getObjects command

0.2.0 (2022-05-09)

  • (@GermanBluefox) fixed delObjects command

0.1.10 (2022-05-09)

  • (@GermanBluefox) Added support for fileChanges

0.1.9 (2022-05-07)

  • (@GermanBluefox) Corrected readLogs command and implement file subscriptions

0.1.7 (2022-05-05)

  • (@GermanBluefox) Caught some sentry errors

0.1.6 (2022-05-05)

  • (@GermanBluefox) fixed delObject command

0.1.5 (2022-04-25)

  • (@GermanBluefox) added updateRatings

0.1.4 (2022-04-24)

  • (@GermanBluefox) added passportSocket

0.1.2 (2022-04-24)

  • (@GermanBluefox) initial commit

License

The MIT License (MIT)

Copyright (c) 2020-2025 @GermanBluefox [email protected]

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.