Poniżej kilka przykładów kodu w C#
Funkcja pobierająca z danego urządzenia dane o stanie sensora. Zapytanie ma format http://x.x.x.x/json?view=sensorupdate gdzie x.x.x.x adres ip naszego urządzenia .
Przykładowy JSON zwracany przez Urządzenie
{
"Sensors": [
{
"TaskValues": [
{
"ValueNumber": 1,
"Name": "Temperature",
"NrDecimals": 2,
"Value": 23.56
},
{
"ValueNumber": 2,
"Name": "Humidity",
"NrDecimals": 0,
"Value": 0
},
{
"ValueNumber": 3,
"Name": "Pressure",
"NrDecimals": 2,
"Value": 1006.28
}
],
"TaskEnabled": "true",
"TaskNumber": 1
}
],
"TTL": 60000
}
Mamy czujnik BMP 280 który mierzy ciśnienie oraz temeperaturę. Zwracane wartości to temperatura 23,83 stopnie a ciśnienie 1005,61.

Przykładowy kod funkcji pobierającej dane z czujnika:
public async Task GetPressureMeasurement()
{
string requesturl = _configuration.GetValue<string>("Pressure:IP");
string tasktemp = _configuration.GetValue<string>("Pressure:TaskPressureNr");
requesturl += @"json?view=sensorupdate";
try
{
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage res = await client.GetAsync(requesturl))
{
using (HttpContent content = res.Content)
{
string data = await content.ReadAsStringAsync();
if (data != null)
{
decimal pressure;
decimal temperature;
var json = JsonConvert.DeserializeObject<EspPresureModel>(data);
var Pressure = json.Sensors.First(c => c.TaskNumber == 2).TaskValues.FirstOrDefault(a => a.Name == "Pressure").Value;
pressure = Convert.ToDecimal(Pressure);
if (!(pressure == -127))
{
HomeService.Data.SensorReandings.InSide.Pressure = pressure;
HomeService.Data.SensorReandings.InSide.Error = false;
}
var Temperature = json.Sensors.First(c => c.TaskNumber == 2).TaskValues.FirstOrDefault(a => a.Name == "Temperature").Value;
temperature = Convert.ToDecimal(Temperature);
if (!(pressure == -127))
{
HomeService.Data.SensorReandings.InSide.Temperature = temperature;
}
}
}
}
}
}
catch (Exception ex)
{
HomeService.Data.SensorReandings.InSide.Error = true;
}
}
Pobieramy z ustawień konfiguracji aplikacji adres IP urządzenia oraz numer czujnika którego odpytujemy ( może być więcej) . Po pobraniu danych z czujnika deserializujemy JSON na wartości przyjętego modelu.
Model wygląda tak:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeService.Models
{
public class PressureData
{
public decimal Pressure { get; set; }
public decimal Temperature { get; set; }
}
public class Sensor
{
public string TaskEnabled { get; set; }
public int TaskNumber { get; set; }
public List<TaskValue> TaskValues { get; set; }
}
public class EspPresureModel
{
public List<Sensor> Sensors { get; set; }
public int TTL { get; set; }
}
}
Dodatkowo w konfiguracji czujnika ustawiono że w przypadku błędu będzie zwracał wartość -127 , wtedy dane nie będą uzupełniane . Dodatkowo gdy wystąpi błąd powodujący powstanie wyjątku będzie zwracana wartość true dla błędu . Nie przewidziano zapisywania błędów ze względu na wielkość aplikacji oraz małą przydatność takich danych . Istnieje możliwość sprawdzenia ręcznie stanu czujnika przez zalogowanie się do niego ( ekran powyżej ) .
