Streamlining Dog Daycare Check-ins through software and hardware integrations

Any busy dog daycare business has that ‘rush’ of check-ins in the morning: 15-30 minutes of high-paced customer interactions, with customers showing up (on their way to work), dropping off their pets and rushing back out.

Real-time checkin is important, as it helps you identify any issues that need to be addressed at check-in, prevents unwanted check-ins (no vaccinations, no agreements signed, banned dogs), and helps ensure you get paid for the time the pet is in your care.

To provide great service, and manage risks, your staffing requirements for this rush can exceed true staffing needs for the rest of the day. Thus fast, ‘fail-safe’ checkins help reduce staffing costs, while still ensuring quality-control.

Gingr provides a handy ‘Quick Check-in’ feature which enables you to do a quick search for the pet (by name, owner first or last name).

Screen Shot 2019-06-27 at 12.31.28 PM.png
Screen Shot 2019-06-27 at 11.57.54 AM.png

‘Quick Checkin’ is a great tool, but still requires manual entry, and, without the right attention, could result in the wrong pet being checked in.

Using Barcode Key-Tags and RFID tags for Quick Check-In

USB-connected or blue-tooth barcode scanners (shown here) are inexpensive and widely available.

USB-connected or blue-tooth barcode scanners (shown here) are inexpensive and widely available.

Using barcode key-tags or RFID tags for quick check-in can greatly increase the speed and efficiency of dog daycare check-ins, improving your customer-service and reducing staffing requirements.

Once you have assigned the pet-owner a barcode key tag in their profile, the work-flow is fast:

  1. While on the Dashboard, place your cursor in the Search field in the app's header.

  2. Scan the customer's barcode key tag with your barcode scanner (USB-connected, or blue-tooth). The scanner works like a keyboard, and places the bar-code numbers in the field.

    a) If the owner has only one pet in your app, that pet will be checked in immediately.

    b) If the owner has multiple pets, you will be taken to the Search page, which will display all of the owner's pets, where you can then check one or more of them in.

There are 1,000s of inexpensive bar-code scanners out there, as well as endless custom-printers who will make you an order of branded key-tags.

Did you know that you can use RFID tags instead of barcode tags for owner check in/out? You can, for cheap too! Many pet-care business managers ask us about RFID, and there are many solutions.

New RFID (radio frequency identification) innovations continue to make this technology more accessible and cost effective. USB-connecting readers are selling for well under $100!

One user tested out the EasyMF RFID Reader Writer with Gingr recently, based on some code we wrote (below). This RFID reader works exactly like a barcode scanner (emulates a keyboard) as described above.

Scan an RFID tag into the customer’s barcode-field in their profile. The dog- or customer can then scan their tag near the RFID reader.

You then follow the same steps for checking in a pet as described above with the bar-code scanner.

That’s Cool, but what about ‘Self Checkin’?

One complaint with the above use-case is that you would have to leave a computer open and not touch it and make sure the cursor is always focused into the proper field. What if you took a low-budget computer that’s sole purpose was to help with fast- or self-check in? Well, we wrote a few lines of code to help you with that. We used a Raspberry Pi (about $35) for a stand-alone device and plugged the code below in. You may need a little help from a friend to put this onto your device, but feel free to use this. This solution - with the Raspberry Pi - is more 'standalone' and can just sit there running forever without human interaction.

For about $100, you can now setup an ultra-fast stand-alone check-in station (or ‘self-checkin’) solution for your dog daycare! Set it up by your entry way, and check-ins faster, with less staff! Yay!

Here’s the code, and to your success! :

import evdev
from evdev import InputDevice, categorize, ecodes
# you may need to change this specific to your machine
dev = InputDevice(‘/dev/input/event0’)
import requests

# Provided as an example taken from my own keyboard attached to a Centos 6 box:
scancodes = {
# Scancode: ASCIICode
0: None, 1: u’ESC’, 2: u’1’, 3: u’2’, 4: u’3’, 5: u’4’, 6: u’5’, 7: u’6’, 8: u’7’, 9: u’8’,
10: u’9’, 11: u’0’, 12: u’-‘, 13: u’=’, 14: u’BKSP’, 15: u’TAB’, 16: u’q’, 17: u’w’, 18: u’e’, 19: u’r’,
20: u’t’, 21: u’y’, 22: u’u’, 23: u’i’, 24: u’o’, 25: u’p’, 26: u’[‘, 27: u’]’, 28: u’CRLF’, 29: u’LCTRL’,
30: u’a’, 31: u’s’, 32: u’d’, 33: u’f’, 34: u’g’, 35: u’h’, 36: u’j’, 37: u’k’, 38: u’l’, 39: u’;’,
40: u’”‘, 41: u’`’, 42: u’LSHFT’, 43: u’\\’, 44: u’z’, 45: u’x’, 46: u’c’, 47: u’v’, 48: u’b’, 49: u’n’,
50: u’m’, 51: u’,’, 52: u’.’, 53: u’/’, 54: u’RSHFT’, 56: u’LALT’, 57: u’ ‘, 100: u’RALT’
}

capscodes = {
0: None, 1: u’ESC’, 2: u’!’, 3: u’@’, 4: u’#’, 5: u’$’, 6: u’%’, 7: u’^’, 8: u’&’, 9: u’*’,
10: u’(‘, 11: u’)’, 12: u’_’, 13: u’+’, 14: u’BKSP’, 15: u’TAB’, 16: u’Q’, 17: u’W’, 18: u’E’, 19: u’R’,
20: u’T’, 21: u’Y’, 22: u’U’, 23: u’I’, 24: u’O’, 25: u’P’, 26: u’{’, 27: u’}’, 28: u’CRLF’, 29: u’LCTRL’,
30: u’A’, 31: u’S’, 32: u’D’, 33: u’F’, 34: u’G’, 35: u’H’, 36: u’J’, 37: u’K’, 38: u’L’, 39: u’:’,
40: u’\’’, 41: u’~’, 42: u’LSHFT’, 43: u’|’, 44: u’Z’, 45: u’X’, 46: u’C’, 47: u’V’, 48: u’B’, 49: u’N’,
50: u’M’, 51: u’<’, 52: u’>’, 53: u’?’, 54: u’RSHFT’, 56: u’LALT’, 57: u’ ‘, 100: u’RALT’
}
#setup vars
x = ‘’
caps = False

#grab provides exclusive access to the device
dev.grab()

#loop
for event in dev.read_loop():
if event.type == ecodes.EV_KEY:
data = categorize(event) # Save the event temporarily to introspect it
if data.scancode == 42:
if data.keystate == 1:
caps = True
if data.keystate == 0:
caps = False
if data.keystate == 1: # Down events only
if caps:
key_lookup = u’{}’.format(capscodes.get(data.scancode)) or u’UNKNOWN:[{}]’.format(data.scancode) # Lookup or return UNKNOWN:XX
else:
key_lookup = u’{}’.format(scancodes.get(data.scancode)) or u’UNKNOWN:[{}]’.format(data.scancode) # Lookup or return UNKNOWN:XX
if (data.scancode != 42) and (data.scancode != 28):
x += key_lookup
if(data.scancode == 28):
print x # Print it all out!

response = requests.post(
url=”https://GINGR_APP_SUBDOMAIN.gingrapp.com/api/v1/owners”,
params={
“key”: “GINGR_APP_API_KEY”,
},
data={
“params[barcode]”: x,
},
)

data = response.json()

if data[‘success’]:
if data[‘data’][0]:
owner_id = data[‘data’][0][‘id’]

print owner_id

response = requests.post(
url=”https://GINGR_APP_SUBDOMAIN.gingrapp.com/api/v1/quick_checkin”,
params={
“key”: “GINGR_APP_API_KEY”,
},
data={
“owner_id”: owner_id,
},
)

data = response.json()

print data

x = ‘’