More plant status

Hej forum,

I like the plant status functionality a lot. It makes life much easier as we can execute activities on selected plants. What would make things even better: more or customizable plant status. Recently we encounter often the situation that we get a failure during watering of all plants and we have to stop execution. This is why we would like to mark plants that have already received water and those who are still waiting. I am sure that there are several other scenarios of this kind. If the state can be combined with a timestamp, this would make it even better. What do you think?

1 Like

@jensGeorgsen There is a less known feature for points: “meta data”. You do not need to add new status types to take advantage of this feature.

Step I: MARK AS on META Fields

Create a MARK AS step.

Select “Custom field”:
image

Typed “meta.my_status” (you can use any name you want after the “meta.” part):

Step II: Create a GROUP That Uses META Field

To FILTER by a meta field, first enable “advanced mode” in the point group panel:

After that, add a STRING COMPARISON for the meta.my_status field:
image

After clicking the “+” button, you will see it in the criteria list:
image

Timestamps?

We want to add this feature. The timestamp part is easy to add, but the comparison part will require a bit more work on our end. What sort of use cases are you envisioning for this feature? Interested to hear your ideas.

Conclusion

We’ve gotten a request for adding / removing / updating plant statuses, but have found that most users requesting these features are able to get my with the use of the meta field. Please let me know if the meta field meets the needs of your use case.

3 Likes

Hi @RickCarlino, thanks for the tip. I was able to follow the explanations but was not completely able to implement my case.

Without timestamp, my case would be"

  • mark all plants as “not watered” (this is the part I was not able to implement)

  • run watering algorithm for all plants, marking each single plant as “watered” after watering

  • run watering algorithm for all plants that are not marked as “watered” (because of stoppages, breakdowns)

With timestamps, my case would be:

  • water all plants that have not been watered for a certain time and set time stamp every time a single plant has received water

I saw in the groups filters of the farm designer, that you already allow number comparisons. If you allow saving the current date in a (custom) variable, would this be a way that does not require that much adjustment? If you then show the date formatted as such, it would even allow less advanced users to use the function…

Having non-location variables is a planned feature, but I don’t foresee us getting to that in the next 6 months with current priorities and TODO list. That’s definitely a good use case for the feature, though. We’ve talked about some other variable types as well, such as integers and ranges.

1 Like

Hej @RickCarlino, great that you are planning non-location variables for the future.

It might do it. Is it possible to set all meta fields of a certain group to a certain value like the case I describe above?

My dumb question for the day :blush: How do I use that meta for single points in a group, e.g. in an IF or an ASSERT block ?

Thanks ! :sunny:

Hej @jsimmonds, as I understand, you need to solve this with dynamic group filters and external variables for sequences. In other words: you filter the plants as explained above instead of using IF statements. Then you pass this group to the sequence by en external variable.

1 Like

In the case of marking all plants as “NOT WATERED”, have you tried something like this?:

Create an “ALL PLANTS” group:

Create a “MARK AS NOT WATERED” sequence:

Apply sequence to every plant (probably on a daily basis):

If you put “MARK ALL FOR WATERING” on a recurring farmevent late at night or early morning, I imagine it would accomplish your goal. Please let me know if that’s not the case or if you need more help.

1 Like

@jsimmonds Like @jensGeorgsen has mentioned, you would use a dynamic group rather than a procedural IF/ASSERT block. In that regard, the sequence editor / groups system is more like a spreadsheet than a traditional imperative programming language. I do want to eventually support imperative styles, since it is often people’s first thought when editing groups/plants.

With the current groups / sequence system:

  • Use groups as you would use arrays and map/filter/loop operations
  • Use recursive sequences for the edge cases that groups can’t handle (but be careful!)
1 Like

Hej @RickCarlino, just to keep you and the community updated about the watering and meta-tag experiments: I tried the meta tag and lost control of our robot.

Basically I got a lot of (error) messages:

The code I used is the following:

With this group definition:

I’ll try to restart by unplugging now (restart in web-portal is disabled), then re-flash, if this does not work. Any comments are welcome :slight_smile:

1 Like

Hey @jensGeorgsen . . I forget . . What model bot are you running ? Is it not too “customized” ?

I am not sure what happened. After re-flashing FarmOS and Farmduino, I have the bot up and running again. We’ll have a demonstration later today so I’ll wait until afterwards before trying again. I’ll keep you posted about the plant status tests…

Thanks for this detailed bug report @jensGeorgsen - it is a great example of a well written bug report.

The meta.* feature is a new feature and it is not used often (except by “power users”), so it is possible you have found a bug in FBOS. I will take a deeper look soon.

One more question @jensGeorgsen about how big was the group you were using? I will try to reproduce similar conditions locally.

Hi @RickCarlino, I used the sequence for around 220 plants.

Hej @jsimmonds, it’s a standard Express XL. No important mods so far.

Hi @RickCarlino, after having all software up and running and at the newest versions, I did a test run with 60 plants and it would work fine. Just the system slows a lot down when autosync is activated. When the test group was marked as “meta.watered=FALSE”, I started the following sequence for all plants with “meta.watered=FALSE”:

2020-06-09_water_plant_sub


I then interrupted the sequence after around 20 plants by emergency stop to see if I could get the bot to restart at the right place. It did.

However, when looking at the group afterwards, it still contained the same remaining 40 plants. The impression I get is that something is wrong with the sync function and that this shows (among others) in this context. I have observed that synchronization seems to be n-1 on the Raspi compared to the web interface for WebGUI -> Raspi copies. I’ll try to document that. I am not sure how synchronization is effected in the opposite direction.

Hope you can use this for something :slight_smile:

I agree ! Good place to look … in fact @RickCarlino is working diligently on this AWS ( As We Speak )

1 Like

@jensGeorgsen That is great information to have, thanks for clarifying. I was suspicious that this was the case. As @jsimmonds has mentioned, the sync system needs some perf tweaks that we’re currently investigating.

200 is not an unreasonably large garden, but it is above average (the average garden size across all active production users is currently 60). I think the larger garden size, paired with the Express (as opposed to Genesis) has uncovered a performance issue that needs to be addressed.

2 Likes

Hej @RickCarlino and the farmbot community: about the garden size vs performance: I am open to learn about gardening as at the moment, I do not feel like we’re having a specially big garden. We try to follow suggestions from the seed suppliers and might sometimes even increase the distances.

This is our garden.

It is a short XL raised bed (2m1 x 4m (instead of 6m). And the space is not filled at all.

An explanation for the size above average might be that other users have standard size beds (not XL or MAX). No worries about the performance, We’ll wait for a solution there. But if there is something with the garden we have that is to be improved, please let me know…

1 Like