Controlling Relays and Dry Contacts
The AT1000 provides 8 dry contact relays per device, which can be controlled individually or all at once. Each relay is addressed by its number (0-7).
Closing and Opening Relays​
the code snippets below demonstrate how to control the relays using the AT1000 API. The tester.relays.relay() function is used to select a relay. The close() and open() methods are used to activate and deactivate the relay, respectively.
- NodeJS
- Python
- Rust
import { AT1000 } from '@ikalogic/at1000';
const devices = await AT1000.findDevices(); // Discover devices (returns host strings)
const tester = await AT1000.open(devices[0]); // Open the first detected device
await tester.reset(); // Reset the device to a known state
let relay0 = tester.relays.relay(0); // Select relay number 0
await relay0.close(); // Close relay 0 (activate)
await relay0.open(); // Open relay 0 (deactivate)
from ikalogic_at1000 import AT1000
devices = AT1000.find_devices() # Discover devices (returns host strings)
tester = AT1000.open(devices[0]) # Open the first detected device
tester.reset() # Reset the device to a known state
relay0 = tester.relays.relay(0) # Select relay number 0
relay0.close() # Close relay 0 (activate)
relay0.open() # Open relay 0 (deactivate)
use ikalogic_at1000::AT1000;
use std::time::Duration;
let devices = AT1000::find_devices(Duration::from_millis(500))?; // Discover devices (returns host strings)
let tester = AT1000::open(&devices[0])?; // Open the first detected device
tester.reset()?; // Reset the device to a known state
let relay0 = tester.relays.relay(0)?; // Select relay number 0
relay0.close()?; // Close relay 0 (activate)
relay0.open()?; // Open relay 0 (deactivate)
Reading Relay Status
To check whether a relay is open or closed, use the read() function in a similar manner. This function returns "closed" if the relay is closed and "open" if it is open.
- NodeJS
- Python
- Rust
let relay_status = await relay0.read(); // Read the status of relay 0
console.log("Relay 0 status:" + relay_status );
relay_status = relay0.read() # Read the status of relay 0
print("Relay 0 status:" + str(relay_status) )
let relay0 = tester.relays.relay(0)?; // Select relay number 0
let relay_status = relay0.read()?; // Read the status of relay 0
println!("Relay 0 status: {:?}", relay_status);
Please note that relay operations are always sequential, and cannot be synchronized using the hold and release mechanisms described here.
API Reference​
Accessing Relays​
- NodeJS
- Python
- Rust
const relays = tester.relays;
relays = tester.relays
let relays = &tester.relays;
Relays Module Methods​
reset()​
Resets all relays to their default state (open).
- NodeJS
- Python
- Rust
await tester.relays.reset();
tester.relays.reset()
tester.relays.reset()?;
Returns: Promise<void> / None / Result<(), At1000Error>
relay(id)​
Access a specific relay by ID.
- NodeJS
- Python
- Rust
const relay0 = tester.relays.relay(0);
relay0 = tester.relays.relay(0)
let relay0 = tester.relays.relay(0)?;
Parameters:
id(number/int/usize): Relay identifier (0-7)
Returns: Relay instance / Result<Relay, At1000Error> in Rust
read()​
Reads the state of all relays at once.
- NodeJS
- Python
- Rust
const states = await tester.relays.read();
console.log("All relay states:", states);
// ["open", "closed", "open", "open", "open", "open", "open", "open"]
states = tester.relays.read()
print(f"All relay states: {states}")
# ["open", "closed", "open", "open", "open", "open", "open", "open"]
let states = tester.relays.read()?;
println!("All relay states: {:?}", states);
// [Open, Closed, Open, Open, Open, Open, Open, Open]
Returns: Promise<States> / States / Result<Vec<RelayState>, At1000Error> - Array of states for all relays
open()​
Opens all relays simultaneously.
- NodeJS
- Python
- Rust
await tester.relays.open();
tester.relays.open()
tester.relays.open()?;
Returns: Promise<States> / States / Result<Vec<RelayState>, At1000Error> - Array of updated states (all "open")
close()​
Closes all relays simultaneously.
- NodeJS
- Python
- Rust
await tester.relays.close();
tester.relays.close()
tester.relays.close()?;
Returns: Promise<States> / States / Result<Vec<RelayState>, At1000Error> - Array of updated states (all "closed")
Relay Class​
Individual relay control.
id (Property)​
The relay identifier (read-only).
- NodeJS
- Python
- Rust
console.log("Relay ID:", relay.id); // 0-7
print(f"Relay ID: {relay.id}") # 0-7
let relay = tester.relays.relay(0)?;
println!("Relay ID: {}", relay.id()); // 0-7
Type: number / int / usize (a method in Rust: relay.id())
read()​
Reads the current state of the relay.
- NodeJS
- Python
- Rust
const state = await relay.read();
console.log("Relay is", state); // "open" or "closed"
state = relay.read()
print(f"Relay is {state}") # "open" or "closed"
let relay = tester.relays.relay(0)?;
let state = relay.read()?;
println!("Relay is {:?}", state); // Open or Closed
Returns: Promise<State> / State / Result<RelayState, At1000Error> - Either "open" or "closed" (RelayState::Open or RelayState::Closed in Rust)
is_open()​
Checks if the relay is open.
- NodeJS
- Python
- Rust
const open = await relay.is_open();
if (open) {
console.log("Relay is open (circuit disconnected)");
}
open = relay.is_open()
if open:
print("Relay is open (circuit disconnected)")
let relay = tester.relays.relay(0)?;
let open = relay.is_open()?;
if open {
println!("Relay is open (circuit disconnected)");
}
Returns: Promise<boolean> / bool / Result<bool, At1000Error> - true if open, false if closed
is_closed()​
Checks if the relay is closed.
- NodeJS
- Python
- Rust
const closed = await relay.is_closed();
if (closed) {
console.log("Relay is closed (circuit connected)");
}
closed = relay.is_closed()
if closed:
print("Relay is closed (circuit connected)")
let relay = tester.relays.relay(0)?;
let closed = relay.is_closed()?;
if closed {
println!("Relay is closed (circuit connected)");
}
Returns: Promise<boolean> / bool / Result<bool, At1000Error> - true if closed, false if open
open()​
Opens the relay (disconnects the circuit).
- NodeJS
- Python
- Rust
await relay.open();
relay.open()
let relay = tester.relays.relay(0)?;
relay.open()?;
Returns: Promise<State> / State / Result<RelayState, At1000Error> - The new state ("open")
close()​
Closes the relay (connects the circuit).
- NodeJS
- Python
- Rust
await relay.close();
relay.close()
let relay = tester.relays.relay(0)?;
relay.close()?;
Returns: Promise<State> / State / Result<RelayState, At1000Error> - The new state ("closed")
Types​
State​
"open" | "closed"
Rust: ikalogic_at1000::RelayState
pub enum RelayState {
Open,
Closed,
}
States​
Array<"open" | "closed"> // Length: 8 (one per relay)
Rust: Vec<RelayState> (length 8, one per relay)
Notes​
- Relays are dry contact type (no voltage provided by relay itself)
- 8 relays total (indexed 0-7)
- States:
"open"= circuit disconnected,"closed"= circuit connected - Relay 0 has special current measurement capability (see Power API)
- Default state after reset: all open
- Use appropriate delays between operations for mechanical relays