/// <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); }
/// <summary> /// Deals with measurement value /// </summary> /// <param name="sensorValue"></param> private void HandleValueData(MeasurementValue sensorValue) { if (!TablesExists()) { TablesCreates(); } InsertData(sensorValue); }
/// <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); } } }
/// <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)); }
/// <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); }
/// <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); }
/// <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."); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Write sensor values to file /// </summary> /// <param name="SensorValue">Tinkerforge Sensor plugin value</param> public void HandleValue(MeasurementValue SensorValue) { Datafile.WriteLine(SensorValue.ToJSON()); }
/// <summary> /// Write sensor value to data sink /// </summary> /// <param name="SensorValue">Tinkerforge Sensor plugin value</param> public abstract void HandleValue(MeasurementValue SensorValue);
/// <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); }
/// <summary> /// Deals with measurement value /// </summary> /// <param name="sensorValue"></param> private void HandleValueData(MeasurementValue sensorValue) { }
/// <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); }