|
9 | 9 | }, |
10 | 10 | { |
11 | 11 | "cell_type": "code", |
12 | | - "execution_count": 13, |
| 12 | + "execution_count": 24, |
13 | 13 | "metadata": {}, |
14 | 14 | "outputs": [], |
15 | 15 | "source": [ |
|
28 | 28 | }, |
29 | 29 | { |
30 | 30 | "cell_type": "code", |
31 | | - "execution_count": 14, |
| 31 | + "execution_count": null, |
32 | 32 | "metadata": {}, |
33 | 33 | "outputs": [], |
34 | 34 | "source": [ |
|
37 | 37 | }, |
38 | 38 | { |
39 | 39 | "cell_type": "code", |
40 | | - "execution_count": 15, |
| 40 | + "execution_count": 26, |
41 | 41 | "metadata": {}, |
42 | 42 | "outputs": [ |
43 | 43 | { |
|
69 | 69 | }, |
70 | 70 | { |
71 | 71 | "cell_type": "code", |
72 | | - "execution_count": 16, |
| 72 | + "execution_count": 27, |
73 | 73 | "metadata": { |
74 | 74 | "collapsed": false, |
75 | 75 | "inputHidden": false, |
|
92 | 92 | }, |
93 | 93 | { |
94 | 94 | "cell_type": "code", |
95 | | - "execution_count": 17, |
| 95 | + "execution_count": 28, |
96 | 96 | "metadata": {}, |
97 | 97 | "outputs": [ |
98 | 98 | { |
|
109 | 109 | " 'zone.home']" |
110 | 110 | ] |
111 | 111 | }, |
112 | | - "execution_count": 17, |
| 112 | + "execution_count": 28, |
113 | 113 | "metadata": {}, |
114 | 114 | "output_type": "execute_result" |
115 | 115 | } |
|
127 | 127 | }, |
128 | 128 | { |
129 | 129 | "cell_type": "code", |
130 | | - "execution_count": 18, |
| 130 | + "execution_count": 29, |
131 | 131 | "metadata": {}, |
132 | 132 | "outputs": [ |
133 | 133 | { |
|
159 | 159 | }, |
160 | 160 | { |
161 | 161 | "cell_type": "code", |
162 | | - "execution_count": 19, |
| 162 | + "execution_count": 30, |
163 | 163 | "metadata": {}, |
164 | 164 | "outputs": [ |
165 | 165 | { |
|
204 | 204 | "0 0 1.680324e+09 zone.home" |
205 | 205 | ] |
206 | 206 | }, |
207 | | - "execution_count": 19, |
| 207 | + "execution_count": 30, |
208 | 208 | "metadata": {}, |
209 | 209 | "output_type": "execute_result" |
210 | 210 | } |
|
225 | 225 | }, |
226 | 226 | { |
227 | 227 | "cell_type": "code", |
228 | | - "execution_count": 20, |
| 228 | + "execution_count": 31, |
229 | 229 | "metadata": {}, |
230 | 230 | "outputs": [ |
231 | 231 | { |
|
260 | 260 | }, |
261 | 261 | { |
262 | 262 | "cell_type": "code", |
263 | | - "execution_count": 21, |
| 263 | + "execution_count": 32, |
264 | 264 | "metadata": {}, |
265 | 265 | "outputs": [ |
266 | 266 | { |
|
340 | 340 | "5 2023-04-01T05:39:42+00:00 1.680324e+09 sensor.sun_next_dawn" |
341 | 341 | ] |
342 | 342 | }, |
343 | | - "execution_count": 21, |
| 343 | + "execution_count": 32, |
344 | 344 | "metadata": {}, |
345 | 345 | "output_type": "execute_result" |
346 | 346 | } |
|
358 | 358 | }, |
359 | 359 | { |
360 | 360 | "cell_type": "code", |
361 | | - "execution_count": 22, |
| 361 | + "execution_count": 33, |
362 | 362 | "metadata": {}, |
363 | 363 | "outputs": [], |
364 | 364 | "source": [ |
|
367 | 367 | }, |
368 | 368 | { |
369 | 369 | "cell_type": "code", |
370 | | - "execution_count": 23, |
| 370 | + "execution_count": 34, |
371 | 371 | "metadata": {}, |
372 | 372 | "outputs": [ |
373 | 373 | { |
|
407 | 407 | "Index: []" |
408 | 408 | ] |
409 | 409 | }, |
410 | | - "execution_count": 23, |
| 410 | + "execution_count": 34, |
411 | 411 | "metadata": {}, |
412 | 412 | "output_type": "execute_result" |
413 | 413 | } |
|
425 | 425 | }, |
426 | 426 | { |
427 | 427 | "cell_type": "code", |
428 | | - "execution_count": 24, |
| 428 | + "execution_count": 35, |
429 | 429 | "metadata": {}, |
430 | 430 | "outputs": [], |
431 | 431 | "source": [ |
432 | 432 | "df['day_of_week'] = df['last_updated_ts'].apply(lambda x : x.dayofweek)\n", |
433 | 433 | "df['is_temperature'] = df['entity_id'].apply(lambda x : 'temperature' in x)" |
434 | 434 | ] |
435 | 435 | }, |
| 436 | + { |
| 437 | + "cell_type": "markdown", |
| 438 | + "metadata": {}, |
| 439 | + "source": [ |
| 440 | + "You can fetch [long-term statistics](https://data.home-assistant.io/docs/statistics/) using a separate function" |
| 441 | + ] |
| 442 | + }, |
| 443 | + { |
| 444 | + "cell_type": "code", |
| 445 | + "execution_count": 36, |
| 446 | + "metadata": {}, |
| 447 | + "outputs": [ |
| 448 | + { |
| 449 | + "name": "stdout", |
| 450 | + "output_type": "stream", |
| 451 | + "text": [ |
| 452 | + "\n", |
| 453 | + " WITH combined_states AS (\n", |
| 454 | + " SELECT\n", |
| 455 | + " statistics.created_ts,\n", |
| 456 | + " statistics.start_ts,\n", |
| 457 | + " statistics.mean,\n", |
| 458 | + " statistics.max,\n", |
| 459 | + " statistics.sum,\n", |
| 460 | + " statistics_meta.statistic_id,\n", |
| 461 | + " statistics_meta.source,\n", |
| 462 | + " statistics_meta.unit_of_measurement,\n", |
| 463 | + " statistics_meta.has_mean,\n", |
| 464 | + " statistics_meta.has_sum\n", |
| 465 | + " FROM statistics\n", |
| 466 | + " JOIN statistics_meta\n", |
| 467 | + " ON statistics.metadata_id = statistics_meta.id\n", |
| 468 | + " )\n", |
| 469 | + " SELECT *\n", |
| 470 | + " FROM combined_states\n", |
| 471 | + " WHERE \n", |
| 472 | + " statistic_id IN ('sensor.temperature', 'sensor:temperature')\n", |
| 473 | + " ORDER BY created_ts DESC\n", |
| 474 | + " \n", |
| 475 | + "The returned Pandas dataframe has 0 rows of data.\n" |
| 476 | + ] |
| 477 | + }, |
| 478 | + { |
| 479 | + "data": { |
| 480 | + "text/html": [ |
| 481 | + "<div>\n", |
| 482 | + "<style scoped>\n", |
| 483 | + " .dataframe tbody tr th:only-of-type {\n", |
| 484 | + " vertical-align: middle;\n", |
| 485 | + " }\n", |
| 486 | + "\n", |
| 487 | + " .dataframe tbody tr th {\n", |
| 488 | + " vertical-align: top;\n", |
| 489 | + " }\n", |
| 490 | + "\n", |
| 491 | + " .dataframe thead th {\n", |
| 492 | + " text-align: right;\n", |
| 493 | + " }\n", |
| 494 | + "</style>\n", |
| 495 | + "<table border=\"1\" class=\"dataframe\">\n", |
| 496 | + " <thead>\n", |
| 497 | + " <tr style=\"text-align: right;\">\n", |
| 498 | + " <th></th>\n", |
| 499 | + " <th>created_ts</th>\n", |
| 500 | + " <th>start_ts</th>\n", |
| 501 | + " <th>mean</th>\n", |
| 502 | + " <th>max</th>\n", |
| 503 | + " <th>sum</th>\n", |
| 504 | + " <th>statistic_id</th>\n", |
| 505 | + " <th>source</th>\n", |
| 506 | + " <th>unit_of_measurement</th>\n", |
| 507 | + " <th>has_mean</th>\n", |
| 508 | + " <th>has_sum</th>\n", |
| 509 | + " </tr>\n", |
| 510 | + " </thead>\n", |
| 511 | + " <tbody>\n", |
| 512 | + " </tbody>\n", |
| 513 | + "</table>\n", |
| 514 | + "</div>" |
| 515 | + ], |
| 516 | + "text/plain": [ |
| 517 | + "Empty DataFrame\n", |
| 518 | + "Columns: [created_ts, start_ts, mean, max, sum, statistic_id, source, unit_of_measurement, has_mean, has_sum]\n", |
| 519 | + "Index: []" |
| 520 | + ] |
| 521 | + }, |
| 522 | + "execution_count": 36, |
| 523 | + "metadata": {}, |
| 524 | + "output_type": "execute_result" |
| 525 | + } |
| 526 | + ], |
| 527 | + "source": [ |
| 528 | + "df_long_term = db.fetch_all_statistics_of(('sensor.temperature',), limit=None)\n", |
| 529 | + "df_long_term" |
| 530 | + ] |
| 531 | + }, |
436 | 532 | { |
437 | 533 | "attachments": {}, |
438 | 534 | "cell_type": "markdown", |
|
444 | 540 | ], |
445 | 541 | "metadata": { |
446 | 542 | "kernelspec": { |
447 | | - "display_name": "Python 3.8.5 ('venv': venv)", |
| 543 | + "display_name": ".venv", |
448 | 544 | "language": "python", |
449 | 545 | "name": "python3" |
450 | 546 | }, |
|
458 | 554 | "name": "python", |
459 | 555 | "nbconvert_exporter": "python", |
460 | 556 | "pygments_lexer": "ipython3", |
461 | | - "version": "3.8.5" |
| 557 | + "version": "3.12.0" |
462 | 558 | }, |
463 | 559 | "nteract": { |
464 | 560 | "version": "0.15.0" |
465 | | - }, |
466 | | - "vscode": { |
467 | | - "interpreter": { |
468 | | - "hash": "2af4a7918fba5fbcf89f5d2677b0e673882f4b74674337f98a681302e7f6b461" |
469 | | - } |
470 | 561 | } |
471 | 562 | }, |
472 | 563 | "nbformat": 4, |
|
0 commit comments