Introducing Industrial EVE - A Tool I Made for PI Notifications

Hi everyone,

I’ve been working on something for a while and decided to finally share it with you all: a tool I’ve developed called Industrial EVE industrialeve.com. It’s the first app I’ve ever made, and I designed it to help with Planetary Interaction (PI) notifications without needing to constantly check in-game.

What can Industrial EVE do?

  • Discord Notifications: It sends you notifications about your extractors’ status, so you’re always in the loop. There are three options 24h/12h/when it expires.
  • Multiple Account Management: If you’re managing PI across several characters and accounts you can link them all so you can get notifications for all of them.
  • Automatic Updates: Utilizes EVE Online’s SSO for secure logins and automatic PI data updates.
  • Data Overview: Anytime you want to check in on your PI, you can get an overview through the site.

How it works: After you log in using EVE’s Single Sign-On, you can link your characters and see an overview of your whole PI setup. The site uses EVE’s APIs to pull your data, ensuring it’s up-to-date. To keep things up to date, the system refreshes your PI data daily, and there’s an option to manually update your data if needed (if you made changes for example and you want to see them instantly).

I need to mention that you should log in with each character once a month to keep your data access uninterrupted. This helps in making sure the access tokens are valid, and your PI data is consistently retrievable.

I really hope you find Industrial EVE useful for your PI management. I am an amateur in development so expect to run into problems (hopefully not or not many anyways). I’m all ears for any feedback, suggestions, or questions you might have. Some of my corp mates and I tested it for a while and so far it seems to be working ok. The plan is to slowly add more functionalities if people find it helpful.

Feel free to try it out at industrialeve.com and let me know what you think!

Thanks for checking this out, and I hope you find it useful.


12/12/2024 update

Several small additions have been made to the site to improve it. I will list a few here.

  • Enhanced the discord bot to make sure no notifications are missed.
  • More logging in the backend for easier troubleshooting.
  • More options to customize your notifications.
  • A notifications bell on the site to also get notifications there besides the discord bot.
  • Several bug fixes.

Besides the above, I am now in the testing phase for the first part of the new implementation I am doing for factory notifications.

The new update will include the following:

:white_check_mark:Major refactoring of the app’s code base to make it faster in updating data.
:white_check_mark: Tracking the number of factories in colonies and their details.
:white_check_mark: Checking if connected storages have the required input resources for the factories.
:white_check_mark: Distributing those resources to all factories.
:white_check_mark: Calculating the number of cycles factories can run and their depletion time.
:white_check_mark:Notification logic for factories that are expiring.
:white_check_mark: Changes to the Discord settings page for configuring factory notifications.

I plan to release this beta build in my dev site for live testing and when I fix any bugs I find and add maybe some new stuff I will release it to the live site.

Below is what I will work on for part 2.

  • Full storage implementation (about 50% complete).
  • Extractor yield tracking (about 90% complete).
  • Predictive calculations for factory/extractor resource exchange (about 10% complete).
  • Major UI/UX updates for the Planets page to show detailed colony information.

If you want to try the new build or have any suggestions to help me, please let me know. I have a discord server which is not very active since people use it primarily for the bot but it’s where I post my progress.

Hi all,

The plan was to start implementing new functionalities in the coming days regarding extra notifications for factory expirations and notifications on when launchpad/warehouses are almost full.
I am still actively working on it but the deployment of the new features will be delayed and the scope will change slightly.

Unfortunately, the API provided by Eve Online for Planetary interaction has certain limitations that make the above plan difficult. The data provided by the API is not, unfortunately, real-time. They only get updated with the latest image of your planets when you perform a manual action in the game. This manual action could be you resetting your extractors or taking out outputs or stocking up inputs for your factories.

With the above limitations in mind, it’s clear that there need to be changes in the logic I had created initially for these new notifications. I do believe that I can provide a relatively accurate notification system for factories and launchpads/warehouses for factory planets however planets with both extractors and factories are a different story.

Since I don’t have a reliable way to get the exact quantity of extracted recourses (I only see an average quantity per cycle), I can’t make an accurate prediction for the production of the factories on those planets and for the inventory space left for launchpads/warehouses. For this reason, for now, I will focus on providing a notification system for Factory planets only, and once that is done I will look into what to do for planets that have both Extractors and Factories.

We have released several small updates in the past month.

The majority were bug fixes and stability changes regarding the bot’s behavior.

2 new small features have been implemented in the Planets page of the site. Now you can search anything in regards to the planets shown on the page. You can now also filter the planets based on the Resources and/or Factories you have on your planets.

New filter options will come at a later stage as well as a sorting option and maybe change the view to a list in case it is easier for people with a lot of planets.

The bigger update in regards to timers for factories and storage capacity is still being worked on but that will take time due to its complexity.

Looks very good but not sure the functionality is there yet will keep an eye on it. I pretty much do a import PI to make P4 then export great to be able to see what is in store and that its actually pumping away.

Indeed the functionality to monitor storage and the output volume of factories is not yet implemented.

We do have a beta for monitoring what the colony has in storage, however, we have not released it yet because of the way the API works.

The data that we get from the API is the data from the last time the player interacted with the colony. So if we call the API let’s say 2 hours later we will have the data from 2 hours ago when the player interacted with the colony.

We are still trying to think of how to implement this to make it as accurate as possible.

One solution of course would be for the user to log in to the app after he has made changes to his colony to update the data but that is not 100% user-friendly.

Of course, because of the above, the calculation for the factory output is also gonna be difficult.

Either way, we are still looking into it.

In the meantime, we have introduced several bug fixes and enhancements for the Discord bot as well as for the Planets page for users to search, sort, and filter their planets.

When we have a significant update on the site I will update the thread.

Love it thank you.

Great Tool - Thank you !

Still in development?

Hi sorry for the late reply.

Yes I continue to make improvements to the app. It is slower than I would want it due to the EVE online API.

Next new update would be the Factory notifications and later storage notifications.

I would say at the moment the factory update is 2/3 done. Hopefully I will have something to show soon.

Hello all,

It’s been a while I guess but I am still here and slowly working on the site.

Several small additions have been made to the site to improve it. I will list a few here.

  • Enhanced the discord bot to make sure no notifications are missed.
  • More logging in the backend for easier troubleshooting.
  • More options to customize your notifications.
  • A notifications bell on the site to also get notifications there besides the discord bot.
  • Several bug fixes.

Besides the above, I am now in the testing phase for the first part of the new implementation I am doing for factory notifications.

The new update will include the following:

:white_check_mark:Major refactoring of the app’s code base to make it faster in updating data.
:white_check_mark: Tracking the number of factories in colonies and their details.
:white_check_mark: Checking if connected storages have the required input resources for the factories.
:white_check_mark: Distributing those resources to all factories.
:white_check_mark: Calculating the number of cycles factories can run and their depletion time.
:white_check_mark:Notification logic for factories that are expiring.
:white_check_mark: Changes to the Discord settings page for configuring factory notifications.

This took me probably unnecessarily long to implement (primarily cause I am bad at coding) but the beta build is now fully working.

I plan to release this beta build in my dev site for live testing and when I fix any bugs I find and add maybe some new stuff I will release it to the live site.

Below is what I will work on for part 2.

  • Full storage implementation (about 50% complete).
  • Extractor yield tracking (about 90% complete).
  • Predictive calculations for factory/extractor resource exchange (about 10% complete).
  • Major UI/UX updates for the Planets page to show detailed colony information.

If you want to try the new build or have any suggestions to help me, please let me know. I have a discord server which is not very active since people use it primarily for the bot but it’s where I post my progress.

Hey all again,

The testing of the new functionality is still underway. So far several bugs have been found and fixed.

I have also made some major changes in the cycle calculation logic to be as accurate as possible. The new build is still being tested to ensure it is reliable and ready to go live.

If everything goes well I want to release the new build by the end of this year.

I do need to mention one crucial thing that I did not explicitly mention in my last comment. The factory notifications update will only take place for factory planets that the player feeds with resources.

What this means :

These planets are being fed with resources by the player and the factories directly use only those resources to produce their schematic. The code explicitly checks for the available resources in the planet’s storage. It will not take into consideration extractor or other factory output.

I am forced to do this because the PI API provides static data (unless the player performs a manual action on the planet). So this means that unless the player stored the new resources my app can’t see them.

I will try in a future update to maybe include this but my coding capabilities are limited and this is already a big task for me, but we will see how it goes.

Again, if someone is interested in testing the new functionalities please let me know! :slight_smile:

@Cpt_Teras I could possibly make this end point for you - can you detail the limitations?

Hey @Dexomus_Viliana ,

I am not sure how this can be solved if you can actually help but if you can that would be great! Maybe I am missing something regarding the actual problem.

Here are the details:

In order to get players colony data you use this API : http://characters/{character_id}/planets/{planet_id}/

The json has info for the links/extractors/factories etc. A factory pin would look like this

{
        "pin_id": 1047584429444,
        "type_id": 2474,
        "contents": [
            {
                "amount": 40,
                "type_id": 3645
            },
            {
                "amount": 40,
                "type_id": 2390
            }
        ],
        "latitude": 1.0226037502288818,
        "longitude": 1.5537229776382446,
        "schematic_id": 66,
        "last_cycle_start": "2024-12-24T12:08:22Z"
    }

So far so good. What is interesting here is the “last_cycle_start": "2024-12-24T12:08:22Z

This represents when the first cycle started (not the last as the name may suggest). Normally this would have been the only thing I would need in order to accurately determine if a factory has started working on a cycle. But here is where the problem starts.

It seems, however, that the “last_cycle_start” gets updated even if a cycle hasn’t started. I noticed that If the factory received partial resources the last_cycle_start will be triggered even if there weren’t enough resources for a full cycle.

Furthermore, during my testing, I noticed one occasion which I can’t logically explain. In my factory planet, I have 22 factories. One of my test cases was to put partial resources into 1 factory to see what the behavior of my code would be. To my surprise all 22 factories had their last_cycle_start updated even though no factory was actually working.

This is the main problem in regards to misleading data from the API.

I try to mitigate the false positives with some if/else code but as you can tell with the second issue, I will still have false positives. This is part of my logic if it helps you in any way.

if factory.last_cycle_start:
        time_elapsed = timezone.now() - factory.last_cycle_start
        cycles_passed = int(time_elapsed.total_seconds() // cycle_time_seconds)
        logger.debug(f"Time elapsed since last cycle start: {time_elapsed}, Cycles passed: {cycles_passed}")
    else:
        cycles_passed = 0
        logger.debug("No last cycle start recorded. Setting cycles passed to 0.")

if all(qty == 0 for qty in available_quantity) and cycles_passed < 1 :  # All resources are zero
        total_cycles = 1
        logger.debug("No resources available, but factory remains in its active cycle.")
    elif all(qty == 0 for qty in available_quantity) and cycles_passed >= 1:
        total_cycles = 0
        logger.debug("All resources are zero. No active cycles possible.")
    elif any(qty == 0 or qty < input_resources[r_id] for r_id, qty in zip(input_resources.keys(), available_quantity)):  # Partial or missing resources
        if factory.is_active_cycle:  # Factory was previously active
            total_cycles = 1
            logger.debug("Partial resources available, but factory continues its active cycle.")
        else:
            total_cycles = 0
            logger.debug("Partial resources available but insufficient for a cycle.")

The other main issue which I am trying to mitigate from my side is the fact that the data that the API provides are static. If the user doesn’t perform a manual action on the planet the data won’t get updated. So that means I can only see the state of the colony the last time the player changed something.

For example:

The player placed 300 coolant in storage manually at 13:00 and the planet’s factories immediately took some to produce their schematic and in the storage we are left with 200. If I call the API at any point after 13:00 I will always see in storage 200 coolant. Even if I call it 3 days later when all factories have used up the coolant and stored their output in the storage I will still only see that initial 200 coolant unless the player again changes something on the planet.

How regularly are you pinging the API?

A possibility would be a workaround along the lines of something like a heartbeat, where it pings the API in intervals?

The problem will still be there. The API will still provide false/old data unless the user performs a manual action in-game no matter how many times I call the API.

For now, on the live version of my app which only has the extractor notifications, I call the API conservatively every 3 hours or if the user initiates a manual refresh from my site (or he goes to the overview page and my system detects that the last refresh was longer than 1 hour and then it will initiate an automatic refresh).

But like I said the json I will receive each time will be the same unless the user does something on the planet in-game.

A web socket is a solution in this case I believe, improves real time but the fundamental issue in this case is the mechanics, you are relying on user input in this case unfortunately. I could possibly make that?

I do have websocket implemented on my site actually (it is used to update live the data when the user goes to check his planets on my site) and with the new version that I am releasing soon, I enhanced it even more.

But yeah ultimately the core issue can’t be solved because the actual json from the API gives the wrong data (in case of the false positive timers for the factories) or outdated data unless the user actually changes something in-game.