Stap 4: De werkstromen maken
Zodra u hebt geïnstalleerd knooppunt-rood, moeten u zien een webpagina als deze wanneer u naar http://ip.of.your.pi:1880 navigeert
Dit is waar u uw werkstromen, die moeten eindigen uitzien als ons maken. Het gedeelte aan de linkerkant het palet wordt genoemd, en dat is waar u zult zien, elk knooppunt beschikbaar voor u om te gebruiken, met inbegrip van degenen die u geïnstalleerd of zelf gemaakt.
Sleep enkel een knooppunt van de links aan de slag. U zult zien dat als u dit hebt gedaan, het toont een kleine rode driehoek op de top van de module: Dit betekent dat het knooppunt moet worden geconfigureerd. Gewoon tweevoudig tikken daarop en voer de gevraagde parameters.
Zodra u tevreden met uw setup bent, klikt u op de knop distribueren op het bovenste rechter gedeelte op het scherm.
Onze workflow
Voor dit kunnen instrueren moet u zitten kundig voor de app om te werken door simpelweg met dezelfde instellingen, zoals we hebben gedaan.
Laten we nu gaan door middel van de verschillende onderdelen:
Eerste keten
(1) "elke 6h"
Dit is een knooppunt inject: tussenkomst niet ontvangen maar genereert met de inhoud die u kiest, en u kunt beslissen hoe vaak dit gebeurt. In ons geval moet het onderwerp "Selecteer * uit Alya" waar Alya is uw eerste gebruiker (of meer precies, de naam van de tabel MySQL voor uw eerste gebruiker).
Het herhalen argument is ingesteld op "interval tussen tijden", om de 60 minuten, dagelijks.
(2) DB-mediaserver
Dit is een MySQL knooppunt en kan worden gevonden in de categorie opslag. In de zijbalk verschijnt een tabblad "Configuratie" waar u zal zitten kundig voor Voer de hostnaam, poort, enz voor uw MySQL database. In ons geval trad we het lokale IP adres van de Synology NAS, maar als u MySQL hebt geïnstalleerd op uw Pi, dit moet localhost. U kunt het testen van de verbinding om te controleren of dat uw parameters juist zijn.
(3) de archieflocaties
Dit is een knooppunt van de functie: u kunt doen wat je wilt met de inhoud die u ontvangt, en stuur terug wat je wilt, simpelweg door het schrijven van een paar lijnen van Javascript.
In ons geval ziet de code er als volgt uit:
//store the locations in a global variablecontext.global.locations = msg.payload ;//console.log(msg);return msg;
Zoals je wellicht hebt begrepen, deze keten haalt de inhoud van de tabel voor de gebruiker Alya en slaat op de geografische coördinaten van de verschillende locaties in een globale variabele. Dit laat ons toe om wijzigen de coördinaten voor een specifieke locatie voor een gebruiker (als hun werkplek bijvoorbeeld verandert) rechtstreeks in de database zonder iets in de code worden gewijzigd
Tweede keten (de belangrijkste is)
(1) Geoloc Alya
Dit is een knooppunt van de MQTT. Moet u de hostnaam, poort enz van uw MQTT-makelaar. In ons geval was dit localhost aangezien de makelaar en knooppunt-rood staan op de dezelfde Pi. U moet ook beslissen welk onderwerp het knooppunt moet zich abonneren op: omdat we naar aanleiding van de gebruiker Alya, we zetten /owntracks/alya. Dit knooppunt zal worden geactiveerd telkens een bericht is gepubliceerd op de MQTT-onderwerp dat is opgegeven. In ons geval dat zal gebeuren telkens wanneer de gebruiker wijzigt de locatie.
(2) vergelijk
Dit is een functie-knooppunt, dus u kunt wat code invoeren die u wilt: hier ontvangt het de huidige coördinaten van de gebruiker en vergelijkt het met de bekende locaties om te beslissen waar de gebruiker momenteel is. Hier is de code die we ingevoerd in de functie
console.log("start"); var loc = eval('(' + msg.payload + ')'); var dist = 0;<br>var location = "unknown"; for( var i =0 ; i < 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("distance "+ dist); if(dist < context.global.locations[i].radius) { location = context.global.locations[i].lieu ; } } var newMsg = { payload: "alya," + location }; return newMsg ;
function distance(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 return dist; }
(3) functie + LED
Dit knooppunt is een knooppunt van Spark kern functie: het niet standaard beschikbaar zal zijn, in plaats daarvan moet worden geïnstalleerd door u, volg de instructies op deze pagina https://community.spark.io/t/spark-core-and-node-r...
U zal vervolgens zitten kundig voor Voer uw Core-ID, uw token en de naam van de functie die u wilt bellen (het moet een functie publiekelijk geadverteerd door uw kern). Aangezien we het knooppunt niet elke parameter geven, stuurt deze het resultaat van het vorige knooppunt geplaatst als de payload (die zou moeten uitzien "alya, home")
Dit deel zou kunnen maken meer zin om u zodra u hebt setup uw kern in een paar stappen ^^
Opmerking: toen we dit project was er geen vonk Core-knooppunt in het knooppunt-rood: wat we deden was het maken van een eenvoudige HTTP-oproep plaats met behulp van de kern-API. Het is echter veel gemakkelijker te gebruiken van een specifiek knooppunt.
Dus dat is de workflow voor één gebruiker: de vijf verschillende tabbladen zijn vijf verschillende workflows, behalve voor strikt dezelfde
- De SQL-verzoek (Selecteer * uit usernameTable)
- De geplaatste MQTT onderwerp (/ owntracks/gebruikersnaam)
- De uitvoer die wordt verzonden naar de kern ("gebruikersnaam, locatie")