import asyncdispatch, tables, options import ../types, ../vars, ../utils, ../modbus proc setModbusRelayState* (relayboard: string, relay: uint8, value: bool) {.async.} = let config = server.config.devices[relayboard] server.state[relayboard].relays[relay] = value await mb.asyncWriteBit(config.address.get, config.firstRegister + relay, server.state[relayboard].relays[relay]) proc toggleModbusRelayState* (relayboard: string, relay: uint8) {.async.} = let config = server.config.devices[relayboard] server.state[relayboard].relays[relay] = not server.state[relayboard].relays[relay] await mb.asyncWriteBit(config.address.get, config.firstRegister + relay, server.state[relayboard].relays[relay]) proc updateRelayboards () {.async.} = echo "Get relayboard state" for key, device in server.config.devices.pairs(): if device.type != RelayBoard: continue try: let data = await mb.asyncReadBits(device.address.get, device.firstRegister, device.count) server.state[key] = DeviceState(type: RelayBoard, relays: data) except: echo "Error[updateRelayboards]:\n", getCurrentExceptionMsg() broadcastServerState() proc initModbusRelayboards* () = for key, device in server.config.devices.pairs(): if device.type != RelayBoard: continue server.state[key] = DeviceState(type: RelayBoard) asyncCheck updateRelayboards()