Skip to content

A stand alone terminal app that can get "red alert"s from IDF's Home Front Command

License

Notifications You must be signed in to change notification settings

ashr123/red-alert-listener

Repository files navigation

red-alert-listener

Requirements

  1. red-alert-listener.conf.json is being searched under current working directory by default (can be changed by stating the path (can be relative) to the configuration file via -c flag).
  2. JRE 21 (or newer)
  3. Must have an Israeli IP address.
  4. JAR can be downloaded through Packages → io.github.ashr123.red-alert-listener → Assets → red-alert-listener-<version>-jar-with-dependencies.jar

Capabilities

  1. Display alerts as the Home Front Command produces them.

  2. Make alert sound if the event contains areas of interest defined in red-alert-listener.conf.json.

  3. Supports all official languages:

    • Hebrew (code HE)
    • English (code EN)
    • Russian (code RU)
    • Arabic (code AR)
  4. districts.json (like districts-en.json example) created from get-remote-districts-as-json-to-file command is of the following shape (in TypeScript terms):

    interface District {
        translation: string;
        protectionTimeInSeconds: number;
    }
    
    interface AreaDistricts {
        [districtNameInHebrew: string]: District;
    }
    
    interface AreaData {
        [translatedAreaName: string]: AreaDistricts;
    }
    
    const data: AreaData = require('districts-en.json');

    Or in Java terms:

    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
    import com.fasterxml.jackson.databind.annotation.JsonSerialize;
    import com.fasterxml.jackson.databind.json.JsonMapper;
    import com.fasterxml.jackson.databind.util.StdConverter;
    
    import java.io.IOException;
    import java.time.Duration;
    
    record District(String translation,
                    @JsonProperty("protectionTimeInSeconds")
                    @JsonDeserialize(converter = DurationDeserializer.class)
                    Duration protectionTime) { 
        private static class DurationDeserializer extends StdConverter<Long, Duration> { 
            @Override
            public Duration convert(Long value) {
                return Duration.ofSeconds(value);
            }
        }
    }
    
    public static void main(String... args) throws IOException {
        final Map<String /*translated area name*/,
                Map<String /*district name in Hebrew*/,
                        District>> data = new JsonMapper()
                .readValue(
                        new File("districts-en.json"),
                        new TypeReference<>() {
                        }
                );
    }

Legal districts (and their translation) can be found by:

  1. Running java -jar <downloaded-jar-file>.jar get-remote-districts-as-json -l <language code> | egrep -i "<district1>|<district2>[|...]"
  2. Saving those districts to file like this: java -jar <downloaded-jar-file>.jar get-remote-districts-as-json-to-file -l <language code> [-o <your-file-name>.json] (the default file name is districts.json) and search in it as you may like.

Known bugs

  • On Raspberry Pi 4 with Ubuntu 22.10, alert sound isn't working.

Demonstration

Operation Guardian of the Walls demo1 demo2 Operation Breaking Dawn demo3 demo4 Operation Shield and Arrow Swords of Iron War