Contribution to Open Ag software framework


#1

Hi Team,
I am a software engineer, I would like to contribute to Open Ag framework, and I had 4 RasPIs (Generation 2). However, I don’t have the food computer with me, Please let me know how can I support.

Thanks
Vijay


#2

Do you have an Arduino Mega?
You can run openag_brain(the main ROS repo) with a RasPi and Arduino Mega.

I’d suggest starting with the wiki and also the openag_brain repo to begin researching.


#3

Thanks, @spaghet, let me go thru the wiki. Meanwhile, i don’t have the Arduino Mega. Do I need to buy one for this prototype?


#4

Currently, the firmware is made for the Arduino Mega, so you would need one to run anything.

It would also help to have the same sensors and actuators so that you can check that everything is running, or you could work on expanding the firmware library by using new sensors as well! One of the projects that’s been dangling is backwards compatibility with the PFC1 hardware so that might be a fun project.


#5

I was asking the same question but noticed this thread was a little stale. I’ve been doing mostly web development work (Python & C#). I only have one of the $300 PFC variants built and on hand, is there anywhere else someone might recommend that I look to start contributing?


#6

@bcbeidel We would love to have your help!

@webbhm @ferguman have been leading the dev efforts, but we’re working on a Polymer based UI with another gentlemen locally and will have some updates about that in the next week.

Anything in particular you’d like to help out with? One project we want to work on is a way to configure the Wi-Fi and register your device. I’d love to have something like this integrated:


#7

I tried jasbur’s code and had problems. I haven’t tried other options yet, but it looks like there are several. Google: “raspberry pi ap iot configuration” and you should get some hits. Several starting points seem to be:
https://www.raspberrypi.org/forums/viewtopic.php?t=204833


This is basically treating the food computer as an IoT device, and having it initially be a wifi access point (AP).


#8

There are several areas where help would be greatly appreciated.
Getting a cloud UI up is our big goal, as many schools cannot open up their router (port forwarding) to expose the MVP on the web. We have several people looking into this, but no final decisions at this time. This has several parts:

  1. Replicating data (is easy if we stick with CouchDB)
  2. Dashboard queries and display (have some demos that can share off-line)
  3. Administration
    a) Register an MVP with the UI
    b) User authentication
    c) Teacher account creation
    d) Student account creation (by the teacher, or at least setting permissions)
    e) Manual data entry screens (phenotype data primarily)
  4. Headless WiFi configuration (the Access Point IoT approach)

Let us know if something strikes your fancy (or you have other interests). We can provide you with more details.


#9

Thanks for the response!

Sorry for the delay, heads down on another personal project. I am attempting to build my own raspberry pi cluster with Hadoop and Spark, and have been fighting with my config files.

I would ultimately like to help the Headless Wifi Config (I have some other IoT projects and learning how to manage that would be very useful), but am afraid that is too big of a bite for an initial contribution.

Of the things listed, what would you recommend for an initial component for contribution? The last thing I want to do, is to take on too big of a chunk, get overwhelmed, and fail to deliver.


#10

This is a learning process for all of us, a big chunk of the value is the personal learning. Not only is there the core functionality we are working on, but there are a lot of side projects like computer vision we are also playing with. Feel free to propose some ideas besides helping with what we have mentioned.
Take a look at this and see how difficult you think it is. There are two standard Raspberry programs that are the heart of it (hostapd and udhcpd):
https://github.com/davidflanagan/wifi-setup.
The instructions were not clear, but you need to install a new copy of node-js before you can run:
npm install
It may be easiest to set up a stand-alone access point wifi (with hostapd and udhcpd), before connecting it up to the more dynamic process that he has (and will be eventually needed).
I have not worked with clusters, but the lab at Indiana University where I have been hanging out is taking six Pis and hooking them into an ether-net switch to act as mini super-computers.


#11

Thanks. I’ll take a look at that wifi-setup, get familiar with the code and probably have some questions about how to properly integrate it into the final use case.

In my research, I did find a similar python library that could be useful, if the preference was to keep as much of the project in python as possible.


#12

@webbhm and @Webb.Peter, what objectives do you hope to accomplish with the cloud stuff?

Cloud anything means you’re either going to be,

  1. Making do with the limited free tier of some service, or…
  2. Somebody will have to pay the hosting fees.

Once you get to the point of paying hosting fees, there’s a wide range of services you can buy. On the hardcore super-customizable end of the spectrum, you’ve got stuff like AWS or Digital Ocean where you need a system administrator to maintain virtual servers and developers to write the code that runs on them.

On the more approachable end of the hosting spectrum, you can pay for accounts on services like Adafruit.io or Particle’s Device Cloud. In that case, somebody else handles the system administration, and you don’t need to do so much low level coding on your own.

In the middle, or perhaps off to the side, you’ve got things like using Google Forms to add data to a Google Docs spreadsheet. If you’ve got a classroom of kids with Chromebooks, or iPads for that matter, the Google Docs option has a lot going for it. Speaking from personal experience, you can get a lot of mileage out of the Google Sheets app on an iPad or iPhone.

Do you know yet specifically what you want a cloud UI to do for you? Most of the list of stuff you mentioned above (account management, etc.) sounds like the basic infrastructure that’s common to most online services. I’m curious about what features you would want to provide inside the service once people have accounts and are logged in. You mentioned manual phenotype data entry. Viewing charts seems a likely candidate. Anything else?

You mentioned problems with opening firewall ports, so it sounds like you’re expecting people to be interacting with the systems from off campus. Are you thinking of things like teachers and students checking the system status over the weekend or during vacations? Logging in with a remote access client to provide tech support? Something else? I wonder if using the free tier of Adafruit.io to monitor water level and temperature might address most of what you care about in this area (e.g. try not to kill the plants over vacation).


#13

The ‘weekend access’ is the main story driving the need for a cloud UI, and the restriction that most schools will not let the kids set up an MVP Raspberry as a web server (as I have mine running). This requires a ‘server’ outside their firewall that they can push data to. Once that is set up we can run CouchDB replication or mqtt or about anything else to push data to the server.


#14

Okay, that makes sense. It sounds like your big constraint is that schools don’t want student-run servers on their internal networks. So, to the extent you need an MVP talking with somebody’s laptop, tablet, or whatever, that communication needs to be relayed off a server that lives outside the school’s network.

I guess that would probably look like a server with a web dashboard for the students and teachers plus a web API for the MVPs. The dashboard could let people load recipes and check sensor readings. The API would let the MVPs periodically phone home to send sensor data and check for new instructions.

I’ve been thinking about IoT and cloud stuff, and I’m tinkering with a few ideas. I don’t have anything useful to share yet that would directly help with your MVP stuff. If that changes, I’ll let you know.


#15

So what are the chances that they could use something like dataplicity?

https://www.dataplicity.com/

It allows you to remotely SSH to an RPI that sits behind a firewall (no port forwarding). There’s also an option to create a “wormhole” to the RPI’s web server… which by the sounds of it would not be allowed by many schools. Not being allowed to run an RPI as a server at a school would really kill the whole concept of a food computer. Even if data was being pushed to an outside server how could one control it? Instead of just saying no I think setting up a VLAN on the school network that keeps the RPI separated from the schools primary network could be a good option.


#16

@adam I don’t know what your experience has been in dealing with schools, but what I’ve seen is that they often have many rules and policies which are designed to keep them out of trouble with parents, local and state governments, accreditation boards, etc. It tends to be the kind of bureaucratic situation where arguing about whether the rules make sense is beside the point. It’s easier to just figure out how to work within the limits of what’s allowed.

In the case of commercial IoT devices, using a remote server is normal. If you want to read more about such things, particle.io is great. I don’t see why using a remote server would be a problem other than the difficulty and expense of building and maintaining the infrastructure. Granted, those are potentially kind of a big deal.


#17

@wsnook The external server is not the issue. It’s the fact that internal RPIs are restricted from running any web server regardless of port number. That would mean that the MVP & all the OpenAg PFCs would not be allowed. The external server is for data aggregation and crunching and also giving access to a PFC from the outside world , which could also be done via a separate server/service . I imaging that the new PFC machine will be build around a REST API (or graphQL if they’re wicked hip).


#18

@adam Right. I see your point. But, I think you may be reading too much into things that Howard and I said. I’m not looking for an argument.

All I was trying to do with my question for Howard was look for opportunities to coordinate my work on IoT cloud stuff with what the MVP folks are doing. I’m not personally involved in working with classroom MVPs, so when Howard tells me about feedback from teachers and school IT folks, I take him at his word. I’m curious to know about the goals and constraints that are important for teachers so that I can potentially help to accommodate their needs.


#19

@adam
Actually, not having the RPI as a server doesn’t kill things, as long as there is a cloud server it can interact with. With mqtt the RPI can have callbacks (similar as how a web page request knows where to send the page data), that allow the server to send messages back to the RPI. This allows messaging the RPI and sending data to it. The data could be a recipe, or instructions for turning lights on and off.


#20

A few months ago I setup a 3D printer at my kids school. Many people use the old “sneaker net” where you copy you files to an SD card then physically insert it into the 3D printer to run the gcode. I suggested that I setup OctoPrint on an RPI and connect that to the USB port of the printer so that print jobs could be sent and managed elsewhere within the network. I was told they didn’t want the potential security risk of a computer that their IT team wasn’t familiar with. A computer that is controllable remotely is still a server to me even if if it’s not directly interacted with.