This works very well, thanks for writing this down!
Thanks! I was also looking for an option to show my public IP. The sensor option works verry well for this.
But what I don’t understand, you have also mentioned the “group” config, what does it do?
Because I’m already able to show the public IP with a sensor card in lovelace with only the Sensor config.
I’m just trying to understand were the group config is for and what it does
Thanks already!
That post is from 2 years ago, the old ui used to present groups as cards.
Thanks for your answer!
JUst tried to understand, but this seems clear. So no use of configuring the “group” settings into Lovelace now I guess.
I wanted to see an IP on my dashboard.
So I added a cronjob on my server:
*/5 * * * * echo "<html><head><meta name="color-scheme" content="dark light"></head><body style=\"text-align:center;\">$(curl https://ipinfo.io/ip)<BR><BR>Updated at:<BR><BR>$(date)</body></html>" > /home/${USER}/has/www/1.html
And added a webpage card to the dashboard:
- type: iframe
title: IP
url: /local/1.html
aspect_ratio: 46%
So I can see it as:
The only issue, is that I need to clean browser cache to see a change immidiately.
There has some changes in HA now it’s not calles dnsip it generates myip instead
sensor:
- platform: myip
automation:
alias: Notify when external ip changes
initial_state: on
trigger:
platform: state
entity_id: sensor.myip
action:
service: notify.YOU
data_template:
message: "New external IP address is {{ states('sensor.myip') }}"
Will that really work?
When the IP changes the phones connection to HA is lost and therefore this message wont be received?
Or is there something I’m not understanding here?
You could Email the new IP but using notifications won’t work (at least when you are not home)
Looks like platform: dnsip still works for me as of Core version 12.10. Where is this change documented?
If you use current integration on default it is myip.
See in the source https://github.com/home-assistant/core/blob/12a7b64e64e0068241dfd284ea65202e7c3b59fb/homeassistant/components/dnsip/const.py
Everything else is History. And current core is core-2022.3.1
No if u use the app you are using firebase API from google and there is no need of IP knowing, everything is based on the Firebase PUSH Token
stupid question but where do you paste this in? configuration.yaml or automations.yaml? Thanks
I am getting a duplicate key error when I paste into configuration.yaml
group: !include groups.yaml
automation: !include automations.yaml #i get a duplicate key error here
script: !include scripts.yaml
scene: !include scenes.yaml
I don’t think you need to make any YAML changes:
I logged in to like you. It is very useful.
I have a similar issue where DNS IP won’t work and that is if my DDNS update has failed and I got a new IP address from my ISP. In that case, asking a DNS is futile. I would recommend this instead:
- platform: rest
name: External Ip
resource: http://ip.jsontest.com
value_template: "{{ value_json.ip }}"
Like many others, I could not get the DNSIP integration to work with the default myip.opendns.com
config and had to resort to using YOUR_SUBDOMAIN.duckdns.org
But while this worked, I think relying on a DNS resolver could potentially cause problems or delays with a dynamic IP address, so I think the RESTful integration external IP sensor will be more reliable since it gets the IP address directly, no need to wait for any DNS propagation or update.
So just add this to configuration.yaml and remember a full HA restart is required, not just a YAML reload:
sensor:
- platform: rest
scan_interval: 300
resource: http://ip.jsontest.com
name: External IP
value_template: "{{ value_json.ip }}"
Note that the default scan_interval
for the RESTful sensor is 30 seconds which seems excessive and would put unnecessary load on the jsontest.com servers who are kindly offering this public service, hence why I changed it to 5 minutes.
Now, to do something useful with the Extenal IP address I’ve created an automation to send a notification and to force an update for DuckDNS:
alias: IP Change
trigger:
- platform: state
entity_id:
- sensor.external_ip
condition: []
action:
# Updated the IP address for DuckDNS
- service: rest_command.duckdns_update
data: {}
# Send a notification to all mobile devices
- service: notify.all_devices
metadata: {}
data:
message: New external IP address is {{ states('sensor.external_ip') }}
data:
actions:
- action: URI
title: Check external access works
uri: https://YOUR_SUBDOMAIN.duckdns.org
importance: high
ledColor: red
mode: single
If you get many false positive alerts, then try a condition like this
And for the notify actions to work, add this to configuration.yaml
rest_command:
duckdns_update:
url: "https://duckdns.org/update/{YOURDOMAIN}/{YOURTOKEN}"
notify:
- name: all_devices
platform: group
services:
- service: mobile_app_first_device_name
- service: mobile_app_second_device_name
This hopefully gives you a bit more context on how you could use this
Just as an FYI, if you have both IPv4 and IPv6, the ip.jsontest.com may flip flop between the two in the result, as it supports both. Which could cause false positives to there being a change. So it may receive one or the other. So if you have email notifications setup when there is a change, you’ll start getting tons of emails everyday.
So, as an alternative, you can change that to ipv4.jsontest.com
Unfortunately http://ip.jsontest.com no longer works, it has been down for at least a couple of days.
To fix this, you can change the resource URL to https://api.ipify.org?format=json
sensor:
- platform: rest
scan_interval: 3600
name: External IP
unique_id: external_ip
resource: https://api.ipify.org?format=json
value_template: "{{ value_json.ip }}"
Looks like https://api.ipify.org?format=json might be down as well. I moved my resource to https://www.l2.io/ip.json for now.
Alternatively, heres’s a more reliable resource from a major internet infrastructure provider which will likely have a high degree of availability: radar.cloudflare.com/ip
API endpoint: https://ipv4-check-perf.radar.cloudflare.com/api/info
Sensor should look like:
sensor:
- platform: rest
scan_interval: 3600
name: External IP
unique_id: external_ip
resource: https://ipv4-check-perf.radar.cloudflare.com/api/info
value_template: "{{ value_json.ip_address }}"