Esempio n. 1
0
        private bool MessageShouldBeLogged(InfluxMeasurement measurement)
        {
            bool messageShouldBeLogged = true;
            var  deviceId        = measurement.Tags["deviceId"];
            var  measurementName = measurement.Name;

            if (_options.DevicesToLog.Count > 0 && !_options.DevicesToLog.Contains(deviceId))
            {
                messageShouldBeLogged = false;
            }

            if (_options.DevicesToIgnore.Contains(deviceId))
            {
                messageShouldBeLogged = false;
            }

            if (_options.MeasurementsToLog.Count > 0 && !_options.MeasurementsToLog.Contains(measurementName))
            {
                messageShouldBeLogged = false;
            }

            if (_options.MeasurementsToIgnore.Contains(measurementName))
            {
                messageShouldBeLogged = false;
            }

            return(messageShouldBeLogged);
        }
Esempio n. 2
0
        public InfluxMeasurement ProcessMessage(HubMessage message)
        {
            var measurement = new InfluxMeasurement();

            measurement.Name = message.Name;

            measurement.Tags.Add("deviceName", message.DisplayName);
            measurement.Tags.Add("deviceId", message.DeviceId);
            measurement.Tags.Add("locationId", message.LocationId);
            measurement.Tags.Add("hubId", message.HubId);
            measurement.Tags.Add("installedAppId", message.InstalledAppId);
            measurement.Tags.Add("source", message.Source);


            switch (message.Name)
            {
            case "acceleration":
                measurement.Tags.Add("unit", "acceleration");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "active" ? 1 : 0);
                break;

            case "alarm":
                measurement.Tags.Add("unit", "alarm");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "off" ? 0 : 1);
                break;

            case "button":
                measurement.Tags.Add("unit", "button");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "pushed" ? 0 : 1);
                break;

            case "carbonMonoxide":
                measurement.Tags.Add("unit", "carbonMonoxide");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "detected" ? 1 : 0);
                break;

            case "consumableStatus":
                measurement.Tags.Add("unit", "consumableStatus");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "good" ? 1 : 0);
                break;

            case "contact":
                measurement.Tags.Add("unit", "contact");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "closed" ? 1 : 0);
                break;

            case "door":
                measurement.Tags.Add("unit", "door");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "closed" ? 1 : 0);
                break;

            case "lastCheckin":
                measurement.Tags.Add("unit", "ticks");
                measurement.Data.Add("value", message.Value);
                break;

            case "lastInactive":
                measurement.Tags.Add("unit", "ticks");
                measurement.Data.Add("value", message.Value);
                break;

            case "lastMotion":
                measurement.Tags.Add("unit", "ticks");
                measurement.Data.Add("value", message.Value);
                break;

            case "lock":
                measurement.Tags.Add("unit", "lock");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "locked" ? 1 : 0);
                break;

            case "motion":
                measurement.Tags.Add("unit", "motion");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "active" ? 1 : 0);
                break;

            case "mute":
                measurement.Tags.Add("unit", "mute");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "muted" ? 1 : 0);
                break;

            case "presence":
                measurement.Tags.Add("unit", "presence");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "present" ? 1 : 0);
                break;

            case "shock":
                measurement.Tags.Add("unit", "shock");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "detected" ? 1 : 0);
                break;

            case "sleeping":
                measurement.Tags.Add("unit", "sleeping");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "sleeping" ? 1 : 0);
                break;

            case "smoke":
                measurement.Tags.Add("unit", "smoke");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "detected" ? 1 : 0);
                break;

            case "sound":
                measurement.Tags.Add("unit", "sound");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "detected" ? 1 : 0);
                break;

            case "switch":
                measurement.Tags.Add("unit", "switch");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "on" ? 1 : 0);
                break;

            case "tamper":
                measurement.Tags.Add("unit", "tamper");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "detected" ? 1 : 0);
                break;

            case "thermostatMode":
                measurement.Tags.Add("unit", "thermostatMode");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "off" ? 0 : 1);
                break;

            case "thermostatFanMode":
                measurement.Tags.Add("unit", "thermostatFanMode");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "off" ? 0 : 1);
                break;

            case "thermostatOperatingState":
                measurement.Tags.Add("unit", "thermostatOperatingState");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "heating" ? 1: 0);
                break;

            case "thermostatSetpointMode":
                measurement.Tags.Add("unit", "thermostatSetpointMode");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "followSchedule" ? 0 : 1);
                break;

            case "threeAxis":
                measurement.Tags.Add("unit", "threeAxis");
                var valueXYZ = message.Value.Split(",", StringSplitOptions.RemoveEmptyEntries);

                if (int.TryParse(valueXYZ[0], out int x))
                {
                    measurement.Data.Add("valueX", x);
                }


                if (int.TryParse(valueXYZ[1], out int y))
                {
                    measurement.Data.Add("valueY", y);
                }


                if (int.TryParse(valueXYZ[2], out int z))
                {
                    measurement.Data.Add("valueZ", z);
                }
                break;

            case "touch":
                measurement.Tags.Add("unit", "touch");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "touched" ? 1 : 0);
                break;

            case "optimisation":
                measurement.Tags.Add("unit", "optimisation");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "active" ? 1 : 0);
                break;

            case "windowFunction":
                measurement.Tags.Add("unit", "windowFunction");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "active" ? 1 : 0);
                break;

            case "water":
                measurement.Tags.Add("unit", "water");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "wet" ? 1 : 0);
                break;

            case "windowShade":
                measurement.Tags.Add("unit", "windowShade");
                measurement.Data.Add("value", message.Value);
                measurement.Data.Add("valueBinary", message.Value == "closed" ? 1 : 0);
                break;
            }

            if (measurement.Data.Count == 0)
            {
                if (Regex.IsMatch(message.Value, @"/.*[^0-9\.,-].*/"))
                {
                    measurement.Data.Add("value", message.Value);
                }
                else
                {
                    measurement.Tags.Add("unit", message.Unit);

                    if (float.TryParse(message.Value, out float floatVal))
                    {
                        measurement.Data.Add("value", floatVal);
                    }
                    else
                    {
                        measurement.Data.Add("value", message.Value);
                    }
                }
            }

            return(measurement);
        }