# Using the IP/Serial programming interface

**URL:** <https://arcam.discourse.group/t/using-the-ip-serial-programming-interface/689>\
**Category:** Uncategorized\
**Created:** [October 31, 2021, 6:43pm UTC](https://arcam.discourse.group/t/using-the-ip-serial-programming-interface/689 "2021-10-31T18:43:41Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![JohnnyPanda](https://avatars.discourse-cdn.com/v4/letter/j/c4cdca/32.png) [@JohnnyPanda](https://arcam.discourse.group/u/JohnnyPanda)\
**Post date:** [October 31, 2021, 6:43pm UTC](https://arcam.discourse.group/t/using-the-ip-serial-programming-interface/689/1 "2021-10-31T18:43:41Z")

</div>

Hi,

I’m trying to control my SA30 via IP but am struggling with how to use the published API document. [https://www.arcam.co.uk/ugc/tor/SA30/Custom%20Installation%20Notes/SH306E\_RS232\_SA30\_4.pdf](https://www.arcam.co.uk/ugc/tor/SA30/Custom%20Installation%20Notes/SH306E_RS232_SA30_4.pdf)

I’ve tried telnet onto 50000 and issue the commands strings but nothing. I’m assuming the string needs to be wrapped with some sort of command but I just guessing.

Can anyone point me to some documentation or offer some guidance?

Thanks in advance.

---

<div class="post-metadata">

**Author:** ![madfiddler](https://avatars.discourse-cdn.com/v4/letter/m/a8b319/32.png) [@madfiddler](https://arcam.discourse.group/u/madfiddler)\
**Post date:** [November 1, 2021, 1:38am UTC](https://arcam.discourse.group/t/using-the-ip-serial-programming-interface/689/2 "2021-11-01T01:38:08Z")

</div>

The guide explains the byte value stream/array necessary to send a command, with telnet you are typing characters so I guess that will be difficult to work out the byte values of those characters to match what represents a valid command…. And there may be some code page conversion going on

Depending on your dev platform I’d look to script this to test…. Open a TCP socket and send the byte stream/array …not tried myself, but something along these lines from a Windows PC I guess [powershell - Send/receive byte arrays via TCP - Stack Overflow](https://stackoverflow.com/questions/10946501/send-receive-byte-arrays-via-tcp)

---

<div class="post-metadata">

**Author:** ![jvs1](https://yyz2.discourse-cdn.com/free1/user_avatar/arcam.discourse.group/jvs1/32/10_2.png) [@jvs1](https://arcam.discourse.group/u/jvs1)\
**Post date:** [November 1, 2021, 7:16am UTC](https://arcam.discourse.group/t/using-the-ip-serial-programming-interface/689/3 "2021-11-01T07:16:24Z")

</div>

Hi Johnny, one of the forum members programmed a tool to communicate the SA30 a while ago. It is C#, so it is easy to reverse engineer it. Maybe you should have a look at it? Or ask the author for more information?

> [@ArcamDial - A tool to control your amp with a Surface Dial](https://arcam.discourse.group/t/arcamdial-a-tool-to-control-your-amp-with-a-surface-dial/364):
>
> There might be a subset of people that own a SA30 and a Microsoft Surface Dial. Or it could be just me. Anyway I made a Windows program that can be used to control the SA30 with the Surface Dial. It is similar to RooDial ([www.rooextend.com](http://www.rooextend.com)), except that you don’t need Roon + a RaspberryPi. Instead you need a Windows 10 PC. I used the pc that I also use to stream music from. If you’re unfamiliar with the dial, it looks like a detached volume knob where you can also click on: [SurfaceDial] T…

---

<div class="post-metadata">

**Author:** ![arcam\_nick](https://avatars.discourse-cdn.com/v4/letter/a/57b2e6/32.png) [@arcam\_nick](https://arcam.discourse.group/u/arcam_nick)\
**Post date:** [November 8, 2021, 12:05pm UTC](https://arcam.discourse.group/t/using-the-ip-serial-programming-interface/689/4 "2021-11-08T12:05:46Z")

</div>

You can use Docklight ([https://docklight.de/](https://docklight.de/)) and send commands as hex strings, e.g. power off:

21 01 00 01 00 0D

---

<div class="post-metadata">

**Author:** ![JohnnyPanda](https://avatars.discourse-cdn.com/v4/letter/j/c4cdca/32.png) [@JohnnyPanda](https://arcam.discourse.group/u/JohnnyPanda)\
**Post date:** [November 16, 2021, 9:41am UTC](https://arcam.discourse.group/t/using-the-ip-serial-programming-interface/689/5 "2021-11-16T09:41:47Z")

</div>

That was what I needed! I was able to use this product to verify the codes were actually working and that the amp was responding as expected. I then turned my attention to Home Assistant / Node Red which is what I use for my home automation.

I dragged a TCP request node onto my flow, configuring it with the IP and port number the SA30 was listening on. Then added two injector nodes renaming them “SA30-power\_on” and “SA30-power\_off” I set the payload type pf each to “buffer” and added the following payloads:

[“0x21”,“0x01”,“0x00”,“0x01”,“0x00”,“0x0D”] for the SA30-power\_off node  
[“0x21”,“0x01”,“0x00”,“0x01”,“0x01”,“0x0D”] for the SA30-power\_on node

Manually triggering the injector nodes turns on or off the amps as expected. I’m not seeing the response I’m expecting, but I’m at least now on the right track.

Thanks all that made suggestions and hopefully the above may help someone else.

---

<div class="post-metadata">

**Author:** ![yankeeinlondon](https://yyz2.discourse-cdn.com/free1/user_avatar/arcam.discourse.group/yankeeinlondon/32/416_2.png) [@yankeeinlondon](https://arcam.discourse.group/u/yankeeinlondon)\
**Post date:** [September 2, 2024, 4:13pm UTC](https://arcam.discourse.group/t/using-the-ip-serial-programming-interface/689/6 "2024-09-02T16:13:24Z")

</div>

@JohnnyPanda do you happen to have a NodeRed (or Home Assistant) integration that is working for you? This is precisely what I’m looking for myself.

---

<div class="post-metadata">

**Author:** ![JohnnyPanda](https://avatars.discourse-cdn.com/v4/letter/j/c4cdca/32.png) [@JohnnyPanda](https://arcam.discourse.group/u/JohnnyPanda)\
**Post date:** [September 2, 2024, 4:41pm UTC](https://arcam.discourse.group/t/using-the-ip-serial-programming-interface/689/7 "2024-09-02T16:41:22Z")

</div>

Hi @yankeeinlondon ,

I ended up using a NR change node to set the msg.payload to the hex value I wanted to send to the SA30. Then I pump that message into a NR TCP request node configured with the SA30’s IP address and a port setting of 50000. (Leave the “Enable secure…” unchecked).

Trigger it with a injection node, or whatever and you should be good to go. 👍
