diff --git a/.ruby-version b/.ruby-version index 585940699b5..2bf1c1ccf36 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.2.3 +2.3.1 diff --git a/.travis.yml b/.travis.yml index 638b0c53704..caf5d019fa8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,4 @@ sudo: false cache: bundler script: rake generate after_success: -- '[ "${TRAVIS_BRANCH}" = "master" ] && [ "${TRAVIS_PULL_REQUEST}" = "false" ] && rake deploy || false' -env: - global: - secure: RgYtd9+qY3kBrDbAqSGszBEiZIalPzSd72a0w4zyG1FX4B/xA9ilqH1mLaBbjNsuwsDIfW6D4Vupec8Uh/eBtLKAt05pdZ70WiP9TYg1QRQS9k5epaqbOvxFzIzQO4Mcz1dT0tuMJ9c0H9VXUjFJVtCG17vkPpK3qHkYW0GAxqE= +- '[ "${TRAVIS_BRANCH}" = "current" ] && [ "${TRAVIS_PULL_REQUEST}" = "false" ] && rake deploy || false' diff --git a/Gemfile b/Gemfile index 85457e9947c..7c767a72f86 100644 --- a/Gemfile +++ b/Gemfile @@ -5,13 +5,13 @@ group :development do gem 'jekyll', '~> 3.0' gem 'pygments.rb', '~> 0.6.3' gem 'rdiscount', '~> 2.0' - gem 'RedCloth', '~> 4.2.9' + gem 'RedCloth', '~> 4.2' gem 'haml', '~> 4.0' - gem 'compass', '~> 0.12.2' - gem 'sass-globbing', '~> 1.0.0' - gem 'rubypants', '~> 0.2.0' + gem 'compass', '~> 0.12' + gem 'sass-globbing', '~> 1.0' + gem 'rubypants', '~> 0.2' gem 'rb-fsevent', '~> 0.9' - gem 'stringex', '~> 1.4.0' + gem 'stringex', '~> 1.4' gem 'execjs' gem 'therubyracer', :platforms => :ruby gem 'coderay' diff --git a/Gemfile.lock b/Gemfile.lock index 548a411f9e0..a3056e867c4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,43 +1,47 @@ GEM remote: https://rubygems.org/ specs: - RedCloth (4.2.9) - chunky_png (1.3.5) - coderay (1.1.0) - colorator (0.1) + RedCloth (4.3.2) + addressable (2.4.0) + chunky_png (1.3.6) + coderay (1.1.1) + colorator (1.1.0) compass (0.12.7) chunky_png (~> 1.2) fssm (>= 0.2.7) sass (~> 3.2.19) - execjs (2.6.0) - ffi (1.9.10) + execjs (2.7.0) + ffi (1.9.14) + forwardable-extended (2.6.0) fssm (0.2.10) haml (4.0.7) tilt - jekyll (3.0.0) - colorator (~> 0.1) + jekyll (3.2.1) + colorator (~> 1.0) jekyll-sass-converter (~> 1.0) jekyll-watch (~> 1.1) kramdown (~> 1.3) liquid (~> 3.0) mercenary (~> 0.3.3) + pathutil (~> 0.9) rouge (~> 1.7) safe_yaml (~> 1.0) jekyll-paginate (1.1.0) jekyll-sass-converter (1.3.0) sass (~> 3.2) - jekyll-sitemap (0.9.0) - jekyll-time-to-read (0.1.1) + jekyll-sitemap (0.11.0) + addressable (~> 2.4.0) + jekyll-time-to-read (0.1.2) jekyll - jekyll-watch (1.3.0) - listen (~> 3.0) - kramdown (1.9.0) + jekyll-watch (1.5.0) + listen (~> 3.0, < 3.1) + kramdown (1.12.0) libv8 (3.16.14.15) liquid (3.0.6) - listen (3.0.3) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - mercenary (0.3.5) + listen (3.0.8) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + mercenary (0.3.6) method_source (0.8.2) octopress (3.0.11) jekyll (>= 2.0) @@ -49,8 +53,8 @@ GEM titlecase octopress-deploy (1.3.0) colorator - octopress-escape-code (2.0.6) - octopress-hooks (~> 2.0) + octopress-escape-code (2.1.1) + jekyll (~> 3.0) octopress-filters (1.4.0) jekyll octopress-hooks (~> 2.0) @@ -63,8 +67,10 @@ GEM octopress-tag-helpers (~> 1.0) octopress-tag-helpers (1.0.8) jekyll (>= 2.0) + pathutil (0.14.0) + forwardable-extended (~> 2.6) posix-spawn (0.3.11) - pry (0.10.3) + pry (0.10.4) coderay (~> 1.1.0) method_source (~> 0.8.1) slop (~> 3.4) @@ -74,30 +80,30 @@ GEM rack (1.6.4) rack-protection (1.5.3) rack - rake (10.4.2) - rb-fsevent (0.9.6) - rb-inotify (0.9.5) + rake (10.5.0) + rb-fsevent (0.9.7) + rb-inotify (0.9.7) ffi (>= 0.5.0) - rdiscount (2.1.8) - redcarpet (3.3.3) + rdiscount (2.2.0.1) + redcarpet (3.3.4) ref (2.0.0) - rouge (1.10.1) - rubypants (0.2.0) + rouge (1.11.1) + rubypants (0.5.0) rubypants-unicode (0.2.5) safe_yaml (1.0.4) sass (3.2.19) - sass-globbing (1.0.0) + sass-globbing (1.1.5) sass (>= 3.1) - sinatra (1.4.6) - rack (~> 1.4) + sinatra (1.4.7) + rack (~> 1.5) rack-protection (~> 1.4) tilt (>= 1.3, < 3) slop (3.6.0) - stringex (1.4.0) + stringex (1.5.1) therubyracer (0.12.2) libv8 (~> 3.16.14.0) ref - tilt (2.0.1) + tilt (2.0.5) titlecase (0.1.1) yajl-ruby (1.2.1) @@ -105,9 +111,9 @@ PLATFORMS ruby DEPENDENCIES - RedCloth (~> 4.2.9) + RedCloth (~> 4.2) coderay - compass (~> 0.12.2) + compass (~> 0.12) execjs haml (~> 4.0) jekyll (~> 3.0) @@ -122,10 +128,10 @@ DEPENDENCIES rake (~> 10.0) rb-fsevent (~> 0.9) rdiscount (~> 2.0) - rubypants (~> 0.2.0) - sass-globbing (~> 1.0.0) + rubypants (~> 0.2) + sass-globbing (~> 1.0) sinatra (~> 1.4.2) - stringex (~> 1.4.0) + stringex (~> 1.4) therubyracer BUNDLED WITH diff --git a/_config.yml b/_config.yml index f06f05711b6..6ddce8a5d27 100644 --- a/_config.yml +++ b/_config.yml @@ -35,6 +35,8 @@ category_dir: blog/categories markdown: kramdown timezone: UTC +# highlighter: coderay + kramdown: input: GFM auto_ids: false @@ -43,15 +45,32 @@ kramdown: toc_levels: 1..6 smart_quotes: lsquo,rsquo,ldquo,rdquo parse_block_html: true - enable_coderay: true - coderay: - coderay_wrap: div - coderay_line_numbers: nil - coderay_line_number_start: 1 - coderay_tab_width: 4 - coderay_bold_every: 10 - coderay_css: class + # enable_coderay: true + + # coderay: + # coderay_wrap: div + # coderay_line_numbers: nil + # coderay_line_number_start: 1 + # coderay_tab_width: 4 + # coderay_bold_every: 10 + # coderay_css: class + +# syntax_highlighter_opts: +# wrap: div +# line_numbers: nil +# line_number_start: 1 +# tab_width: 4 +# bold_every: 10 +# css: class + + # block: + # wrap: div + # line_numbers: nil + # line_number_start: 1 + # tab_width: 4 + # bold_every: 10 + # css: class highlighter: rouge diff --git a/_deploy b/_deploy index 3633483305b..69146ecaf4d 160000 --- a/_deploy +++ b/_deploy @@ -1 +1 @@ -Subproject commit 3633483305bb092ff72024ac1b59e66f7c1aacc0 +Subproject commit 69146ecaf4d31902ab9ea0a4e6c9f3985d99e808 diff --git a/generate-redirect.py b/generate-redirect.py deleted file mode 100644 index 617ed8e922c..00000000000 --- a/generate-redirect.py +++ /dev/null @@ -1,163 +0,0 @@ -import os - -dirs = ['components', 'getting-started', 'developers'] - -template = "" - -for check_dir in dirs: - for path in os.listdir(os.path.join('public', check_dir)): - check_path = os.path.join('public', check_dir, path) - - if os.path.isdir(check_path): - new_path = os.path.join('source', check_dir, "{}.html".format(path)) - # print(template.format(check_dir, path)) - # print(new_path) - with open(new_path, 'w') as outp: - outp.write(template.format(check_dir, path)) - -# Generated -# source/components/alarm_control_panel.html -# source/components/alarm_control_panel.manual.html -# source/components/alarm_control_panel.mqtt.html -# source/components/arduino.html -# source/components/automation.html -# source/components/browser.html -# source/components/camera.foscam.html -# source/components/camera.generic.html -# source/components/configurator.html -# source/components/conversation.html -# source/components/device_sun_light_trigger.html -# source/components/device_tracker.html -# source/components/device_tracker.actiontec.html -# source/components/device_tracker.aruba.html -# source/components/device_tracker.asuswrt.html -# source/components/device_tracker.ddwrt.html -# source/components/device_tracker.geofancy.html -# source/components/device_tracker.luci.html -# source/components/device_tracker.mqtt.html -# source/components/device_tracker.netgear.html -# source/components/device_tracker.nmap_scanner.html -# source/components/device_tracker.owntracks.html -# source/components/device_tracker.snmp.html -# source/components/device_tracker.thomson.html -# source/components/device_tracker.tomato.html -# source/components/device_tracker.tplink.html -# source/components/device_tracker.ubus.html -# source/components/discovery.html -# source/components/downloader.html -# source/components/group.html -# source/components/history.html -# source/components/ifttt.html -# source/components/ifttt.manything.html -# source/components/introduction.html -# source/components/isy994.html -# source/components/keyboard.html -# source/components/light.html -# source/components/light.blinksticklight.html -# source/components/light.hue.html -# source/components/light.hyperion.html -# source/components/light.limitlessled.html -# source/components/light.rfxtrx.html -# source/components/light.tellstick.html -# source/components/light.vera.html -# source/components/light.wink.html -# source/components/logbook.html -# source/components/media_player.html -# source/components/media_player.cast.html -# source/components/media_player.denon.html -# source/components/media_player.firetv.html -# source/components/media_player.itunes.html -# source/components/media_player.kodi.html -# source/components/media_player.mpd.html -# source/components/media_player.plex.html -# source/components/media_player.sonos.html -# source/components/media_player.squeezebox.html -# source/components/modbus.html -# source/components/mqtt.html -# source/components/notify.html -# source/components/notify.file.html -# source/components/notify.instapush.html -# source/components/notify.nma.html -# source/components/notify.pushbullet.html -# source/components/notify.pushover.html -# source/components/notify.slack.html -# source/components/notify.smtp.html -# source/components/notify.syslog.html -# source/components/notify.telegram.html -# source/components/notify.xmpp.html -# source/components/rfxtrx.html -# source/components/scene.html -# source/components/script.html -# source/components/sensor.html -# source/components/sensor.arduino.html -# source/components/sensor.arest.html -# source/components/sensor.bitcoin.html -# source/components/sensor.command_sensor.html -# source/components/sensor.cpuspeed.html -# source/components/sensor.dht.html -# source/components/sensor.efergy.html -# source/components/sensor.forecast.html -# source/components/sensor.glances.html -# source/components/sensor.modbus.html -# source/components/sensor.mqtt.html -# source/components/sensor.mysensors.html -# source/components/sensor.openweathermap.html -# source/components/sensor.rest.html -# source/components/sensor.rfxtrx.html -# source/components/sensor.rpi_gpio.html -# source/components/sensor.sabnzbd.html -# source/components/sensor.swiss_public_transport.html -# source/components/sensor.systemmonitor.html -# source/components/sensor.tellstick.html -# source/components/sensor.temper.html -# source/components/sensor.time_date.html -# source/components/sensor.transmission.html -# source/components/sensor.vera.html -# source/components/sensor.wink.html -# source/components/sensor.worldclock.html -# source/components/shell_command.html -# source/components/simple_alarm.html -# source/components/sun.html -# source/components/switch.html -# source/components/switch.arduino.html -# source/components/switch.arest.html -# source/components/switch.command_switch.html -# source/components/switch.edimax.html -# source/components/switch.hikvision.html -# source/components/switch.modbus.html -# source/components/switch.mqtt.html -# source/components/switch.rest.html -# source/components/switch.rfxtrx.html -# source/components/switch.rpi_gpio.html -# source/components/switch.tellstick.html -# source/components/switch.transmission.html -# source/components/switch.vera.html -# source/components/switch.wemo.html -# source/components/switch.wink.html -# source/components/tellstick.html -# source/components/thermostat.html -# source/components/thermostat.heat_control.html -# source/components/thermostat.nest.html -# source/components/thermostat.radiotherm.html -# source/components/vera.html -# source/components/verisure.html -# source/components/wink.html -# source/components/zone.html -# source/components/zwave.html -# source/getting-started/android.html -# source/getting-started/automation.html -# source/getting-started/autostart.html -# source/getting-started/configuration.html -# source/getting-started/devices.html -# source/getting-started/presence-detection.html -# source/getting-started/troubleshooting.html -# source/getting-started/troubleshooting-configuration.html -# source/developers/add_new_platform.html -# source/developers/api.html -# source/developers/architecture.html -# source/developers/creating_components.html -# source/developers/credits.html -# source/developers/frontend.html -# source/developers/python_api.html -# source/developers/rest_api.html -# source/developers/website.html diff --git a/sass/custom/_coderay.scss b/sass/custom/_coderay.scss deleted file mode 100644 index a3417c31bec..00000000000 --- a/sass/custom/_coderay.scss +++ /dev/null @@ -1,144 +0,0 @@ -code { - background: #fff; - font-size: .8em; - line-height: 1.5em; - color: #555; - border: 1px solid #ddd; - @include border-radius(.4em); - padding: 0 .3em; -} - -.CodeRay { - background-color: #FFF; - border: 1px solid #CCC; - font-family: Monaco, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace; - color: #000; - padding: 1em 0px 1em 1em; - font-size: 12px; - margin-bottom: 16px; -} - -.CodeRay pre { - margin: 0px; -} - -div.CodeRay { } -span.CodeRay { white-space: pre; border: 0px; padding: 2px } - -table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px } -table.CodeRay td { - padding: 1em 0.5em; - vertical-align: top; -} - -.CodeRay .line-numbers, .CodeRay .no { - background-color: #ECECEC; - color: #AAA; - text-align: right; -} - -.CodeRay .line-numbers a { - color: #AAA; -} - -.CodeRay .line-numbers tt { font-weight: bold } -.CodeRay .line-numbers .highlighted { color: red } -.CodeRay .line { display: block; float: left; width: 100%; } -.CodeRay span.line-numbers { padding: 0px 4px } -.CodeRay .code { width: 100% } - -ol.CodeRay { font-size: 10pt } -ol.CodeRay li { white-space: pre } - -.CodeRay .code pre { overflow: auto } -.CodeRay .debug { color:white ! important; background:blue ! important; } - -.CodeRay .annotation { color:#007 } -.CodeRay .attribute-name { color:#f08 } -.CodeRay .attribute-value { color:#700 } -.CodeRay .binary { color:#509; font-weight:bold } -.CodeRay .comment { color:#998; font-style: italic;} -.CodeRay .char { color:#04D } -.CodeRay .char .content { color:#04D } -.CodeRay .char .delimiter { color:#039 } -.CodeRay .class { color:#458; font-weight:bold } -.CodeRay .complex { color:#A08; font-weight:bold } -.CodeRay .constant { color:teal; } -.CodeRay .color { color:#0A0 } -.CodeRay .class-variable { color:#369 } -.CodeRay .decorator { color:#B0B; } -.CodeRay .definition { color:#099; font-weight:bold } -.CodeRay .directive { color:#088; font-weight:bold } -.CodeRay .delimiter { color:black } -.CodeRay .doc { color:#970 } -.CodeRay .doctype { color:#34b } -.CodeRay .doc-string { color:#D42; font-weight:bold } -.CodeRay .escape { color:#666; font-weight:bold } -.CodeRay .entity { color:#800; font-weight:bold } -.CodeRay .error { color:#F00; background-color:#FAA } -.CodeRay .exception { color:#C00; font-weight:bold } -.CodeRay .filename { color:#099; } -.CodeRay .function { color:#900; font-weight:bold } -.CodeRay .global-variable { color:teal; font-weight:bold } -.CodeRay .hex { color:#058; font-weight:bold } -.CodeRay .integer { color:#099; } -.CodeRay .include { color:#B44; font-weight:bold } -.CodeRay .inline { color: black } -.CodeRay .inline .inline { background: #ccc } -.CodeRay .inline .inline .inline { background: #bbb } -.CodeRay .inline .inline-delimiter { color: #D14; } -.CodeRay .inline-delimiter { color: #D14; } -.CodeRay .important { color:#f00; } -.CodeRay .interpreted { color:#B2B; font-weight:bold } -.CodeRay .instance-variable { color:teal } -.CodeRay .label { color:#970; font-weight:bold } -.CodeRay .local-variable { color:#963 } -.CodeRay .octal { color:#40E; font-weight:bold } -.CodeRay .operator { } -.CodeRay .predefined-constant { font-weight:bold } -.CodeRay .predefined { color:#369; font-weight:bold } -.CodeRay .preprocessor { color:#579; } -.CodeRay .pseudo-class { color:#00C; font-weight:bold } -.CodeRay .predefined-type { color:#074; font-weight:bold } -.CodeRay .reserved, .keyword { color:#000; font-weight:bold } - -.CodeRay .key { color: #808; } -.CodeRay .key .delimiter { color: #606; } -.CodeRay .key .char { color: #80f; } -.CodeRay .value { color: #088; } - -.CodeRay .regexp { background-color:#fff0ff } -.CodeRay .regexp .content { color:#808 } -.CodeRay .regexp .delimiter { color:#404 } -.CodeRay .regexp .modifier { color:#C2C } -.CodeRay .regexp .function { color:#404; font-weight: bold } - -.CodeRay .string { color: #D20; } -.CodeRay .string .string { } -.CodeRay .string .string .string { background-color:#ffd0d0 } -.CodeRay .string .content { color: #D14; } -.CodeRay .string .char { color: #D14; } -.CodeRay .string .delimiter { color: #D14; } - -.CodeRay .shell { color:#D14 } -.CodeRay .shell .content { } -.CodeRay .shell .delimiter { color:#D14 } - -.CodeRay .symbol { color:#990073 } -.CodeRay .symbol .content { color:#A60 } -.CodeRay .symbol .delimiter { color:#630 } - -.CodeRay .tag { color:#070 } -.CodeRay .tag-special { color:#D70; font-weight:bold } -.CodeRay .type { color:#339; font-weight:bold } -.CodeRay .variable { color:#036 } - -.CodeRay .insert { background: #afa; } -.CodeRay .delete { background: #faa; } -.CodeRay .change { color: #aaf; background: #007; } -.CodeRay .head { color: #f8f; background: #505 } - -.CodeRay .insert .insert { color: #080; font-weight:bold } -.CodeRay .delete .delete { color: #800; font-weight:bold } -.CodeRay .change .change { color: #66f; } -.CodeRay .head .head { color: #f4f; } \ No newline at end of file diff --git a/sass/custom/_paulus.scss b/sass/custom/_paulus.scss index 6a903ef4389..c070e2cb0ac 100644 --- a/sass/custom/_paulus.scss +++ b/sass/custom/_paulus.scss @@ -124,9 +124,12 @@ h6:hover a.title-link { &::before { position: absolute; - left: -50px; + top: 2px; + left: -25px; padding-right: 40px; font-family: "FontAwesome"; + font-size: 15px; + color: #999; content: "\f0c1" } } @@ -164,6 +167,9 @@ h6:hover a.title-link { } article.post, article.page, article.listing { + font-size: 1.125em; + line-height: 1.6; + img, table { border-radius: 3px; box-shadow: rgba(0,0,0,0.06) 0 0 10px; @@ -214,9 +220,25 @@ article.post, article.page, article.listing { } } - h1, h2, h3 { - margin-bottom: 4px; - line-height: 1.2; + h1 { + + } + + h2 { + font-size: 1.5em; + margin-top: 2em; + } + + h3 { + text-transform: uppercase; + letter-spacing: 0.125rem; + font-size: 1.2rem; + margin-top: 2em; + } + + h4 { + font-size: 1.1rem; + margin-top: 2em; } } diff --git a/sass/custom/_syntax.scss b/sass/custom/_syntax.scss new file mode 100644 index 00000000000..2d100df2851 --- /dev/null +++ b/sass/custom/_syntax.scss @@ -0,0 +1,83 @@ +/* https://github.com/richleland/pygments-css/blob/master/github.css */ + +code.highlighter-rouge { + background: #fff; + font-size: .8em; + line-height: 1.5em; + color: #555; + border: 1px solid #ddd; + -webkit-border-radius: 0.4em; + -moz-border-radius: 0.4em; + border-radius: 0.4em; + padding: 0 .3em; +} + +.highlight { + background-color: #FFF; + border: 1px solid #CCC; + font-family: "Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace; + color: #000; + padding: 1em 0px 1em 1em; + font-size: 15px; +} +.highlight .hll { background-color: #ffffcc } +.highlight .c { color: #999988; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { color: #000000; font-weight: bold } /* Keyword */ +.highlight .o { color: #000000; font-weight: bold } /* Operator */ +.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #999999; font-weight: bold; font-style: italic } /* Comment.Preproc */ +.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #999999 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { color: #000000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #000000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #000000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #000000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #009999 } /* Literal.Number */ +.highlight .s { color: #d01040 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086B3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #800080 } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #990000; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #555555 } /* Name.Namespace */ +.highlight .nt { color: #000080 } /* Name.Tag */ +.highlight .nv { color: #008080 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sb { color: #d01040 } /* Literal.String.Backtick */ +.highlight .sc { color: #d01040 } /* Literal.String.Char */ +.highlight .sd { color: #d01040 } /* Literal.String.Doc */ +.highlight .s2 { color: #d01040 } /* Literal.String.Double */ +.highlight .se { color: #d01040 } /* Literal.String.Escape */ +.highlight .sh { color: #d01040 } /* Literal.String.Heredoc */ +.highlight .si { color: #d01040 } /* Literal.String.Interpol */ +.highlight .sx { color: #d01040 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #d01040 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #008080 } /* Name.Variable.Class */ +.highlight .vg { color: #008080 } /* Name.Variable.Global */ +.highlight .vi { color: #008080 } /* Name.Variable.Instance */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ diff --git a/sass/screen.scss b/sass/screen.scss index 0e8bb2c8e1f..c3145e5c4c7 100644 --- a/sass/screen.scss +++ b/sass/screen.scss @@ -1,3 +1,3 @@ @import 'oscailte/oscailte'; @import 'custom/paulus'; -@import 'custom/coderay'; +@import 'custom/syntax'; diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index 65ddc60f870..de63e935db5 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -20,7 +20,7 @@ Amazon has released [Echosim], a website that simulates the Alexa service in you [Echosim]: https://echosim.io/ -### {% linkable_title I just want to turn devices on and off using Echo %} +## {% linkable_title I just want to turn devices on and off using Echo %} If you just want to be able to turn anything with a switch (like lights, switches, media players, etc) on and off, check out Michael Auchter's [Haaska][haaska-github-link] which integrates the [Alexa Lighting API][alexa-lighting-api] into Home Assistant. @@ -47,7 +47,7 @@ In addition, you would need to build custom intents for each device and on/off c Please note that you can use Haaska and the built-in Alexa component side-by-side without issue if you wish. -### {% linkable_title I want to build custom commands to use with Echo %} +## {% linkable_title I want to build custom commands to use with Echo %} The built-in Alexa component allows you to integrate Home Assistant into Alexa/Amazon Echo. This component will allow you to query information and call services within Home Assistant by using your voice. Home Assistant offers no built-in sentences but offers a framework for you to define your own. @@ -55,7 +55,8 @@ The built-in Alexa component allows you to integrate Home Assistant into Alexa/A -#### {% linkable_title Requirements before using %} +### {% linkable_title Requirements %} + Amazon requires the endpoint of a skill to be hosted via SSL. Self-signed certificates are ok because our skills will only run in development mode. Read more on [our blog][blog-lets-encrypt] about how to set up encryption for Home Assistant. If you are unable to get HTTPS up and running, consider using [this AWS Lambda proxy for Alexa skills](https://forums.developer.amazon.com/forums/thread.jspa?messageID=18604). [blog-lets-encrypt]: https://home-assistant.io/blog/2015/12/13/setup-encryption-using-lets-encrypt/ @@ -72,7 +73,7 @@ To get started with Alexa skills: - https - https://YOUR_HOST/api/alexa?api_password=YOUR_API_PASSWORD -#### {% linkable_title Configuring your Amazon Alexa skill %} +### {% linkable_title Configuring your Amazon Alexa skill %} Alexa works based on intents. Each intent has a name and variable slots. For example, a `LocateIntent` with a slot that contains a `User`. Example intent schema: @@ -111,7 +112,7 @@ This means that we can now ask Alexa things like: - Alexa, ask Home Assistant where Paul is - Alexa, ask Home Assistant where we are -### {% linkable_title Configuring Home Assistant %} +## {% linkable_title Configuring Home Assistant %} Out of the box, the component will do nothing. You have to teach it about all intents you want it to answer to. The way it works is that the answer for each intent is based on [templates] that you define. Each template will have access to the existing states via the `states` variable but will also have access to all variables defined in the intent. @@ -125,8 +126,7 @@ Actions are using the [Home Assistant Script Syntax] and also have access to the Configuring the Alexa component for the above intents would look like this: ```yaml -{% raw %} -# Example configuration.yaml entry +{% raw %}# Example configuration.yaml entry alexa: intents: WhereAreWeIntent: @@ -137,8 +137,8 @@ alexa: is_state('device_tracker.anne_therese', 'home') -%} You are both home, you silly {%- else -%} - Anne Therese is at {{ states("device_tracker.anne_therese") }} and - Paulus is at {{ states("device_tracker.paulus") }} + Anne Therese is at {{ states("device_tracker.anne_therese") }} + and Paulus is at {{ states("device_tracker.paulus") }} {% endif %} LocateIntent: @@ -198,15 +198,14 @@ ActivateSceneIntent activate {Scene} Then add the intent to your Alexa Section in your HA config file: ```yaml -{% raw %} ActivateSceneIntent: action: service: scene.turn_on data_template: - entity_id: scene.{{ Scene | replace(" ", "_") }} + entity_id: scene.{% raw %}{{ Scene | replace(" ", "_") }}{% endraw %} speech: type: plaintext - text: OK{% endraw %} + text: OK ``` Here we are using [templates] to take the name we gave to Alexa e.g. `downstairs on` and replace the space with an underscore so it becomes `downstairs_on` as Home Assistant expects. @@ -246,29 +245,26 @@ RunScriptIntent run {Script} Then add the intent to your Alexa Section in your HA config file: ```yaml -{% raw %} RunScriptIntent: action: service: script.turn_on data_template: - entity_id: script.{{ Script | replace(" ", "_") }} + entity_id: script.{% raw %}{{ Script | replace(" ", "_") }}{% endraw %} speech: type: plaintext - text: OK{% endraw %} - + text: OK ``` Now say `Alexa ask homeassistant to run ` and Alexa will run that script for you. -### {% linkable_title Giving Alexa Some Personality%} +## {% linkable_title Giving Alexa Some Personality%} In the examples above, we told Alexa to say `OK` when she succesfully completed the task. This is effective but a little dull! We can again use [templates] to spice things up a little. First create a file called `alexa_confirm.yaml` with something like the following in it (go on, be creative!): ```text -{% raw %} - > +{% raw %} > {{ [ "OK", "Sure", diff --git a/source/_components/binary_sensor.mysensors.markdown b/source/_components/binary_sensor.mysensors.markdown index 32a31c409b0..43b0610fd00 100644 --- a/source/_components/binary_sensor.mysensors.markdown +++ b/source/_components/binary_sensor.mysensors.markdown @@ -16,7 +16,7 @@ Integrates MySensors binary sensors into Home Assistant. See the [main component The following sensor types are supported: -##### MySensors version 1.4 and higher +#### MySensors version 1.4 and higher S_TYPE | V_TYPE -------------------|--------------------------------------- @@ -24,7 +24,7 @@ S_DOOR | V_TRIPPED S_MOTION | V_TRIPPED S_SMOKE | V_TRIPPED -##### MySensors version 1.5 and higher +#### MySensors version 1.5 and higher S_TYPE | V_TYPE ---------------|---------------------------------- diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index ad7a5c7902e..259e957d8d1 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -18,8 +18,6 @@ Home Assistant uses [SQLAlchemy](http://www.sqlalchemy.org/) as Object Relationa The default database engine is [SQLite](https://www.sqlite.org/) which doesn't require any configuration. The database is stored in your Home Assistant configuration directory (`.homeassistant`) and called `home-assistant.db`. -```bash - To setup the `recorder` component in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_cookbook/automation_sun.markdown b/source/_cookbook/automation_sun.markdown index dd82edb8519..d673599b9bb 100644 --- a/source/_cookbook/automation_sun.markdown +++ b/source/_cookbook/automation_sun.markdown @@ -79,7 +79,7 @@ Solar elevation automations can cope with offsets from sunset / sunrise as the s trigger: platform: numeric_state entity_id: sun.sun - value_template: '{{ "{{ state.attributes.elevation ""}}}}' + value_template: '{% raw %}{{ state.attributes.elevation }}{% endraw %}' below: 3.5 action: service: scene.turn_on @@ -89,7 +89,7 @@ Solar elevation automations can cope with offsets from sunset / sunrise as the s trigger: platform: numeric_state entity_id: sun.sun - value_template: '{{ "{{ state.attributes.elevation ""}}}}' + value_template: '{% raw %}{{ state.attributes.elevation }}{% end raw %}' below: 1.5 action: service: scene.turn_on @@ -99,7 +99,7 @@ Solar elevation automations can cope with offsets from sunset / sunrise as the s trigger: platform: numeric_state entity_id: sun.sun - value_template: '{{ "{{ state.attributes.elevation ""}}}}' + value_template: '{% raw %}{{ state.attributes.elevation }}{% endraw %}' below: -2.5 action: service: switch.turn_off diff --git a/source/_cookbook/configuration_yaml_from_bassclarinetl2 b/source/_cookbook/configuration_yaml_from_bassclarinetl2 deleted file mode 100644 index f745782619a..00000000000 --- a/source/_cookbook/configuration_yaml_from_bassclarinetl2 +++ /dev/null @@ -1,446 +0,0 @@ -homeassistant: - # Name of the location where Home Assistant is running - name: example.com - # Location required to calculate the time the sun rises and sets - latitude: 37 - longitude: -121 - # 'metric' for Metric, 'imperial' for Imperial - unit_system: imperial - # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones - time_zone: America/Los_Angeles - customize: - switch.aeon_labs_smart_energy_switch_switch_2: - friendly_name: Mac Switch-Meter - switch.leviton_unknown_type1a02_id0334_switch_3: - friendly_name: W Nightstand - entity_picture: /local/zwvapl.jpg - switch.hub_switch: - friendly_name: Wink Hub Switch - entity_picture: /local/wemoswitch.jpg - switch.leviton_unknown_type1a02_id0334_switch_4: - friendly_name: Christmas Tree - entity_picture: /local/zwvapl.jpg - switch.leviton_unknown_type1a02_id0334_switch_5: - friendly_name: Roof Lights - entity_picture: /local/zwvapl.jpg - - light.w_bedroom_ceiling_: - friendly_name: Will's Bedroom Ceiling Lights (Wink) - entity_picture: /local/casetta.jpg - light.living_room_wall_: - friendly_name: Living Room Couch Lights (Wink) - entity_picture: /local/casetta.jpg - - media_player.my_shield_android_tv: - friendly_name: Dalek (Cast) - entity_picture: /local/shieldtv.jpg - media_player.chromecast: - friendly_name: Jeff chromecast - entity_picture: /local/chromecast.jpg - media_player.kodi: - friendly_name: Tardis-Win7 (Kodi) - entity_picture: /local/kodi.png - media_player.kodi_2: - friendly_name: Dalek (Kodi) - media_player.roku_2_xd__12a18n045363: - friendly_name: Parents Roku - entity_picture: /local/roku2xd.jpg - - sensor.aeon_labs_smart_energy_switch_power_2: - friendly_name: Mac Usage (W) - sensor.aeon_labs_smart_energy_switch_previous_reading_2: - friendly_name: Mac Usage Previous (W) - hidden: true - sensor.aeon_labs_smart_energy_switch_energy_2: - friendly_name: Mac Usage (kWh) - hidden: true - -##################### -## GROUPS -##################### -group: - w_bedroom: - - switch.leviton_unknown_type1a02_id0334_switch_3 - - light.w_bedroom_ceiling_ - christmas: - - switch.leviton_unknown_type1a02_id0334_switch_4 - - switch.leviton_unknown_type1a02_id0334_switch_5 - almanac: - - sensor.date - - sensor.time - - sensor.time_utc - - sun.sun - tracker: - - device_tracker.will_wnexus -# OpenWeatherMap: -# - sensor.weather_temperature -# - sensor.weather_humidity -# - sensor.weather_pressure -# - sensor.weather_rain -# - sensor.weather_wind_speed -# - sensor.weather_cloud_coverage -# - sensor.weather_forecast - Meteobridge: - - sensor.outdoor_temp_meteobridge - - sensor.outdoor_humidity_meteobridge - - sensor.outdoor_dewpoint_meteobridge - - sensor.precip_rate_meteobridge - - sensor.wind_direction_meteobridge - - sensor.wind_gust_meteohub - - sensor.wind_chill_meteobridge - - sensor.wind_speed_meteobridge - - sensor.indoor_dewpoint_meteobridge - - sensor.indoor_humidity_meteobridge - - sensor.indoor_temp_meteobridge - - sensor.precip_change_meteobridge - - sensor.precip_total_meteobridge - - sensor.sea_level_pressure_meteobridge - - sensor.barometric_pressure_meteobridge - -#################### -## ZONES -#################### -zone: - name: Home - latitude: 37 - longitude: -121 - radius: 200 - icon: mdi:home - -zone 2: - name: Barracuda_(SJ) - latitude: 37 - longitude: -121 - radius: 100 - -zone 3: - name: SFC - latitude: 37 - longitude: -122 - radius: 95 - -#################### -## NOTIFICATIONS -#################### - - -#################### -## AUTOMATION -#################### -automation: -#- alias: 'W_at_work' -# trigger: -# - platform: zone -# entity_id: device_tracker.will_wnexus -# zone: zone.barracuda_sj -# event: enter -# - platform: time -# after: '07:15' -# before: '09:00' -# action: -# service: ifttt.trigger -# data: {"event":"hassnotification_dadsms", "value1": "Will's at Work"} -- alias: "Update_Update" - trigger: - platform: state - entity_id: updater.updater - action: - service: ifttt.trigger - data: {"event":"hassnotification_willsms","value1":"HASS has an update"} -- alias: 'Christmas Roof ON' - trigger: - platform: sun - event: sunset - offset: '-01:00:00' - action: - service: homeassistant.turn_on - entity_id: switch.leviton_unknown_type1a02_id0334_switch_5 -- alias: 'Christmas Roof OFF' - trigger: - platform: time - hours: 1 - minutes: 0 - seconds: 0 - action: - service: homeassistant.turn_off - entity_id: switch.leviton_unknown_type1a02_id0334_switch_5 -- alias: 'Christmas Tree ON' - trigger: - platform: time - hours: 8 - minutes: 0 - seconds: 0 - action: - service: homeassistant.turn_on - entity_id: switch.leviton_unknown_type1a02_id0334_switch_4 -- alias: 'Christmas Tree (OFF)' - trigger: - platform: time - hours: 23 - minutes: 0 - seconds: 0 - action: - service: homeassistant.turn_off - entity_id: switch.leviton_unknown_type1a02_id0334_switch_4 -#- alias: test notify -# trigger: -# platform: time -# minutes: '/5' #every 5 min -# action: -# service: notify.pushEtta -# data: -# message: 5 Min Test - - -################################# -### COMPONENTS ### -################################# -#discovery: -sun: -#updater: -history: -#conversation: -frontend: -logbook: - -http: - api_password: Austin12# - server_port: 8123 - ssl_certificate: /etc/letsencrypt/live/example.com/fullchain.pem - ssl_key: /etc/letsencrypt/live/example.com/privkey.pem - -ifttt: - key: gm3dAtxwX8RpbA793mHWbK1bftO1wgScKt0ZHiT9GyC - -media_player 1: - platform: plex -#media_player 2: -# platform: squeezebox -# host: 192.168.2.80 -# port: 9000 -media_player 3: - platform: cast -media_player 4: - platform: kodi - url: http://192.168.2.129:8080/jsonrpc - user: kodi - password: kodi -media_player 5: - platform: plex -media_player 6: - platform: kodi - url: http://192.168.2.165/jsonrpc -media_player 7: - platform: samsungtv - host: 192.168.2.90 - name: Parents TV - -wink: - access_token: cf83448f669cd3acd3b969b063028565 - refresh_token: 6213c8a1d519d864e08b7364c91eaf22 - -zwave: - usb_path: /dev/ttyUSB0 - config_path: /usr/local/share/python-openzwave/config - polling_interval: 10000 - -#zigbee: -# device: /dev/ttyUSB1 -# baud: 115200 - -mqtt: - broker: 127.0.0.1 - port: 8883 - username: hass - password: austin - -device_tracker 1: - platform: owntracks - - track_new_devices: yes - interval_seconds: 40 - consider_home: 120 - -device_tracker 2: - platform: nmap_tracker - hosts: 192.168.2.0/24 - home_interval: 3 - -#sensor: -# platform: openweathermap -# api_key: b693a8bb2f60dcedc7b4bf33649ed4f1 -# forecast: 1 -# monitored_conditions: -# - temperature -# - wind_speed -# - humidity -# - pressure -# - clouds -# - rain - -sensor 2: - platform: time_date - display_options: - - 'time' - - 'date' - - 'time_utc' - -### BEGIN METEO SENSORS ### -sensor 3: - platform: tcp - name: Outdoor Temp (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[2]}}" - unit: C - -sensor 4: - platform: tcp - name: Outdoor Humidity (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[3]}}" - unit: Percent - -sensor 5: - platform: tcp - name: Outdoor Dewpoint (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[4] }}" - unit: C - -sensor 6: - platform: tcp - name: Wind Direction (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[7]}}" - unit: Degrees - -sensor 7: - platform: tcp - name: Wind Gust (Meteohub) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[8]}}" - unit: m/s - -sensor 8: - platform: tcp - name: Wind Speed (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[9]}}" - unit: m/s - -sensor 9: - platform: tcp - name: Wind Chill (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[10]}}" - unit: C - -sensor 10: - platform: tcp - name: Precip Rate (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[13]}}" - unit: mm/hr - -sensor 11: - platform: tcp - name: Precip Total (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[14]}}" - unit: mm - -sensor 12: - platform: tcp - name: Precip Change (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[15]}}" - unit: mm - -sensor 13: - platform: tcp - name: Indoor Temp (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[18]}}" - unit: C - -sensor 14: - platform: tcp - name: Indoor Humidity (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[19]}}" - unit: percent - -sensor 15: - platform: tcp - name: Indoor Dewpoint (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[20]}}" - unit: C - -sensor 16: - platform: tcp - name: Barometric Pressure (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[21]}}" - unit: mb - -sensor 17: - platform: tcp - name: Sea Level Pressure (Meteobridge) - host: 192.168.2.82 - port: 5556 - timeout: 6 - payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[22]}}" - unit: mb - -sensor 18: - platform: steam_online - api_key: [Redact] - accounts: - - 76561198012067051 - -switch: - platform: wemo diff --git a/source/_cookbook/configuration_yaml_from_bassclarinetl2.markdown b/source/_cookbook/configuration_yaml_from_bassclarinetl2.markdown index 2d0c634caa8..41bd89fdfb8 100644 --- a/source/_cookbook/configuration_yaml_from_bassclarinetl2.markdown +++ b/source/_cookbook/configuration_yaml_from_bassclarinetl2.markdown @@ -306,7 +306,7 @@ sensor 3: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[2]}}" + value_template: "{% raw %}{{value.split (' ')[2]}}{% endraw %}" unit: C sensor 4: @@ -316,7 +316,7 @@ sensor 4: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[3]}}" + value_template: "{% raw %}{{value.split (' ')[3]}}{% endraw %}" unit: Percent sensor 5: @@ -326,7 +326,7 @@ sensor 5: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[4] }}" + value_template: "{% raw %}{{value.split (' ')[4] }}{% endraw %}" unit: C sensor 6: @@ -336,7 +336,7 @@ sensor 6: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[7]}}" + value_template: "{% raw %}{{value.split (' ')[7]}}{% endraw %}" unit: Degrees sensor 7: @@ -346,7 +346,7 @@ sensor 7: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[8]}}" + value_template: "{% raw %}{{value.split (' ')[8]}}{% endraw %}" unit: m/s sensor 8: @@ -356,7 +356,7 @@ sensor 8: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[9]}}" + value_template: "{% raw %}{{value.split (' ')[9]}}{% endraw %}" unit: m/s sensor 9: @@ -366,7 +366,7 @@ sensor 9: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[10]}}" + value_template: "{% raw %}{{value.split (' ')[10]}}{% endraw %}" unit: C sensor 10: @@ -376,7 +376,7 @@ sensor 10: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[13]}}" + value_template: "{% raw %}{{value.split (' ')[13]}}{% endraw %}" unit: mm/hr sensor 11: @@ -386,7 +386,7 @@ sensor 11: port: 5556 timeout: 6 payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[14]}}" + value_template: "{% raw %}{{value.split (' ')[14]}}{% endraw %}" unit: mm sensor 12: @@ -396,7 +396,7 @@ sensor 12: port: 5556 timeout: 6 payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[15]}}" + value_template: "{% raw %}{{value.split (' ')[15]}}{% endraw %}" unit: mm sensor 13: @@ -406,7 +406,7 @@ sensor 13: port: 5556 timeout: 6 payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[18]}}" + value_template: "{% raw %}{{value.split (' ')[18]}}{% endraw %}" unit: C sensor 14: @@ -416,7 +416,7 @@ sensor 14: port: 5556 timeout: 6 payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[19]}}" + value_template: "{% raw %}{{value.split (' ')[19]}}{% endraw %}" unit: percent sensor 15: @@ -426,7 +426,7 @@ sensor 15: port: 5556 timeout: 6 payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[20]}}" + value_template: "{% raw %}{{value.split (' ')[20]}}{% endraw %}" unit: C sensor 16: @@ -436,7 +436,7 @@ sensor 16: port: 5556 timeout: 6 payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[21]}}" + value_template: "{% raw %}{{value.split (' ')[21]}}{% endraw %}" unit: mb sensor 17: @@ -446,14 +446,14 @@ sensor 17: port: 5556 timeout: 6 payload: "Content-type: text/xml; charaset=UTF-8\n\n" - value_template: "{{value.split (' ')[22]}}" + value_template: "{% raw %}{{value.split (' ')[22]}}{% endraw %}" unit: mb sensor 18: platform: steam_online api_key: [Redact] accounts: - - 76561198012067051 + - 76561198012067051 switch: platform: wemo diff --git a/source/_cookbook/foscam_away_mode_PTZ.markdown b/source/_cookbook/foscam_away_mode_PTZ.markdown index 59d20576c58..6a9a4659f9e 100644 --- a/source/_cookbook/foscam_away_mode_PTZ.markdown +++ b/source/_cookbook/foscam_away_mode_PTZ.markdown @@ -28,9 +28,9 @@ switch: oncmd: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&usr=admin&pwd=password"' offcmd: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=0&usr=admin&pwd=password"' statecmd: 'curl -k --silent "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=admin&pwd=password" | grep -oP "(?<=isEnable>).*?(?=)"' - value_template: '{{ value == "1" }}' + value_template: '{% raw %}{{ value == "1" }}{% endraw %}' ``` - + The service `shell_command.foscam_turn_off` sets the camera to point down and away to indicate it is not recording, and `shell_command.foscam_turn_on` sets the camera to point where I'd like to record. h of these services require preset points to be added to your camera. See source above for additional information. ```yaml diff --git a/source/_includes/custom/category_feed.xml b/source/_includes/custom/category_feed.xml index 6d7b9f61b37..a1371375db9 100644 --- a/source/_includes/custom/category_feed.xml +++ b/source/_includes/custom/category_feed.xml @@ -20,7 +20,7 @@ {{ post.date | date_to_xmlschema }} {{ site.url }}{{ post.id }} - + {% endfor %} diff --git a/source/_includes/edit_github.html b/source/_includes/edit_github.html index 0ec614af4d4..f599869c811 100644 --- a/source/_includes/edit_github.html +++ b/source/_includes/edit_github.html @@ -1,4 +1,4 @@ {% assign url_parts = page.url | split: '/' %} {% if page.hide_github_edit != true %} -
Edit this page on GitHub
+
Edit this page on GitHub
{% endif %} diff --git a/source/_posts/2015-12-20-amazon-echo-icloud-and-templates.markdown b/source/_posts/2015-12-20-amazon-echo-icloud-and-templates.markdown index 918d3c6f1fb..fe534bc2edd 100644 --- a/source/_posts/2015-12-20-amazon-echo-icloud-and-templates.markdown +++ b/source/_posts/2015-12-20-amazon-echo-icloud-and-templates.markdown @@ -61,7 +61,7 @@ Alrighty, it's time for Home Assistant 0.10. A lot amazing things have changed a This release introduces templates. This will allow you to parse data before it gets processed or create messages for notifications on the fly based on data within Home Assistant. The notification component and the new Alexa/Amazon Echo component are both using the new template functionality to render responses. A template editor has been added to the developer tool section in the app so you can get instant feedback if your templates are working or not. -```jinja2 +```text The temperature at home is {% raw %}{{ states('sensor.temperature') }}{% endraw %}. ``` diff --git a/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown b/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown index 4c60d345549..579cde5579f 100644 --- a/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown +++ b/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown @@ -58,7 +58,7 @@ If you park your car and go shopping - *device_tracker.beacon_car* will stop mov With the basic tracking working - you can use automation to do things like open your gates if your car comes home -````yaml +```yaml automation: - alias: 'Open gate' trigger: @@ -73,19 +73,19 @@ automation: action: service: switch.turn_on entity_id: switch.gate -```` +``` Or warn you if you leave your keys behind -````yaml +```yaml automation: - alias: 'Forgotten keys' trigger: platform: template - value_template: {% raw %}'{{states.device_tracker.greg_gregphone.state != states.device_tracker.beacon_keys.state}}'{% endraw %} + value_template: '{% raw %}{{ states.device_tracker.greg_gregphone.state != states.device_tracker.beacon_keys.state}}{% endraw %}' condition: condition: template - value_template: {% raw %}'{{ states.device_tracker.greg_gregphone.state != "home" }}'{% endraw %} + value_template: '{% raw %}{{ states.device_tracker.greg_gregphone.state != "home" }}{% endraw %}' action: service: script.turn_on entity_id: script.send_key_alert @@ -93,7 +93,7 @@ automation: - alias: 'Forgotten keys - cancel' trigger: platform: template - value_template: {% raw %}'{{states.device_tracker.greg_gregphone.state == states.device_tracker.beacon_keys.state}}'{% endraw %} + value_template: '{% raw %}{{ states.device_tracker.greg_gregphone.state == states.device_tracker.beacon_keys.state }}{% endraw %}' condition: - condition: state entity_id: script.send_key_alert @@ -101,9 +101,9 @@ automation: action: service: script.turn_off entity_id: script.send_key_alert -```` +``` -````yaml +```yaml script: send_key_alert: sequence: @@ -113,7 +113,7 @@ script: data: message: 'You forgot your keys' target: 'device/gregs_iphone' -```` +``` (The delay is needed for two reasons: - diff --git a/source/_posts/2016-08-16-we-have-apps-now.markdown b/source/_posts/2016-08-16-we-have-apps-now.markdown index cc6ed602fc9..35a6f0551d6 100755 --- a/source/_posts/2016-08-16-we-have-apps-now.markdown +++ b/source/_posts/2016-08-16-we-have-apps-now.markdown @@ -56,13 +56,12 @@ class OutsideLights(appapi.AppDaemon): def initialize(self): self.run_at_sunrise(self.sunrise_cb, 0) self.run_at_sunset(self.sunset_cb, 0) - + def sunrise_cb(self, args, kwargs): self.turn_on(self.args["off_scene"]) def sunset_cb(self, args, kwargs): self.turn_on(self.args["on_scene"]) - ``` This is also fairly easy to achieve with Home Assistant automations, but we are just getting started. diff --git a/source/_topics/splitting_configuration.markdown b/source/_topics/splitting_configuration.markdown index 4a2898eb92e..1f3712f81e2 100644 --- a/source/_topics/splitting_configuration.markdown +++ b/source/_topics/splitting_configuration.markdown @@ -124,7 +124,7 @@ This (large) sensor configuration gives us another example: host: 192.168.2.82 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[2]}}" + value_template: "{% raw %}{{value.split (' ')[2]}}{% endraw %}" unit: C - platform: tcp name: 'Outdoor Humidity (Meteobridge)' @@ -132,7 +132,7 @@ This (large) sensor configuration gives us another example: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[3]}}" + value_template: "{% raw %}{{value.split (' ')[3]}}{% endraw %}" unit: Percent - platform: tcp name: 'Outdoor Dewpoint (Meteobridge)' @@ -140,7 +140,7 @@ This (large) sensor configuration gives us another example: port: 5556 timeout: 6 payload: "Content-type: text/xml; charset=UTF-8\n\n" - value_template: "{{value.split (' ')[4] }}" + value_template: "{% raw %}{{value.split (' ')[4] }}{% endraw %}" unit: C ################################### #### STEAM FRIENDS #### diff --git a/source/_topics/templating.markdown b/source/_topics/templating.markdown index 9090180b9d9..10f4ff6615a 100644 --- a/source/_topics/templating.markdown +++ b/source/_topics/templating.markdown @@ -86,9 +86,8 @@ Home Assistant adds extensions to allow templates to access all of the current s ### {% linkable_title States %} Next two statements result in same value if state exists. Second one will result in an error if state does not exist. -```jinja2 -{% raw %} -{{ states('device_tracker.paulus') }} +```text +{% raw %}{{ states('device_tracker.paulus') }} {{ states.device_tracker.paulus.state }}{% endraw %} ``` @@ -96,9 +95,8 @@ Next two statements result in same value if state exists. Second one will result Print an attribute if state is defined -```jinja2 -{% raw %} -{% if states.device_tracker.paulus %} +```text +{% raw %}{% if states.device_tracker.paulus %} {{ states.device_tracker.paulus.attributes.battery }} {% else %} ?? @@ -109,9 +107,8 @@ Print an attribute if state is defined Print out a list of all the sensor states. -```jinja2 -{% raw %} -{% for state in states.sensor %} +```text +{% raw %}{% for state in states.sensor %} {{ state.entity_id }}={{ state.state }}, {% endfor %} @@ -131,17 +128,15 @@ Print out a list of all the sensor states. {{ as_timestamp(states.binary_sensor.garage_door.last_changed) }} -{{ as_timestamp(now) - as_timestamp(states.binary_sensor.garage_door.last_changed) }} -{% endraw %} +{{ as_timestamp(now) - as_timestamp(states.binary_sensor.garage_door.last_changed) }}{% endraw %} ``` ### {% linkable_title Distance examples %} If only 1 location is passed in will measure the distance from home. -```jinja2 -{% raw %} -Using Lat Lng coordinates: {{ distance(123.45, 123.45) }} +```text +{% raw %}Using Lat Lng coordinates: {{ distance(123.45, 123.45) }} Using State: {{ distance(states.device_tracker.paulus) }} @@ -154,9 +149,8 @@ These can also be combined in any combination: Find entities closest to the Home Assistant location: -```jinja2 -{% raw %} -Query all entities: {{ closest(states) }} +```text +{% raw %}Query all entities: {{ closest(states) }} Query all entities of a specific domain: {{ closest('states.device_tracker') }} Query all entities in group.children: {{ closest('group.children') }} Query all entities in group.children: {{ closest(states.group.children) }}{% endraw %} @@ -164,9 +158,8 @@ Query all entities in group.children: {{ closest(states.group.children) }}{% end Find entities closest to a coordinate or another entity. All previous arguments still apply for 2nd argument. -```jinja2 -{% raw %} -Closest to a coordinate: {{ closest(23.456, 23.456, 'group.children') }} +```text +{% raw %}Closest to a coordinate: {{ closest(23.456, 23.456, 'group.children') }} Closest to an entity: {{ closest('zone.school', 'group.children') }} Closest to an entity: {{ closest(states.zone.school, 'group.children') }}{% endraw %} ``` @@ -174,9 +167,8 @@ Closest to an entity: {{ closest(states.zone.school, 'group.children') }}{% endr ### {% linkable_title Combined %} Since closest returns a state, we can combine it with distance too -```jinja2 -{% raw %} -{{ closest(states).name }} is {{ distance(closest(states)) }} meters away.{% endraw %} +```text +{% raw %}{{ closest(states).name }} is {{ distance(closest(states)) }} meters away.{% endraw %} ``` ## {% linkable_title Processing incoming data %} @@ -190,7 +182,7 @@ It depends per component or platform but it is common to be able to define a tem | `value` | The incoming value. | | `value_json` | The incoming value parsed as JSON. | -```jinja2 +```text # Incoming value: {"primes": [2, 3, 5, 7, 11, 13]} diff --git a/source/blog/archives/index.html b/source/blog/archives/index.html index ab259380faa..cbe6dec8744 100644 --- a/source/blog/archives/index.html +++ b/source/blog/archives/index.html @@ -4,7 +4,8 @@ title: "Blog index" ---
- {% for post in site.posts reverse %} + {% assign reversedposts = site.posts | reverse %} + {% for post in reversedposts %} {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %} {% unless year == this_year %} {% assign year = this_year %} diff --git a/source/developers/website.markdown b/source/developers/website.markdown index 310295488d2..d2f36e50306 100644 --- a/source/developers/website.markdown +++ b/source/developers/website.markdown @@ -11,12 +11,12 @@ footer: true The website you're reading now is the home of Home Assistant: [https://home-assistant.io](https://home-assistant.io). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. -home-assistant.io uses the [Octopress](http://octopress.org/) framework for [Jekyll](http://github.com/mojombo/jekyll). To get more details, please checkout the [Octopress documentation](http://octopress.org/docs/). +home-assistant.io uses the [Octopress](http://octopress.org/) framework for [Jekyll](http://github.com/mojombo/jekyll). To get more details, please checkout the [Octopress documentation](http://octopress.org/docs/). That means that creating a new page is simple. The pages are written in [markdown](http://daringfireball.net/projects/markdown/); you don't need to care about HTML or the like. The process for working on the website is no different from working on Home Assistant itself. -To test your changes locally, you need to install the **Ruby** dependencies (gems): +To test your changes locally, you need to install the **Ruby** dependencies (gems): - [Install Ruby](https://www.ruby-lang.org/en/documentation/installation/) if you don't have it already. - Install `bundler`, which is a dependency manager for Ruby: `gem install bundler` @@ -24,11 +24,11 @@ To test your changes locally, you need to install the **Ruby** dependencies (gem Then you can work on the documentation: -- Fork home-assistant.io [git repository](https://github.com/home-assistant/home-assistant.io). +- Fork home-assistant.io [git repository](https://github.com/home-assistant/home-assistant.github.io). - Create/edit/update a page in the directory `source/_components/` for your platform/component. - Test your changes to home-assistant.io locally: run ``rake preview`` and navigate to [http://127.0.0.1:4000](http://127.0.0.1:4000) - Create a Pull Request (PR) against the **next** branch of home-assistant.io if your documentation is for a new feature, platform, or component. -- Create a Pull Request (PR) against the **master** branch of home-assistant.io if you fix stuff, create Cookbook entries, or expand existing documentation. +- Create a Pull Request (PR) against the **current** branch of home-assistant.io if you fix stuff, create Cookbook entries, or expand existing documentation. For a platform page, the fastest way is to make a copy of an existing page and edit it. The [component overview](/components/) is generated automatically, so there is no need to add a link to your page. diff --git a/source/getting-started/automation-action.markdown b/source/getting-started/automation-action.markdown index b099686bde8..dda01b43073 100644 --- a/source/getting-started/automation-action.markdown +++ b/source/getting-started/automation-action.markdown @@ -62,9 +62,9 @@ automation: - condition: or conditions: - condition: template - value_template: '{{ states.sun.sun.attributes.elevation < 4 }}' + value_template: '{% raw %}{{ states.sun.sun.attributes.elevation < 4 }}{% endraw %}' - condition: template - value_template: '{{ states.sensor.sensorluz_7_0.state < 10 }}' + value_template: '{% raw %}{{ states.sensor.sensorluz_7_0.state < 10 }}{% endraw %}' - service: scene.turn_on entity_id: scene.DespiertaDespacho ``` diff --git a/source/getting-started/automation-condition.markdown b/source/getting-started/automation-condition.markdown index a28b3c93a0f..165c5172af8 100644 --- a/source/getting-started/automation-condition.markdown +++ b/source/getting-started/automation-condition.markdown @@ -32,9 +32,9 @@ Example of using condition: condition: or conditions: - condition: template - value_template: '{{ states.sun.sun.attributes.elevation < 4 }}' + value_template: '{% raw %}{{ states.sun.sun.attributes.elevation < 4 }}{% endraw %}' - condition: template - value_template: '{{ states.sensor.sensorluz_7_0.state < 10 }}' + value_template: '{% raw %}{{ states.sensor.sensorluz_7_0.state < 10 }}{% endraw %}' action: - service: scene.turn_on entity_id: scene.DespiertaDespacho diff --git a/source/getting-started/automation-templating.markdown b/source/getting-started/automation-templating.markdown index d7957e61e24..940a3887665 100644 --- a/source/getting-started/automation-templating.markdown +++ b/source/getting-started/automation-templating.markdown @@ -37,15 +37,19 @@ automation 2: message: {% raw %}{{ trigger.payload }}{% endraw %} ``` -### {% linkable_title Available Trigger Data %} +## {% linkable_title Available Trigger Data %} The following tables show the available trigger data per platform. +### {% linkable_title event %} + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `event`. | `trigger.event` | Event object that matched. +### {% linkable_title mqtt %} + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `mqtt`. @@ -53,6 +57,8 @@ The following tables show the available trigger data per platform. | `trigger.payload` | Payload. | `trigger.qos` | QOS of payload. +### {% linkable_title numeric_state %} + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `numeric_state` @@ -62,6 +68,8 @@ The following tables show the available trigger data per platform. | `trigger.from_state` | The previous [state object] of the entity. | `trigger.to_state` | The new [state object] that triggered trigger. +### {% linkable_title state %} + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `state` @@ -70,12 +78,16 @@ The following tables show the available trigger data per platform. | `trigger.to_state` | The new [state object] that triggered trigger. | `trigger.for` | Timedelta object how long state has been to state, if any. +### {% linkable_title sun %} + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `sun` | `trigger.event` | The event that just happened: `sunset` or `sunrise`. | `trigger.offset` | Timedelta object with offset to the event, if any. +### {% linkable_title template %} + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `template` @@ -83,11 +95,15 @@ The following tables show the available trigger data per platform. | `trigger.from_state` | Previous [state object] of entity that caused change. | `trigger.to_state` | New [state object] of entity that caused template to change. +### {% linkable_title time %} + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `time` | `trigger.now` | DateTime object that triggered the time trigger. +### {% linkable_title zone %} + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `zone` diff --git a/source/getting-started/automation-trigger.markdown b/source/getting-started/automation-trigger.markdown index 349ce666147..84b2f75d912 100644 --- a/source/getting-started/automation-trigger.markdown +++ b/source/getting-started/automation-trigger.markdown @@ -11,7 +11,7 @@ footer: true Triggers are what starts the processing of an automation rule. It is possible to specify multiple triggers for the same rule. Once a trigger starts, Home Assistant will validate the conditions, if any, and call the action. -#### {% linkable_title Event trigger %} +### {% linkable_title Event trigger %} Triggers when an event is being processed. Events are the raw building blocks of Home Assistant. You can match events on just the event name or also require specific event data to be present. ```yaml @@ -24,7 +24,7 @@ automation: mood: happy ``` -#### {% linkable_title MQTT trigger %} +### {% linkable_title MQTT trigger %} Triggers when a specific message is received on given topic. Optionally can match on the payload being sent over the topic. ```yaml @@ -36,7 +36,7 @@ automation: payload: 'on' ``` -#### {% linkable_title Numeric state trigger %} +### {% linkable_title Numeric state trigger %} On state change of a specified entity, attempts to parse the state as a number and triggers if value is above and/or below a threshold. ```yaml @@ -51,7 +51,7 @@ automation: below: 25 ``` -#### {% linkable_title State trigger %} +### {% linkable_title State trigger %} Triggers when the state of tracked entities change. If only entity_id given will match all state changes. @@ -76,7 +76,7 @@ automation: Use quotes around your values for `from` and `to` to avoid the YAML parser interpreting values as booleans.

-#### {% linkable_title Sun trigger %} +### {% linkable_title Sun trigger %} Trigger when the sun is setting or rising. An optional time offset can be given to have it trigger for example 45 minutes before sunset, when dusk is setting in. ```yaml @@ -89,7 +89,7 @@ automation: offset: '-00:45:00' ``` -#### {% linkable_title Template trigger %} +### {% linkable_title Template trigger %} Template triggers work by evaluating a [template] on each state change. The trigger will fire if the state change caused the template to render 'true'. This is achieved by having the template result in a true boolean expression (`{% raw %}{{ is_state('device_tracker.paulus', 'home') }}{% endraw %}`) or by having the template render 'true' (example below). @@ -100,7 +100,7 @@ automation: value_template: '{% raw %}{% if is_state('device_tracker.paulus', 'home') %}true{% endif %}{% endraw %}' ``` -#### {% linkable_title Time trigger %} +### {% linkable_title Time trigger %} Time can be triggered in many ways. The most common is to specify `after` and trigger at a specific point in time each day. Alternatively, you can also match if the hour, minute or second of the current time has a specific value. You can prefix the value with a `/` to match whenever the value is divisible by that number. You cannot use `after` together with hour, minute or second. @@ -127,7 +127,7 @@ automation 3: seconds: 0 ``` -#### {% linkable_title Zone trigger %} +### {% linkable_title Zone trigger %} Zone triggers can trigger when an entity is entering or leaving the zone. For zone automation to work, you need to have setup a device tracker platform that supports reporting GPS coordinates. Currently this is limited to the [OwnTracks platform](/components/device_tracker.owntracks/) as well as the [iCloud platform](/components/device_tracker.icloud/). diff --git a/source/getting-started/automation.markdown b/source/getting-started/automation.markdown index 2de0f5c7db7..339e8da9c71 100644 --- a/source/getting-started/automation.markdown +++ b/source/getting-started/automation.markdown @@ -15,7 +15,7 @@ Home Assistant offers a wide range of automations. In the next few pages we'll t [cookbook-config]: /cookbook/#example-configurationyaml -### {% linkable_title The basics of automation %} +### {% linkable_title Automation basics %} Before you can go ahead and create your own automations, it's important to learn the basics. To explore the basics, let's have a look at the following example home automation rule: diff --git a/source/getting-started/customizing-devices.markdown b/source/getting-started/customizing-devices.markdown index 9fbaca4c7b8..695be29f04a 100644 --- a/source/getting-started/customizing-devices.markdown +++ b/source/getting-started/customizing-devices.markdown @@ -9,28 +9,21 @@ sharing: true footer: true --- -By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by adding the following configuration inside the `homeassistant:` section. - -Devices that you don't want to have visible can be hidden with `hidden`. - -`entity_picture`entries, badges, `device_tracker` pictures, etc. can either be external URLs (e.g. `http://example.com/example.jpg`) or of the form `/local/filename.jpg`, where `/local` represents the directory `www` in the HASS configuration directory. You may have to create the `www` directory yourself as it is not made automatically. - -You can also use `icon` and refer to any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). - -For switches with an assumed state two buttons are shown (turn off, turn on) instead of a switch. By setting `assumed_state` to `false` you will get the default switch icon. - +By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by overriding attributes of specific entities. ```yaml # Example configuration.yaml entry homeassistant: + name: Home + unit_system: celsius + # etc - # Add this to your existing configuration - # Only the `entity_id` is required. All other options are optional. customize: + # Only the 'entity_id' is required. All other options are optional. sensor.living_room_motion: hidden: true thermostat.family_roomfamily_room: - entity_picture: https://dl.dropboxusercontent.com/u/12345/images/nest.jpg + entity_picture: https://example.com/images/nest.jpg friendly_name: Nest switch.wemo_switch_1: friendly_name: Toaster @@ -42,6 +35,16 @@ homeassistant: assumed_state: false ``` +### {% linkable_title Possible values %} + +| Attribute | Description | +| --------- | ----------- | +| friendly_name | Name of the entity +| hidden | Set to `true` to hide the entity. +| entity_picture | url to use as picture for entity +| icon | Any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix name with `mdi:`, ie `mdi:home`. +| assumed_state | For switches with an assumed state two buttons are shown (turn off, turn on) instead of a switch. By setting `assumed_state` to `false` you will get the default switch icon. + ### {% linkable_title Reloading customize %} Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant/reload_core_config`. This allows you to change your customize section and see it being applied without having to restart Home Assistant. To call this service, go to the service developer tool icon service developer tools, select the service `homeassistant/reload_core_config` and click "Call Service". diff --git a/source/getting-started/devices.markdown b/source/getting-started/devices.markdown index 8de52675eef..c6e2eafca1d 100644 --- a/source/getting-started/devices.markdown +++ b/source/getting-started/devices.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Home Assistant will be able to automatically discover and configure any Google Chromecasts, Netgear routers, Belkin WeMo switches, Philips Hue bridges and Sonos speakers on your network if you have [the discovery component]({{site_root}}/components/discovery/) enabled (which is by default). +Home Assistant will be able to automatically discover a bunch of devices and services available on your network if you have [the discovery component]({{site_root}}/components/discovery/) enabled (which is by default). See the [components overview page](/components/) to find installation instructions for your devices and services. If you can't find support for your favorite device or service, [consider adding support](/developers/add_new_platform/). @@ -51,10 +51,6 @@ camera 2: platform: mjpeg ``` -

-If your devices are not showing up in the frontend then check the entries in your configuration.yaml file for duplicates. -

- ### {% linkable_title Grouping devices %} Once you have a bunch of devices set up, it is time to organize them into groups. diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown index bfa3d8e90e4..6d6bc252c3e 100644 --- a/source/getting-started/presence-detection.markdown +++ b/source/getting-started/presence-detection.markdown @@ -23,7 +23,7 @@ Presence detection detects if people are home, an important input for automation Screenshot of Home Assistant showing a school, work and home zone and two people.

-## {% linkable_title Setting it up %} +### {% linkable_title Setting it up %} The device tracker component offers presence detection for Home Assistant. It supports two different methods for presence detection: scan for connected devices on the local network and connect to third party service. @@ -35,7 +35,7 @@ Home Assistant currently supports two third party services for presence detectio OwnTracks communicates directly with your MQTT broker, no data will pass through their servers.

-#### {% linkable_title Zones %} +### {% linkable_title Zones %} diff --git a/source/getting-started/scripts-conditions.markdown b/source/getting-started/scripts-conditions.markdown index 430727ba976..17256f028b4 100644 --- a/source/getting-started/scripts-conditions.markdown +++ b/source/getting-started/scripts-conditions.markdown @@ -11,7 +11,7 @@ footer: true Conditions can be used within a script or automation to prevent further execution. A condition will look at the system right now. For example a condition can test if a switch is currently turned on or off. -#### {% linkable_title AND condition %} +### {% linkable_title AND condition %} Test multiple conditions in 1 condition statement. Passes if all embedded conditions are valid. @@ -26,7 +26,7 @@ conditions: below: '20' ``` -#### {% linkable_title OR condition %} +### {% linkable_title OR condition %} Test multiple conditions in 1 condition statement. Passes if any embedded conditions is valid. @@ -41,7 +41,7 @@ conditions: below: '20' ``` -#### {% linkable_title MIXED AND and OR conditions %} +### {% linkable_title MIXED AND and OR conditions %} Test multiple AND and OR conditions in 1 condition statement. Passes if any embedded conditions is valid. This allows you to mix several AND and OR conditions together. @@ -62,7 +62,7 @@ conditions: below: '20' ``` -#### {% linkable_title Numeric state condition %} +### {% linkable_title Numeric state condition %} This type of condition attempts to parse the state of specified entity as a number and triggers if the value matches all of the above or below thresholds. @@ -76,10 +76,10 @@ entity_id: sensor.temperature above: 17 below: 25 # If your sensor value needs to be adjusted -value_template: {{ float(state.state) + 2 }} +value_template: {% raw %}{{ float(state.state) + 2 }}{% endraw %} ``` -#### {% linkable_title State condition %} +### {% linkable_title State condition %} Tests if an entity is a specified state. @@ -94,7 +94,7 @@ for: seconds: 5 ``` -#### {% linkable_title Sun condition %} +### {% linkable_title Sun condition %} The sun condition can test if the sun has already set or risen when a trigger occurs. The `before` and `after` keys can only be set to `sunset` or `sunrise`. They have a corresponding optional offset value (`before_offset`, `after_offset`) that can be added, similar to the [sun trigger][sun_trigger]. @@ -107,7 +107,7 @@ after: sunset after_offset: "-1:00:00" ``` -#### {% linkable_title Template condition %} +### {% linkable_title Template condition %} The template condition will test if the [given template][template] renders a value equal to true. This is achieved by having the template result in a true boolean expression or by having the template render 'true'. @@ -121,7 +121,7 @@ Within an automation, template conditions also have access to the `trigger` vari [template]: /topics/templating/ [automation-templating]: /getting-started/automation-templating/ -#### {% linkable_title Time condition %} +### {% linkable_title Time condition %} The time condition can test if it is after a specified time, before a specified time or if it is a certain day of the week @@ -138,7 +138,7 @@ weekday: Valid values for `weekday` are `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`. -#### {% linkable_title Zone condition %} +### {% linkable_title Zone condition %} Zone conditions test if an entity is in a certain zone. For zone automation to work, you need to have setup a device tracker platform that supports reporting GPS coordinates. Currently this is limited to the [OwnTracks platform](/components/device_tracker.owntracks/) and the [iCloud platform](/components/device_tracker.icloud/). @@ -148,8 +148,7 @@ entity_id: device_tracker.paulus zone: zone.home ``` - -#### {% linkable_title Examples %} +### {% linkable_title Examples %} ```yaml condition: diff --git a/source/getting-started/scripts.markdown b/source/getting-started/scripts.markdown index 54ae5a15bf0..fdeede23996 100644 --- a/source/getting-started/scripts.markdown +++ b/source/getting-started/scripts.markdown @@ -26,7 +26,7 @@ script: message: 'Turned on the ceiling light!' ``` -#### {% linkable_title Call a Service %} +### {% linkable_title Call a Service %} The most important one is the action to call a service. This can be done in various ways. For all the different possibilities, have a look at the [service calls page]. @@ -38,7 +38,7 @@ data: brightness: 100 ``` -#### {% linkable_title Test a Condition %} +### {% linkable_title Test a Condition %} While executing a script you can add a condition to stop further execution. When a condition does not return `true`, the script will finish. There are many different conditions which are documented at the [conditions page]. @@ -48,7 +48,7 @@ entity_id: device_tracker.paulus state: 'home' ``` -#### {% linkable_title Delay %} +### {% linkable_title Delay %} Delays are useful for temporarily suspending your script and start it at a later moment. We support different syntaxes for a delay as shown below. @@ -75,7 +75,7 @@ delay: delay: {% raw %}'00:{{ input_slider.minute_delay | int }}:00'{% endraw %} ``` -#### {% linkable_title Fire an Event %} +### {% linkable_title Fire an Event %} This action allows you to fire an event. Events can be used for many things. It could trigger an automation or indicate to another component that something is happening. For instance, in the below example it is used to create an entry in the logbook. diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index 1d82eb2f6e3..aa4534e5b38 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -90,9 +90,9 @@ $ ls /dev/ttyACM* Depending on what's plugged into your USB ports, the name found above may change. You can lock in a name, such as `/dev/zwave`, by following [these instructions](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/).

-#### {% linkable_title Events %} +### {% linkable_title Events %} -**zwave.network_complete** +#### {% linkable_title zwave.network_complete %} HomeAssistant will trigger a event when the zwave network is complete. Meaning all of the nodes on the network have been queried. This can take quite som time, depending on wakeup intervals on the battery powered devices on the network. ```yaml @@ -102,7 +102,7 @@ HomeAssistant will trigger a event when the zwave network is complete. Meaning a event_type: zwave.network_complete ``` -**zwave.network_ready** +#### {% linkable_title zwave.network_ready %} HomeAssistant will trigger a event when the zwave network is ready for use. Between `zwave.network_start` and `zwave.network_ready` HomeAssistant will feel sluggish when trying to send commands to zwave nodes. This is because the controller is requesting information from all of the nodes on the network. When this is triggered all awake nodes have been queried and sleeping nodes will be queried when they awake. ```yaml @@ -112,7 +112,7 @@ HomeAssistant will trigger a event when the zwave network is ready for use. Betw event_type: zwave.network_ready ``` -**zwave.network_start** +#### {% linkable_title zwave.network_start %} HomeAssistant will trigger a event when the zwave network is set up to be started. ```yaml @@ -122,7 +122,7 @@ HomeAssistant will trigger a event when the zwave network is set up to be starte event_type: zwave.network_start ``` -**zwave.network_stop** +#### {% linkable_title zwave.network_stop %} HomeAssistant will trigger a event when the zwave network stopping. ```yaml @@ -132,7 +132,7 @@ HomeAssistant will trigger a event when the zwave network stopping. event_type: zwave.network_stop ``` -**zwave.node_event** +#### {% linkable_title zwave.node_event %} HomeAssistant will trigger a event when command_class_basic changes value on a node. This can be virtually anything, so tests have to be made to determine what value equals what. You can use this for automations. @@ -168,7 +168,7 @@ automation: The *object_id* and *scene_id* of all triggered events can be seen in the console output. -#### {% linkable_title Services %} +### {% linkable_title Services %} The Z-Wave component exposes seven services to help maintain the network.