JSTable

While removing the jQuery dependencies from the Life-Tracking Dashboard I didn’t find a satisfying replacement for the jQuery datatables plugin with server side rendering.

Vanilla-DataTables was unfortunately not able to do server-side rendering to I did a custom implementation using the in ES6 introduced classes.

You can find the resulting project JSTable on github and more information about the usage on https://www.haegi.org/jstable/

Life-Tracking improvements

Since the last post several new features were added to the Life-Tracking dashboards:

Finances

Category Assignments

It is now possible to automatically assign categories to new finance entries.

Payment Methods

You can define and save different payment methods.

Budgets

It is possible to define individual budgets for one or multiple categories. The budget is valid for one month and generated dynamically. The budgets are checked when a new finance entry is added.

Crawlers

You can now define individual data tables which can be populated by sending JSON data to the dashboard. It is also possible to define which fields should be visible or sortable and how the individual fields are displayed.

Additionally it is possible to filter the data for one or multiple days.

A new dataset or an update for a existing dataset can be send like follows:

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"identifier":"offer1","data":{"name":"job offer 1", "company":"company 2", "pay":50000, "url":"http://www.google.com"}}' \
  http://<user>:<password>@<domain>/crawlers/<hash>/record/

Multiple Cars

The dashboard is now capable to support multiple cars.

Splitted Bills

Inspired by spliwise it is possible to share and split bills with other users. You can create groups of users and enable automatic finance entry generation. The expenses and payments can be splitted equally or by fixed values.

The individual balances for the each user is calculated immediately.

Trips

The trip module enables easy trip planing. You can create a new trip and add accomodations, transportation or events which are then displayed in a list and map view.

Location History

The location history module is improved so that you can set individual location points or trigger new points by a Tasker task.

Additionally all finance and car service entries are saved with the corresponding location. The location types are now clustered and can be hidden on the map.

Tasker task

A1: Standortsuche starten [ 
Quelle:Beide 
Timeout (Sekunden):10 
sofort mit Task fortfahren:Aus 
Standortsuche fortführen:Aus 
] 

A2: HTTP Auth [ 
Method:Username and Password 
Client ID: 
Client Secret: 
Endpoint To Get Code: 
Endpoint To Get Refresh Token: 
Scopes: 
Force Re-Authentication:Aus 
Timeout (Sekunden):30 
Username:<USERNAME> 
Password:<PASSWORD> 
] 

A3: HTTP Request [ 
Method:POST 
URL:https://<DOMAIN>/location/record 
Headers:%http_auth_headers 
Query Parameters: 
Body: {
"identifier":"<DEVICE>", 
"device":"%DEVID",
"date":"%DATE",
"time":"%TIME",
"batt":"%BATT",
"times":"%TIMES",
"wifi_state":"%WIFI",
"gps_state":"%GPS",
"mfield":"%MFIELD",
"screen_state":"%SCREEN",
"ups":"%UPS",
"gps_loc":"%LOC",
"gps_acc":"%LOCACC",
"gps_alt":"%LOCALT",
"gps_spd":"%LOCSPD",
"gps_tms":"%LOCTMS",
"net_loc":"%LOCN",
"net_acc":"%LOCNACC",
"net_tms":"%LOCNTMS",
"cell_id":"%CELLID",
"cell_sig":"%CELLSIG",
"cell_srv":"%CELLSRV"
}
File To Send: 
File To Save With Output: 
Timeout (Sekunden):10 
Trust Any Certificate:Aus 
]

PWA with Notifications

For a easy mobile application the dashboard is supporting a service worker with optional push notifications.

It is possible to send a push notification to the following endpoint:

curl "http://<user>:<password>@<domain>/notifications/notify?type=test11&title=Test%20title&message=Test%20message"

User Management

The individual modules can be made available for individual users:

Cat Feeder

The catfeeder is a device which can automatically feed animals like cats with dry food.

Functionality

The catfeeder consists of a tube with an auger connected to a servomotor. The servomotor, the two buttons and the led are connected to a Particle Photon.

It is possible to define 3 feeding times per day and you can manual trigger feeding with two buttons.

When pressing the green button once, the feeding is started. A double click starts a endless feeding. When the servo is running, which means feeding is active, the red button is able to stop the feeding. When there is no feeding and the red button is pressed the feeding is started for a longer duration. This is useful when the food dispenser was empty and refilled. In this case the tube is empty and the auger need to rotate longer to carry food to the front of the tube.

While feeding the led is blinking to indicate the process.

When the power button is in the off state the device is not feeding and the buttons are not working.

The catfeeder is able to be used in battery mode. Therefore the Photon goes into deep sleep after feeding until the next feeding time. Additionally the photon can be woken up by pressing one of the two buttons.

When the sleep mode is not enabled it is possible to trigger the feeding with an API call to the Particle API.

Instructions

Materials

The used materials are:

Case

For the case the following 6mm wood plates are used:

  • 2x 100x250mm (front and back)
  • 2x 112x250mm (top and bottom)
  • 2x 250x250mm (left and right)

Wake from Deep Sleep

To wake the device from deep sleep with both buttons they are connected via a diode to the WKP pin of the Particle Photon. The buttons need to be active-high to wake the photon so the the WKP pin and the button pins are connected to GND with a pull-down resistor.

Continous Rotation Servo

The auger needs to rotate continously so a continous rotation servo is needed. It is possible to modify a regular servo for continous rotation by replacing the potentiometer with two resistors (voltage divider) and remove the blocking pin.

Software

The code for the Particle Photon can be found on github. It is depending on the clickButton library

Credits

The whole project is inspired by kitlaans Auger-based Cat Feeder. I modified the auger with one of wtgibsons Auger SCAD library and adjusted the dimensions of the tube and the servo.

The idea of using a diode as a simple OR gate to wake up the photon is inspired by TinamousSteves Happy-Sad Buttons.