grocy/docs/grocycode.md
Bernd Bestel 8ff8c1ac5d
Made the used grocycode barcode type configurable
DataMatrix reading via Quagga2 doesn't work currently, so default to an supported 1D barcode (=> Code128)
2021-07-09 23:08:47 +02:00

2.2 KiB

grocycode

grocycode is, in essence, a simple way to reference to arbitrary grocy entities. Each grocycode includes a magic, an entitiy identifier, an id and an ordered set of extra data. It is supported to be entered anywhere grocy expects one to read a barcode, but can also reference grocy-internal properties like specific stock entries, or specific batteries.

Serialization

There are three mandatory parts in a grocycode:

  1. The magic grcy
  2. An entity identifer matching the regular expression [a-z]+ (that is, lowercase english alphabet without any fancy accents, minimum length 1 character).
  3. An object identifer matching the regular expression [0-9]+

Optionally, any number of further data without format restrictions besides not containing any double colons [0] may be appended.

These parts are then linearly appended, seperated by a double colon :.

Entity Identifers

Currently, there are three different entity types defined:

  • p for Products
  • b for Batteries
  • c for Chores

Example

In this example, we encode a Product with ID 13, which results in grcy:p:13 when serialized.

Product grocycodes

Product grocycodes extend the data format to include an optional stock id, thus may reference a specific stock entry directly.

Example: grcy:p:13:60bf8b5244b04

Battery grocycodes

Currently, Battery grocycodes do not define any extra fields.

Chore grocycodes

Currently, Chore grocycodes do not define any extra fields.

Visual Encoding

Grocy uses DataMatrix 2D (or alternatively Code128 1D) Barcodes to encode grocycodes into a visual representation. In principle, there is no problem with using other encoding formats like QR codes; however DataMatrix uses less space for the same information and redundancy and is a bit easier read by 2D barcode scanners, especially on non-flat surfaces.

You can pick up cheap-ish used scanners from ebay (about 45€ in germany). Make sure to set them to the correct keyboard emulation, so that the double colons get entered correctly.

Notes

[0]: Obviously, it needs to be encoded into some usable visual representation and then read. So probably you only want to encode stuff that can be typed on a keyboard.