A node library to control Meian TCP alarms and other chinese 'TCP IP' alarm system (Focus, Emooluxr, iAlarm/Antifurto365, Casasicura, etc)
inspired by these projects
npx meian-cli
will print the help:
  -c, --commands  List of commands to execute. Can contain args: SetByWay(2,fals
                  e)                                       [vettore] [richiesto]
  -s, --host      ip of the alarm                                    [richiesto]
  -n, --port      TCP port                         [numero] [predefinito: 18034]
  -u, --username  Username required for logging in         [stringa] [richiesto]
  -p, --password  Password required for logging in         [stringa] [richiesto]
  -z, --zones     Number of configured zones         [numero] [predefinito: 128]
  -o, --output    JSON file where to dump the output of the commands   [stringa]
Basic example:
npx meian-cli -c GetByWay -s 192.168.1.81 -u MyUsername -p MyPassword 
Example with 40 zones, multiple commands and dump to file:
npx meian-cli -c GetNet -c GetAlarmStatus -c GetZone -c GetByWay -c SetByWay(1,true) -c GetLogs -s 192.168.1.81 -u MyUsername -p MyPassword -z 40 -o /MyFolder/dump.json
N.B. with bash you may need to write commands with quotes
npx meian-cli -c "SetByWay(1,true)" -s 192.168.1.81 -u MyUsername -p MyPassword 
npx ialarm-cli 
npm install node-ialarm
See Commands
import { MeianSocket } from 'ialarm'
const socket = MeianSocket('192.168.1.81', 18034, 'username', 'password', 'debug', 40)
/**
   * ready to send commands
   */
socket.onConnected(async (connectionResponse) => {
  console.log(`logged in (${connectionResponse})`)
})
// command
socket.onResponse(async (commandResponse) => {
  console.log(JSON.stringify(commandResponse))
})
// push events
socket.onPush(async (pushResponse) => {
  console.log(`Received push: ${JSON.stringify(pushResponse)}`)
})
socket.onDisconnected(async (disconnectionResponse) => {
  console.log(`disconnected (type: ${disconnectionResponse})`)
})
socket.onError(async (error) => {
  console.log(`Error ${error.message} - ${JSON.stringify(error.stack)}`)
})
/**
 * ready to send commands
 */
socket.onConnected(async (connectionResponse) => {
  console.log(`logged in (${connectionResponse})`)
})
// connect
socket.connect()
// wait for connection before sending data
const polling = setInterval(async () => {
  if (socket.connection.status.isReady()) {
    clearInterval(polling)
    const commands = ['GetNet', 'GetAlarmStatus', 'GetByWay']
    const commandsArgs = [[], []. [1]]
    console.log(`Testing ${JSON.stringify(current)} (${JSON.stringify(commandsArgs)})...`)
    // send commands
    await socket.executeCommand(commands, commandsArgs)
  } else {
    console.log(`Connection not ready yet for receiving data - ${socket.connection.status.text()}...will try again later..`)
  }
}, 1000)
// delay disconnection for testing purposes
setTimeout(() => {
  socket.disconnect()
}, 120000)