I have tried to get to work some time now. I find the documentation lacking for good examples. And I was unable to find anything useful on this forum.
I'm trying to create a console test application (is running on another computer on the same network) to receive all value changes from HS3.
I can browse thru all the devices but I can't receive any value notifications.

This is my complete code.
(in my frustration to find any working code this code is not good)

using System;
using System.Threading;
using HomeSeerAPI;
using HSCF.Communication.Scs.Communication;
using HSCF.Communication.Scs.Communication.EndPoints.Tcp;
using HSCF.Communication.ScsServices.Client;
using Scheduler;
using Scheduler.Classes;

namespace HS3TEST
    class Program
        public string OurInstanceFriendlyName = "";
        public bool BShutDown = false;
        static IHSApplication _host = new hsapplication();
        static clsHSPI _plugin;
        private static IAppCallbackAPI _callback;
        private const string IFACE_NAME = "iHome";
        private IHSApplication hs;
        private static IScsServiceClient<IHSApplication> _client;
        private static IScsServiceClient<IAppCallbackAPI> _clientCallback;

        static void Main()
            _plugin = new clsHSPI();
            _client = ScsServiceClientBuilder.CreateClient<IHSApplication>(new ScsTcpEndPoint("", 10400), _plugin);
            _clientCallback = ScsServiceClientBuilder.CreateClient<IAppCallbackAPI>(new ScsTcpEndPoint("", 10400), _plugin);

            _host = _client.ServiceProxy;
            _host.Connect(IFACE_NAME, "");
            _host.RegisterEventCB(Enums.HSEvent.VALUE_CHANGE, IFACE_NAME, ""); // ????
            _callback = _clientCallback.ServiceProxy;
            Console.WriteLine("callback.APIVersion = "+_callback.APIVersion);
            _callback.RegisterEventCB(Enums.HSEvent.VALUE_CHANGE, IFACE_NAME, ""); // ?????

            var en = (clsDeviceEnumeration) _host.GetDeviceEnumerator();
            while (!en.Finished)
                var dv = en.GetNext();
                var code = dv.get_Code(null);
                var name = dv.get_Name(null);
                Console.WriteLine("Code='" + code +"' name='" + name+"', ver='" + dv.Version+"'");

            // A2 IS A DIMMER. VALUE RETURNING IS -1 
            var value = _host.DeviceValueByName("A2"); // Where is the function for device code?
            Console.WriteLine("A2=" + value);
            var oldSec = -1;
            Console.WriteLine("Press any key to quit");
            while (_clientCallback.CommunicationState == CommunicationStates.Connected)
                if (Console.KeyAvailable) break;
                if (oldSec == DateTime.Now.Second) continue;
                oldSec = DateTime.Now.Second;
                _host.SetDeviceValue("A2", oldSec);


        /// <summary>
        /// THERE IS NO EVENT 
        /// </summary>
        /// <param name="evtype"></param>
        /// <param name="parms"></param>
        public static void HSEvent(int evtype, object[] parms)
                Console.WriteLine("HSEvent=" + evtype);
            catch (Exception err)
                Console.WriteLine("HSEvent ERROR=" + err);