@iobroker/socket-classes
v2.0.12
Published
ioBroker server-side web sockets
Downloads
36,130
Readme
@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
authenticate
error
log
checkFeatureSupported
getHistory
httpGet
sendTo
sendToHost
authEnabled
logout
listPermissions
getUserPermissions
getVersion
getAdapterName
clientSubscribe
clientUnsubscribe
getAdapterInstances
getObject
getObjects
subscribeObjects
unsubscribeObjects
getObjectView
setObject
delObject
getStates
getForeignStates
getState
setState
getBinaryState
setBinaryState
subscribe
subscribeStates
unsubscribe
unsubscribeStates
readFile
readFile64
writeFile64
writeFile
unlink
deleteFile
deleteFolder
renameFile
rename
mkdir
readDir
chmodFile
chownFile
fileExists
subscribeFiles
unsubscribeFiles
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 textlevel
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 likeCONTROLLER_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 IDoptions
ioBroker.GetHistoryOptions: History optionscallback
(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 URLcallback
(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 namemessage
any: the message is instance-dependentcallback
(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.' prefixcommand
* '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 commandmessage
any: the message is command-specificcallback
(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 IDcallback
(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 IDscallback
(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 likesystem.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 likesystem.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 likecustom
, but it must exist object_design/custom
. To 99,9% usesystem
.search
string: Search name, object type, likestate
,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 IDobj
ioBroker.Object: Object to setcallback
(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. Ignoredcallback
(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, likesystem.adapter.*
or array of state IDs. If the pattern is omitted, you will get ALL states of current adaptercallback
(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 likesystem.adapter.*
or array of state IDscallback
(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 likesystem.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 likesystem.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 likesystem.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 likesystem.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 stringoptions
{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 textoptions
{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 usecallback?
(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'}
orsystem.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 typemeta
.id
could have wildcards*
too.pattern
string | string[]: file name pattern, e.g.main/*.json
or array of namescallback
(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 typemeta
.id
could have wildcards*
too.pattern
string | string[]: file name pattern, e.g.main/*.json
or array of namescallback
(error: null | undefined | Error | string) => void) => void: Callback(error: null | undefined | Error | string) => void
Admin Methods
List of commands
authenticate
error
log
checkFeatureSupported
getHistory
httpGet
sendTo
sendToHost
authEnabled
logout
listPermissions
getUserPermissions
getVersion
getAdapterName
clientSubscribe
clientUnsubscribe
getAdapterInstances
getHostByIp
requireLog
readLogs
cmdExec
eventsThreshold
getRatings
getCurrentInstance
decrypt
encrypt
getIsEasyModeStrict
getEasyMode
getAdapters
updateLicenses
getCompactInstances
getCompactAdapters
getCompactInstalled
getCompactSystemConfig
getCompactSystemRepositories
getCompactRepository
getCompactHosts
delState
getStates
getForeignStates
getState
setState
getBinaryState
setBinaryState
subscribe
subscribeStates
unsubscribe
unsubscribeStates
addUser
delUser
addGroup
delGroup
changePassword
getObject
getObjects
subscribeObjects
unsubscribeObjects
getObjectView
setObject
delObject
getAllObjects
extendObject
getForeignObjects
delObjects
readFile
readFile64
writeFile64
writeFile
unlink
deleteFile
deleteFolder
renameFile
rename
mkdir
readDir
chmodFile
chownFile
fileExists
subscribeFiles
unsubscribeFiles
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 textlevel
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 likeCONTROLLER_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 IDoptions
ioBroker.GetHistoryOptions: History optionscallback
(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 URLcallback
(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 namemessage
any: the message is instance-dependentcallback
(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.' prefixcommand
* '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 commandmessage
any: the message is command-specificcallback
(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 IPv6callback?
(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 enabledcallback?
(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 eventscmdStdout
,cmdStderr
,cmdExit
cmd
string: - Command to executecallback?
(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 cachecallback?
(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 textcallback
(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 encryptcallback
(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 namecallback
(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 loginpassword
string: - Cloud passwordcallback
(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 IDcallback?
(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, likesystem.adapter.*
or array of state IDs. If the pattern is omitted, you will get ALL states of current adaptercallback
(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 likesystem.adapter.*
or array of state IDscallback
(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 likesystem.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 likesystem.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 likesystem.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 likesystem.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 passwordcallback?
(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 descriptionacl
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 passwordcallback?
(error: string | null | Error | undefined) => void: - Callback function(error: string | null) => void
Objects
getObject(id, callback)
Get one object.
id
string: Object IDcallback
(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 IDscallback
(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 likesystem.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 likesystem.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 likecustom
, but it must exist object_design/custom
. To 99,9% usesystem
.search
string: Search name, object type, likestate
,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 IDobj
ioBroker.Object: Object to setcallback
(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. Ignoredcallback
(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 IDobj
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 likesystem.adapter.admin.0.*
type
* ioBroker.ObjectType | undefined | ((error: string | null | Error | undefined, objects?: Record<string, ioBroker.Object>) => void)*: - Type of objects to delete, likestate
,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 stringoptions
{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 textoptions
{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 usecallback?
(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'}
orsystem.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 typemeta
.id
could have wildcards*
too.pattern
string | string[]: file name pattern, e.g.main/*.json
or array of namescallback
(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 typemeta
.id
could have wildcards*
too.pattern
string | string[]: file name pattern, e.g.main/*.json
or array of namescallback
(error: null | undefined | Error | string) => void) => void: Callback(error: null | undefined | Error | string) => void
Changelog
2.0.12 (2025-02-11)
- (@GermanBluefox) Corrected language settings
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
getCompactInstances
method 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
asjson