Compare commits

..

9 Commits

Author SHA1 Message Date
c1579f2edf add link to opensheet 2025-11-24 11:51:23 -05:00
5bdd48a0d2 Fix spelling error 2025-11-24 08:49:11 -05:00
51a9e801b2 Update images in readme 2025-11-22 10:39:50 -05:00
4a961c865e Re-orgnize repo files 2025-11-22 10:38:29 -05:00
9d0dac7e7b Add links and images to readme 2025-11-22 10:27:08 -05:00
569260634c Increment Version in Readme 2025-11-21 15:56:04 -05:00
7ae1318376 Add plugin icons for room and welcome center.
- Add room data plugin icon.

- Add welcome center plugin icon.
2025-11-21 15:53:45 -05:00
9013db5213 Merge pull request 'feat: Show unavailable displays with logo. #1' (#2) from NotInUseMode into main
Reviewed-on: #2
2025-11-21 12:52:52 -08:00
597cba9fec feat: Show unavailable displays with logo. #1
- Filter displayed devices based on a new `not_in_use` field within the JSON data.
- Seed sample data for meeting rooms.
- Implement a “Not In Use” mode to display a logo when a display is unavailable via a spreadsheet flag.
- Expand the range of data polled from the spreadsheet to include an additional column.
2025-11-21 15:51:20 -05:00
12 changed files with 121 additions and 6 deletions

40
AGENTS.md Normal file
View File

@@ -0,0 +1,40 @@
# TRMNL Plugin Development Guidelines
## Project Overview
This is a TRMNL platform plugin for displaying room data from Google Sheets on connected devices. The plugin uses Liquid templating for the frontend and YAML for configuration.
## File Structure
- `full.liquid` - Main Liquid template file for rendering room data
- `settings.yml` - Plugin configuration including API endpoints and custom fields
- `MeetingRooms-sample-data.json` - Sample data structure reference
## Code Style Guidelines
### Liquid Templating
- Use Liquid syntax for data binding and conditional logic
- Follow existing naming conventions: use snake_case for variables
- Keep HTML structure clean and semantic
- Use TRMNL-specific classes for styling (layout, columns, grid, etc.)
### YAML Configuration
- Use YAML format for all configuration files
- Follow existing key naming conventions (snake_case)
- Include proper descriptions for custom fields
- Use string quotes for all string values
### General Development
- No build/test commands - this is a static plugin
- Validate Liquid syntax by testing in TRMNL platform
- Ensure Google Sheets API URLs are correct and accessible
- Test with various device IDs using TRMNL_ID matching
### Testing
- Test by deploying to TRMNL platform with different device IDs
- Verify data loads from Google Sheets correctly
- Check responsive behavior on TRMNL devices
- Validate fallback logo displays when no data is available
## Key Components
- Device ID matching via `trmnl.plugin_settings.custom_fields_values.device_id`
- Data filtering using `where` filter in Liquid
- Google Sheets integration via opensheet.elk.sh API

View File

@@ -0,0 +1,50 @@
[
{
"not_in_use":"FALSE",
"room_name":"Orchid Room",
"group_name":"Engineering Team",
"type":"Leadership Retreat",
"days":"MON, TUE, WED",
"note":"🎨 Arts and Crafts Workshop",
"header":"CBC Winchester",
"tagline":"Fields Conference 1",
"info":"Cedarmore Camp & Conference Center",
"TRMNL_ID":"15236G"
},
{
"not_in_use":"TRUE",
"room_name":"Crossings Ministries",
"group_name":"Fields Conference 2",
"type":"Leadership Retreat",
"days":"FRI, SAT, SUN",
"note":"Check out at 9am 🕐",
"header":"SBC Greenville",
"tagline":"Fields Conference 2",
"info":"Cedarmore Camp & Conference Center",
"TRMNL_ID":"3SLGPG"
},
{
"not_in_use":"FALSE",
"room_name":"Gym",
"group_name":"Youth Group",
"type":"Kids Camp",
"days":"MON, WED, TUE, THU, FRI",
"note":"⚽Soccer & 🎯 Volley Ball",
"header":"The Oasis",
"tagline":"Crossings Leadership Private Meeting Space",
"info":"Cedarmore Camp & Conference Center",
"TRMNL_ID":"75484B"
},
{
"not_in_use":"FALSE",
"room_name":"Welcome Center",
"group_name":"TEST",
"type":"TEST",
"days":"MON",
"note":"TEST",
"header":"Cedarmore",
"tagline":"Test Display",
"info":"Welcome to Cedarmore!",
"TRMNL_ID":"3BM5TH"
}
]

View File

@@ -1,6 +1,6 @@
## CEDARMORE Room Data TRMNL Plug-in - ReadMe
**Version:** 1.1
**Version:** 1.2
**Description:**
@@ -8,4 +8,29 @@ This plug-in is designed for use with the TRMNL platform ([https://usetrmnl.com]
**Functionality:**
The plug-in functions by linking to a Google Sheet. The sheet contains the room data that will be displayed on the TRMNL device. The link is established through a matching Spreadsheet ID, ensuring that the correct data is displayed on the intended device.
The plug-in functions by linking to a Google Sheet. The sheet contains the room data that will be displayed on the TRMNL device. The link is established through a matching Spreadsheet ID, ensuring that the correct data is displayed on the intended device.
**New Feature - Not In Use Mode:**
Each display can now be marked as "Not In Use" by setting the `not_in_use` field to "TRUE" in the spreadsheet. When enabled, the display will show the Cedarmore logo instead of room data, allowing for easy identification of unavailable displays. Setting `not_in_use` to "FALSE" will show the normal room information.
## Images
![Layout 1](screenshots/20250617_142932.jpg)
![Layout 2](screenshots/20250617_130122.jpg)
![Logo Display](screenshots/20250617_124308.jpg)
![TRMNL_Plugin_Settings](screenshots/TRMNL_Plugin_Settings.png)
![Cedarmore_Room_Data_Google_Sheets](screenshots/Cedarmore_Room_Data_Google_Sheets.png)
## Links
- [Crossings Room Data Spreadsheet](https://docs.google.com/spreadsheets/d/1i9emEf-_b0pkZxP4G3_IivfqozJAb2k8TnK9HfRBDAQ/edit?gid=681330367#gid=681330367)
- [List Of Plugins](https://usetrmnl.com/plugin_settings?keyname=private_plugin)
- [Framework Design System](https://usetrmnl.com/framework)
- [Liquid 101 Template System](https://help.usetrmnl.com/en/articles/10671186-liquid-101)
- [Custom plugin filters](https://help.usetrmnl.com/en/articles/10347358-custom-plugin-filters)
- [Advanced Liquid](https://help.usetrmnl.com/en/articles/10693981-advanced-liquid)
- [TRMNL Shop](https://shop.usetrmnl.com/)
- [OpenSheet](https://github.com/benborgers/opensheet#readme) - Converts Google sheet to json data

View File

@@ -1,7 +1,7 @@
{% assign json_data = data | where: "TRMNL_ID", trmnl.plugin_settings.custom_fields_values.device_id | first %}
{% assign my_id = trmnl.plugin_settings.custom_fields_values.device_id %}
{% if json_data %}
{% if json_data and json_data.not_in_use == "FALSE" %}
<div class="layout">
<div class="columns">
@@ -47,7 +47,7 @@
filter: grayscale(100%) brightness(0%) ; float: right;" src="https://gocrossings.org/wp-content/uploads/2020/02/logo-white_1.png"/>
<span class="instance"><p>DeviceID: {{ my_id }} Updated at {{ "now" | date: "%s" | plus: trmnl.user.utc_offset | date: "%H:%M" }}</p></span>
</div>
{% else %} <!-- If There is no json data just show the logo -->
{% else %} <!-- If There is no json data or not_in_use is true, show the logo -->
<div class="layout layout--center">
<img class="image-dither" style="
filter: grayscale(100%) brightness(70%) contrast(500%);" src="https://gocrossings.org/wp-content/uploads/2020/03/cedarmore.png"/>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

View File

@@ -4,7 +4,7 @@ no_screen_padding: 'no'
dark_mode: 'no'
static_data: "[{\"room_name\":\"Orchid Room\",\"group_name\":\"Engineering Team\",\"type\":\"Leadership Retreat\",\"days\":\"MON, TUE, WED\",\"note\":\"\U0001F3A8 Arts and Crafts Workshop\",\"TRMNL_ID\":\"15236G\"},{\"room_name\":\"Crossings Ministries\",\"group_name\":\"Fields Conference 2\",\"type\":\"Leadership Retreat\",\"days\":\"FRI, SAT, SUN\",\"note\":\"Check out at 9am \U0001F558\",\"TRMNL_ID\":\"3SLGPG\"},{\"room_name\":\"Gym\",\"group_name\":\"Youth Group\",\"type\":\"Kids Camp\",\"days\":\"MON, WED, TUE, THU, FRI\",\"note\":\"⚽Soccer & \U0001F3D0 Volley Ball\",\"TRMNL_ID\":\"75484B\"},{\"room_name\":\"Welcome Center\",\"group_name\":\"TEST\",\"type\":\"TEST\",\"days\":\"MON\",\"note\":\"TEST\",\"TRMNL_ID\":\"3BM5TH\"}]"
polling_verb: get
polling_url: https://opensheet.elk.sh/1i9emEf-_b0pkZxP4G3_IivfqozJAb2k8TnK9HfRBDAQ/MeetingRooms!A1:F15
polling_url: https://opensheet.elk.sh/1i9emEf-_b0pkZxP4G3_IivfqozJAb2k8TnK9HfRBDAQ/MeetingRooms!A1:G15
polling_headers: ''
polling_body: ''
id: 101230
@@ -14,5 +14,5 @@ custom_fields:
name: Device ID (required)
description: The id for the device shoudl match the TRMNL_ID from the spreadsheet
default: '1234'
name: OAISIS Crossing Room Data
name: [DeviceID] Crossing Room Data
refresh_interval: 360