Skip to main content

Python library for viewing laundry room and account status for facilities using ESD payment equipment.

Project description

Python Interface for ESD / Hercules CyclePay Laundry Payment Systems

This is an unofficial project that is not affiliated with ESD or Hercules.


PyPI GitHub

Purpose

pylaundry allows developers to make the ESD CyclePay system interoperable with custom scripts and third party systems like Home Assistant. The library supports querying machine status, checking virtual card balances, and using your virtual card to add money to machines. If your building's laundry room supports one of the below apps, you should be able to use pylaundry:

Logo Name Links
esd cyclepay logo ESD CyclePay [iOS] [Android]
hercules cyclepay logo Hercules CyclePay [iOS] [Android]

Home Assistant

This library powers the CyclePay for Home Assistant custom integration.

Warnings

  1. Pylaundry can spend your money. Theoretically, a bug in this code could drain your entire laundry card or otherwise spend more than you intended.
  2. Pylaundry is not endorsed or supported by ESD, Hercules, or their business partners. Use of this library may have negative consequences, including but not limited to being banned from CyclePay.

Use pylaundry at your own risk.

Features

Currently Available

  1. Check card balance (CyclePay / virtual cards only).
  2. Add money to machine from virtual laundry card.
  3. Check whether washer/dryer is running and how much time is left in the current cycle, among other attributes.

Airing of Grievances

I wrote this library after moving into a building with ESD hardware. Doing laundry is my zen activity. Adding money to a dryer with ESD's hardware is not zen. Here's why:

Hardware

Well designed commercial dryers let users add time to their cycle by pressing the dryer's start button. One press adds 30 minutes to the timer and starts the cycle; every additional press adds 5 minutes. ESD revisited this solved problem and delievered a card reader that requires users to remove and redip their card once for each vend. One dip (and press) adds 30 minutes to the timer; every additional dip adds 5 minutes. This is what loading a 60 minute dryer cycle looks like:

  1. Insert card; wait for machine to read the card's balance.
  2. Press button for desired cycle. This adds 30 minutes to the timer and starts the machine.
  3. Remove and reinsert card; wait for machine to read the card's balance. +5 minutes; now 35 minutes on timer.
  4. Re-dip; wait for the machine to read the card's balance. Except it can't read the balance and displays a card read error instead. Timer is still at 35 minutes.
  5. Re-dip; wait; +5 min; now 40 min on timer.
  6. Re-dip; wait; +5 min; now 45 min on timer.
  7. Re-dip; wait; read error. Still at 45.
  8. Re-dip; wait; read error. Still at 45.
  9. Re-dip; wait; read error. Still at 45.
  10. Re-dip; wait; +5 min; now 50 min on timer.
  11. Re-dip; wait; +5 min; now 55 min on timer.
  12. Re-dip; wait; read error. Still at 55.
  13. Re-dip; wait; +5 min; now 60 min on timer.

Now you're done!

Just kidding. You have a family, so you get to repeat that process a few more times for your remaining loads.

Additionally, all other things being equal, these extra dips mean that ESD chip cards and chip card readers probably wear out six times earlier than competitor hardware as ESD cards need to be dipped 6 times more per cycle. This is anecdotal, but I've had to replace the laundry card in my current building 4 times in 3 years due to wear.

Software

About a year into living in my current apartment, ESD rolled out support for their CyclePay app. "Finally," I thought, "I can reclaim my zen activity." Nope. CyclePay is just as frustrating.

I expected CyclePay to just let me add, say, 60 minutes to a dryer with one or two taps. New medium, new medium-appropriate workflow.

In actuality, the app just mimics the workflow of the physical chip cards by forcing users to virtually swipe virtual cards. One swipe adds the first 30 minutes; each additional swipe adds another 5 minutes. Each swipe requires 4 taps and takes around 6 seconds — if you're fast — requires tapping through two separate confirmations, and requires that you re-select your machine after every swipe. So...


Loading 3 dryers with 60 minutes each takes 84 — EIGHTY FOUR !!!!! — taps.

That's insane.

In a perfect environment, those 84 taps take a brain melting 2 minutes and 6 seconds to complete.

...and that's if you're standing right in front of the machine (allowing CyclePay to vend via Bluetooth). If you want to finish loading your dryers while going back to your apartment, the app vends using the laundry machines' Wi-Fi connections. The app takes ~5 times as long to vend over Wi-Fi and relies on the machines being connected to WiFi in the first place, which they are often not. In my laundry room, around 10% of the machines seem to be disconnected at any time.


ezgif com-gif-maker (3)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylaundry-0.1.5.tar.gz (18.6 kB view details)

Uploaded Source

Built Distribution

pylaundry-0.1.5-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file pylaundry-0.1.5.tar.gz.

File metadata

  • Download URL: pylaundry-0.1.5.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for pylaundry-0.1.5.tar.gz
Algorithm Hash digest
SHA256 f800d61a4323bf5deba0c4aa94a788494050a4643c42f7550f79e915b26ea7a2
MD5 fcb5b88a5a5bc632e9ae1042d5d80456
BLAKE2b-256 0c6e3e025d210f43f65242276f1ba5271afefcad277937a996011949e416403c

See more details on using hashes here.

File details

Details for the file pylaundry-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: pylaundry-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 16.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for pylaundry-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 9c6efb3ac606efde4ebb2ee8af689655d01751f18f27e5a8b7f344239a148469
MD5 75c4494ce35d002a0e0ad99d07500b1e
BLAKE2b-256 0f71ea3f7d6012b86b6e5ce2706013b5b4f08dbc5e32467d0905c19375bb7b43

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page