69 lines
2.9 KiB
C#
69 lines
2.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace SensorPollWin
|
|
{
|
|
unsafe class Program
|
|
{
|
|
[DllImport("TelldusCore.dll")]
|
|
public static extern void tdInit();
|
|
|
|
[DllImport("TelldusCore.dll")]
|
|
public static extern void tdClose();
|
|
|
|
[DllImport("TelldusCore.dll")]
|
|
public static extern int tdSensor(char* protocol, int protocolLength, char* model, int modelLength, int* id, int* dataTypes);
|
|
|
|
[DllImport("TelldusCore.dll")]
|
|
public static extern int tdSensorValue(char* protocol, char* model, int id, int dataType, char* value, int valueLength, int* timestamp);
|
|
|
|
static unsafe void Main(string[] args)
|
|
{
|
|
int protocolstringsize = 20;
|
|
int modelstringsize = 30;
|
|
int valuestringsize = 20;
|
|
char* protocol = (char*)Marshal.AllocHGlobal(Marshal.SystemDefaultCharSize * protocolstringsize);
|
|
char* model = (char*)Marshal.AllocHGlobal(Marshal.SystemDefaultCharSize * modelstringsize);
|
|
IntPtr id = Marshal.AllocHGlobal(sizeof(int));
|
|
IntPtr dataType = Marshal.AllocHGlobal(sizeof(int));
|
|
Console.WriteLine("getting sensors");
|
|
|
|
tdInit();
|
|
while (tdSensor(protocol, protocolstringsize, model, modelstringsize, (int*)id, (int*)dataType) == 0)
|
|
{
|
|
Console.WriteLine("Sensor: " + System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Unicode.GetBytes(new string(protocol))) + " " + System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Unicode.GetBytes(new string(model))));
|
|
|
|
char* value = (char*)Marshal.AllocHGlobal(Marshal.SystemDefaultCharSize * valuestringsize);
|
|
IntPtr timestamp = Marshal.AllocHGlobal(sizeof(int));
|
|
if ((Marshal.ReadIntPtr(dataType).ToInt32() & 1) != 0)
|
|
{
|
|
tdSensorValue(protocol, model, Marshal.ReadIntPtr(id).ToInt32(), 1, value, valuestringsize, (int*)timestamp);
|
|
Console.WriteLine("Temperature: " + System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Unicode.GetBytes(new string(value))) + "C, " + datify(Marshal.ReadIntPtr(timestamp).ToInt32()));
|
|
}
|
|
if ((Marshal.ReadIntPtr(dataType).ToInt32() & 2) != 0)
|
|
{
|
|
tdSensorValue(protocol, model, Marshal.ReadIntPtr(id).ToInt32(), 2, value, valuestringsize, (int*)timestamp);
|
|
Console.WriteLine("Humidity: " + System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Unicode.GetBytes(new string(value))) + "%, " + datify(Marshal.ReadIntPtr(timestamp).ToInt32()));
|
|
}
|
|
Console.WriteLine("");
|
|
Marshal.FreeHGlobal((IntPtr)value);
|
|
Marshal.FreeHGlobal(timestamp);
|
|
}
|
|
Marshal.FreeHGlobal((IntPtr)protocol);
|
|
Marshal.FreeHGlobal((IntPtr)model);
|
|
Marshal.FreeHGlobal(id);
|
|
Marshal.FreeHGlobal(dataType);
|
|
tdClose();
|
|
}
|
|
|
|
private static string datify(int timestamp){
|
|
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
|
|
dateTime = dateTime.AddSeconds(timestamp);
|
|
dateTime = dateTime.ToLocalTime();
|
|
return dateTime.ToString();
|
|
}
|
|
}
|
|
}
|