Your camera already hears aircraft. It just isn’t listening.

A security camera pointed at your garden has a microphone that picks up engines long before you notice them. SkyEar runs a small agent beside the camera, listens to that audio, and matches what it hears against live aircraft positions — so every detection checks itself. Enough fixed sensors across Lithuania and the same method starts to work for drones.

About 15 minutes, most of it waiting for a download.

You will be working in two places

In your browser

Creating your account, generating a pairing code, and watching the map. Any device, anywhere.

On the camera machine

A NAS, a Raspberry Pi, or a spare computer on the same network as the camera. It has to reach the camera directly — that is the whole point, and it is why nothing on this site ever asks for your camera’s password.

Every step below is tagged with which of the two it belongs to.

Before you start

  • A camera with a microphone, on your own network
  • Its address, and a username and password for it
  • A machine that stays on and can reach the camera — a NAS, a Pi, a spare computer
  • Roughly how high the camera is mounted

What to have ready for your camera

Reolink, Hikvision, Dahua

Its address on your network, a username and a password. The setup page builds the rest and tests it before you commit. Make sure RTSP is switched on in the camera settings, usually under Network or Advanced.

Ubiquiti UniFi Protect

Different from the rest, so the form asks for different things. The stream comes from your NVR or UDM, not the camera, and there is no username or password — a token in the URL is the credential.

In Protect, open the camera → Settings → Advanced → enable RTSP for any one quality. Copy the URL it shows and keep the part after the last slash:

rtsps://192.168.1.1:7441/aBcDeF123456?enableSrtp
                         └── paste this part ──┘

Protect issues a new token if you turn RTSP off and on again, which silently stops the stream until you paste the new one.

Does it even have a microphone?

Many cameras do not, and the box rarely says. You do not need to find out in advance — the setup page tests the stream and tells you plainly whether there is audio on it.

First, install the agent

It runs on a machine that can reach your camera over the local network and stays on. Pick where yours is going.

Green, Yellow, a Pi, or a VM. Installs as an add-on with a sidebar panel.

  1. 1.

    Add the repository

    Settings → Add-ons → Add-on Store, then the three-dot menu at the top right → Repositories. Paste this and press Add.

    https://github.com/MrUnluckyy/skyear-hassio
  2. 2.

    Install the add-on

    Close the dialog and refresh the store. A SkyEar section appears at the bottom — open it, press Install, and wait for the image to download. Turn on Start on boot and Watchdog, then press Start.

  3. 3.

    Open the panel

    SkyEar appears in the sidebar. There is no address to find and no port to open — Home Assistant proxies it for you.

Requires a 64-bit system. There is no 32-bit ARM build because numpy publishes no wheel for it, so a Raspberry Pi running 32-bit Raspberry Pi OS will not see the add-on.

Then, on every platform:

Open the SkyEar panel in your Home Assistant sidebar. Everything else happens on that one page — pick your camera make, enter its address and password, press Test, set the position, and connect.

Then, the same four steps everywhere

Note the order: your camera is tested before you are asked for an email. If it turns out to have no microphone, you will not have signed up for anything.

  1. 01
    In your browser

    Tell it about your camera

    On the setup page: pick the make, type the camera's address on your network, and enter the username and password you use in its own app. Press Test this camera. This is the moment that decides whether your camera can be a sensor at all, and it needs no account and no sign-up.

    What you should see

    Audio found — aac at 16000 Hz. This camera can be a sensor.
    “The camera rejected that username or password.”
    Reolink usually wants admin and the password you set in its app, not your Reolink cloud login.
    “Could not reach the camera.”
    Check the address, and that RTSP is switched on in the camera settings. Most cameras have it off by default.
    “This camera streams video but no audio.”
    That model has no microphone, or it is disabled in the camera's settings. Check there first; if there is no microphone, this camera cannot be a sensor.
    The setup page does not load at all.
    The agent log prints the exact address. In Docker it sometimes prints the container's own address, so use the machine's instead.
  2. 02
    In your browser

    Set where it is listening from

    Press Use my current location, or type the coordinates. The ground elevation is looked up for you; the mount height is roughly how high the camera is off the ground. Position matters because matching a sound to an aircraft is geometry — the distance decides how long the sound took to arrive.

    What you should see

    Latitude and longitude filled in, and an elevation that looks plausible for where you are.
    The browser refuses to share a location.
    It only works on https or localhost. Type the coordinates instead — right-click your roof in Google Maps and copy the pair.
  3. 03
    In your browser

    Create an account and connect

    Only now, once you know the camera works. Enter your email, click the one-time link, press Generate pairing code, and paste that code into the setup page. Then press Save and connect.

    Sign in

    What you should see

    Connected. Restart the agent and your sensor appears on the map within a minute.
    No email after a minute.
    Check spam — the first message from a new sender usually lands there. The link is single-use and expires in an hour.
    The code is rejected.
    Codes expire after 15 minutes and work once. Generate another.
  4. 04
    In your browser

    Watch it start listening

    Restart the agent so it picks up the camera, then open the map. Your sensor appears with wavefronts collapsing into it, and starts recording every aircraft that passes — heard or not. The level meter on the setup page moves whenever there is sound, which is the quickest way to confirm the microphone is really reaching it.

    Open the map

    What you should see

    A dot where your camera is, labelled listening, and a rising count of aircraft.
    The sensor does not appear.
    The agent uploads every 10 seconds, but only once it has something to say. Near an airport give it a few minutes; elsewhere longer.
    It says no sound arriving.
    The camera streams audio but the agent is not receiving it. Restart the agent; if it persists, re-run Test this camera.

Testing it with a speaker

Play a recording of an aircraft or a drone through a phone or speaker near the camera, at normal listening volume, for at least fifteen seconds — a short burst is filtered out as a click. Keep the setup page open: the level meter should rise while it plays, and within a minute or two the sound appears on the map as an unexplained sound, because nothing with a transponder was overhead.

That is a real test of one thing: audio is reaching the detector, the detector fires, the event uploads, and the map draws it. It is the fastest way to confirm a new sensor end to end.

It is not a test of whether SkyEar can hear a drone. A speaker two metres away delivers the whole spectrum; three kilometres of air removes the upper harmonics and a propeller smears what is left. Measured at this site, a real light aircraft scored a third of the periodicity a synthesised one did. Anything tuned against a speaker would be tuned against the wrong signal — so treat the result as “the wiring works”, and nothing more.

What crosses your network boundary

Sent to SkyEar

  • When a sound started and how long it lasted
  • How loud it was against the background, and its frequency shape
  • Which aircraft matched it, if any
  • Your sensor position, rounded to about 110 metres

Never leaves your machine

  • Your camera's address, username and password
  • Video — none is ever read, only the audio track
  • Audio recordings, unless you opt in per clip
  • Your exact coordinates

This is architectural, not a policy promise. The agent runs inside your network and pushes events out; nothing reaches in. There is no field anywhere on this site that asks for a camera address or password, because the servers could not use one — they cannot route to a private address, and a credential store an operator can decrypt is a target worth attacking.

Where this actually stands

Early, and measured rather than claimed. A single sensor near Vilnius airport currently hears a minority of the aircraft that pass it, and wind produces sounds loud enough to be mistaken for one. The map shows the detection rate next to the share of time background noise is present, so you can see for yourself whether a result means anything yet.

Running a sensor helps most by producing honest negatives: every aircraft that passes and is not heard is recorded too. That is what tells us the real range of this method, and it is the data a classifier will eventually be trained on.

SkyEar does not send alerts, and will not until the Fire and Rescue Department and the military have had a say in how that should work.

Start with step oneSee what the network is hearing