{"id":5248,"date":"2023-10-21T15:56:49","date_gmt":"2023-10-21T13:56:49","guid":{"rendered":"https:\/\/www.sigalou-domotique.fr\/?p=5248"},"modified":"2026-01-04T21:26:27","modified_gmt":"2026-01-04T19:26:27","slug":"utiliser-un-script-python-pour-enregistrer-des-donnees-dans-ha","status":"publish","type":"post","link":"https:\/\/www.sigalou-domotique.fr\/zh\/utiliser-un-script-python-pour-enregistrer-des-donnees-dans-ha","title":{"rendered":"\u4f7f\u7528 Python \u811a\u672c\u5728 HA \u4e2d\u4fdd\u5b58\u6570\u636e"},"content":{"rendered":"<p>\u6211\u7acb\u5373\u8b66\u544a\uff0c\u8fd9\u4e2aRetex\u53ea\u662f\u4e3a\u4e86\u6559\u5b66\u76ee\u7684\uff0c\u6211\u5199\u5b83\u662f\u4e3a\u4e86\u5206\u4eab\u4e00\u79cd\u65b9\u6cd5\uff0c\u5373\u4ece\u90a3\u65f6\u8d77\u6211\u5c31\u4ee5\u4e0d\u540c\u7684\u65b9\u5f0f\u610f\u8bc6\u5230\u4e86\u8fd9\u4e2a\u529f\u80fd\uff0c\u6240\u4ee5\u6211\u6ca1\u6709\u8fd9\u4e2a\u8fc7\u7a0b\u3002<!--more--><\/p>\r\n<h3>\u96c6\u6210\u4ee5\u8fd0\u884c Python \u811a\u672c<\/h3>\r\n<p>\u51fa\u4e8e\u6211\u4ece\u672a\u7406\u89e3\u7684\u539f\u56e0\uff0cHA\u5185\u7f6e\u7684python\u811a\u672c\u529f\u80fd\u662farchi-mini\uff0c\u4e0d\u53ef\u80fd\u5bfc\u5165\uff0c\u6240\u4ee5\u6211\u5fc5\u987b\u4f7f\u7528\u79f0\u4e3a\u96c6\u6210\u3002 <a href=\"https:\/\/github.com\/custom-components\/pyscript\" target=\"_blank\" rel=\"noopener\">pyscript \u7684<\/a>.<\/p>\r\n<p><a href=\"https:\/\/hacs-pyscript.readthedocs.io\/en\/latest\/\" target=\"_blank\" rel=\"noopener\">\u533b\u751f\u6765\u4e86<\/a><\/p>\r\n<p>\u6211\u901a\u8fc7\u8be6\u7ec6\u4fe1\u606f\u6765\u5b89\u88c5\u5b83\uff0c\u5b83\u975e\u5e38\u7b80\u5355\uff0cHACS\u4e2d\u7684\u6240\u6709\u5185\u5bb9\u90fd\u5728\u6587\u6863\u4e2d\u3002<\/p>\r\n<p>\u5728config.yaml\u4e2d\uff0c\u6211\u6709\u4ee5\u4e0b\u884c\uff1a<\/p>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\">pyscript \uff1a allow_all_imports \uff1a True hass _is _global \uff1a \u771f\u5b9e \u7684<\/pre>\r\n<h3>\u6211\u5f97\u5230\u4e00\u4e2a\u4ee4\u724c<\/h3>\r\n<p>\u6211\u6253\u5f00 Home Assistant \u7528\u6237\u754c\u9762\u3002<\/p>\r\n<p>\u5728\u5de6\u4e0b\u89d2\uff0c\u6211\u70b9\u51fb\u6211\u7684\u7528\u6237\u540d\uff08\u6216\u4e2a\u4eba\u8d44\u6599\u56fe\u6807\uff09\u3002<\/p>\r\n<p>\u70b9\u51fb\"Profile\"\u3002<\/p>\r\n<p>\u6211\u5411\u4e0b\u6eda\u52a8\u5230\u300e\u957f\u671f\u8bbf\u95ee\u4ee4\u724c\u300f\u90e8\u5206\u3002\u00a0<\/p>\r\n<p>\u6211\u70b9\u51fb\u300e\u521b\u5efa\u4ee4\u724c\u300f\u6765\u751f\u6210\u4e00\u4e2a\u65b0\u7684\u4ee4\u724c\u3002<\/p>\r\n<p>\u6211\u7ed9\u6211\u7684\u4ee3\u5e01\u4e00\u4e2a\u540d\u5b57\uff0c\u8ba9\u6211\u66f4\u5bb9\u6613\u627e\u5230\u5b83\u3002<\/p>\r\n<p>\u4e00\u65e6\u4ee3\u5e01\u88ab\u521b\u5efa\uff0c\u6211\u5c31\u4f1a\u770b\u5230\u5b83\u7684\u5185\u5bb9\u3002 \u6211\u590d\u5236\u4ee4\u724c\u7684\u503c\uff0c\u5373\u5b57\u6bcd\u6570\u5b57\u5b57\u7b26\u7cfb\u5217\uff0c\u5e76\u5c06\u5176\u7c98\u8d34\u5230\u6211\u7684\u914d\u7f6e\u4e2d\uff08\u4e0b\u6bb5\uff09<\/p>\r\n<h3>\u58f0\u660e\u5728Python\u548c\u4f20\u611f\u5668\u4e4b\u95f4\u5efa\u7acb\u94fe\u63a5\u7684\u5e73\u53f0<\/h3>\r\n<p>\u5728config.yaml\u4e2d\uff0c\u6211\u6dfb\u52a0\u4e86\u4ee5\u4e0b\u884c\uff1a<\/p>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\">REST_COMMAND \uff1a send_data_to_api \uff1a URL \uff1a http:\/\/homeassistant.local:8123\/api\/states\/sensor.wallbox _charges \u65b9\u6cd5\uff1a \"post\" content_type \uff1a \"application\/json\"\u5934\uff1a \u6388\u6743\uff1a \u300aBearer TOKEN\u300b # \u7528\u4ee4\u724ccf\u4e0a\u4e00\u6bb5\u6709\u6548\u8f7d\u8377\u66ff\u6362TOKEN\uff1a {{data | toJSON }}  <\/pre>\r\n<p>\u8fd9\u662f\u7531Python\u811a\u672c\uff08\u4e0b\u65b9\uff09\u63d0\u4f9b\u7684\u524d\u95e8\uff0c\u5e76\u5c06\u4fe1\u606f\u53d1\u9001\u5230\u4f20\u611f\u5668.wallbox _charges\u3002<\/p>\r\n<h3>\u6211\u7684 Python \u811a\u672c<\/h3>\r\n<p>\u6211\u5c06 _charges.pywallbox \u6587\u4ef6\u653e\u5728 \/config\/pyscript \u6587\u4ef6\u5939\u4e2d<\/p>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\">\u5bfc\u5165\u65e5\u671f\u65f6\u95f4 pytz @service def wallbox _charges(LASTDATA=None, action=None, price=\"123\", km=\"123\", dateStart=\"01\/01\/2000 12:00, value=\"123\")\uff1a _time _paris = pytz.timezone(\"Europe\/Paris\")\u73b0\u5728 _timestamp = int\uff08datetime.datetime.now\uff08\uff09.timestamp\uff08\uff09\uff09\u73b0\u5728 _time_paris = datetime.datetimestamp\uff08\u73b0\u5728 _timestamp, _time_time_paris\uff09\u73b0\u5728 _formatee = now _time_paris.strftime\uff08\uff09%d\/%m\/%Y \u4f4d %H:%M:%s\uff09nowMoins20min = datetime.datetime.now\uff08\uff09- datetime.timedelta(minutes=20)nowMoins20min_formatee = nowMoins20min.strftime(\")%H:teDebutRecue = datetime.datetime.strptime(dateDebut,')%d\/%m\/%Y \u4f4d %H:%M:%s'.replace(tzinfo=fuseau_heure_paris)debut_timestamp_formatee = dateDebutRecue.strftime(\")%d\/%m\/%Y \u4f4d %H:%M:%s\"\uff09debut_timestamp_formatee_SansSecondes = dateDebutRecue.strftime(\")%d\/%m\/%Y \u4f4d %H:%M\uff09\uff09 # \u73b0\u5728\u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a datetime \u5bf9\u8c61 _dt = datetime.datetime.strptime\uff08\u73b0\u5728 _formatee\uff09%d\/%m\/%Y \u4f4d %H:%M:%s\uff09sirgin_dt = datetime.datetime.strptime(debut_timestamp_formatee)\uff0c%d\/%m\/%Y \u4f4d %H:%M:%S \uff09 # \u8ba1\u7b97\u65f6\u95f4\u5bf9\u8c61DeCharge = now_dt - debut_dt - datetime.timedelta(minutes=20) # \u4ee5\u5c0f\u65f6\uff0c\u5206\u949f\u548c\u79d2\u5c0f\u65f6\u683c\u5f0f\u5316\u6301\u7eed\u65f6\u95f4\uff0c\u4f11\u606f = divmod(timeDeCharge.seconds, 3600)\u5206\u949f\uff0c\u79d2 = divmod(rest, 60) # \u663e\u793a\u6301\u7eed\u65f6\u95f4\u4e3a HH:MM:SS timeDeCharge_formatee = f\"{hours:02}:{minutes:02}\" # \u5728\u62a5\u7eb8\u4e0a\u5199\u4e00\u6761\u4fe1\u606f\u4fe1\u606f #log.info(action)\u5982\u679c action == \"register\"\uff1a valueaadd = [{ \"saved_at\"\uff09\uff1a \u73b0\u5728_timestamp\uff0c\u300e\u5f00\u59cb\u300f\uff1a \u9996\u6b21\u4eae\u76f8_timestamp_formatee_SansSecondes\uff0c\"end\"\uff1a nowLess20min _formatee, \"Duration\"\uff1a TimeDeCharge_formatee\uff0c\u300e\u6d88\u8d39\u300f\uff1a \u503c\"km\"\uff1a \u516c\u91cc\u300e\u6210\u672c\u300f\uff1a round(value * price, 2)}] \u5982\u679c LASTDATA \u4e0d\u662f None\uff1a valuea add = LASTDATA + valuea add data = { \"state\" \uff1a \u9996\u6b21\u4eae\u76f8_timestamp_formatee_SansSecondes\uff0c\"attributes\"\uff1a {\"\u66f4\u65b0_at\"\uff09\uff1a \u73b0\u5728 _dt.strftime\uff08\uff09%d\/%m\/%Y \u4f4d %H:%M:%\"S\"\uff09\uff0c\"\u6536\u8d39\u4f1a\u8bdd\"\uff1a ValueAdd } \u5982\u679c action == \"init\"\uff1a \u6570\u636e = {'state': \"on\"\uff0c\"attributes\"\uff1a {\"\u66f4\u65b0_at\"\uff09\uff1a '14\/10\/2023 16:42:39'\uff0c\"\u4f1a\u8bdd\u6536\u8d39\"\uff1a [ {\u300e\u6d88\u8d39\u300f\uff1a 2.14 \u300e\u6210\u672c\u300f\uff1a 0.43\uff0c\u300e\u6301\u7eed\u65f6\u95f4\u300f\uff1a \"00:27\"\uff0c\"\u5f00\u59cb\"\uff1a \"19\/09\/2023 20:36\"\uff0c\"\u7ed3\u675f\"\uff1a \"21:03\"\uff0c\"km\"\uff1a 17\u3001\"Saved_at\"\uff1a 1695150359 }, { \u300e\u6d88\u8d39\u300f \uff1a 23.29 \u300e\u6210\u672c\u300f\uff1a 4.66\u300e\u6301\u7eed\u65f6\u95f4\u300f\uff1a \"4:19\"\uff0c\"\u5f00\u59cb\"\uff1a \"21\/09\/2023 21:06\"\uff0c\"\u7ed3\u675f\"\uff1a \"01:25\"\uff0c\"km\"\uff1a \u7b2c192\u7ae0 \"Saved_at\"\uff1a 1695323159 }, { \u300e\u6d88\u8d39\u300f \uff1a 7.68\u300e\u6210\u672c\u300f\uff1a 1.54\u300e\u6301\u7eed\u65f6\u95f4\u300f\uff1a \"01:23\"\uff0c\"\u5f00\u59cb\"\uff1a \"22\/09\/2023 08:45\"\uff0c\"\u7ed3\u675f\"\uff1a \"10:08\"\uff0c\"km\"\uff1a 63\u3001\"saved_at\"\uff1a 1695409559 }, { \u300e\u6d88\u8d39\u300f \uff1a 23.80\u300e\u6210\u672c\u300f\uff1a 4.76\u300e\u6301\u7eed\u65f6\u95f4\u300f\uff1a \"04:26\"\uff0c\"\u5f00\u59cb\"\uff1a \"23\/09\/2023 16:57\"\uff0c\"\u7ed3\u675f\"\uff1a \"21:23\"\uff0c\"km\"\uff1a \u7b2c196\u7ae0 \"Saved_at\"\uff1a 1695495959 } } } # \u8c03\u7528 REST \u670d\u52a1\u53d1\u9001\u6570\u636e\u670d\u52a1 _data = { \"token\"\uff1a \"XXXXXX\"\uff0c # \u66ff\u6362\u4e3a\u4ee4\u724c\u300e\u6570\u636e\u300f\uff1a \u6570\u636e } \u5982\u679c action == \"register\" \u6216 action == \"init\"\uff1a # \u8c03\u7528 REST \u670d\u52a1\u5f02\u6b65\u7b49\u5f85 hass.services.async_call('rest_command', 'send_data_to_api', _data service) # \u5728\u65e5\u5fd7\u4e2d\u5199\u51fa\u9519\u8bef\u6d88\u606f #log.error(\"End script\")<\/pre>\r\n<h3>\u6dfb\u52a0\u4e24\u4e2a\u81ea\u52a8\u5316<\/h3>\r\n<p>\u4e00\u4e2a\u521d\u59cb\u5316\u4f20\u611f\u5668\uff0c\u53e6\u4e00\u4e2a\u7528\u4e8e\u6dfb\u52a0\u6570\u636e<\/p>\r\n<h4>\u521d\u59cb\u5316\u6570\u636e<\/h4>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\">\u5316\u540d \uff1a \u521d\u59cb\u5316\u52a0\u8f7d\u4f1a\u8bdd\u63cf\u8ff0 \uff1a \u89e6\u53d1\u5668\uff1a [\u2026]\u6761\u4ef6\uff1a [] \u884c\u52a8\uff1a \u670d\u52a1\uff1a pyscript.wallbox _ \u5145\u7535\u6570\u636e\uff1a \u884c\u52a8\uff1a Init \u6a21\u5f0f \uff1a \u5355 \u4eba \u5355\r\n<\/pre>\r\n<h4>\u4fdd\u5b58\u6570\u636e<\/h4>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\">\u5316\u540d \uff1a \u4fdd\u5b58\u52a0\u8f7d\u4f1a\u8bdd\u63cf\u8ff0 \uff1a &gt; - \u5f53\u4f20\u611f\u5668\u5728 20 \u5206\u949f\u5185\u672a\u66f4\u6539\u5176\u503c\u4e14\u672a\u5728 0 \u89e6\u53d1\u65f6\u89e6\u53d1\u6b64\u81ea\u52a8\u5316\uff1a \u5e73\u53f0\uff1a \u56fd\u5bb6\u5b9e\u4f53_id\uff1a - sensor.wallbox _portal _added _range \u7528\u4e8e\uff1a \u5c0f\u65f6 \uff1a 0\u5206\u949f\uff1a 20\u79d2\uff1a \u542f\u7528 0 \uff1a \u771f\u5b9e\u6761\u4ef6\uff1a \u6761\u4ef6\uff1a \u6570\u5b57 _state \u5b9e\u4f53 _id \uff1a Sensor.wallbox _portal _added _energy \u4e0a\u9762\uff1a 0 - \u6761\u4ef6\uff1a \u4e0d\u662f\u6761\u4ef6\uff1a \u6761\u4ef6\uff1a \u56fd\u5bb6\u5b9e\u4f53_id\uff1a Sensor.wallbox _ \u5145\u7535\u72b6\u6001\uff1a &gt;- { as_timestamp\uff08states('sensor.wallbox _portal _added_range _min')\uff09| int \u03a9 timestamp _custom('')%d\/%m\/%Y \u4f4d %H:%M:%s', true\uff09} \u542f\u7528\uff1a \u865a\u5047\u884c\u4e3a\uff1a \u670d\u52a1\uff1a pyscript.wallbox _ \u5145\u7535\u6570\u636e\uff1a \u884c\u52a8\uff1a \u8bb0\u5f55\u503c \uff1a {{States('sensor.wallbox _portal _added_energy')}} \u5956\uff1a {{States('sensor.wallbox _portal _energy_price')}} \"{{States('sensor.wallbox _portal _added_range')}\" LASTDATA\uff1a {{State _attr('sensor.wallbox _charges', 'sessionscharge')}}\" dateStart\uff1a &gt;- { as_timestamp\uff08states('sensor.wallbox _portal _added_range _min')\uff09| int \u03a9 timestamp _custom('')%d\/%m\/%Y \u4f4d %H:%M:%S', true\uff09} - \u670d\u52a1\uff1a variable.update _sensor \u6570\u636e\uff1a \u66ff\u6362_attributes \uff1a \u5047\u503c \uff1a &gt;- { as_timestamp\uff08states('sensor.wallbox _portal _added_range _min')\uff09| int \u03a9 timestamp _custom('')%d\/%m\/%Y \u4f4d %H:%M:%S', true\uff09} \u76ee\u6807\uff1a entity_id \uff1a \u542f\u7528 Sensor.wallbox _charge \uff1a \u5047\u6a21\u5f0f \uff1a \u5355 \u4eba \u5355<\/pre>\r\n<p>\u8981\u5177\u6709\u8d1f\u8f7d\u7684\u6700\u5c0f\u503c\uff0c\u6211\u4f7f\u7528\u7edf\u8ba1\u6765\u5177\u6709\u6700\u5c0f\u503c\u3002<\/p>\r\n<p>\u8be5\u4f20\u611f\u5668\u5728sensors.yaml\u4e2d\u58f0\u660e\u3002<\/p>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\">\u5e73\u53f0\uff1a \u7edf\u8ba1\u540d\u79f0\uff1a \"Wallbox Portal Added Range Min\" entity_id\uff1a Sensor.wallbox _portal _added _range state _characteristic\uff1a DateTime _value _min max_age\uff1a \u5c0f\u65f6 \uff1a 10  \r\n   <\/pre>\r\n<h3>\u5b58\u50a8\u4fe1\u606f\u7684\u7ed3\u679c<\/h3>\r\n<p><a href=\"https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5258\" src=\"https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge.png\" alt=\"\" width=\"729\" height=\"546\" srcset=\"https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge.png 729w, https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge-600x449.png 600w, https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge-300x225.png 300w\" sizes=\"auto, (max-width: 729px) 100vw, 729px\" \/><\/a><\/p>\r\n<h3>\u663e\u793a\u6240\u6709\u4f1a\u8bdd\u5361<\/h3>\r\n<p><a href=\"https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5261\" src=\"https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge2.png\" alt=\"\" width=\"388\" height=\"375\" srcset=\"https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge2.png 388w, https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge2-300x290.png 300w\" sizes=\"auto, (max-width: 388px) 100vw, 388px\" \/><\/a><\/p>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\">&lt;div&gt;\u6536\u8d39\u4f1a\u8bae&lt;\/div&gt; \r\n\u4e0a\u6b21\u66f4\u65b0 \uff1a { state_attr(&#039;sensor.wallbox _charges&#039;,&#039;updated _at&#039;)} &lt;br&gt;&lt;br&gt;\r\n{% \u8bbe\u7f6e\u9879\u76ee = state_attr(&#039;sensor.wallbox _charges&#039;, &#039;sessionscharge&#039;) %}\r\n&lt;table width=&#039;100%&#039;&gt;\r\n&lt;tbody&gt;\r\n{% for i in range(0, items | count, 1) %}\r\n&lt;tr&gt;\r\n&lt;td&gt;{{ items[i].start } \u5230 {{ item[i].fin } }({{{ item[i].duration }})&lt;\/td&gt;\r\n&lt;td&gt;{{ items[i].consumption } kWh&lt;\/td&gt;\r\n&lt;td&gt;+{{ items[i].km } \u516c\u91cc&lt;\/td&gt;\r\n&lt;td&gt;{{ item[i].cost } \u6b27\u5143&lt;\/td&gt;\r\n&lt;\/tr&gt;\r\n\r\n{% \u7ed3\u675f \u4e8e %}\r\n&lt;\/tbody&gt;\r\n&lt;\/table&gt;<\/pre>\r\n<p>\u6309\u5e74\u3001\u6708\u3001\u5468\u663e\u793a\u603b\u8ba1\u5361<\/p>\r\n<p><a href=\"https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5262\" src=\"https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge3.png\" alt=\"\" width=\"383\" height=\"415\" srcset=\"https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge3.png 383w, https:\/\/www.sigalou-domotique.fr\/wp-content\/uploads\/2023\/10\/charge3-277x300.png 277w\" sizes=\"auto, (max-width: 383px) 100vw, 383px\" \/><\/a><\/p>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\">\u7c7b\u578b \uff1a Markdown \u5185\u5bb9\uff1a &amp;gt;-\r\n  &lt;div&gt;&lt;h1&gt;\u6536\u8d39\u4f1a\u8bae&lt;\/div&gt;  {%- \u8bbe\u7f6e\u9ed8\u8ba4_language = &#039;en&#039; %\u6700\u65b0\u66f4\u65b0\uff1a { state_attr(&#039;sensor.wallbox _charges&#039;,&#039;updated _at&#039;)} &lt;br&gt;&lt;br&gt;\r\n\r\n\r\n  {% \u8bbe\u7f6e\u9879\u76ee = state_attr(&#039;sensor.wallbox _charges&#039;, &#039;sessionscharge&#039;) %} {% \u8bbe\u7f6e septjours = now\uff08\uff09- timedelta(days=7) %} {% \u8bbe\u7f6e power_semaine = namespace(value=0) %} {% \u8bbe\u7f6e cout_semaine = namespace(value=0) %} {% \u8bbe\u7f6e unmois = now\uff08\uff09- timedelta(days=30) %} {% \u8bbe\u7f6e power_months = namespace(value=0) %} {% \u8bbe\u7f6e cout_mois = namespace(value=0) %} {% \u8bbe\u7f6euneannee = now\uff08\uff09- timedelta(days=365) %} {% \u8bbe\u7f6e power_annee = namespace(value=0) %} {% \u8bbe\u7f6e cout_annee = namespace(value=0) %} {% for i in range(0, items | count, 1) %} {% \u5982\u679c items[i].saved_at | int &amp;gt;= as_timestamp(uneannee) %} {% \u8bbe\u7f6e power_annee.value = power_annee.value + items[i].consumption %} {% \u8bbe\u7f6e cout_annee.value = cout_annee.value + items[i]\u3002 %} {% \u5982\u679c items[i].saved_at | int &amp;gt;= as_timestamp(unmonth) %} {% \u8bbe\u7f6e power_mois.value = power_mois.value + items[i].consumption %} {% \u8bbe\u7f6e cout_mois.value = cout_mois.value + items[i]\u3002 %} {% \u5982\u679c items[i].saved_at | int &amp;gt;= as_timestamp(sevendays) %} {% \u8bbe\u7f6e power_semaine.value = power_semaine.value + items[i].consumption %} {% \u8bbe\u7f6e cout_semaine.value = cout_semaine.value + items[i]\u3002 %} {% Endif \u7684 %} {% Endif \u7684 %} {% Endif \u7684 %} {% \u7ed3\u675f \u4e8e %}\r\n\r\n  &lt;\/ha-alert&gt; &lt;ha-alert alert-type=&quot;info&quot; title=&quot;\u4e0a\u4e2a\u6708\uff1a { { power _mois.value | int }} kWh - { { cost _mois.value &theta; float Round(2)}} \u6b27\u5143&quot;&gt;&lt;\/ha-alert&gt; &lt;ha-alert alert-type=&quot;info&quot; title=&quot;\u53bb\u5e74\uff1a {{ power_annee.value | int }} kWh - {{{ cout _annee.value &theta; float &theta; round(2)}} \u6b27\u5143&quot;&gt;&lt;\/ha-alert&gt;\r\n\r\n\r\n  &lt;br&gt; \r\n\r\n\r\n  {% \u8bbe\u7f6e\u9879\u76ee = state_attr(&#039;sensor.wallbox _charges&#039;, &#039;sessionscharge&#039;) %} {% \u8bbe\u7f6e septjours = now\uff08\uff09- timedelta(days=7) %}\r\n\r\n  &lt;table width=&#039;100%&#039;&gt; &lt;tbody&gt;  {% for i in range(0, items | count, 1) %} {% \u5982\u679c items[i].saved_at | int &amp;gt;= as_timestamp(sevendays) %} {% \u8bbe\u7f6e datetime _obj = strptime\uff08items[i].start, &#039;%d\/%m\/%Y \u4f4d %H:%M&#039;\uff09\uff09 %}\r\n\r\n  &lt;tr&gt; &lt;td&gt;&lt;h5&gt;{{{items[i].start } {{ items[i].fin } }({{{ items[i].duration }})&lt;\/td&gt; &lt;td&gt;{{ items[i].consumption } kWh&lt;\/td&gt; &lt;td&gt;+{{ items[i].km } \u516c\u91cc&lt;\/td&gt; &lt;td&gt;{{ item[i].cost } \u6b27\u5143&lt;\/td&gt; &lt;\/tr&gt; {% Endif \u7684 %} {% \u7ed3\u675f \u4e8e %} &lt;\/tbody&gt; &lt;\/table&gt;\r\n    &lt;ha-alert alert-type=&quot;success&quot; title=&quot;\u4e0a\u5468\uff1a { { power_semaine.value | int}} kWh - { cost_semaine.value &theta; round(2)} &euro;&quot;&gt;    \r\n\u98ce\u683c\uff1a .: | ha-card { margin: 0px 0px 0px 0px\uff1b Box-shadow \uff1a \u65e0\uff1b }ha-markdown \uff1a $: | h5 { font-size: 15px! \u91cd\u8981 \u5b57\u4f53\u91cd\u91cf \uff1a \u6b63\u5e38\uff01\u91cd\u8981 \u586b\u5145 \uff1a 0px 0px 0px 8px! \u8fb9\u6846\u5de6\uff1a 3px \u56fa\u6001 #429f46\uff1b }\r\n<\/pre>\r\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>\u6211\u7acb\u5373\u8b66\u544a\uff0c\u8fd9\u4e2aRetex\u53ea\u662f\u4e3a\u4e86\u6559\u5b66\u76ee\u7684\uff0c\u6211\u5199\u5b83\u662f\u4e3a\u4e86\u5206\u4eab\u4e00\u79cd\u65b9\u6cd5\uff0c\u5373\u4ece\u90a3\u65f6\u8d77\u6211\u5c31\u4ee5\u4e0d\u540c\u7684\u65b9\u5f0f\u610f\u8bc6\u5230\u4e86\u8fd9\u4e2a\u529f\u80fd\uff0c\u6240\u4ee5\u6211\u6ca1\u6709\u8fd9\u4e2a\u8fc7\u7a0b\u3002<\/p>","protected":false},"author":1,"featured_media":5257,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[14,53,166],"tags":[81],"class_list":["post-5248","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-domotique","category-home-assistant","category-retex","tag-developpement"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/posts\/5248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/comments?post=5248"}],"version-history":[{"count":0,"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/posts\/5248\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/media\/5257"}],"wp:attachment":[{"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/media?parent=5248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/categories?post=5248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sigalou-domotique.fr\/zh\/wp-json\/wp\/v2\/tags?post=5248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}