Boet Wifi närhet C# Windows Phone App (7 / 10 steg)
Steg 7: Magin bakom...
När backend kallas från en ändring i nätverkstillståndet det första den gör är att få namnet på nuvarande Wifi-anslutning. Detta används sedan att jämföra med namnet på lagrade hem Wifi.
var uppskov = taskInstance.GetDeferral();
var inställningar = ApplicationData.Current.LocalSettings;
var nyckel = "theCurrentWifi";
var ssid = "";
var checkHomeWifi = "";
foreach (var connectionProfile i NetworkInformation.GetConnectionProfiles())
{
om (connectionProfile.IsWlanConnectionProfile & & connectionProfile.GetNetworkConnectivityLevel()! = NetworkConnectivityLevel.None)
{
SSID = connectionProfile.ProfileName;
bryta;
}
}
inställningar. Värden [nyckel] = ssid;
När den upptäcker nätverket jag satte i en 5: e sekund försening som jag tyckte ibland att min API-anrop till boet skulle inte alltid ansluta. (Jag är säker på att det finns bättre sätt att göra detta men det verkar fungera för mig.)
var = Task.Run (asynkrona delegat < br > {
väntar på Task.Delay(TimeSpan.FromSeconds(5));
Return 0;
});
t.Wait();
Nu vi kommunicera med boet och se vilken status av termostaten för närvarande är för att få veta om vi behöver ändra dess status.
Nu är jag säker på att allt du programmerare där ute kommer att inställsam just nu som jag inte använder JSON komponenter för att läsa resultaten av boet API-anrop... Tro mig jag försökte men hur avkastningen formateras jag var har en häcklaren av en tid och eftersom jag behövde bara 2 värden från svar: struktur Id & The nuvarande bort Status jag tog den enkla vägen och använde bara gamla skolan sträng tolkning... :-)
Åh, en annan genväg jag tog vilket är dåligt... men jag hade tänkt att ändra det och sedan jag glömde... "Auth koden" för boet är hårdkodad i app (första raden nedan). Detta innebär att app inte kan delas som det är. Vad jag ska göra nästa (när jag har lite tid) är att skapa en variabel för Auth kod och har den enterable på installationen av app precis som hem Wifi namnet. Förutom att det skulle behöva registreras i en textruta och sedan sparats i lokal lagring. Det är en mycket lång kod så det är därför jag tog genvägen, men du kan alltid e-posta den till telefonen och sedan bara klippa och klistra in den i fönstret inställning.
sträng authToken = "---din Auth kod---"; < br > string uriNest = "https://developer-api.nest.com/structures/?auth=" + authToken;
försök
{
var kund = nya HttpClient();
var uri = nya Uri(uriNest);
var Svaren = väntar klienten. GetAsync(uri);
var statusCode = Response.StatusCode;
Response.EnsureSuccessStatusCode();
var ResponseText = väntar Response.Content.ReadAsStringAsync();
sträng json = ResponseText;
int structureFirst = json. IndexOf("{\"") + 2.
int structureNext = json. IndexOf("\":{\"name\"");
sträng struktur = json. Delsträng (structureFirst, structureNext - structureFirst);
int awayFirst = json. IndexOf("\"away\":") + 8.
int awayNext = json. IndexOf ("\", \ "", awayFirst);
strängen bort = json. Delsträng (awayFirst, awayNext - awayFirst);
homeStatus = "redan:" + bort;
Nästa steg är att bestämma om du behöver uppdatera boet. Jag kontrollera hem Wifi namnet mot namnet på nuvarande Wifi och om de är lika och aktuell status är "Away" sedan jag samtalet boet API att ange status till "Hem" om status är redan hem I inte. Samma för om Wifi namnen matchar inte, om aktuell status är hem jag uppdatera den till borta annars händer ingenting...
uriNest = "https://developer-api.nest.com/structures/" + struktur + "/? auth =" + authToken; < br > om (checkHomeWifi == ssid)
{
om (bort == "away")
{
setAway = ny Away() {bort = "hem"};
HttpResponseMessage svar = väntar klienten. PutAsJsonAsync (uriNest, setAway);
om (svar. IsSuccessStatusCode)
{
homeStatus = "Hem - framgång!"
}
annat
{
homeStatus = "Hemma - misslyckas!"
}
}
}
annat
{
om (bort == "hem")
{
setAway = ny Away() {bort = "away"};
HttpResponseMessage svar = väntar klienten. PutAsJsonAsync (uriNest, setAway);
om (svar. IsSuccessStatusCode)
{
homeStatus = "Away - framgång!"
}
annat
{
homeStatus = "Away - Fail!";
}
}
}
Slutligen skickar bakgrunden App en Toast till telefonen. Detta visar en status alert på telefonen identifierar om det var en förändring och om det var lyckat baserat på logiken.
ToastTemplateType toastTemplate = ToastTemplateType.ToastText02; < br > XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
XmlNodeList textElements = toastXml.GetElementsByTagName("text");
textElements [0]. AppendChild (toastXml.CreateTextNode ("Nest Wifi förändring alert!"));
textElements [1]. AppendChild(toastXml.CreateTextNode(homeStatus));
ToastNotificationManager.CreateToastNotifier(). Visa (nya ToastNotification(toastXml));
Det är min logik.