I've been interested in agriculture and IoT for quite some time now. In fact, I've messed with different variations of this project several times over the past couple years. First I started building a UWP (Universal Windows Platform) to run on a Raspberry Pi and Windows IoT. Then I started to build a web app to manage crops, inventory, and other aspects of a small farm or garden.
Since then, I've gained more experience, had the opportunity to work on some larger cloud based projects, and learned quite a bit in the process. That's why I'm now building FarmCraft - my first SaaS, and a project that (I hope!) will help individuals grow and harvest their own food.
I actually have a number of reasons for starting this project. As mentioned before, I find farming and technology interesting, and when you mix in IoT, there are a ton of possiblilties. Just look at companies like AeroFarms, GrowLink, Freight Farms, FarmBot, and countless others.
I spent a lot of my childhood around my grandparent's farm and have had thoughts of at least doing some hobby farming for myself. One issue I repeatedly run into though, is the fact that I forget to water the plants, or don't take care of them properly, eventually killing them.
Another big motivator for me is the fact that as I've grown up, it seems like more and more of the smaller farms disappear - either being bought out or selling for one reason or another. On top of that, starting a farm, especially from scratch, seems almost impossible due to the cost of land and equipment needed.
Hopefully, FarmCraft can encourage and / or help individuals get started with less space and money.
That brings me to my goals with FarmCraft. I'd like to provide a product that does the following:
- Helps individuals grow their own food at home successfully, with minimal effort
- Provide an opportunity for individuals to grow or start a farm in an urban area with a much lower cost and land investment
- Integrate the growing process with a built-in marketplace to help people find and sell local produce.
- Provide traceability from seed to consumer
Proof Of Concept
So I've touched on what I want to do and why, but what do I have to show for it? Well, over the past couple weeks, I managed to build out a limited version of the device management portion of FarmCraft. It consists of the major pieces required to make everything work:
- A web app for logging in and managing devices
- An IoT hub for communicating with devices remotely
- A message broker for event-based communications
- An actor system for isolating and handling business logic
- An API for interacting with other services and web requests
If you'd like to see a demo, here's a 3 minute video
Now that you've seen the proof of concept, why would you want to use FarmCraft, and what makes it different than other farm management software that's already available?
I think FarmCraft will stand out in a couple ways. First, it's open source, so even if you don't want to use the cloud-based SaaS version when it's available, you'll be able to set up your own hosted instance.
Next, FarmCraft will offer open source devices in addition to the cloud service. What this means is that an individual will have two options:
- Purchase a pre-made device that can be used on its own, or in conjunction with the SaaS to manage it remotely
- Download a device's firmware, buy the hardware, and make any modifications they want
I also want FarmCraft to be affordable. This means targeting a low monthly cost for the SaaS subscription, as well as the different devices that can be used with it. Most automated solutions I've seen are well into the thousands of dollars, which isn't very attainable for the average person.
To that end, a lot of the existing solutions appear to target larger companies and enterprises. With FarmCraft, I'm looking more at the household / beginning urban farm segment.
One area that I'm excited about, is that FarmCraft will be built primarily with .Net and C# - a notable exception being the physical devices, such as self-watering plants, greenhouse automations, etc. Most options I've come across so far seem to be using technologies like Ruby, Node, Java, and Go.
Anyway, thanks for reading, and let me know your thoughts in the comments. I'd love to hear the feedback!