147 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # plane-notify
 | |
| 
 | |
| [](https://app.codacy.com/manual/Jxck-S/plane-notify?utm_source=github.com&utm_medium=referral&utm_content=Jxck-S/plane-notify&utm_campaign=Badge_Grade_Settings)
 | |
| [](https://opensource.org/licenses/)
 | |
| 
 | |
| Notify if configured planes have taken off or landed using Python with <a href="https://opensky-network.org/">OpenSky</a>(free) or <a href="https://www.adsbexchange.com/">ADSBExchange</a> Data(paid but much better), outputs location of takeoff location of landing and takeoff by reverse lookup of coordinates.
 | |
| 
 | |
| ### Discord Output Example
 | |
| 
 | |
| 
 | |
| 
 | |
| #### More examples are in  the ExImages folder
 | |
| 
 | |
| [ExImages](./ExImages)
 | |
| 
 | |
| ### Background
 | |
| 
 | |
| I made this program so I could track Elon Musk's Jet and share with others of his whereabouts on Twitter. [](https://twitter.com/ElonJet) I have now Expanded and run multiple accounts for multiple planes, a list of the accounts here [plane-notify Twitter List](https://twitter.com/i/lists/1307414615316467715)
 | |
| 
 | |
| ### Contributing
 | |
| 
 | |
|  I'm open to any help or suggestions, I realize there are many better ways to improve this program and better ways to get this program to work properly, Im only a noob. I'll accept pull requests. If you'd like to discuss join <https://JacksTech.net/Discord>
 | |
| 
 | |
| ### [Algorithm](PseudoCode.md)
 | |
| 
 | |
| ## Setup / Install
 | |
| 
 | |
| ### Make sure Python/PIP is installed
 | |
| 
 | |
| ```bash
 | |
| apt update
 | |
| apt install python3
 | |
| apt install python3-pip
 | |
| ```
 | |
| 
 | |
| ### Install Pipenv and Dependencies
 | |
| 
 | |
| ```bash
 | |
| pip install pipenv
 | |
| pipenv install
 | |
| ```
 | |
| 
 | |
| ### Install Selenium / ChromeDriver or setup Google Static Maps
 | |
| 
 | |
| Selenium/ChromeDriver is used to take a screenshot of the plane on globe.adsbexchange.com. Or use Google Static Maps, which can cost money if overused(No tutorial use <https://developers.google.com/maps/documentation/maps-static/get-api-key> to get to a key).
 | |
| 
 | |
| #### Chromium
 | |
| 
 | |
| ```bash
 | |
| sudo apt-get install chromium
 | |
| ```
 | |
| These output methods once installed can be configured in the planes config you create, using the example plane1.ini
 | |
| 
 | |
| ### Install Screen to run in the background
 | |
| 
 | |
| ```bash
 | |
| apt install screen
 | |
| ```
 | |
| 
 | |
| ### Download / Clone
 | |
| 
 | |
| ```bash
 | |
| apt install git
 | |
| git clone -b multi --single-branch https://github.com/Jxck-S/plane-notify.git
 | |
| cd plane-notify
 | |
| ```
 | |
| 
 | |
| ### Configure main config file with keys and URLs (mainconf.ini) in the configs directory
 | |
| 
 | |
| -   Edit them with nano or vi on the running machine or on your pc and transfer the config to where you will be running the bot
 | |
| -   Pick between OpenSky and ADS-B Exchange
 | |
| -   The OpenSky API is free for everyone but the data is not as good as ADS-B Exchange. The ADS-B Exchange API is not free and this program will not work for the Rapid API from ADS-B Exchange. It only works with the API that they give when you have a partnership with ADS-B Exchange. It is not cheap to get the ADS-B Exchange full API, Don't contact them unless you are ready to pay. 
 | |
| -   If you'd like to add support for ADS-B Exchanges RapidAPI feel free to work on it and submit a merge request. 
 | |
| -   If you've set up multiple planes and want to use ADSB Exchange as your source you must have /all endpoint access to their API or it won't work.
 | |
| -   Pick the correct API version for ADS-B Exchange.
 | |
| -   Proxy is if your running multiple programs that use the ADSB Exchange, setup the proxy from lemonodor so you don't abuse the ADSB Exchange API, otherwise leave enable false.
 | |
| -   When using OpenSky there are more bugs because I mainly use ADS-B Exchange and work less on the OpenSky Implementation. 
 | |
| 
 | |
| 
 | |
| ### Configure individual planes
 | |
| 
 | |
| -   An example file is given (plane1.ini) plane config files should be in the configs directory, the program looks for any file in that folder with a .ini extension.
 | |
| -   Each plane should have its own config
 | |
| 
 | |
| ### Enter and create a new Screen Session
 | |
| 
 | |
| ```bash
 | |
| screen -R <name screen whatever you want>
 | |
| ```
 | |
| 
 | |
| ### Start Program
 | |
| 
 | |
| ```bash
 | |
| pipenv run python __main__
 | |
| ```
 | |
| 
 | |
| ## Using with Docker
 | |
| 
 | |
| Install [docker from their website](https://docs.docker.com/get-docker/). Run the following command from the root of the project.
 | |
| 
 | |
| ```bash
 | |
| docker-compose up -d
 | |
| ```
 | |
| 
 | |
| After running this command, due to the `-d` flag the container will be running in the background. To see the logs of the docker container use `docker logs CONTAINER` (add `-f` to continue streaming the containers output)
 | |
| 
 | |
| ### Telegram message feature - march/2022
 | |
| 
 | |
| Data obtained can be sent through Telegram to a chat (contact), channel or groups.
 | |
| 
 | |
| Creating a Telegram Bot
 | |
| -   Start a conversation with [BotFather](https://t.me/BotFather);
 | |
| -   Send it to the BotFather: /newbot
 | |
| -   Choose a name for your bot;
 | |
| -   Choose a username for your bot;
 | |
| -   Done! You'll get a token to access the HTTP API.
 | |
| 
 | |
| Getting channel or chat (contact) ID
 | |
| -   Start a conversation with [JsonDumpBot](https://t.me/JsonDumpBot);
 | |
| -   It will reply with a json with information from the message;
 | |
| -   Go to the channel or chat you want the id and forward a message from there to JsonDumpBot;
 | |
| -   Find the id in the reply. It'll look something like this:
 | |
| ```bash
 | |
|    {...
 | |
|     "forward_from_chat": {
 | |
|           "id": xxxxxxxxx,
 | |
|    ...}
 | |
| ```
 | |
| -   Don't forget to add the bot as admin in channel so messages can be sent.
 | |
| 
 | |
| Getting a group ID
 | |
| -   Open [Telegram web](https://web.telegram.org);
 | |
| -   Go to group and check the url on address bar of browser;
 | |
| -   That's the group ID (-xxxxxxxxx), it'll look something like this:
 | |
| ```bash
 | |
|   https://web.telegram.org/z/#-xxxxxxxxx
 | |
| ```
 | |
| 
 | |
| ### TODO
 | |
| 
 | |
| -   General Cleanup
 | |
| -   Restructure project to make it proper currently random files because I didn't know how to properly structure a project before. (in progress)
 | |
| -   Add proper logging and service to run the program and remove excessive printing.
 | |
| -   Better single config YAML, or DB maybe
 | |
| 
 | |
| ### [More References/Documentation](References.md)
 |