コード例 #1
0
ファイル: Write.cs プロジェクト: trocken2/Eco2
        async Task Connect(Thermostat thermostat)
        {
            var name = thermostat.Serial;
            var uuid = thermostat.Uuid;
            var connectedThermostat = await accessor.ConnectToPeripheralWithNameAndUuid(name, uuid);

            var mainService    = FindService(connectedThermostat, Uuids.MAIN_SERVICE);
            var batteryService = FindService(connectedThermostat, Uuids.BATTERY_SERVICE);

            var mainServiceCharacteristics = await accessor.DiscoverCharacteristicsFor(mainService);

            var secretValueCharacteristic = Array.Find(mainServiceCharacteristics, c => c.Uuid == Uuids.SECRET_KEY);

            if (secretValueCharacteristic == null && !thermostats.HasSecretAndUuidFor(serial))
            {
                Console.Error.WriteLine("You need to push the timer button on the thermostat");
                Environment.Exit(1);
            }

            var pinCodeCharacteristic = CharacteristicWithUuid(mainServiceCharacteristics, Uuids.PIN_CODE_CHARACTERISTIC);

            if (pinCodeCharacteristic == null)
            {
                Console.Error.WriteLine($"Did not find pin code characteristic ({Uuids.PIN_CODE_CHARACTERISTIC})");
                Environment.Exit(1);
            }

            Console.Error.WriteLine("Writing pin code");
            byte[] zeroBytes = { 0, 0, 0, 0 };
            await accessor.WriteCharacteristicValue(mainService, pinCodeCharacteristic, zeroBytes);

            Console.Error.WriteLine("Wrote pin code");

            var batteryServiceCharacteristics = await accessor.DiscoverCharacteristicsFor(batteryService);

            Console.Error.WriteLine("Discovered battery service characteristics");

            thermostat.BatteryLevel = await ReadCharacteristicWithUuid(batteryService, batteryServiceCharacteristics, Uuids.BATTERY_LEVEL);

            thermostat.Name = await ReadCharacteristicWithUuid(mainService, mainServiceCharacteristics, Uuids.DEVICE_NAME);

            thermostat.Temperature = await ReadCharacteristicWithUuid(mainService, mainServiceCharacteristics, Uuids.TEMPERATURE);

            thermostat.Settings = await ReadCharacteristicWithUuid(mainService, mainServiceCharacteristics, Uuids.SETTINGS);

            thermostat.Schedule1 = await ReadCharacteristicWithUuid(mainService, mainServiceCharacteristics, Uuids.SCHEDULE_1);

            thermostat.Schedule2 = await ReadCharacteristicWithUuid(mainService, mainServiceCharacteristics, Uuids.SCHEDULE_2);

            thermostat.Schedule3 = await ReadCharacteristicWithUuid(mainService, mainServiceCharacteristics, Uuids.SCHEDULE_3);

            var parsedThermostat = new ParsedThermostat(thermostat);

            parsedThermostat.ApplyUpdates();

            await WriteCharacteristicWithUuid(mainService, mainServiceCharacteristics, Uuids.TEMPERATURE, thermostat.Temperature);
            await WriteCharacteristicWithUuid(mainService, mainServiceCharacteristics, Uuids.SETTINGS, thermostat.Settings);

            await accessor.Disconnect();
        }
コード例 #2
0
ファイル: Write.cs プロジェクト: trocken2/Eco2
        public Write(string serial, IBluetooth bluetooth)
        {
            this.serial = serial;
            thermostats = Thermostats.Read();
            accessor    = new PeripheralAccessor(bluetooth);

            if (!thermostats.HasSecretAndUuidFor(serial))
            {
                Console.Error.WriteLine($"Has not previously connected to {serial}. Do a read first.");
                Environment.Exit(1);
            }
        }