新足迹

 找回密码
 注册

精华好帖回顾

· 悉尼Hurstville附近看房心得 (2010-5-26) Rachel_rgds · 欧洲归来,新鲜出炉之第一手法德瑞三国16天带娃游记和经验(2022年夏天)全部更新完毕 (2022-7-15) xmaseve
· Oceangoing墨尔本购房心得从西区到东区再到北区,更新在98楼,完结篇! (2009-7-15) oceangoing · 【枣花酥】更新了第三次做图片,这回基本上有卖相了 (2013-5-17) james的猫
Advertisement
Advertisement
楼主:dootbear

我写了一个Foxess的家庭太阳能-储蓄电池观察网页 [复制链接]

发表于 2026-5-3 14:49 |显示全部楼层
此文章由 yrqin 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yrqin 所有!转贴必须注明作者、出处和本声明,并保持内容完整
dootbear 发表于 2026-4-30 11:38
以后可以考虑:

1. 用Home Assistant做中控平台。


"想法太多,时间不够用啊。。。"

嘿嘿,我也有类似的烦恼

看得出来,Vibe Coding给版主带来了各种乐趣。

你的GitHub主页好干净啊,好像不是专业搞编程的?

敢问版主的专业背景是啥?

评分

参与人数 1积分 +3 收起 理由
dootbear + 3 感谢分享

查看全部评分

网络上的争论更多是情绪表达,不是真正的分析。
还不如和 AI 聊聊天,至少能把事情想明白。
Advertisement
Advertisement

发表于 2026-5-3 15:29 |显示全部楼层
此文章由 yrqin 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yrqin 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Claude Code给的建议(可以参考看看,建议的不一定都对的)

另外,版主似乎是在Mac Mini上跑的这个服务?可以考虑利用Cloudflare的隧道服务(Cloudflare Tunnel,免费的plan就够用了),把网页弄成一个公共的网页(当然这时候需要加上用户登录/用户验证等安全配置。。。);这样可以外面的时候,也可以查看FoxCloud 能源仪表盘


# FoxCloud 能源仪表盘 — 代码审查与改进建议

按优先级排序。

## 安全

- `public/app.js:576` `warningBox.innerHTML = warnings.map(item => \`<p>${item}</p>\`)` 存在 XSS 注入点。建议改为按节点设置 `textContent`。同类风险位置:`app.js:565`(徽章)、`app.js:623`(表格)。即便目前字符串由服务器控制,也应统一通过 `textContent` 或转义工具函数注入。
- `src/server.ts:88,101,115` 未对 `year` / `month` / `range` 做参数校验,`Number(NaN)` 会一路传到下游。建议引入 zod 或手写守卫:`year ∈ [2000, 2100]`、`month ∈ [1, 12]`、`range` 限制为白名单枚举。
- 没有任何限流。`POST /api/rebuild-cache` 与 Basic Auth 暴力破解都缺少防护。建议接入 `express-rate-limit`(例如认证与重负载接口每 IP 每分钟 5 次)。
- 未配置 `Content-Security-Policy` / `helmet`。建议:`helmet({ contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], scriptSrc: ["'self'"] } } })`。
- `/api/health` 当前位于鉴权之后,导致探活探针失败。建议挂载到 `requireDashboardAuth` 之前,或新增公开的 `/api/livez`。
- `src/lib/foxcloudClient.ts:110` 签名拼接使用的是字面量 `\\r\\n`(转义反斜杠 + r + n),而非真正的 CRLF。FoxCloud OpenAPI 示例使用真实的 `\r\n`。需对照 FoxCloud 文档核实,疑似 bug,仅因 demo 模式不走签名路径而被掩盖。
- 确认 `.env` 已在 `.gitignore` 中(占位密码仍会泄漏 `DASHBOARD_USERS` 的格式约定)。

## Bug / 用户体验

- `.env` 中 `SQLITE_BACKUP_DIR=/app/backups` 作为默认值会让本地启动报 `ENOENT mkdir '/app'`。建议默认改为 `./backups`,由 Dockerfile 覆盖。
- `src/server.ts:129` 的 SPA 兜底路由会把 `/api/typo` 也吞掉返回 HTML。建议把 catch-all 限制为非 `/api/*` 路径。
- CSV 导出需要清洗以 `=`、`+`、`-`、`@` 开头的单元格(Excel CSV 注入)。在前面加单引号 `'` 转义。
- 浏览器会拒绝从 URL 含凭据的页面发起 `fetch`(已实测复现)。需在 README 注明:直接打开页面,让 HTTP Basic 弹窗输入凭据,不要把凭据嵌入 URL。
- `tsx watch` 不会监听 `.env` 改动并自动重启。请在 README 标注。

## 代码质量

- `src/services/dashboardService.ts` 1368 行,`public/app.js` 1409 行。建议按职责拆分:demo 数据、FoxCloud 编排、区间计算、视图层各成模块。
- Express 5 已自动转发 async 错误,所有 `try/catch + next(error)` 模板代码可以删除。
- 缺少测试。建议接入 vitest:覆盖算式辅助(`integrateSamples`、demo 每日总量的确定性种子)与输入校验。
- `Number(req.query.year ?? ...)`:当 `?year=abc` 时为 `NaN` 一路传下去。加校验同时也提升 UX。

## 锦上添花

- 将语言选择与表格区间持久化到 `localStorage`。
- 给 `/api/dashboard` 加 ETag / `Cache-Control` 以支持再验证。
- Health 接口返回版本号(git sha),便于运维。

评分

参与人数 1积分 +8 收起 理由
dootbear + 8 感谢分享

查看全部评分

网络上的争论更多是情绪表达,不是真正的分析。
还不如和 AI 聊聊天,至少能把事情想明白。

2012年度奖章获得者 2013年度奖章获得者

发表于 2026-5-4 07:43 来自手机 |显示全部楼层
此文章由 dootbear 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dootbear 所有!转贴必须注明作者、出处和本声明,并保持内容完整
yrqin 发表于 2026-5-3 14:49
"想法太多,时间不够用啊。。。"

嘿嘿,我也有类似的烦恼  

哈哈,我早就不是码农了,虽然是comp sci 毕业。

我在IT行业,做support。

2012年度奖章获得者 2013年度奖章获得者

发表于 2026-5-4 07:55 |显示全部楼层
此文章由 dootbear 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dootbear 所有!转贴必须注明作者、出处和本声明,并保持内容完整
windix 发表于 2026-5-3 11:35
感谢 已经跑起来了

小小建议,既然已经 vibe coding 了,可以让 codex 同步维护中文版的 README :) ...

谢谢建议,好的,好的。

2012年度奖章获得者 2013年度奖章获得者

发表于 2026-5-4 08:01 |显示全部楼层
此文章由 dootbear 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dootbear 所有!转贴必须注明作者、出处和本声明,并保持内容完整
yrqin 发表于 2026-5-3 15:29
Claude Code给的建议(可以参考看看,建议的不一定都对的)

另外,版主似乎是在Mac Mini上跑的这个服务? ...


谢谢建议!

1. 是的,是在Mac Mini 上跑。我已经将整个project 转到去我的synology NAS上了,并镜射到外网/internet。 我可以在外面实时查看能源仪表盘了。

2. 好,我会让Codex 按照 Claude Codex 建议来审查和fix bug,堵塞漏洞和更新。

评分

参与人数 1积分 +4 收起 理由
yrqin + 4 你太有才了

查看全部评分

发表于 2026-5-4 08:56 |显示全部楼层
此文章由 yrqin 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yrqin 所有!转贴必须注明作者、出处和本声明,并保持内容完整
dootbear 发表于 2026-5-4 07:43
哈哈,我早就不是码农了,虽然是comp sci 毕业。

我在IT行业,做support。

原来如此,那咱还算是同行的

评分

参与人数 1积分 +5 收起 理由
dootbear + 5 感谢分享

查看全部评分

网络上的争论更多是情绪表达,不是真正的分析。
还不如和 AI 聊聊天,至少能把事情想明白。
Advertisement
Advertisement

发表于 2026-5-7 22:10 来自手机 |显示全部楼层
此文章由 fangqiangqiang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 fangqiangqiang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
fox 怎么连 home assissst 自动卖电啊~ 好像要在机器上装一个 mobus?

发表于 2026-5-8 17:26 |显示全部楼层
此文章由 southstar 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 southstar 所有!转贴必须注明作者、出处和本声明,并保持内容完整
fangqiangqiang 发表于 2026-5-7 22:10
fox 怎么连 home assissst 自动卖电啊~ 好像要在机器上装一个 mobus?

如果你的Inverter支持foxess_modbus的话,安装foxess_modbus, 直接WIFI 连接
https://github.com/nathanmarlor/foxess_modbus

评分

参与人数 1积分 +4 收起 理由
fangqiangqiang + 4 感谢分享

查看全部评分

发表于 2026-5-8 17:33 |显示全部楼层
此文章由 southstar 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 southstar 所有!转贴必须注明作者、出处和本声明,并保持内容完整
dootbear 发表于 2026-5-4 08:01
谢谢建议!

1. 是的,是在Mac Mini 上跑。我已经将整个project 转到去我的synology NAS上了,并镜射到 ...

synology NAS如果都是SSD没问题,HDD我还是有些介意休眠,最后选择装HA虚拟机在一个笔记本上(SSD),反正也需要用笔记本,就不关机了。功耗一天0.5度电。

评分

参与人数 1积分 +3 收起 理由
dootbear + 3 感谢分享

查看全部评分

发表于 2026-5-9 13:18 |显示全部楼层
此文章由 9528 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 9528 所有!转贴必须注明作者、出处和本声明,并保持内容完整
楼主什么时候可以推广到Goodwe 吼一声哈

先多谢了

2012年度奖章获得者 2013年度奖章获得者

发表于 2026-5-12 10:20 |显示全部楼层
此文章由 dootbear 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dootbear 所有!转贴必须注明作者、出处和本声明,并保持内容完整
9528 发表于 2026-5-9 13:18
楼主什么时候可以推广到Goodwe 吼一声哈

先多谢了

haha, 我正在做改版的 v2, 尽量用dashboard,不想看到整版的数字。

我没有goodwe的端口 API来测试哦。。。



Advertisement
Advertisement

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部