I've seen other tutorials and youtube videos of connecting the esp8266 to a cloud of some sort with an access code in order to connect to the ESP, change on/off status of an led via the internet
I would like to create my own host for the esp8266 to turn on/off (whatever) via the internet.
I can access my NAS via the internet, even connect to the NAS VPN. I know a bit of html, I just don't have the knowledge to put it all together.
I think I may have figured it out, but I need to play with the code some more to get it to post to the right folder on the NAS.
I did find the folder it needs to go into. Now how do I get it (wemos) to log into NAS and post/retrieve data, update the .htm page?
idk but you could try an alternative method which I did. (it allows you to remotely control esp8266 but it has to be done from a specific machine, if you're looking for a way to control it using any machine then never mind...) What you'll need for that is:
-python
-forward one port
-"no-ip.com" or any other dynamic dns service which will point to your machine
Then just create "server.py" with the following content, run it and create a txt file in the same directory with instructions which you'll retrieve on esp8266 by accessing for example: "myserver.no-ip.com:5555/control.txt"
import http.server
import socketserver
PORT = 5555 #port which you forwarded earlier
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
httpd.serve_forever()
Actually by using this way you could also control the esp8266 from any machine, but it would require handling requests on your server to modify the content of "control.txt" 
I think a better description of what I'm trying to do is get sensor data(IDK.. weather sensor), post that data to an HTML file hosted on my NAS.
I snipped this code from IOT, thingspeak or somewhere. could this be what I'm looking for?
const char* ssid = "your wifi SSID here";
const char* password = "your wifi password here";
float humidity, temp_f;
const char* mqtt_server = "api.iostash.io";
const char* mqtt_username = "put your X-ACCESS-TOKEN here";
const char* mqtt_password = "put your Device Secret here";
const char* mqtt_topic = "/X-Access-Token/DeviceID/";
MQTT?
It looks like they're logging into the webserver
Applying user name & password. Unfamiliar with what's going on with Topic. Would that be the html document? or weather sensor?
You probably want to see the whole code to be sure. So here it is:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define DHTTYPE DHT11
#define DHTPIN 2
#define SLEEP_DELAY_IN_SECONDS 30
unsigned long previousMillis = 0;
const long interval = 2000;
const char* ssid = "your wifi SSID here";
const char* password = "your wifi password here";
float humidity, temp_f;
const char* mqtt_server = "api.iostash.io";
const char* mqtt_username = "put your X-ACCESS-TOKEN here";
const char* mqtt_password = "put your Device Secret here";
const char* mqtt_topic = "/X-Access-Token/DeviceID/";
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE, 11);
String dataString;
char charBuf[100];
void setup() {
// setup serial port
Serial.begin(115200);
// setup WiFi
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect() {
//WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
setup_wifi();
}
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP8266_Client", mqtt_username, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("MQTT connection failed, retry count: ");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void getTemperature() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
humidity = dht.readHumidity();
temp_f = dht.readTemperature(false);
if (isnan(humidity) || isnan(temp_f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
getTemperature();
dataString = String("{\"temperature\":") + temp_f + String(",\"humidity\":") + humidity + String("}");
dataString.toCharArray(charBuf, 150);
Serial.println(charBuf);
client.publish(mqtt_topic, charBuf );
Serial.println( "Closing MQTT connection...");
client.disconnect();
Serial.println( "Closing WiFi connection...");
WiFi.disconnect();
Serial.println( "Sleeping for a minute");
delay(60000);
}