Microsoft Surface pro 3, how to see battery usage


http://wp.me/ph3BR-1mX

 

桌面, 建立 BAT 檔案如下, 點兩下, 執行後會在桌面出現一個 battery_log_xxxxxxxx.html

battery_log.bat


REM xiaolaba
REM 2014-10-30
REM windows 8.1, surface pro 3, also usable with all windows notebook
REM To obtain battery usage and log, file name : battery_log_yyyymmdd_hhMMSS.

rem powercfg /batteryreport /output %USERPROFILE%\Desktop\%date%_battery_log.html

powercfg /batteryreport /output %USERPROFILE%\Desktop\battery_log_%date%_%time:~0,2%%time:~3,2%%time:~6,2%.html

rem powercfg /batteryreport

 

xiaolaba_win8_battrery_log

 

打開這個html, 瀏覽器就會出現電池的使用狀況.

xiaolaba_win8_battrery_log2

 

跟ANDROID 手機的很像. 其實, Surface Pro 3 自己顯示, 說他自己是 “手機", 奇怪吧.

 

 

 

俺們得到的第一個 電池消耗的紀錄

Battery report

// <![CDATA[
// Formats a number using the current locale (to handle the 1000’s separator).

// The result is rounded so no decimal point is shown.

function numberToLocaleString(value) {

var localeString = Math.round(parseFloat(value + “)).toLocaleString();

return localeString.substring(0, localeString.indexOf(‘.’));

}

function padLeft(number, length) {

var str = " + number;

while (str.length endTime

? msBetween(endTime, startTime)

: parseDateTime(endTime) – parseDateTime(startTime);

}

var dateFormat = /(\d{4})-(\d{2})-(\d{2})[T](\d{2}):(\d{2}):(\d{2})/

// Parses a date-time string and returns a Date (i.e. number of milliseconds)

function parseDateTime(value) {

if (!value) {

return 0;

}

var match = dateFormat.exec(value)

if (!match) {

return 0;

}

return Date.parse(match[1] + ‘/’ + match[2] + ‘/’ +

match[3] + ‘ ‘ + match[4] + ‘:’ +

match[5] + ‘:’ + match[6])

}

// Parses just the date portion of a date-time string and returns a Date

// (i.e. number of milliseconds)

function parseDate(value) {

if (!value) {

return 0;

}

var match = dateFormat.exec(value)

if (!match) {

return 0;

}

return Date.parse(match[1] + ‘/’ + match[2] + ‘/’ + match[3])

}

var durationFormat = /P((\d+)D)?T((\d+)H)?((\d+)M)?(\d+)S/

// Convert a string of the form P10DT1H15M40S to a count of milliseconds

function parseDurationToMs(value) {

var match = durationFormat.exec(value)

if (!match) {

return 0

}

var days = parseInt(match[2] || ‘0’);

var hrs = parseInt(match[4] || ‘0’);

var mins = parseInt(match[6] || ‘0’);

var secs = parseInt(match[7] || ‘0’);

return ((((((days * 24) + hrs) * 60) + mins) * 60) + secs) * 1000;

}

// Converts milliseconds to days

function msToDays(ms) {

return (ms / 1000 / 60 / 60 / 24);

}

function daysToMs(days) {

return (days * 24 * 60 * 60 * 1000);

}

// Formats a number of milliseconds as h:mm:ss

function formatDurationMs(value) {

var ms = parseInt(value);

var secs = ms / 1000;

var mins = secs / 60;

var hrs = Math.floor(mins / 60);

mins = Math.floor(mins % 60);

secs = Math.floor(secs % 60);

return hrs + ‘:’ + padLeft(mins,2) + ‘:’ + padLeft(secs,2);

}

// Converts a millisecond timestamp to a day and month string

// Note: dayOffset is forward from date.

function dateToDayAndMonth(ms, dayOffset) {

var adjustedDate = new Date(ms + (dayOffset * 24 * 60 * 60 * 1000));

return padLeft(adjustedDate.getMonth() + 1, 2) + “-" +

padLeft(adjustedDate.getDate(), 2);

}

// Takes a millisecond timestamp and returns a new millisecond timestamp

// rounded down to the current day.

function dateFloor(ms) {

var dt = new Date(ms);

return Date.parse(dt.getFullYear() + ‘/’ + (dt.getMonth() + 1) + ‘/’ + dt.getDate());

}

Timegraph = {

axisTop: 9.5,

axisRight: 24.5,

axisBottom: 25.5,

axisLeft: 25.5,

ticks: 10,

// Maximum number of 24 hour ticks for showing 12 and 6 hour ticks

ticks12Hour: 8,

ticks6Hour: 4,

// Shading

lineColor: “#B82830″,

shadingColor: “#4d1d35″,

precompute: function (graph) {

var canvas = graph.canvas;

var data = graph.data;

var min = 0;

var max = 0;

graph.height = canvas.height – Timegraph.axisTop – Timegraph.axisBottom;

graph.width = canvas.width – Timegraph.axisLeft – Timegraph.axisRight;

for (var i = 0; i < data.length; i++) {

data[i].t0 = parseDateTime(data[i].x0);

data[i].t1 = parseDateTime(data[i].x1);

if (i == 0) {

min = data[i].t0;

max = data[i].t1;

}

if (data[i].t0 max) {

max = data[i].t1;

}

data[i].yy0 =

Timegraph.axisTop + graph.height – data[i].y0 * graph.height;

data[i].yy1 =

Timegraph.axisTop + graph.height – data[i].y1 * graph.height;

}

if (graph.startTime != null) {

graph.startMs = parseDateTime(graph.startTime);

} else {

graph.startMs = min;

}

graph.endMs = max;

graph.durationMs = max – min;

},

drawFrame: function (graph) {

var canvas = graph.canvas;

var context = graph.context;

graph.width =

canvas.width – Timegraph.axisRight – Timegraph.axisLeft;

graph.height =

canvas.height – Timegraph.axisTop – Timegraph.axisBottom;

context.beginPath();

context.moveTo(Timegraph.axisLeft, Timegraph.axisTop);

context.lineTo(Timegraph.axisLeft + graph.width,

Timegraph.axisTop);

context.lineTo(Timegraph.axisLeft + graph.width,

Timegraph.axisTop + graph.height);

context.lineTo(Timegraph.axisLeft,

Timegraph.axisTop + graph.height);

context.lineTo(Timegraph.axisLeft, Timegraph.axisTop);

context.strokeStyle = “#c0c0c0″;

context.stroke();

},

drawRange: function (graph) {

var canvas = graph.canvas;

var context = graph.context;

context.font = “12pt Segoe UI";

context.fillStyle = “#00b0f0″;

context.fillText(“%", 0, Timegraph.axisTop + 5, Timegraph.axisLeft);

var tickSpacing = graph.height / 10;

var offset = Timegraph.axisTop + tickSpacing;

var tickValue = 90;

for (var i = 0; i < 9; i++) {

context.beginPath();

context.moveTo(Timegraph.axisLeft, offset);

context.lineTo(Timegraph.axisLeft + graph.width,

offset);

context.stroke();

context.fillText(tickValue.toString(),

0,

offset + 5,

Timegraph.axisLeft);

offset += tickSpacing;

tickValue -= 10;

}

},

drawDomain: function (graph, start, end) {

var canvas = graph.canvas;

var context = graph.context;

var data = graph.data;

var duration = end – start;

if ((end t0) {

t0 = t0 + daysToMs(1);

dayOffset++;

}

if (t0 >= t1) {

return;

}

var increment =

Math.max(Math.floor((t1 – t0) / daysToMs(Timegraph.ticks)), 1);

var incrementMs = daysToMs(increment);

var spacing = (incrementMs / duration) * graph.width;

var offset = (t0 – start) / duration;

var ticksCount = Math.floor((t1 – t0) / incrementMs);

for (offset = offset * graph.width + Timegraph.axisLeft;

offset < (graph.width + Timegraph.axisLeft);

offset += spacing) {

context.beginPath();

context.moveTo(offset, Timegraph.axisTop);

context.lineTo(offset, Timegraph.axisTop + graph.height);

context.stroke();

context.fillText(dateToDayAndMonth(startDay, dayOffset),

offset,

Timegraph.axisTop + graph.height + 15,

spacing);

dayOffset += increment;

}

},

plot: function (graph, start, end) {

var canvas = graph.canvas;

var context = graph.context

var data = graph.data;

if ((end < start)) {

return;

}

var duration = end – start;

Timegraph.drawDomain(graph, start, end);

context.fillStyle = Timegraph.shadingColor;

for (var i = 0; i < data.length – 1; i++) {

if ((data[i].t0 end) ||

(data[i].t1 > end)) {

continue;

}

var x1 = (data[i].t0 – start) / duration;

x1 = x1 * graph.width + Timegraph.axisLeft;

var x2 = (data[i].t1 – start) / duration;

x2 = x2 * graph.width + Timegraph.axisLeft;

context.globalAlpha = 0.3;

context.fillRect(x1, Timegraph.axisTop, (x2 – x1), graph.height);

context.globalAlpha = 1;

context.beginPath();

context.strokeStyle = Timegraph.lineColor;

context.lineWidth = 1.5;

context.moveTo(x1, data[i].yy0);

context.lineTo(x2, data[i].yy1);

context.stroke();

}

},

draw: function (graph) {

var canvas = document.getElementById(graph.element);

if (canvas == null) {

return;

}

var context = canvas.getContext(‘2d’);

if (context == null) {

return;

}

graph.width = 0;

graph.height = 0;

graph.context = context;

graph.canvas = canvas;

Timegraph.precompute(graph);

Timegraph.drawFrame(graph);

Timegraph.drawRange(graph);

Timegraph.plot(graph, graph.startMs, graph.endMs);

}

};

drainGraphData = [

{ x0: “2014-10-29T20:45:57″, x1: “2014-10-29T20:53:45″, y0: 0.6080023478771278, y1: 0.6416307963216592 },

{ x0: “2014-10-29T20:53:45″, x1: “2014-10-29T21:00:00″, y0: 0.6416307963216592, y1: 0.6249021717863432 },

{ x0: “2014-10-29T21:00:00″, x1: “2014-10-29T21:04:00″, y0: 0.6249021717863432, y1: 0.612453531598513 },

{ x0: “2014-10-29T21:04:00″, x1: “2014-10-29T21:07:14″, y0: 0.612453531598513, y1: 0.5962874192917237 },

{ x0: “2014-10-29T21:07:14″, x1: “2014-10-29T21:07:40″, y0: 0.5962874192917237, y1: 0.5951623948346704 },

{ x0: “2014-10-29T21:07:40″, x1: “2014-10-29T21:07:46″, y0: 0.5951623948346704, y1: 0.5947955390334573 },

{ x0: “2014-10-29T21:07:46″, x1: “2014-10-29T21:07:47″, y0: 0.5947955390334573, y1: 0.5947955390334573 },

{ x0: “2014-10-29T21:07:47″, x1: “2014-10-29T21:08:00″, y0: 0.5947955390334573, y1: 0.5927411465466641 },

{ x0: “2014-10-29T21:08:00″, x1: “2014-10-29T21:08:01″, y0: 0.5927411465466641, y1: 0.5927411465466641 },

{ x0: “2014-10-29T21:10:57″, x1: “2014-10-29T21:10:57″, y0: 0.5884856192525925, y1: 0.5884856192525925 },

{ x0: “2014-10-29T21:10:57″, x1: “2014-10-29T21:10:57″, y0: 0.5884856192525925, y1: 0.5884856192525925 },

{ x0: “2014-10-29T21:10:57″, x1: “2014-10-29T21:11:17″, y0: 0.5884856192525925, y1: 0.5882899628252788 },

{ x0: “2014-10-29T21:11:17″, x1: “2014-10-29T21:15:18″, y0: 0.5882899628252788, y1: 0.5802925063588339 },

{ x0: “2014-10-29T22:00:00″, x1: “2014-10-29T22:00:10″, y0: 0.632532772451575, y1: 0.6336333398552142 },

{ x0: “2014-10-29T22:00:19″, x1: “2014-10-29T22:15:31″, y0: 0.6338289962825279, y1: 0.7057571903737038 },

{ x0: “2014-10-30T12:11:53″, x1: “2014-10-30T12:40:26″, y0: 1, y1: 1 },

{ x0: “2014-10-30T12:40:26″, x1: “2014-10-30T12:58:00″, y0: 1, y1: 1 },

{ x0: “2014-10-30T12:58:00″, x1: “2014-10-30T13:03:00″, y0: 1, y1: 1 },

{ x0: “2014-10-30T13:03:00″, x1: “2014-10-30T13:05:00″, y0: 1, y1: 0.94413263508912 },

{ x0: “2014-10-30T13:05:00″, x1: “2014-10-30T13:09:00″, y0: 0.94413263508912, y1: 0.9348566329286335 },

{ x0: “2014-10-30T13:09:00″, x1: “2014-10-30T13:11:00″, y0: 0.9348566329286335, y1: 0.9316393866096799 },

{ x0: “2014-10-30T13:11:00″, x1: “2014-10-30T13:14:00″, y0: 0.9316393866096799, y1: 0.924852640725172 },

{ x0: “2014-10-30T13:14:00″, x1: “2014-10-30T13:19:00″, y0: 0.924852640725172, y1: 0.9148721320714839 },

{ x0: “2014-10-30T13:19:00″, x1: “2014-10-30T13:21:00″, y0: 0.9148721320714839, y1: 0.9102223892163539 },

];

function main() {

Timegraph.draw({

element: “drain-graph",

data: drainGraphData,

startTime: “2014-10-27T13:22:01″,

endTime: “2014-10-30T13:22:01″,

});

}

if (window.addEventListener != null) {

window.addEventListener(“load", main, false);

} else if (window.attachEvent != null) {

window.attachEvent(“onload", main);

}

// ]]>

 

Battery report

COMPUTER NAME USER-12
SYSTEM PRODUCT NAME Microsoft Corporation Surface Pro 3
BIOS 3.11.0250 09/27/2014
OS BUILD 9600.17085.amd64fre.winblue_gdr.140330-1035
PLATFORM ROLE Slate
CONNECTED STANDBY Supported
REPORT TIME 2014-10-30 13:22:01

Installed batteries

Information about each currently installed battery

BATTERY1
NAME X863568
MANUFACTURER SDI
SERIAL NUMBER 291E
CHEMISTRY LION
DESIGN CAPACITY 42,157 mWh
FULL CHARGE CAPACITY 42,583 mWh
CYCLE COUNT

Recent usage

Power states over the last 3 days

START TIME STATE SOURCE CAPACITY REMAINING
2014-10-29 20:42:56 Active AC 59 % 24,267 mWh
20:45:52 Connected standby AC 61 % 24,837 mWh
20:45:57 Active AC 61 % 24,860 mWh
20:53:45 Active Battery 64 % 26,235 mWh
21:07:14 Connected standby Battery 60 % 24,381 mWh
21:07:40 Active Battery 60 % 24,335 mWh
21:07:46 Connected standby Battery 59 % 24,320 mWh
21:07:47 Active Battery 59 % 24,320 mWh
21:08:00 Connected standby Battery 59 % 24,236 mWh
21:08:01 Suspended 59 % 24,236 mWh
21:10:57 Connected standby Battery 59 % 24,062 mWh
21:10:57 Active Battery 59 % 24,062 mWh
21:10:57 Connected standby Battery 59 % 24,062 mWh
21:11:17 Active Battery 59 % 24,054 mWh
21:15:18 Connected standby Battery 58 % 23,727 mWh
21:49:56 Connected standby AC 56 % 23,028 mWh
21:49:56 Active AC 56 % 23,028 mWh
21:50:02 Connected standby AC 56 % 23,043 mWh
21:50:08 Active AC 56 % 23,066 mWh
21:50:39 Connected standby AC 57 % 23,218 mWh
22:00:00 Active AC 63 % 25,863 mWh
22:00:10 Active Battery 63 % 25,908 mWh
22:00:19 Active AC 63 % 25,916 mWh
22:15:31 Active Battery 71 % 28,857 mWh
22:15:41 Active AC 71 % 28,865 mWh
22:37:00 Suspended 78 % 31,692 mWh
22:38:50 Active AC 78 % 31,973 mWh
2014-10-30 00:16:05 Connected standby AC 99 % 40,668 mWh
00:34:41 Active AC 104 % 42,583 mWh
00:55:25 Connected standby AC 104 % 42,583 mWh
06:13:48 Active AC 104 % 42,583 mWh
06:14:18 Connected standby AC 104 % 42,583 mWh
08:59:05 Active AC 104 % 42,583 mWh
09:28:00 Suspended 104 % 42,583 mWh
09:35:23 Active AC 100 % 42,583 mWh
09:35:23 Suspended 100 % 42,583 mWh
09:36:58 Active AC 100 % 42,583 mWh
11:58:43 Connected standby AC 100 % 42,583 mWh
12:11:53 Active AC 100 % 42,583 mWh
12:40:26 Active Battery 100 % 42,583 mWh
13:21:00 Report generated Battery 91 % 38,760 mWh

Battery usage

Battery drains over the last 3 days

 

START TIME STATE DURATION ENERGY DRAINED
2014-10-29 20:53:45 Active 0:13:28 5 % 1,854 mWh
21:07:14 Connected standby 0:00:25 46 mWh
21:07:40 Active 0:00:06 15 mWh
21:07:46 Connected standby 0:00:01
21:07:47 Active 0:00:13 84 mWh
21:08:00 Connected standby 0:00:00
21:10:57 Connected standby 0:00:00
21:10:57 Active 0:00:00
21:10:57 Connected standby 0:00:19 8 mWh
21:11:17 Active 0:04:00 1 % 327 mWh
21:15:18 Connected standby 0:34:38 2 % 699 mWh
22:00:10 Active 0:00:09 -8 mWh
22:15:31 Active 0:00:09 -8 mWh
12:40:26 Active 0:40:33 9 % 3,823 mWh

Usage history

History of system usage on AC and battery

BATTERY DURATION AC DURATION
PERIOD ACTIVE CONNECTED STANDBY ACTIVE CONNECTED STANDBY
2014-10-04- 2014-10-11 0:02:06
2014-10-11- 2014-10-18
2014-10-19
2014-10-20
2014-10-21
2014-10-22
2014-10-23
2014-10-24
2014-10-25
2014-10-26
2014-10-27
2014-10-28
2014-10-29 0:18:05 0:35:23 2:09:05 0:09:32

Battery capacity history

Charge capacity history of the system’s batteries

PERIOD FULL CHARGE CAPACITY DESIGN CAPACITY
2014-10-04- 2014-10-11 40,888 mWh 42,157 mWh
2014-10-11- 2014-10-18 40,888 mWh 42,157 mWh
2014-10-19 40,888 mWh 42,157 mWh
2014-10-20 40,888 mWh 42,157 mWh
2014-10-21 40,888 mWh 42,157 mWh
2014-10-22 40,888 mWh 42,157 mWh
2014-10-23 40,888 mWh 42,157 mWh
2014-10-24 40,888 mWh 42,157 mWh
2014-10-25 40,888 mWh 42,157 mWh
2014-10-26 40,888 mWh 42,157 mWh
2014-10-27 40,888 mWh 42,157 mWh
2014-10-28 40,888 mWh 42,157 mWh
2014-10-29 40,888 mWh 42,157 mWh

Battery life estimates

Battery life estimates based on observed drains

AT FULL CHARGE AT DESIGN CAPACITY
PERIOD ACTIVE CONNECTED STANDBY ACTIVE CONNECTED STANDBY
2014-10-04- 2014-10-11
2014-10-11- 2014-10-18
2014-10-19
2014-10-20
2014-10-21
2014-10-22
2014-10-23
2014-10-24
2014-10-25
2014-10-26
2014-10-27
2014-10-28
2014-10-29 5:26:35
32:01:19

50 %

/ 16 h

 

5:36:43
33:00:56

48 %

/ 16 h

 

Current estimate of battery life based on all observed drains since OS install

Since OS install 5:40:07
33:20:58

48 %

/ 16 h

 

5:36:43
33:00:56

48 %

/ 16 h

 

 

 

 

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s