Merge branch 'current' into next

This commit is contained in:
Franck Nijhof 2022-02-22 10:44:14 +01:00
commit 2dbac1d724
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
10 changed files with 287 additions and 56 deletions

View File

@ -20,7 +20,7 @@ group :jekyll_plugins do
end
gem 'sinatra', '2.2.0'
gem 'nokogiri', '1.13.1'
gem 'nokogiri', '1.13.3'
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library

View File

@ -66,14 +66,14 @@ GEM
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
mini_portile2 (2.7.1)
mini_portile2 (2.8.0)
multi_json (1.15.0)
mustermann (1.1.1)
ruby2_keywords (~> 0.0.1)
nokogiri (1.13.1)
mini_portile2 (~> 2.7.0)
nokogiri (1.13.3)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
nokogiri (1.13.1-x64-mingw32)
nokogiri (1.13.3-x64-mingw32)
racc (~> 1.4)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
@ -123,7 +123,7 @@ DEPENDENCIES
jekyll-paginate (= 1.1.0)
jekyll-sitemap (= 1.4.0)
jekyll-toc (= 0.17.1)
nokogiri (= 1.13.1)
nokogiri (= 1.13.3)
rake (= 13.0.6)
sass-globbing (= 1.1.5)
sassc (= 2.1.0)

View File

@ -292,6 +292,14 @@ automation:
The `for` template(s) will be evaluated when an entity changes as specified.
<div class='note warning'>
Use of the `for` option will not survive Home Assistant restart or the reload of automations. During restart or reload, automations that were awaiting `for` the trigger to pass, are reset.
If for your use case this is undesired, you could consider using the automation to set an [`input_datetime`](/integrations/input_datetime) to the desired time and then use that [`input_datetime`](/integrations/input_datetime) as an automation trigger to perform the desired actions at the set time.
</div>
## State trigger
Fires when the state of any of given entities changes. If only `entity_id` is given, the trigger will fire for all state changes, even if only state attributes change.
@ -449,6 +457,14 @@ Use quotes around your values for `from` and `to` to avoid the YAML parser from
</div>
<div class='note warning'>
Use of the `for` option will not survive Home Assistant restart or the reload of automations. During restart or reload, automations that were awaiting `for` the trigger to pass, are reset.
If for your use case this is undesired, you could consider using the automation to set an [`input_datetime`](/integrations/input_datetime) to the desired time and then use that [`input_datetime`](/integrations/input_datetime) as an automation trigger to perform the desired actions at the set time.
</div>
## Sun trigger
### Sunset / Sunrise trigger
@ -589,6 +605,14 @@ The `for` template(s) will be evaluated when the `value_template` becomes 'true'
Templates that do not contain an entity will be rendered once per minute.
<div class='note warning'>
Use of the `for` option will not survive Home Assistant restart or the reload of automations. During restart or reload, automations that were awaiting `for` the trigger to pass, are reset.
If for your use case this is undesired, you could consider using the automation to set an [`input_datetime`](/integrations/input_datetime) to the desired time and then use that [`input_datetime`](/integrations/input_datetime) as an automation trigger to perform the desired actions at the set time.
</div>
## Time trigger
The time trigger is configured to fire once a day at a specific time, or at a specific time on a specific date. There are three allowed formats:

View File

@ -7,36 +7,24 @@ The core of Home Assistant is the event bus. The event bus allows any integratio
Home Assistant contains a few built-in events that are used to coordinate between various integrations.
## Event `state_changed`
## Common fields
Event `state_changed` is fired when a state changes. Both `old_state` and `new_state` are state objects. [Documentation about state objects.](/topics/state_object/)
All events share these basic fields.
| Field | Description |
| ----------- | --------------------------------------------------------------------------------------------------- |
| `entity_id` | Entity ID of the changed entity. Example: `light.kitchen` |
| `old_state` | The previous state of the entity before it changed. This field is omitted if the entity is new. |
| `new_state` | The new state of the entity. This field is omitted if the entity is removed from the state machine. |
| Field | Description |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `event_type` | Type of the event. Example: `call_service`. |
| `origin` | Origin of the event. `REMOTE` (coming in from the API, e.g. a webhook) or `LOCAL` (everything else). |
| `time_fired` | When the event was fired. Example: `2022-01-28T12:19:53.736380+00:00`. |
| `context` | Dictionary with the [context](https://data.home-assistant.io/docs/context/). Example: `{ 'id': '123', "parent_id": null, 'user_id': 'abc'}`. |
## Event `time_changed`
In addition, all events contain a `data` dictionary with event-specific information. These are described below.
Event `time_changed` is fired every second by the timer and contains the current time.
## Built-in Events (core)
| Field | Description |
| ----- | ---------------------------------------------------------------------------------------------------------------------------- |
| `now` | A [datetime object](https://docs.python.org/3.4/library/datetime.html#datetime.datetime) containing the current time in UTC. |
### `call_service`
## Event `service_registered`
Event `service_registered` is fired when a new service has been registered within Home Assistant.
| Field | Description |
| --------- | ---------------------------------------- |
| `domain` | Domain of the service. Example: `light`. |
| `service` | The service to call. Example: `turn_on` |
## Event `call_service`
Event `call_service` is fired to call a service.
This event is fired when a service is called.
| Field | Description |
| ----------------- | ------------------------------------------------------------------------------ |
@ -45,29 +33,165 @@ Event `call_service` is fired to call a service.
| `service_data` | Dictionary with the service call parameters. Example: `{ 'brightness': 120 }`. |
| `service_call_id` | String with a unique call id. Example: `23123-4`. |
## Event `automation_reloaded`
### `component_loaded`
Event `automation_reloaded` is fired when automations have been reloaded and thus might have changed.
This event is fired when a new integration has been loaded and initialized.
This event has no additional data.
## Event `scene_reloaded`
Event `scene_reloaded` is fired when scenes have been reloaded and thus might have changed.
## Event `platform_discovered`
Event `platform_discovered` is fired when a new platform has been discovered by the [`discovery`](/integrations/discovery/) component.
| Field | Description |
| ------------ | ------------------------------------------------------------------------------------------------ |
| `service` | The platform that is discovered. Example: `zwave`. |
| `discovered` | Dictionary containing discovery information. Example: `{ "host": "192.168.1.10", "port": 8889}`. |
## Event `component_loaded`
Event `component_loaded` is fired when a new integration has been loaded and initialized.
Please note that while this event is fired for each loaded integration during Home Assistant startup, the automation engine of Home Assistant is started last. Thus this event can not be used to run automations during startup as it would have missed these events.
| Field | Description |
| ----------- | --------------------------------------------------------------------------- |
| `component` | Domain of the integration that has just been initialized. Example: `light`. |
### `core_config_updated`
This event is fired when the core configuration is updated, for example when the location has been changed.
It contains no additional data.
### `data_entry_flow_progressed`
This event is fired when a data entry flow has changed and is used by the frontend to reload the flow state.
| Field | Description |
| --------- | --------------------------- |
| `handler` | The flow handler. |
| `flow_id` | Identification of the flow. |
### `homeassistant_start`, `homeassistant_started`
These events are fired during the startup of Home Assistant, in the following order:
1. `homeassistant_start`
2. `homeassistant_started`
These events contain no additional data.
If you want to trigger automation on a Home Assistant start event, we recommend using the special [Home Assistant trigger](/docs/automation/trigger/#home-assistant-trigger) instead of listening to these events.
### `homeassistant_stop`, `homeassistant_final_write`, `homeassistant_close`
These events are fired during the shutdown of Home Assistant, in the following order:
1. `homeassistant_stop`
2. `homeassistant_final_write`
3. `homeassistant_close`
These events contain no additional data.
Please note that `homeassistant_final_write` and `homeassistant_close`, cannot be used with automations, as the automation engine would already have been stopped when those are fired.
If you want to trigger automation on a Home Assistant stop event, we recommend using the special [Home Assistant trigger](/docs/automation/trigger/#home-assistant-trigger) instead of listening to these events.
### `logbook_entry`
| Field | Description |
| ----------- | --------------------------------------------------- |
| `name` | Name of the entity. Example: `Litchen light`. |
| `message` | Message. Example: `was turned on` |
| `domain` | Optional, domain of the entry. Example: `light` |
| `entity_id` | Optional, identifier of the entity that was logged. |
### `service_registered`
This event is fired when a new service has been registered within Home Assistant.
| Field | Description |
| --------- | ----------------------------------------------------------------------- |
| `domain` | The domain of the component that offers this service. Example: `light`. |
| `service` | The name of the service. Example: `turn_on` |
### `service_removed`
This event is fired when a service has been removed from Home Assistant.
| Field | Description |
| --------- | ----------------------------------------------------------------------- |
| `domain` | The domain of the component that offers this service. Example: `light`. |
| `service` | The name of the service. Example: `turn_on` |
### `state_changed`
This event is fired when a state has changed. It contains the entity identifier and both the `new_state` and `old_state` of the entity as [state objects](/topics/state_object/).
| Field | Description |
| ----------- | --------------------------------------------------------------------------------------------------- |
| `entity_id` | Identifier of the entity that has changed. Example: `light.kitchen` |
| `old_state` | The previous state of the entity before it changed. Omitted if the state is set for the first time. |
| `new_state` | The new state of the entity. Omitted if the state has been removed. |
### `themes_updated`
This event is fired after a theme has been set or reloaded. It contains no additional data.
### `timer_out_of_sync`
This event is fired after `time_changed` if there was more that one second delay.
| Field | Description |
| --------- | --------------------- |
| `seconds` | The delay in seconds. |
### `time_changed`
This event is fired every second by the timer and contains the current time.
| Field | Description |
| ----- | -------------------------------------------------------------------------------------------------------------------------- |
| `now` | A [datetime object](https://docs.python.org/3/library/datetime.html#datetime.datetime) containing the current time in UTC. |
## `user_added`
This event is fired when a user has been added.
| Field | Description |
| --------- | ------------------------------- |
| `user_id` | Identification of the new user. |
## `user_removed`
This event is fired when a user has been removed.
| Field | Description |
| --------- | ----------------------------------- |
| `user_id` | Identification of the removed user. |
### Built-in events (default integrations)
## `automation_reloaded`
Integration: [`automation`](/integrations/automation/)
This event is fired when automations have been reloaded and thus might have changed.
This event contains no additional data.
## `automation_triggered`
Integration: [`automation`](/integrations/automation/)
This event is fired when an automation is triggered.
| Field | Description |
| ----------- | --------------------------------- |
| `name` | The name of the automation. |
| `entity_id` | The identifier of the automation. |
## `scene_reloaded`
Integration: [`homeassistant`](/integrations/homeassistant/)
This event is fired when scenes have been reloaded and thus might have changed.
This event contains no additional data.
## `script_started`
Integration: [`script`](/integrations/script/)
This event is fired when a script is run. A script can be invoked by a user or triggered by an automation. The resulting changes can be tracked because all related events will share the same context as this event.
| Field | Description |
| ----------- | -------------------------------------- |
| `name` | Name of the script that was run. |
| `entity_id` | Identifier of the script that was run. |

View File

@ -168,6 +168,39 @@ cover:
The configuration above shows that the `type` property may be omitted. When the ID starts with `newkaku`, the component will make sure that the on and off commands are inverted. When the ID does not start with `newkaku`, the on and off commands are not inverted.
## Setting up a non-RTS cover
Configure `automatic_add` for the light domain (yes, the light domain)
```yaml
# Example configuration.yaml entry
light:
- platform: rflink
automatic_add: true
```
When you press the remote buttons, a new light will show up in {% my entities title="the list of entities" %}.
Also you can enable rflink logs and look for the device_id, for example: `dooya_v4_654321_0f` or `brelmotor_3b35c7_47`.
```yaml
# Example configuration.yaml entry
logger:
logs:
rflink: debug
homeassistant.components.rflink: debug
```
Once the `device_id` is known, the light domain configuration can be removed and configure the device as a cover:
```yaml
# Example configuration.yaml entry
cover:
- platform: rflink
devices:
dooya_v4_654321_0f:
name: "Room blinds"
```
## Device support
See [device support](/integrations/rflink/#device-support).

View File

@ -28,6 +28,7 @@ Tested smart meters:
- DZG DWS76 (enable InF as described in manual to retrieve full data)
- Iskraemeco MT175 (ISKRA MT175-D2A51-V22-K0t)
- EMH metering eHZ Generation K (enable InF as described in manual to retrieve full data)
- efr SGM-C4 (enable InF as described in manual to retrieve full data)
## Configuration
@ -50,6 +51,21 @@ serial_port:
type: string
{% endconfiguration %}
## InF Mode
To enable InF mode there are different steps needed based on the meter type but most commonly you have to enter the PIN you received from your grid operator. Once you have it, enter it into the meter and switch to the InF menu where you can switch from InF=Off to InF=On.
Entering this can be done using a flashlight or (if available) via the physical button on the meter.
For the efr SGM-C4 it is:
- flashing three times to enter pin mode
- entering pin using quicker flashes, wait for 3 seconds for next digit
- pin accepted
- flashing 7 times to get to InF=OFF
- 5-second flash to switch to InF=OFF
You will now get more readings like current Power, Voltage, and phase angle. Some meters don´t have this, in that case only an overall reading is provided.
### ser2net
To use this integration with a remote transceiver you could use [ser2net](https://linux.die.net/man/8/ser2net).

View File

@ -74,6 +74,8 @@ automation:
trigger:
platform: event
event_type: feedreader
event_data:
feed_url: "https://hasspodcast.io/feed/podcast"
action:
service: persistent_notification.create
data:

View File

@ -138,11 +138,16 @@ The integration must be configured with a token for playback commands to work. T
##### Examples:
Play Hello from Adele's album 25 in the library Music
```yaml
entity_id: media_player.plex_player
media_content_type: MUSIC
media_content_id: '{ "library_name": "Music", "artist_name": "Adele", "album_name": "25", "track_name": "Hello" }'
```
Play a random track from Stevie Wonder in the library Music
```yaml
entity_id: media_player.plex_player
media_content_type: MUSIC
@ -158,6 +163,9 @@ media_content_id: '{ "library_name": "Music", "artist_name": "Stevie Wonder", "s
| `media_content_type` | `PLAYLIST` |
##### Example:
Plays the playlist The Best of Disco with shuffle enabled
```yaml
entity_id: media_player.plex_player
media_content_type: PLAYLIST
@ -174,15 +182,28 @@ media_content_id: '{ "playlist_name": "The Best of Disco", "shuffle": "1" }'
##### Examples:
Play Rick and Morty S2E5 from library Adult TV
```yaml
entity_id: media_player.plex_player
media_content_type: EPISODE
media_content_id: '{ "library_name": "Adult TV", "show_name": "Rick and Morty", "season_number": 2, "episode_number": 5 }'
```
Play a random episode of Sesame Street from the library Kids TV
```yaml
entity_id: media_player.plex_player
media_content_type: EPISODE
media_content_id: '{ "library_name": "Kid TV", "show_name": "Sesame Street", "shuffle": "1" }'
media_content_id: '{ "library_name": "Kids TV", "show_name": "Sesame Street", "shuffle": "1" }'
```
Play the next unfinished episode of 60 Minutes from the library News TV
```yaml
entity_id: media_player.plex_player
media_content_type: EPISODE
media_content_id: '{ "library_name": "News TV", "show_name": "60 Minutes", "episode.unwatched": true, "episode.inProgress": [true, false], "sort": "addedAt:asc", "maxresults": 1 }'
```
#### Movie
@ -195,6 +216,8 @@ media_content_id: '{ "library_name": "Kid TV", "show_name": "Sesame Street", "sh
##### Examples:
Play Blade from the library Adult Movies
```yaml
entity_id: media_player.plex_player
media_content_type: movie
@ -281,11 +304,16 @@ Call the `media_player.play_media` service with the `entity_id` of a Sonos integ
##### Examples:
Play a track with advanced filtering on a Sonos Speaker
```yaml
entity_id: media_player.sonos_speaker
media_content_type: music
media_content_id: 'plex://{ "library_name": "Music", "artist_name": "Adele", "album_name": "25", "track_name": "Hello" }'
```
Play a playlist on a Sonos Speaker
```yaml
entity_id: media_player.sonos_speaker
media_content_type: playlist

View File

@ -90,8 +90,8 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl
- Texas Instruments based radios (via the [zigpy-znp](https://github.com/zigpy/zigpy-znp) library for zigpy)
- [CC2652P/CC2652R/CC2652RB USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters)
- [CC1352P/CC1352R USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters)
- [CC2538 USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters)
- [CC2530/CC2531 USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) (not recommended for Zigbee networks with more than 20 devices)
- [CC2538 USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) (no longer recommended as only got deprecated old end-of-life firmware)
- [CC2530/CC2531 USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) (no longer recommended as uses deprecated hardware and very old end-of-life firmware, plus will not work properly at all if the whole Zigbee network has more than 15-20 devices)
- Digi XBee Zigbee based radios (via the [zigpy-xbee](https://github.com/zigpy/zigpy-xbee) library for zigpy)
- [Digi XBee Series 3 (xbee3-24)](https://www.digi.com/products/embedded-systems/digi-xbee/rf-modules/2-4-ghz-rf-modules/xbee3-zigbee-3) and [Digi XBee Series S2C](https://www.digi.com/products/embedded-systems/digi-xbee/rf-modules/2-4-ghz-rf-modules/xbee-zigbee) modules
- Note! While not a must, [it is recommend to upgrade XBee Series 3 and S2C to newest firmware using XCTU](https://www.digi.com/resources/documentation/Digidocs/90002002/Default.htm#Tasks/t_load_zb_firmware.htm)
@ -253,9 +253,13 @@ zha:
channels: [15, 20, 25] # Channel mask
```
This is a good reference for channel selection [Zigbee and Wifi Coexistance](https://support.metageek.com/hc/en-us/articles/203845040-ZigBee-and-WiFi-Coexistence).
This is a good reference for channel selection for [Zigbee and WiFi coexistance](https://support.metageek.com/hc/en-us/articles/203845040-ZigBee-and-WiFi-Coexistence).
Note that the recommendation is, however, not to change the Zigbee channel from default as not all Zigbee devices support all channels. If you have issues with overlapping frequencies, then it will generally be a better idea to change Wi-Fi channels on your Wi-Fi-router or Wi-Fi Access Points.
The Zigbee specification standards divide the 2.4Ghz ISM radio band into 16 Zigbee channels (i.e. distinct radio frequencies for Zigbee). For all Zigbee devices to be able to communicate, they must support the same Zigbee channel (i.e. Zigbee radio frequency) that is set on the Zigbee Coordinator as the channel to use for its Zigbee network. Not all Zigbee devices support all Zigbee channels, it will usually depend on the hardware and firmware age as well as devices power ratings.
The general recommendation is to only use channels 15, 20, or 25 in order to avoid interoperability problems with Zigbee devices that are limited to only being compatible with the ZLL (Zigbee Light Link) channels as well as lessen the chance of Wi-Fi networks interfering too much with the Zigbee network. Note that especially using Zigbee channels 11, 24, 25, or 26 on your Zigbee Coordinator could mean it will probably not be accessible to older devices as those Zigbee channels are commonly only supported by relatively modern Zigbee hardware devices with newer Zigbee firmware.
Regardless, note that the best practice recommendation is, however, not to change the Zigbee channel from default as not all Zigbee devices support all channels. If you have issues with overlapping frequencies, then it will generally be a better idea to just change Wi-Fi channels on your Wi-Fi Router or all your Wi-Fi Access Points instead.
### Modifying the device type

View File

@ -88,7 +88,7 @@ description: "The Home Assistant contributor license agreement (CLA) signature p
<script src="https://cdnjs.cloudflare.com/ajax/libs/spin.js/2.3.2/spin.min.js" integrity="sha256-PieqE0QdEDMppwXrTzSZQr6tWFX3W5KkyRVyF1zN3eg=" crossorigin="anonymous"></script>
<script type="text/javascript">
// Countries
var country_arr = new Array("Afghanistan", "Albania", "Algeria", "American Samoa", "Angola", "Anguilla", "Antartica", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Ashmore and Cartier Island", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burma", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Christmas Island", "Clipperton Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo, Democratic Republic of the", "Congo, Republic of the", "Cook Islands", "Costa Rica", "Cote d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czechia", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Europa Island", "Falkland Islands (Islas Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "French Guiana", "French Polynesia", "French Southern and Antarctic Lands", "Gabon", "Gambia, The", "Gaza Strip", "Georgia", "Germany", "Ghana", "Gibraltar", "Glorioso Islands", "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guernsey", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Heard Island and McDonald Islands", "Holy See (Vatican City)", "Honduras", "Hong Kong", "Howland Island", "Hungary", "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Ireland, Northern", "Israel", "Italy", "Jamaica", "Jan Mayen", "Japan", "Jarvis Island", "Jersey", "Johnston Atoll", "Jordan", "Juan de Nova Island", "Kazakhstan", "Kenya", "Kiribati", "Korea, North", "Korea, South", "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macau", "Macedonia, Former Yugoslav Republic of", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Man, Isle of", "Marshall Islands", "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia, Federated States of", "Midway Islands", "Moldova", "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Namibia", "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcaim Islands", "Poland", "Portugal", "Puerto Rico", "Qatar", "Reunion", "Romania", "Russia", "Rwanda", "Saint Helena", "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon", "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Scotland", "Senegal", "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Georgia and South Sandwich Islands", "Spain", "Spratly Islands", "Sri Lanka", "Sudan", "Suriname", "Svalbard", "Swaziland", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Tobago", "Toga", "Tokelau", "Tonga", "Trinidad", "Tunisia", "Turkey", "Turkmenistan", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "Uruguay", "United States of America", "Uzbekistan", "Vanuatu", "Venezuela", "Vietnam", "Virgin Islands", "Wales", "Wallis and Futuna", "West Bank", "Western Sahara", "Yemen", "Yugoslavia", "Zambia", "Zimbabwe");
var country_arr = new Array("Afghanistan", "Albania", "Algeria", "American Samoa", "Angola", "Anguilla", "Antartica", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Ashmore and Cartier Island", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burma", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Christmas Island", "Clipperton Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo, Democratic Republic of the", "Congo, Republic of the", "Cook Islands", "Costa Rica", "Cote d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czechia", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Europa Island", "Falkland Islands (Islas Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "French Guiana", "French Polynesia", "French Southern and Antarctic Lands", "Gabon", "Gambia, The", "Gaza Strip", "Georgia", "Germany", "Ghana", "Gibraltar", "Glorioso Islands", "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guernsey", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Heard Island and McDonald Islands", "Holy See (Vatican City)", "Honduras", "Hong Kong", "Howland Island", "Hungary", "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Ireland, Northern", "Israel", "Italy", "Jamaica", "Jan Mayen", "Japan", "Jarvis Island", "Jersey", "Johnston Atoll", "Jordan", "Juan de Nova Island", "Kazakhstan", "Kenya", "Kiribati", "Korea, North", "Korea, South", "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macau", "Macedonia, Former Yugoslav Republic of", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Man, Isle of", "Marshall Islands", "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia, Federated States of", "Midway Islands", "Moldova", "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Namibia", "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar", "Reunion", "Romania", "Russia", "Rwanda", "Saint Helena", "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon", "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Scotland", "Senegal", "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Georgia and South Sandwich Islands", "Spain", "Spratly Islands", "Sri Lanka", "Sudan", "Suriname", "Svalbard", "Swaziland", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Tobago", "Togo", "Tokelau", "Tonga", "Trinidad", "Tunisia", "Turkey", "Turkmenistan", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "Uruguay", "United States of America", "Uzbekistan", "Vanuatu", "Venezuela", "Vietnam", "Virgin Islands", "Wales", "Wallis and Futuna", "West Bank", "Western Sahara", "Yemen", "Yugoslavia", "Zambia", "Zimbabwe");
// States
var s_a = new Array();