As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using Nmap. The IP addresses to scan can be specified in any format that Nmap understands, including the network-prefix notation (192.168.1.1/24) and the range notation (192.168.1.1-255).
+
+As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using Nmap. The IP addresses to scan can be specified in any format that Nmap understands, including the network-prefix notation (192.168.1.1/24) and the range notation (192.168.1.1-255).
Tomato requires an extra config variable called http_id. The value can be obtained by logging in to the Tomato admin interface and search for http_id in the page source code.
+
+Tomato requires an extra config variable called http_id. The value can be obtained by logging in to the Tomato admin interface and search for http_id in the page source code.
The logbook component provides a different perspective on the history of your house by showing all the changes that happened to your house in chronological order. See the demo for a live example.
To enable the logbook in your installation, add the following to your configuration.yaml file:
The swiss public transport sensor will give you the next two departure times from a given location to another one in Switzerland.
+
+The swiss public transport sensor will give you the next two departure times from a given location to another one in Switzerland.
The Stationboard website can help to determine the exact name of the start and the end station. With the station names it’s necessary to search for the ID of those stations:
diff --git a/components/sensor.time_date.html b/components/sensor.time_date.html
index 2a129cee6b..98c4d1fc7f 100644
--- a/components/sensor.time_date.html
+++ b/components/sensor.time_date.html
@@ -124,12 +124,12 @@ The time and date platform simple displays the time in various formats, the date
sensor:platform:time_datedisplay_options:
--type:'time'
--type:'date'
--type:'date_time'
--type:'time_date'
--type:'time_utc'
--type:'beat'
+-'time'
+-'date'
+-'date_time'
+-'time_date'
+-'time_utc'
+-'beat'
A switch platform that issues specific commands when it is turned on and off. This might very well become our most platform as it allows anyone to integrate any type of switch into Home Assistant that can be controlled from the command line, including calling other scripts!
To enable it, add the following lines to your configuration.yaml:
It looks like we have nothing to show you right now. It could be that we have not yet discovered all your devices but it is more likely that you have not configured Home Assistant yet.
Please see the Getting Started section on how to setup your devices.
Home Assistant States {{filter | filterName}} History Logbook Log Out
Streaming updates
Developer Tools
\ No newline at end of file
+ attached: function() {
+ this.isAttached = true;
+ },
+
+ dataChanged: function() {
+ this.drawChart();
+ },
+
+ /**************************************************
+ The following code gererates line line graphs for devices with continuous
+ values(which are devices that have a unit_of_measurement values defined).
+ On each graph the devices are grouped by their unit of measurement, eg. all
+ sensors measuring MB will be a separate line on single graph. The google
+ chart API takes data as a 2 dimensional array in the format:
+
+ DateTime, device1, device2, device3
+ 2015-04-01, 1, 2, 0
+ 2015-04-01, 0, 1, 0
+ 2015-04-01, 2, 1, 1
+
+ NOTE: the first column is a javascript date objects.
+
+ The first thing we do is build up the data with rows for each time of a state
+ change and initialise the values to 0. THen we loop through each device and
+ fill in its data.
+
+ **************************************************/
+ drawChart: function() {
+ if (!this.isAttached) {
+ return;
+ }
+
+ var root = Polymer.dom(this);
+ var unit = this.unit;
+ var deviceStates = this.data;
+
+ while (root.lastChild) {
+ root.removeChild(root.lastChild);
+ }
+
+ if (deviceStates.length === 0) {
+ return;
+ }
+
+ var chart = new google.visualization.LineChart(this);
+ var dataTable = new google.visualization.DataTable();
+
+ dataTable.addColumn({ type: 'datetime', id: 'Time' });
+
+ var options = {
+ legend: { position: 'top' },
+ titlePosition: 'none',
+ vAxes: {
+ // Adds units to the left hand side of the graph
+ 0: {title: unit}
+ },
+ hAxis: {
+ format: 'H:mm'
+ },
+ lineWidth: 1,
+ chartArea:{left:'60',width:"95%"},
+ explorer: {
+ actions: ['dragToZoom', 'rightClickToReset', 'dragToPan'],
+ keepInBounds: true,
+ axis: 'horizontal',
+ maxZoomIn: 0.1
+ }
+ };
+
+ if(this.isSingleDevice) {
+ options.legend.position = 'none';
+ options.vAxes[0].title = null;
+ options.chartArea.left = 40;
+ options.chartArea.height = '80%';
+ options.chartArea.top = 5;
+ options.enableInteractivity = false;
+ }
+
+ // Get a unique list of times of state changes for all the device
+ // for a particular unit of measureent.
+ var times = _.pluck(_.flatten(deviceStates), "lastChangedAsDate");
+ times = _.uniq(times, function(e) {
+ return e.getTime();
+ });
+
+ times = _.sortBy(times, function(o) { return o; });
+
+ var data = [];
+ var empty = new Array(deviceStates.length);
+ for(var i = 0; i < empty.length; i++) {
+ empty[i] = 0;
+ }
+
+ var timeIndex = 1;
+ var endDate = new Date();
+ var prevDate = times[0];
+
+ for(i = 0; i < times.length; i++) {
+ var currentDate = new Date(prevDate);
+
+ // because we only have state changes we add an extra point at the same time
+ // that holds the previous state which makes the line display correctly
+ var beforePoint = new Date(times[i]);
+ data.push([beforePoint].concat(empty));
+
+ data.push([times[i]].concat(empty));
+ prevDate = times[i];
+ timeIndex++;
+ }
+ data.push([endDate].concat(empty));
+
+
+ var deviceCount = 0;
+ deviceStates.forEach(function(device) {
+ var attributes = device[device.length - 1].attributes;
+ dataTable.addColumn('number', attributes.friendly_name);
+
+ var currentState = 0;
+ var previousState = 0;
+ var lastIndex = 0;
+ var count = 0;
+ var prevTime = data[0][0];
+ device.forEach(function(state) {
+
+ currentState = state.state;
+ var start = state.lastChangedAsDate;
+ if(state.state == 'None') {
+ currentState = previousState;
+ }
+ for(var i = lastIndex; i < data.length; i++) {
+ data[i][1 + deviceCount] = parseFloat(previousState);
+ // this is where data gets filled in for each time for the particular device
+ // because for each time two entries were create we fill the first one with the
+ // previous value and the second one with the new value
+ if(prevTime.getTime() == data[i][0].getTime() && data[i][0].getTime() == start.getTime()) {
+ data[i][1 + deviceCount] = parseFloat(currentState);
+ lastIndex = i;
+ prevTime = data[i][0];
+ break;
+ }
+ prevTime = data[i][0];
+ }
+
+ previousState = currentState;
+
+ count++;
+ }.bind(this));
+
+ //fill in the rest of the Array
+ for(var i = lastIndex; i < data.length; i++) {
+ data[i][1 + deviceCount] = parseFloat(previousState);
+ }
+
+ deviceCount++;
+ }.bind(this));
+
+ dataTable.addRows(data);
+ chart.draw(dataTable, options);
+ },
+ });
+})();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ It looks like we have nothing to show you right now. It could be that we have not yet discovered all your devices but it is more likely that you have not configured Home Assistant yet.
+
+
+ Please see the Getting Started section on how to setup your devices.
+
+ It looks like we have nothing to show you right now. It could be that we have not yet discovered all your devices but it is more likely that you have not configured Home Assistant yet.
+
+
+ Please see the Getting Started section on how to setup your devices.
+