Weasley klockan (4 / 9 steg)
Steg 4: Skapa arbetsflöden
När du har installerat nod-röd, bör du se en webbsida som denna när du navigerar till http://ip.of.your.pi:1880
Det här är där du skapar dina arbetsflöden, som bör sluta se ut som vår. Delen till vänster kallas paletten, och det är där du kommer att se alla noder som du kan använda, inklusive de som installerat eller skapat själv.
Bara dra en nod från vänster för att komma igång. Ser du att när du gör det, den visar en liten röd triangel ovanpå modul: Detta innebär noden måste konfigureras. Bara dubbelklicka på den och ange de parametrar som efterfrågades.
När du är nöjd med din inställning, ska du klicka på knappen distribuera på den övre högra delen på skärmen.
Vårt arbetsflöde
För detta instruera möjlighet bör du kunna få appen att fungera genom att bara använda samma inställning som vi gjorde.
Låt oss nu gå igenom de olika komponenterna:
Första kedjan
1 "varje 6h"
Detta är en injicera nod: det inte får någon ingång men genererar en med det innehåll som du väljer, och du kan bestämma hur ofta det sker. I vårt fall bör ämnet "Välj * från Alya" där Alya är din första användaren (eller mer exakt, namnet på MySQL tabell för dina första användaren).
Upprepa argumentet är inställt på "intervall mellan tider", varje 60 minuter, varje dag.
(2) DB mediaserver
Detta är en MySQL nod och kan hittas i kategorin lagring. I sidofältet bör du se en "Konfiguration"-flik där du kommer att kunna ange värdnamn, port, etc för din MySQL-databas. I vårt fall vi in lokala IP av Synology NAS men om du installerat MySQL på din Pi, bör detta vara localhost. Du kan testa anslutningen till kontrollera dina parametrar är korrekta.
(3) butikslägen
Detta är en funktion nod: det kan du göra vad du vill med innehållet du får, och skicka tillbaka vad du vill, helt enkelt genom att skriva några rader Javascript.
I vårt fall är koden som följer:
butikslägen i en global variabel
Context.global.Locations = msg.payload;
Console.log(MSG);
returnera msg;
Som ni kanske har förstått, denna kedja hämtar innehållet i tabellen för användaren Alya och sparar de geografiska koordinaterna för de olika platserna i en global variabel. Detta tillåter oss att ändra koordinaterna för en viss plats för en användare (om deras arbetsplats ändrar till exempel) direkt i databasen utan att ändra något i koden
Understödja kedjar (den huvudsakliga en)
(1) Geoloc Alya
Detta är en MQTT nod. Du bör ange värdnamnet, port etc på din MQTT mäklare. I vårt fall var detta localhost sedan mäklare och nod-röd är på samma Pi. Du måste också bestämma vilka ämnet bör prenumerera på noden: eftersom vi efter användaren Alya, vi sätter /owntracks/alya. Den här noden kommer att aktiveras varje gång ett meddelande publiceras till MQTT ämnet anges. I vårt fall som kommer att hända varje gång användaren ändrar läge.
(2) jämför
Detta är en funktion nod, så kan du ange vilken kod du vill: här mottar det aktuella koordinaterna för användaren och jämför det med de kända platserna att avgöra om användaren är för närvarande. Här är koden vi trädde i funktion
Console.log("Start");
var loc = eval ("(" + msg.payload + "')'");
var dist = 0. < br > var plats = "okänd";
för (var jag = 0; jag < context.global.locations.length; i ++)
{
Console.log(i);
dist = distance(context.global.locations[i].lat,context.global.locations[i].long,loc.lat,loc.lon);
Console.log (context.global.locations [i] .lieu);
Console.log ("avstånd" + dist);
IF(dist < context.global.Locations[i].RADIUS)
{
läge = context.global.locations[i].lieu;
}
}
var newMsg = {nyttolast: "alya," + plats};
återvända newMsg;
funktionen avstånd (lat1, lon1, lat2, lon2)
{
var radlat1 = Math.PI * lat1/180
var radlat2 = Math.PI * lat2/180
var radlon1 = Math.PI * lon1/180
var radlon2 = Math.PI * lon2/180
var theta = lon1-lon2
var radtheta = Math.PI * theta/180
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
dist = Math.acos(dist)
dist = dist * 180/Math.PI
dist = dist * 60 * 1.1515
dist = dist * 1.60934 * 1000
returnera dist;
}
(3) funktion + LED
Den här noden är en gnista core funktion nod: det blir inte tillgängliga som standard, i stället det bör installeras av dig, följa instruktionerna på denna sida https://community.spark.io/t/spark-core-and-node-r...
Du kommer då att kunna ange din Core-ID, din token och namnet på den funktion som du vill ringa (det måste vara en funktion som annonseras offentligt av din kärna). Eftersom vi inte ger noden någon parameter, kommer det att skicka resultatet av den tidigare noden som skickas (som ska se ut "alya, hem")
Denna del kan vara bättre att du när du har setup din kärna i några steg ^^
Obs: när vi gjort detta projekt fanns ingen gnista Core nod i nod-röd: vad vi gjorde var att göra en enkel HTTP samtal istället med Core API. Men det är mycket enklare att använda en särskild nod.
Så det är arbetsflödet för en användare: de fem olika flikarna är fem olika arbetsflöden, helt identiska med undantag för
- SQL begäran (Välj * från usernameTable)
- Tecknade MQTT ämnet (/ owntracks/användarnamn)
- De utdata som skickas till kärnan ("användarnamn, plats)