Exemple #1
0
        public HttpServer(ILogger logger, HomeKitServer homeKitServer, int port, string pairCode)
        {
            _logger = logger;
            _port   = port;

            _middleware = new HapMiddleware(logger, pairCode, homeKitServer);
        }
        public AccessoryData Get(HomeKitServer homeKitServer, NameValueCollection queryString)
        {
            var ad = new AccessoryData();

            ad.Accessories = homeKitServer.GetAccessories();

            return(ad);
        }
Exemple #3
0
        public AccessoryData Get(HomeKitServer homeKitServer, NameValueCollection queryString)
        {
            _logger.LogDebug($"Working on queryString {queryString}");
            var ad = new AccessoryData {
                Accessories = homeKitServer.GetAccessories()
            };

            return(ad);
        }
Exemple #4
0
        internal CharacteristicReturn <CharacteristicBase> Get(string[] data, HomeKitServer server)
        {
            var all = server.GetAccessories();

            var retCharactersitcs = new List <CharacteristicBase>();

            foreach (var s in data)
            {
                var split            = s.Split(".");
                var accessoryId      = Convert.ToInt32(split[0]);
                var characteristicId = Convert.ToInt32(split[1]);

                var accessory = all.SingleOrDefault(a => a.Id == accessoryId);

                if (accessory == null)
                {
                    _logger.LogError($"Could not find accessory with id {accessoryId}");
                    continue;
                }

                Characteristic characteristic = null;
                foreach (var service in accessory.Services)
                {
                    var c = service.Characteristics.SingleOrDefault(a => a.Id == characteristicId);

                    if (c != null)
                    {
                        characteristic = c;
                        break;
                    }
                }

                if (characteristic == null)
                {
                    _logger.LogError($"Could not find characterstic with id {characteristicId}");
                    continue;
                }

                var baseChar = new CharacteristicBase(characteristic.DefaultType)
                {
                    Id          = characteristic.Id,
                    Value       = characteristic.Value ?? CharacteristicBase.GetDefault(characteristic.DefaultType),
                    AccessoryId = accessoryId
                };

                retCharactersitcs.Add(baseChar);
            }

            return(new CharacteristicReturn <CharacteristicBase>
            {
                Characteristics = retCharactersitcs
            });
        }
Exemple #5
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            HomeKitServer.Init();

            var logger = new ConsoleLogger("mylogger", (s, level) => true, false);

            string ltpk = null;

            if (File.Exists("LTPK"))
            {
                ltpk = File.ReadAllText("LTPK");
            }

            string ltsk = null;

            if (File.Exists("LTSK"))
            {
                ltsk = File.ReadAllText("LTSK");
            }

            var homekit = new HomeKitServer(logger, 52765, "11automaticacore-1ad18", ltsk, ltpk, "BA:2F:FA:1A:CD:AA",
                                            "123-45-555", "AutomaticaCore123", "1AutomaticaCoreBridge");

            homekit.PairingCompleted += Homekit_PairingCompleted;

            var lightAccessory          = AccessoryFactory.CreateLightBulbAccessory("Light1", "AutomaticaCore", "123456", false);
            var outletAccessory         = AccessoryFactory.CreateOutletAccessory("Outlet", "AutomaticaCore", "123456", false);
            var switchAccessory         = AccessoryFactory.CreateSwitchAccessory("Switch1", "AutomaticaCore", "123456", false);
            var contactSensorAcceessory = AccessoryFactory.CreateContactSensorAccessory("Contact1", "AutomaticaCore", "123456", 0);

            homekit.AddAccessory(lightAccessory);
            homekit.AddAccessory(outletAccessory);
            homekit.AddAccessory(switchAccessory);
            homekit.AddAccessory(contactSensorAcceessory);
            homekit.AddAccessory(AccessoryFactory.CreateTemperatureSensorAccessory("Temperature1", "AutomaticaCore", "asdfasdf", 22.9));

            homekit.ValueChanged += (sender, eventArgs) =>
                                    Console.WriteLine($"Value changed {eventArgs.Characteristic.Value}");

            await homekit.Start();

            Console.ReadLine();

            var onoff = lightAccessory.Services[1].Characteristics.SingleOrDefault(a => a.Id == 8);

            homekit.SetCharacteristicValue(onoff, true);

            Console.ReadLine();

            await homekit.Stop();
        }
Exemple #6
0
        public override IDriver CreateDriver(IDriverContext config)
        {
            try
            {
                HomeKitServer.Init(config.Logger);
            }
            catch
            {
                // can be ignored
            }

            return(new HomeKitDriver(config));
        }
        public HapControllerServer(ILogger logger, HomeKitServer homeKitServer, int port, string ltsk, string ltpk, string controllerId, string pairCode)
        {
            HomeKitServer     = homeKitServer;
            _logger           = logger;
            HapControllerLtsk = ltsk;
            HapControllerLtpk = ltpk;

            _port           = port;
            HapControllerId = controllerId;
            _pairCode       = pairCode;

            _httpServer = new HttpServer(logger, homeKitServer, port, controllerId, pairCode);
            HapMiddleware.PairingCompleted += PairingCompletedEvent;
        }
        public override async Task <bool> Start()
        {
            _ltpkProperty = GetProperty("ltpk-private");
            _ltskProperty = GetProperty("ltsk-private");

            var objId = DriverContext.NodeInstance.ObjId.ToString().Replace("-", "");

            var homekitId =
                $"{objId[0]}{objId[1]}:{objId[2]}{objId[3]}:{objId[4]}{objId[5]}:{objId[6]}{objId[7]}:{objId[8]}{objId[9]}:{objId[10]}{objId[11]}";

            string code = $"{CreateRandom(100, 999)}-{CreateRandom(10, 99)}-{CreateRandom(100, 999)}";

            _server = new HomeKitServer(DriverContext.Logger, GetPropertyValueInt("port"), DriverContext.NodeInstance.Name, _ltskProperty.ValueString, _ltpkProperty.ValueString, homekitId,
                                        code, "AutomaticaCore", "AutomaticaCore" + homekitId);

            var configProperty = GetPropertyValueInt("config-version");

            if (configProperty <= 0)
            {
                configProperty = 1;
            }
            _server.SetConfigVersion(configProperty);

            DriverContext.NodeTemplateFactory.SetPropertyValue(GetProperty("config-version").ObjId, configProperty + 1);

            _pairingNode.DispatchValue(code);

            foreach (var accessory in _accessories)
            {
                accessory.Id = _server.AddAccessory(accessory);
            }

            await _server.Start();

            _server.PairingCompleted += ServerOnPairingCompleted;
            _server.ValueChanged     += ServerOnValueChanged;

            return(await base.Start());
        }
Exemple #9
0
        internal CharacteristicReturn <Characteristic> Put(byte[] v, HapSession session, HomeKitServer server)
        {
            var json = Encoding.UTF8.GetString(v);

            _logger.LogTrace($"Read {json}");

            var characteristics   = JsonConvert.DeserializeObject <CharacteristicReturn <SentCharacteristic> >(json);
            var all               = server.GetAccessories();
            var retCharactersitcs = new List <Characteristic>();


            foreach (var sendCharacteristic in characteristics.Characteristics)
            {
                var accessoryId      = sendCharacteristic.AccessoryNumber;
                var characteristicId = sendCharacteristic.Id;

                var accessory = all.SingleOrDefault(a => a.Id == accessoryId);

                if (accessory == null)
                {
                    _logger.LogError($"Could not find accessory with id {accessoryId}");
                    continue;
                }

                Characteristic characteristic = null;
                foreach (var service in accessory.Services)
                {
                    var c = service.Characteristics.SingleOrDefault(a => a.Id == characteristicId);

                    if (c != null)
                    {
                        characteristic = c;
                        break;
                    }
                }

                if (characteristic == null)
                {
                    _logger.LogError($"Could not find characterstic with id {characteristicId}");
                    continue;
                }

                if (sendCharacteristic.EventBasedNotification.HasValue && sendCharacteristic.EventBasedNotification.Value)
                {
                    server.RegisterNotifications(characteristic, session);
                }
                else
                {
                    server.RegisterNotifications(characteristic, session);
                }

                if (sendCharacteristic.Value != null)
                {
                    characteristic.Value = sendCharacteristic.Value;

                    server.NotifyValueChanged(characteristic);
                }

                characteristic.AccessoryId = accessoryId;
                retCharactersitcs.Add(characteristic);
            }

            return(new CharacteristicReturn <Characteristic>
            {
                Characteristics = new List <Characteristic>()
            });
        }
Exemple #10
0
 public HapMiddleware(ILogger logger, string pairCode, HomeKitServer homeKitServer)
 {
     _logger        = logger;
     _pairCode      = pairCode;
     _homeKitServer = homeKitServer;
 }
 public HomeKitFactory()
 {
     HomeKitServer.Init();
 }
Exemple #12
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var logger = new ConsoleLogger();

            HomeKitServer.Init(logger);


            string ltpk = null;

            if (File.Exists("LTPK"))
            {
                ltpk = File.ReadAllText("LTPK");
            }

            string ltsk = null;

            if (File.Exists("LTSK"))
            {
                ltsk = File.ReadAllText("LTSK");
            }

            ServerInfo.ServerUid = Guid.NewGuid();

            var    objId = new Guid("e00b1712-a2bf-4420-b3e5-c9b9a0c4a5f2").ToString().Replace("-", "");
            string code  = $"{CreateRandom(100, 999)}-{CreateRandom(10, 99)}-{CreateRandom(100, 999)}";

            code = "111-23-222";

            Console.WriteLine($"Code is {code}");

            var homekitId =
                $"{objId[0]}{objId[1]}:{objId[2]}{objId[3]}:{objId[4]}{objId[5]}:{objId[6]}{objId[7]}:{objId[8]}{objId[9]}:{objId[10]}{objId[11]}";

            var homekit = new HomeKitServer(logger, 54321, "HomeKitA", ltsk, ltpk, homekitId,
                                            code, "demo", "demo" + homekitId, 6);

            homekit.PairingCompleted += Homekit_PairingCompleted;

            var lightAccessory           = AccessoryFactory.CreateLightBulbAccessory(0, "Light1", "AutomaticaCore", "123456", false);
            var lightAccessory2          = AccessoryFactory.CreateLightBulbAccessory(1, "Light2", "AutomaticaCore", "12345", false);
            var lightAccessory3          = AccessoryFactory.CreateLightBulbAccessory(3, "Light3", "AutomaticaCore", "1234567", false);
            var outletAccessory          = AccessoryFactory.CreateOutletAccessory(4, "Outlet", "AutomaticaCore", "123", false);
            var switchAccessory          = AccessoryFactory.CreateSwitchAccessory(5, "Switch1", "AutomaticaCore", "1456", false);
            var contactSensorAcceessory  = AccessoryFactory.CreateContactSensorAccessory(6, "Contact1", "AutomaticaCore", "d123456", 0);
            var contactSensorAcceessory2 = AccessoryFactory.CreateContactSensorAccessory(7, "Contact2", "AutomaticaCore", "1b23456", 0);
            var contactSensorAcceessory3 = AccessoryFactory.CreateContactSensorAccessory(10, "Contact3", "AutomaticaCore", "1b23456d", 0);
            var lightAccessory4          = AccessoryFactory.CreateLightBulbAccessory(9, "Light4", "AutomaticaCore", "asdf1234567", false);

            homekit.AddAccessory(lightAccessory);
            homekit.AddAccessory(lightAccessory2);
            homekit.AddAccessory(lightAccessory3);
            homekit.AddAccessory(lightAccessory4);
            homekit.AddAccessory(outletAccessory);
            homekit.AddAccessory(switchAccessory);
            homekit.AddAccessory(contactSensorAcceessory);
            homekit.AddAccessory(contactSensorAcceessory2);
            homekit.AddAccessory(contactSensorAcceessory3);
            homekit.AddAccessory(AccessoryFactory.CreateTemperatureSensorAccessory(8, "Temperature1", "AutomaticaCore", "asdfasdf", 22.9));

            homekit.ValueChanged += (sender, eventArgs) =>
                                    Console.WriteLine($"Value changed {eventArgs.Characteristic.Value}");

            homekit.PairingCompleted += (sender, eventArgs) =>
            {
                Console.WriteLine($"Paring completed...");
            };

            await homekit.Start();


            ThreadPool.QueueUserWorkItem(async state =>
            {
                var value = true;
                while (true)
                {
                    var onoff = contactSensorAcceessory.Services[1].Characteristics.SingleOrDefault(a => a.Id == 8);
                    homekit.SetCharacteristicValue(onoff, value);

                    value = !value;
                    await Task.Delay(1000);
                }
            });

            Console.ReadLine();

            await homekit.Stop();
        }