在进一步深入之前,我们认真思考了家庭内搞库存管理是不是在「过度管理」。最终我们认同了家庭库存管理价值的:
主观因素是,懒惰。但我们发现这些应用/服务都有一个客观缺陷:出入库困难。
按最简流程,完成一个商品的出库都需要「拿起手机-解锁手机-找到并点开app-扫码物品」;而入库则更加繁琐,在上述出库的步骤基础上,还需要完成「数量」「保质期」「存放地」等设置。更现实的是,在家庭生活场景中,手机并不是时时刻刻在身上的。比如:洗澡时,发现香皂用完了,到浴室柜里拿一个;做饭时,锅正热着,发现食用油用完了,赶紧到仓库里拿一瓶。一旦没有于当下将物品出入库,后面很难再想起补出入库了,库存中的存量数字也变得不再可信。正如某位网友所评价的:
你需要的是一个24小时监控你的贾维斯,而不是这样的一个app。记录不到五条你就会醒悟,哦,还是用脑子记更方便。人类进化的动力就是懒......
如果你也用过其他收纳类的app,就应该能体会到最难的地方在于坚持物品录入。
基于以前失败的经验,我们总结出自己所需的核心功能:
除此之外的功能都只是锦上添花。我们渴求的这些核心功能不是点到为止,而是要尽可能地自动化。要实现个性化的需求,只能自己动手,或者寻求开源社区的帮助,于是我找到了Grocy。
Grocy是一款开源的适用于家庭的杂货管理解决方案。主要功能包括了:
Grocy已经具备了基础的功能,为了提升Grocy的「自动化」程度,解决物品出入库的困难。我设计了一套辅助工具——GrocyCompanionCN,包含了软件服务端和硬件扫码器两部分。服务端负责获取并解析物品基础信息,并与Grocy通信;客户端为若干个扫码器,负责获取物品的EAN条码,并将条码信息、位置信息、出入库设置发送至服务端。
GrocyCompanionCN的特性有:
提升用户体验的核心是扫码器,这些扫码器可以手持,也可以布置在家庭中的任意位置(可与Grocy中的「位置」一一对应),由电池或者线缆供电。以下是几个应用场景。
安装在柜子内的扫码器。与诸多衣柜中的线条灯一样:扫码器通过限位开关触发开机/关机;通过拨动开关可以设置出库(默认)/入库;扫码成功时会有蜂鸣器和指示灯提示;扫码器获取的物品信息将与Grocy自动同步。
扫码器可以从基座上取下,手持扫码器进行大批量的物品入库。
广泛分布在收纳空间的扫码器让我们不用再手动点击任何屏幕,物品的出入库在几秒内即可完成。我们不用再主观地去「坚持」做录入工作,一切操作都是顺势完成的。
我把GrocyCompanionCN的源码托管在Github上了,同时提供Docker镜像,具体部署方式请移步:
以下是GrocyCompanionCN的实现思路和技术细节。
查阅现有各大商超、自动贩卖机的技术,有以下几种方法来实现物品信息的联网:
综合考虑系统鲁棒性、成本、实现难度和商品数据库,我们还是选择条形码来完成物品的身份关联。任何正规售卖的商品都应具有条形码,且有唯一性,常用的编码为EAN码。
EAN码(EuropeanArticleNumber,欧洲物品编码),是国际物品编码协会在全球推广的商品条码。EAN13是其标准版,有13位,另有缩短版EAN8,8位。EAN13是国际通用的符号体系,是一种无含义、定长、纯数字的条形码,主要用于商品标识,具有唯一性。EAN13的13位数字,前3位为国家代码,中国可用的国家代码为690-699;4-7位为制造厂商代码(只能从0000-9999这一万组数字中进行分配);8-12位为产品代码(每个制造商可以对自己生产的10万种商品进行分配);最后1位为校验码。
同时,我们也有免费的渠道来获取条形码对应的物品信息。中国物品编码中心提供了条形码的查询(有每日查询上限)。
条形码只能告诉我们商品的注册信息,无法定位到商品的生产日期,也极少提供保质期信息。于是我观察了一下生活中的常见物品保质期,灵活使用四类GPC分类代码,预先设置好新物品的保质期。同时,设置一些偏移量:半年(-30天),一年(-60天),三年(-90天),由此,已经能粗略地匹配好物品到期日期了。当然,后续还是可以在Grocy中进行商品的精确设置。
这个机制特别关键,能彻底解放我们对物品入库时,一个一个地计算到期日这种繁琐的工作。读者也可以更具自己的实际情况设置类别和偏移量。
为什么不用现成的条码枪?
自制的扫码器具有小体积、低功耗、低成本、强兼容的特点。能识别EAN码、UPC码、QR二维码、ISBN码等。因此,在完成现有功能的前提下,未来还可用于识别录入厂商私有码、录入书籍等功能。扫码器所使用的模块包括:
扫描模块GM805带蜂鸣器和灯光,ESP01负责将GM805扫描获取的条码数据上传至服务器。通过限位开关触发开机/关机,实现扫码器的超长续航;通过拨动开关可以设置出库(默认)/入库。以下为硬件接线示意图。
关于自动启停和续航。GM805的工作电流<70mA,休眠电流约6mA,因此,即便ESP8266的休眠电流能做到微安级,600mAh也无法让扫描器整机待机一周以上。因此,通过限位开关来触发开/关机,能很好地避免闲时的电量损耗。经我的测试,600mAh能让扫描器连续工作3.5小时左右。根据我们的习惯,预计4周以上是没问题的。
通过「自定义项目」在产品属性中添加以一个自定义属性「GDSInfo」,GrocyCompanionCN获取的商品原始数据存储在GGDSInfo参数中,供日后的功能升级使用。
父产品可以累计所属子产品总数,并设置总安全库存。比如我们设置一个父产品「抽纸」。「抽纸」包含3个子产品,总的安全库存为「3」,当「抽纸」的总数低于等于3时,Grocy将自动加入购物清单,提示我们补货。这样我们就不用纠结于设置每个子产品的安全库存了。子产品的自动归类可以通过GPC码和商品关键词判定来完成。
Grocy提供了易用的RESTAPI,我们可以方便地拓展功能,打通数据流。如将补货提醒通过Gotify提示;将购物清单发送至待办清单;将待办家务通过智能音箱播报提醒等等。
Grocy会为每个实体都生成一个唯一的条形码。当物品包装拆除、条码丢失,或是商品为赠品、小样、试用装(无EAN码)时,我们能通过标签打印机制作一个条码赋予这类物品。
与以往仅通过手机与软件来管理库存的方法不同,我们设计了一个很简洁的硬件,来帮助我们打破数据和真实世界的这堵屏障,解放了用户这个「中间人」的角色。
本方案以Grocy作为数据库进行物品的管理,但经过简单的修改,我们也能将数据自动化地同步到让Notion或者像Airtable这样的多维表格中。以提供多样的可视化选择。