๐ญ๐ท hr-ccaa โ
| Country | Croatia |
| Registration prefix | 9A- |
| Data source | https://www.ccaa.hr/en/list-of-registered-aircraft-94674 |
| Format | PDF (URL discovered by scraping the index page for the first /file/ link) |
| Run frequency | Weekly (Tuesday, 23:10 UTC) |
| Depends on Mictronics for ICAO hex | Yes โ this runner does not publish ICAO hex addresses; registrations are resolved via RediSearch against Mictronics records (idx:aircraft:mictronics). Must run after the mictronics runner. |
How it works โ
The Croatia CCAA index page is scraped for the first anchor tag whose href contains /file/, which is followed to download the current register PDF. Each page is parsed with pdfplumber's built-in table extraction (extract_table()), which works reliably on this PDF. Rows are matched against a strict suffix pattern (^[A-Z0-9]{2,4}$) before the 9A- prefix is prepended, filtering out header/footer noise rows that don't contain a real registration suffix. Every written record explicitly sets military: false โ this register is exclusively civil, and the explicit value ensures a stale military: true flag (from Mictronics or a prior record on a reused hex) is corrected on re-registration.
Columns โ
| Source column | Imported | Notes |
|---|---|---|
| REG. OZNAKA | โ | Suffix only (e.g. ABC); 9A- prefix prepended โ used as the Mictronics lookup key |
| REDNI BROJ | โ | Parsed but not stored (row-number column) |
| PROIZVOฤAฤ | โ | โ aircraft.manufacturer |
| OZNAKA ZRAKOPLOVA | โ | โ aircraft.model |
| SERIJSKI BROJ | โ | โ aircraft.serial_number |
| VLASNIK | โ | โ registrant.names[0] |
| ADRESA | โ | โ registrant.street (split on commas into parts) |
See specs/data-dictionary.yaml (hr-ccaa entry) for full column semantics and cross-source schema notes.
Example Output โ
Read back the merged record for a given ICAO hex (combines this runner's data with Mictronics and any other sources that have written to the same key):
docker run --rm --network host redis:latest redis-cli EVAL "$(cat ./shared/lua/merge_aircraft.lua)" 0 501C2E | python3 -m json.tool --sort-keys --no-ensure-ascii{
"aircraft": {
"manufacturer": "Reims Aviation Industries",
"manufacturer_model": "CESSNA 172 Skyhawk",
"model": "Cessna F172N",
"serial_number": "F17201978",
"type_designator": "C172",
"wake_turbulence_category": "Light"
},
"icao_hex": "501C2E",
"military": false,
"registrant": {
"names": [
"Vektra d.o.o."
],
"street": [
"Branka Vodinka 4b",
"42 000 Varaลพdin"
]
},
"registration": "9A-DFK",
"source": "hr-ccaa"
}docker run --rm --network host redis:latest redis-cli EVAL "$(cat ./shared/lua/merge_aircraft.lua)" 0 501C65 | python3 -m json.tool --sort-keys --no-ensure-ascii{
"aircraft": {
"manufacturer": "The Boeing Company",
"manufacturer_model": "BOEING 737-800",
"model": "737-800",
"serial_number": "29659",
"type_designator": "B738",
"wake_turbulence_category": "Medium"
},
"icao_hex": "501C65",
"military": false,
"registrant": {
"names": [
"Horizon Aviation 4 Limited"
],
"street": [
"32 Molesworth Street",
"2 Dublin"
]
},
"registration": "9A-ICF",
"source": "hr-ccaa"
}Configuration โ
Reads settings.json (mounted at /app/settings.json):
| Parameter | Required | Default | Notes |
|---|---|---|---|
redis.host | โ | โ | Redis connection host |
redis.port | โ | 6379 | |
mqtt.host | โ | โ | Omit the whole mqtt block to skip completion-stats publishing entirely |
mqtt.port | โ | 1883 | |
mqtt.username | โ | โ | Optional MQTT auth; omit for an anonymous broker |
mqtt.password | โ | โ | |
redis_ttl_days | โ | 14 | TTL applied to each aircraft:registry:{icao_hex} key written by this runner |
MQTT โ
Published once, at the end of a run, to SkyFollower/runner/hr-ccaa/statistic/{name} (all retained):
| Topic suffix | Value | Format |
|---|---|---|
records_imported | e.g. 271 | Integer as string |
last_run_at | e.g. 2026-07-07T14:32:01.123456+00:00 | ISO 8601 UTC |
last_run_status | success or failure | String |
Home Assistant autodiscovery configs are also published (retained) to homeassistant/sensor/SkyFollower_runner_hr_ccaa_{name}/config for each of the three stats above.