ARC_Starter/sia-tester.py

82 lines
2.6 KiB
Python

import socket
import os
from crccheck.crc import CrcArc
def clear_screen():
os.system("cls" if os.name == "nt" else "clear")
def send_tcp_message(host, port, message: bytes):
try:
with socket.create_connection((host, port), timeout=10) as sock:
print(f"📤 Sending: {message}")
sock.sendall(message)
response = sock.recv(1024)
print(f"📥 Received: {response}")
except Exception as e:
print(f"❌ Error sending message: {e}")
def build_sia_dcs_message():
client_id = input("Enter Client ID (e.g. 1234): ").zfill(4)
code = input("Enter Event Code (e.g. OP, RP, BA): ").upper()
zone = input("Enter Zone (e.g. 01): ").zfill(2)
image_url = input("Optional Image URL (or leave blank): ")
body = f'"SIA-DCS"0001L0#{client_id}[{client_id}|Nri1/{code}{zone}]'
if image_url:
body += f'[V{image_url}]'
body_bytes = body.encode("ascii")
crc = CrcArc.calc(body_bytes)
length = f"{len(body_bytes):04X}" # Hex, 4-digit, upper-case
full_message = f"\n{crc:04X}{length}{body}\r".encode("ascii")
return full_message
def build_adm_cid_message():
seq = input("Enter sequence number (e.g. 0000): ").zfill(4)
line = input("Enter line number (e.g. 3): ").zfill(1)
account = input("Enter account number (e.g. 1234): ").zfill(4)
code = input("Enter event code (e.g. 1131): ").zfill(4)
area = input("Enter area/partition (e.g. 01): ").zfill(2)
zone = input("Enter zone/user (e.g. 015): ").zfill(3)
image_url = input("Optional Image URL (or leave blank): ")
body = f'"ADM-CID"{seq}L{line}#{account}[#{account}|{code} {area} {zone}]'
if image_url:
body += f'[V{image_url}]'
body_bytes = body.encode("ascii")
crc = CrcArc.calc(body_bytes)
length = f"{len(body_bytes):04X}"
full_message = f"\n{crc:04X}{length}{body}\r".encode("ascii")
return full_message
def main():
clear_screen()
print("🚨 Alarm Test Sender")
host = input("Enter receiver IP (e.g. 127.0.0.1): ")
port = int(input("Enter port (e.g. 9000): "))
while True:
print("\nChoose protocol:")
print("1. Send SIA-DCS message")
print("2. Send ADM-CID message")
print("3. Exit")
choice = input("Select (1/2/3): ")
if choice == "1":
msg = build_sia_dcs_message()
send_tcp_message(host, port, msg)
elif choice == "2":
msg = build_adm_cid_message()
send_tcp_message(host, port, msg)
elif choice == "3":
print("👋 Bye!")
break
else:
print("Invalid choice")
if __name__ == "__main__":
main()