Example #1
0
        /// <summary>
        /// Find measurement unit in table
        /// </summary>
        /// <param name="sensorValue"></param>
        /// <returns></returns>
        private int FindUnitID(MeasurementValue sensorValue)
        {
            int unitid = -1;

            try
            {
                string        statement = $"SELECT mu_id FROM measurementunits WHERE mu_name = @name";
                SqliteCommand command   = new SqliteCommand(statement, DBConnection);
                command.Parameters.Add(new SqliteParameter("@name", System.Data.SqlDbType.Text)
                {
                    Value = sensorValue.Unit
                });
                SqliteDataReader reader = command.ExecuteReader();

                if (reader.Read())
                {
                    unitid = Convert.ToInt32(reader[0]);
                }
                reader.Close();
                command.Dispose();
            }
            catch (Exception e)
            {
                System.Console.WriteLine($"{nameof(FindUnitID)}: Cannot find id for [{sensorValue.Unit}]: [{e.Message}]");
            }

            return(unitid);
        }
Example #2
0
        /// <summary>
        /// Deals with measurement value
        /// </summary>
        /// <param name="sensorValue"></param>
        private void HandleValueData(MeasurementValue sensorValue)
        {
            if (!TablesExists())
            {
                TablesCreates();
            }

            InsertData(sensorValue);
        }
Example #3
0
 /// <summary>
 /// Feed each datasink plugin with sensor data
 /// </summary>
 /// <param name="SensorValue"></param>
 internal void HandleValue(MeasurementValue SensorValue)
 {
     foreach (var currentPlugin in DataSinkPlugins)
     {
         if (currentPlugin.IsInitialized)
         {
             currentPlugin.HandleValue(SensorValue);
         }
     }
 }
Example #4
0
        /// <summary>
        /// Publish single measurement data
        /// </summary>
        /// <param name="dataToPublish"></param>
        private void PublishSingleValue(MeasurementValue dataToPublish)
        {
            var dataJSON = dataToPublish.ToJSON();

            lock (Locker)
            {
                AcknowledgeList.Add(dataToPublish.ToHash(), dataToPublish);
            }

            MqttClient.Publish(MQTTConfig.Instance.TopicData, Encoding.ASCII.GetBytes(dataJSON));
        }
Example #5
0
        /// <summary>
        /// Write measurement unit to table
        /// </summary>
        /// <param name="sensorValue"></param>
        private void InsertUnit(MeasurementValue sensorValue)
        {
            string        statement = $"INSERT INTO measurementunits (mu_name) VALUES (@mu_name)";
            SqliteCommand command   = new SqliteCommand(statement, DBConnection);

            command.Parameters.Add(new SqliteParameter("@mu_name", System.Data.SqlDbType.Text)
            {
                Value = sensorValue.Unit
            });
            ExecuteSQLStatement(command);
        }
Example #6
0
        /// <summary>
        /// Read value from sensor and prepare real value
        /// </summary>
        /// <returns>Humidity or 0.0</returns>
        protected override MeasurementValue ValueGetRaw()
        {
            MeasurementValue result = new MeasurementValue(Name, Unit, HumidityConfig.Instance.SortOrder);

            if (_Bricklet == null)
            {
                return(result);
            }

            int humidityRaw = _Bricklet.GetHumidity();

            result.Value = humidityRaw / 10.0;

            return(result);
        }
Example #7
0
        /// <summary>
        /// Action performed when MQTT message is recieved
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MqttDataRecieved(object sender, MqttMsgPublishEventArgs e)
        {
            string stringJson = Encoding.UTF8.GetString(e.Message);

            try
            {
                MeasurementValue measurementValue = JsonConvert.DeserializeObject <MeasurementValue>(stringJson);
                MqttClient.Publish(ServerConfig.Instance.TopicAcknowledge, Encoding.ASCII.GetBytes(measurementValue.ToHash()));
                pluginHandler.HandleValue(measurementValue);
            }
            catch (Exception ex)
            {
                System.Console.WriteLine($"{nameof(MqttDataRecieved)}: Invalid message [{stringJson}] recieved.");
            }
        }
Example #8
0
        /// <summary>
        /// Read value from sensor and prepare real value
        /// </summary>
        /// <returns>Illuminance or 0.0</returns>
        protected override MeasurementValue ValueGetRaw()
        {
            MeasurementValue result = new MeasurementValue(Name, Unit, AmbientLightConfig.Instance.SortOrder);

            if (_Bricklet == null)
            {
                return(result);
            }

            int illuminanceRaw = _Bricklet.GetIlluminance();

            result.Value = illuminanceRaw / 10.0;

            return(result);
        }
Example #9
0
        /// <summary>
        /// Read the value of the sensor, will catch TF exceptions
        /// </summary>
        /// <returns>Sensor value or 0.0</returns>
        public MeasurementValue ValueGet()
        {
            var value = new MeasurementValue();

            try
            {
                value = ValueGetRaw();
            }
            catch (TinkerforgeException e)
            {
                System.Console.WriteLine($"Sensor [{Name}], Error [{e.Message}] ");
            }

            return(value);
        }
Example #10
0
        /// <summary>
        /// Part of interface TFDataSink - perform action with given data
        /// </summary>
        /// <param name="SensorValue"></param>
        public void HandleValue(MeasurementValue SensorValue)
        {
            if (_Bricklet == null)
            {
                return;
            }

            // Display timestamp
            _Bricklet.WriteLine(0, 0, SensorValue.Timestamp.ToString(LcdConfig.Instance.TimestampFormat));

            // Calculation of position in dependency of the sort order
            byte   posX = (byte)((SensorValue.SortOrder % 2) * 10);
            byte   posY = (byte)((SensorValue.SortOrder / 2) + 1);
            string MeasurementValueData = string.Format("{0,7:####.00} {1}", SensorValue.Value, SensorValue.Unit);

            _Bricklet.WriteLine(posY, posX, MeasurementValueData);
        }
Example #11
0
        /// <summary>
        /// Insert data to table
        /// </summary>
        /// <param name="sensorValue"></param>
        private void InsertData(MeasurementValue sensorValue)
        {
            var mtid = FindTypeID(sensorValue);
            var muid = FindUnitID(sensorValue);

            if (mtid == -1)
            {
                InsertType(sensorValue);
                mtid = FindTypeID(sensorValue);
            }
            if (muid == -1)
            {
                InsertUnit(sensorValue);
                muid = FindUnitID(sensorValue);
            }

            string        statement = $"INSERT INTO measurementvalues (mv_mt_id, mv_value, mv_mu_id, mv_timestamp) VALUES (@mv_mt_id, @mv_value, @mv_mu_id, @mv_timestamp)";
            SqliteCommand command   = new SqliteCommand(statement, DBConnection);

            command.Parameters.Add(new SqliteParameter("@mv_mt_id", System.Data.SqlDbType.Int)
            {
                Value = mtid
            });
            command.Parameters.Add(new SqliteParameter("@mv_value", System.Data.SqlDbType.Decimal)
            {
                Value = sensorValue.Value
            });
            command.Parameters.Add(new SqliteParameter("@mv_mu_id", System.Data.SqlDbType.Int)
            {
                Value = muid
            });
            command.Parameters.Add(new SqliteParameter("@mv_timestamp", System.Data.SqlDbType.DateTime)
            {
                Value = sensorValue.Timestamp
            });
            ExecuteSQLStatement(command);
        }
Example #12
0
 /// <summary>
 /// Write sensor values to file
 /// </summary>
 /// <param name="SensorValue">Tinkerforge Sensor plugin value</param>
 public void HandleValue(MeasurementValue SensorValue)
 {
     Datafile.WriteLine(SensorValue.ToJSON());
 }
Example #13
0
 /// <summary>
 /// Write sensor value to data sink
 /// </summary>
 /// <param name="SensorValue">Tinkerforge Sensor plugin value</param>
 public abstract void HandleValue(MeasurementValue SensorValue);
Example #14
0
 /// <summary>
 /// Transform each result in a JSON string and publish string to topic
 /// </summary>
 /// <param name="SensorValue">Sensor value</param>
 public void HandleValue(MeasurementValue SensorValue)
 {
     PublishSingleValue(SensorValue);
 }
Example #15
0
 /// <summary>
 /// Deals with measurement value
 /// </summary>
 /// <param name="sensorValue"></param>
 private void HandleValueData(MeasurementValue sensorValue)
 {
 }
Example #16
0
 /// <summary>
 /// Transform each result in a JSON string and publish string to topic
 /// </summary>
 /// <param name="SensorValue">Sensor value</param>
 public void HandleValue(MeasurementValue SensorValue)
 {
     HandleValueData(SensorValue);
 }