# Create a field given a existing stream name in clickhouse database Source: https://bytebeam.io/docs/api-reference/admin/create-a-field-given-a-existing-stream-name-in-clickhouse-database post /api/v1/streams/fields # Create a new apikey Source: https://bytebeam.io/docs/api-reference/admin/create-a-new-apikey post /api/v1/apikeys # Create a new user Source: https://bytebeam.io/docs/api-reference/admin/create-a-new-user post /api/v1/users # Create role Source: https://bytebeam.io/docs/api-reference/admin/create-role post /api/v1/roles # Creates a stream on clickhouse database Source: https://bytebeam.io/docs/api-reference/admin/creates-a-stream-on-clickhouse-database post /api/v1/streams # Creates computed stream Source: https://bytebeam.io/docs/api-reference/admin/creates-computed-stream post /api/v1/streams/computed_streams # Deactivate an apikey; soft-delete Source: https://bytebeam.io/docs/api-reference/admin/deactivate-an-apikey;-soft-delete delete /api/v1/apikeys/{key-or-name} # Delete a field given existing stream name in clickhouse database Source: https://bytebeam.io/docs/api-reference/admin/delete-a-field-given-existing-stream-name-in-clickhouse-database delete /api/v1/streams/{stream-name}/fields/{field-name} # Delete a stream on clickhouse database Source: https://bytebeam.io/docs/api-reference/admin/delete-a-stream-on-clickhouse-database delete /api/v1/streams/{stream-name} # Delete a user given existing id Source: https://bytebeam.io/docs/api-reference/admin/delete-a-user-given-existing-id delete /api/v1/users/{user-id} # Delete role given role-id Source: https://bytebeam.io/docs/api-reference/admin/delete-role-given-role-id delete /api/v1/roles/{role-id} # Get a single role given role-id Source: https://bytebeam.io/docs/api-reference/admin/get-a-single-role-given-role-id get /api/v1/roles/{role-id} # Get all apikeys Source: https://bytebeam.io/docs/api-reference/admin/get-all-apikeys get /api/v1/apikeys # Get all existing streams in clickhouse database Source: https://bytebeam.io/docs/api-reference/admin/get-all-existing-streams-in-clickhouse-database get /api/v1/streams # Get all fields given existing stream name in clickhouse database Source: https://bytebeam.io/docs/api-reference/admin/get-all-fields-given-existing-stream-name-in-clickhouse-database get /api/v1/streams/{stream-name}/fields # null Source: https://bytebeam.io/docs/api-reference/admin/get-apiv1streamsqueries get /api/v1/streams/queries/{query-id} # null Source: https://bytebeam.io/docs/api-reference/admin/get-apiv1streamsqueries-1 get /api/v1/streams/queries # Get current User object Source: https://bytebeam.io/docs/api-reference/admin/get-current-user-object get /api/v1/me # Get list of roles Source: https://bytebeam.io/docs/api-reference/admin/get-list-of-roles get /api/v1/roles # Get settings Source: https://bytebeam.io/docs/api-reference/admin/get-settings get /api/v1/server/settings # Get user given existing id Source: https://bytebeam.io/docs/api-reference/admin/get-user-given-existing-id get /api/v1/users/{user-id} # Get users and their roles Source: https://bytebeam.io/docs/api-reference/admin/get-users-and-their-roles get /api/v1/users # null Source: https://bytebeam.io/docs/api-reference/admin/post-apiv1streamsfixprotobuff post /api/v1/streams/fixprotobuff # Rename a stream field Source: https://bytebeam.io/docs/api-reference/admin/rename-a-stream-field put /api/v1/streams/{stream-name}/fields/{field-name}/rename # Return full detail of streams with fields including if they are computed, along with their code and parent streams Source: https://bytebeam.io/docs/api-reference/admin/return-full-detail-of-streams-with-fields-including-if-they-are-computed-along-with-their-code-and-parent-streams get /api/v1/streams/detailed # Return protobuff for all streams in clickhouse database Source: https://bytebeam.io/docs/api-reference/admin/return-protobuff-for-all-streams-in-clickhouse-database get /api/v1/streams/protobuff # Update a user given existing id Source: https://bytebeam.io/docs/api-reference/admin/update-a-user-given-existing-id put /api/v1/users/{user-id} # Update an existing field's type Source: https://bytebeam.io/docs/api-reference/admin/update-an-existing-fields-type post /api/v1/streams/fields/update # Update role given role-id Source: https://bytebeam.io/docs/api-reference/admin/update-role-given-role-id put /api/v1/roles/{role-id} # Update tenant settings Source: https://bytebeam.io/docs/api-reference/admin/update-tenant-settings put /api/v1/me/tenant/settings # Update user settings Source: https://bytebeam.io/docs/api-reference/admin/update-user-settings put /api/v1/me/settings # append fixed-list phase to a schedule Source: https://bytebeam.io/docs/api-reference/append-fixed-list-phase-to-a-schedule post /api/v1/actions/{action_id}/append_phase # Called by dkron repeatedly for a scheduled action until it is finished. It retries failed actions if needed and updates schedule status Source: https://bytebeam.io/docs/api-reference/called-by-dkron-repeatedly-for-a-scheduled-action-until-it-is-finished-it-retries-failed-actions-if-needed-and-updates-schedule-status post /api/v1/dkron/update-schedule-status/{action_id} # Create a new tenant Source: https://bytebeam.io/docs/api-reference/create-a-new-tenant post /api/v1/tenants # Create alert notification rule Source: https://bytebeam.io/docs/api-reference/create-alert-notification-rule post /api/v1/alert-rules/{id}/alert-notification-rules # Create alert rule Source: https://bytebeam.io/docs/api-reference/create-alert-rule post /api/v1/alert-rules # Create session type Source: https://bytebeam.io/docs/api-reference/create-session-type post /api/v1/session-types # Creates a DBC Source: https://bytebeam.io/docs/api-reference/creates-a-dbc post /api/v1/dbcs # Create a new file (respects RBAC) Source: https://bytebeam.io/docs/api-reference/data/create-a-new-file-respects-rbac post /api/v1/file # Create dashboard API Source: https://bytebeam.io/docs/api-reference/data/create-dashboard-api post /api/v1/dashboards # Delete dashboard API Source: https://bytebeam.io/docs/api-reference/data/delete-dashboard-api delete /api/v1/dashboards/{id} # Get dashboard API Source: https://bytebeam.io/docs/api-reference/data/get-dashboard-api get /api/v1/dashboards/{id} # Get dashboards API Source: https://bytebeam.io/docs/api-reference/data/get-dashboards-api get /api/v1/dashboards # Get data for a single panel given in the body Source: https://bytebeam.io/docs/api-reference/data/get-data-for-a-single-panel-given-in-the-body post /api/v1/panel-data-csv # Get data for panels given in body Source: https://bytebeam.io/docs/api-reference/data/get-data-for-panels-given-in-body post /api/v1/panel-data # Return the list of all uploaded files (respects RBAC) Source: https://bytebeam.io/docs/api-reference/data/return-the-list-of-all-uploaded-files-respects-rbac get /api/v1/file # The Endpoint the device hits to download the file (respects RBAC) Source: https://bytebeam.io/docs/api-reference/data/the-endpoint-the-device-hits-to-download-the-file-respects-rbac get /api/v1/file/{id}/artifact # Update dashboard Source: https://bytebeam.io/docs/api-reference/data/update-dashboard post /api/v1/dashboards/{id} # Delete a single DBC given id Source: https://bytebeam.io/docs/api-reference/delete-a-single-dbc-given-id delete /api/v1/dbcs/{dbc-id} # Delete alert notification rule Source: https://bytebeam.io/docs/api-reference/delete-alert-notification-rule delete /api/v1/alert-rules/{alert-id}/alert-notification-rules/{notification-id} # Delete alert rule Source: https://bytebeam.io/docs/api-reference/delete-alert-rule delete /api/v1/alert-rules/{id} # null Source: https://bytebeam.io/docs/api-reference/delete-apiv1firmware-bundlesid delete /api/v1/firmware-bundles/id/{firmware-bundle-id} # null Source: https://bytebeam.io/docs/api-reference/delete-apiv1firmware-bundlesversion delete /api/v1/firmware-bundles/version/{version} # Delete session type Source: https://bytebeam.io/docs/api-reference/delete-session-type delete /api/v1/session-types/{name} # Detailed data for micelio stats panel Source: https://bytebeam.io/docs/api-reference/detailed-data-for-micelio-stats-panel post /api/v1/micelio-stats-panel-details # Allows update status of a device Source: https://bytebeam.io/docs/api-reference/devices/allows-update-status-of-a-device put /api/v1/devices/{device-id} # Approve an action Source: https://bytebeam.io/docs/api-reference/devices/approve-an-action put /api/v1/actions/{id}/approve # Attempt cancelling this action Source: https://bytebeam.io/docs/api-reference/devices/attempt-cancelling-this-action post /api/v1/actions/{action_id}/cancel # Create a metadata-key Source: https://bytebeam.io/docs/api-reference/devices/create-a-metadata-key post /api/v1/devices/metadata-keys # Create firmware version Source: https://bytebeam.io/docs/api-reference/devices/create-firmware-version post /api/v1/firmwares # Create new Device Configuration Source: https://bytebeam.io/docs/api-reference/devices/create-new-device-configuration post /api/v1/device-configs # Creates a new action-type Source: https://bytebeam.io/docs/api-reference/devices/creates-a-new-action-type post /api/v1/action-types # Delete a metadata-key Source: https://bytebeam.io/docs/api-reference/devices/delete-a-metadata-key delete /api/v1/devices/metadata-keys/{metadata-key} # Delete an action-type Source: https://bytebeam.io/docs/api-reference/devices/delete-an-action-type delete /api/v1/action-types/{action-type-name} # Download a firmware by component name and version Source: https://bytebeam.io/docs/api-reference/devices/download-a-firmware-by-component-name-and-version get /api/v1/firmwares/component/{component-name}/{version-number}/artifact # Download a firmware by version Source: https://bytebeam.io/docs/api-reference/devices/download-a-firmware-by-version get /api/v1/firmwares/{version-number}/artifact # Download cert for a device given device-id Source: https://bytebeam.io/docs/api-reference/devices/download-cert-for-a-device-given-device-id get /api/v1/devices/{device-id}/cert # Find devices by device state keys Source: https://bytebeam.io/docs/api-reference/devices/find-devices-by-device-state-keys get /api/v1/devices/search # Get a list of metadata-keys Source: https://bytebeam.io/docs/api-reference/devices/get-a-list-of-metadata-keys get /api/v1/devices/metadata-keys # Get action for device Source: https://bytebeam.io/docs/api-reference/devices/get-action-for-device get /api/v1/actions/{id} # null Source: https://bytebeam.io/docs/api-reference/devices/get-apiv1actions-device-latenciesstates get /api/v1/actions/{action-id}/device-latencies/states # null Source: https://bytebeam.io/docs/api-reference/devices/get-apiv1actions-error-stats get /api/v1/actions/{id}/error-stats # Get device config by version name Source: https://bytebeam.io/docs/api-reference/devices/get-device-config-by-version-name get /api/v1/device-configs/{version-name} # Get params for an action Source: https://bytebeam.io/docs/api-reference/devices/get-params-for-an-action get /api/v1/actions/{id}/params # Get the list of Device Configurations Source: https://bytebeam.io/docs/api-reference/devices/get-the-list-of-device-configurations get /api/v1/device-configs # Get the list of devices - paginated. Source: https://bytebeam.io/docs/api-reference/devices/get-the-list-of-devices--paginated get /api/v1/devices # null Source: https://bytebeam.io/docs/api-reference/devices/head-endpoint-to-check-metadata-about-file-download head /api/v1/firmwares/{version-number}/artifact # null Source: https://bytebeam.io/docs/api-reference/devices/head-endpoint-to-check-metadata-about-file-download-1 head /api/v1/firmwares/component/{component-name}/{version-number}/artifact # Mark a subset of devices for an action as completed Source: https://bytebeam.io/docs/api-reference/devices/mark-a-subset-of-devices-for-an-action-as-completed put /api/v1/actions/{id}/mark_as_completed # Mark all actions for devices matching the filters as completed Source: https://bytebeam.io/docs/api-reference/devices/mark-all-actions-for-devices-matching-the-filters-as-completed put /api/v1/actions/mark_as_completed # Mark an existing metadata-key as serial number Source: https://bytebeam.io/docs/api-reference/devices/mark-an-existing-metadata-key-as-serial-number put /api/v1/devices/metadata-keys/{existing-key}/mark-as-serial # Mark an existing metadata-key as serial number Source: https://bytebeam.io/docs/api-reference/devices/mark-an-existing-metadata-key-as-serial-number-1 put /api/v1/devices/metadata-keys/{existing-key}/unmark-as-serial # null Source: https://bytebeam.io/docs/api-reference/devices/post-apiv1actions-device-latencies post /api/v1/actions/{action_id}/device-latencies # Provision a device. returns cert & keys Source: https://bytebeam.io/docs/api-reference/devices/provision-a-device-returns-cert-&-keys post /api/v1/devices/provision # Request to trigger actions; someone with permission will approve Source: https://bytebeam.io/docs/api-reference/devices/request-to-trigger-actions;-someone-with-permission-will-approve post /api/v1/actions/request # Retry an action on some devices Source: https://bytebeam.io/docs/api-reference/devices/retry-an-action-on-some-devices post /api/v1/actions/{action_id}/retry # Return all pending actions for devices matching the given filters Source: https://bytebeam.io/docs/api-reference/devices/return-all-pending-actions-for-devices-matching-the-given-filters post /api/v1/pending-actions # Return logs of actions per device Source: https://bytebeam.io/docs/api-reference/devices/return-logs-of-actions-per-device get /api/v1/actions/{action-id}/device_actions/{device-id}/logs # Return paginated progress of actions per device Source: https://bytebeam.io/docs/api-reference/devices/return-paginated-progress-of-actions-per-device get /api/v1/actions/{id}/device_actions # Return stats about the progress of various devices this action was triggered on Source: https://bytebeam.io/docs/api-reference/devices/return-stats-about-the-progress-of-various-devices-this-action-was-triggered-on get /api/v1/actions/{id}/progress_histogram # Return the count of devices for pagination Source: https://bytebeam.io/docs/api-reference/devices/return-the-count-of-devices-for-pagination get /api/v1/devices/count # Return the list of all firmware versions of given component Source: https://bytebeam.io/docs/api-reference/devices/return-the-list-of-all-firmware-versions-of-given-component get /api/v1/firmwares/component/{component-name} # Return the list of all firmwares Source: https://bytebeam.io/docs/api-reference/devices/return-the-list-of-all-firmwares get /api/v1/firmwares # Return the list of firmwares for components Source: https://bytebeam.io/docs/api-reference/devices/return-the-list-of-firmwares-for-components get /api/v1/firmwares/components # Returns a csv file template for updating metadata for a device Source: https://bytebeam.io/docs/api-reference/devices/returns-a-csv-file-template-for-updating-metadata-for-a-device get /api/v1/devices/metadata-bulk-template # Returns a list of all action types Source: https://bytebeam.io/docs/api-reference/devices/returns-a-list-of-all-action-types get /api/v1/action-types # Takes a csv file and updates the metadata for a device Source: https://bytebeam.io/docs/api-reference/devices/takes-a-csv-file-and-updates-the-metadata-for-a-device post /api/v1/devices/metadata-bulk # Trigger an action on a bunch of devices. Source: https://bytebeam.io/docs/api-reference/devices/trigger-an-action-on-a-bunch-of-devices post /api/v1/actions # Update metadata(s) for a device(s) Source: https://bytebeam.io/docs/api-reference/devices/update-metadatas-for-a-devices post /api/v1/devices/metadata # Updates an existing action type Source: https://bytebeam.io/docs/api-reference/devices/updates-an-existing-action-type put /api/v1/action-types/{action-type-name}/reactivate # Updates an existing action type Source: https://bytebeam.io/docs/api-reference/devices/updates-an-existing-action-type-1 put /api/v1/action-types/{action-type-name} # Updates firmware version to be activated or deactivated Source: https://bytebeam.io/docs/api-reference/devices/updates-firmware-version-to-be-activated-or-deactivated put /api/v1/firmwares/{version-number} # Updates firmware version to be activated or deactivated Source: https://bytebeam.io/docs/api-reference/devices/updates-firmware-version-to-be-activated-or-deactivated-1 put /api/v1/firmwares/component/{component-name}/{version-number} # Find devices by device state keys Source: https://bytebeam.io/docs/api-reference/find-devices-by-device-state-keys get /api/v2/devices/search # Get alert notification rule Source: https://bytebeam.io/docs/api-reference/get-alert-notification-rule get /api/v1/alert-rules/{alert-id}/alert-notification-rules/{notification-id} # Get all alert groups Source: https://bytebeam.io/docs/api-reference/get-all-alert-groups get /api/v1/alert-groups # Get all alert rules Source: https://bytebeam.io/docs/api-reference/get-all-alert-rules get /api/v1/alert-rules # Get all alert types Source: https://bytebeam.io/docs/api-reference/get-all-alert-types get /api/v1/alert-types # Get all audit Logs Source: https://bytebeam.io/docs/api-reference/get-all-audit-logs get /mock/logs # Get all DBCs for tenant Source: https://bytebeam.io/docs/api-reference/get-all-dbcs-for-tenant get /api/v1/dbcs # Get all device components Source: https://bytebeam.io/docs/api-reference/get-all-device-components get /api/v1/device_components # Get all Role logs Source: https://bytebeam.io/docs/api-reference/get-all-role-logs get /mock/logs/roles # Get all session types Source: https://bytebeam.io/docs/api-reference/get-all-session-types get /api/v1/session-types # Get all the Dashboard logs Source: https://bytebeam.io/docs/api-reference/get-all-the-dashboard-logs get /mock/logs/dashboard # Get all the Metadata logs Source: https://bytebeam.io/docs/api-reference/get-all-the-metadata-logs get /mock/logs/metadata # null Source: https://bytebeam.io/docs/api-reference/get-apiv1devicesstate-keys get /api/v1/devices/state-keys # null Source: https://bytebeam.io/docs/api-reference/get-apiv1firmware-bundles get /api/v1/firmware-bundles # null Source: https://bytebeam.io/docs/api-reference/get-apiv1firmware-bundles-artifact get /api/v1/firmware-bundles/{firmware-bundle-id}/artifact # null Source: https://bytebeam.io/docs/api-reference/get-apiv1firmware-bundlesid get /api/v1/firmware-bundles/id/{firmware-bundle-id} # null Source: https://bytebeam.io/docs/api-reference/get-apiv1firmware-bundlesversion get /api/v1/firmware-bundles/version/{version} # null Source: https://bytebeam.io/docs/api-reference/get-apiv1log-tags get /api/v1/log-tags # Get auth details given tenant id Source: https://bytebeam.io/docs/api-reference/get-auth-details-given-tenant-id get /api/v1/tenants/{tenant-id}/auth # Get dbc file for a DBC given id Source: https://bytebeam.io/docs/api-reference/get-dbc-file-for-a-dbc-given-id get /api/v1/dbcs/{dbc-id}/dbc # Get device actions given device id Source: https://bytebeam.io/docs/api-reference/get-device-actions-given-device-id get /api/v1/devices/{device_id}/actions # Get info about a single DBC given id Source: https://bytebeam.io/docs/api-reference/get-info-about-a-single-dbc-given-id get /api/v1/dbcs/{dbc-id} # Get list of timezones supported by dashboard CSV export Source: https://bytebeam.io/docs/api-reference/get-list-of-timezones-supported-by-dashboard-csv-export get /api/v1/timezones # null Source: https://bytebeam.io/docs/api-reference/get-logout get /logout # Get logs of a role Source: https://bytebeam.io/docs/api-reference/get-logs-of-a-role get /mock/logs/role/{role-name} # Get logs of a specific dashboard Source: https://bytebeam.io/docs/api-reference/get-logs-of-a-specific-dashboard get /mock/logs/dashboard/{dashboard-id} # Get metadata key and available options Source: https://bytebeam.io/docs/api-reference/get-metadata-key-and-available-options get /api/v1/devices/filter-options # Get Metadata log for a key Source: https://bytebeam.io/docs/api-reference/get-metadata-log-for-a-key get /mock/logs/metadata/{metadata-key} # null Source: https://bytebeam.io/docs/api-reference/get-metrics get /metrics # null Source: https://bytebeam.io/docs/api-reference/get-mockapiv1actions get /mock/api/v1/actions/{id} # Get parsed version of a DBC given id Source: https://bytebeam.io/docs/api-reference/get-parsed-version-of-a-dbc-given-id get /api/v1/dbcs/{dbc-id}/json # get schedule for an action Source: https://bytebeam.io/docs/api-reference/get-schedule-for-an-action get /api/v1/actions/{action_id}/schedule # Get share options for the user Source: https://bytebeam.io/docs/api-reference/get-share-options-for-the-user get /api/v1/dashboard-share-options # Get tables and columns available for querying Source: https://bytebeam.io/docs/api-reference/get-tables-and-columns-available-for-querying get /api/v1/stream_info # Get the list of devices - paginated. Source: https://bytebeam.io/docs/api-reference/get-the-list-of-devices--paginated get /api/v2/devices # null Source: https://bytebeam.io/docs/api-reference/head-apiv1firmware-bundles-artifact head /api/v1/firmware-bundles/{firmware-bundle-id}/artifact # Just a test route Source: https://bytebeam.io/docs/api-reference/just-a-test-route get /mock/test # Logs for device certifactes Source: https://bytebeam.io/docs/api-reference/logs/logs-for-device-certifactes get /api/v1/logs/device-certs # Logs for device certifactes by device id Source: https://bytebeam.io/docs/api-reference/logs/logs-for-device-certifactes-by-device-id get /api/v1/logs/device-certs/{device-id} # Mark all device actions given device id as completed Source: https://bytebeam.io/docs/api-reference/mark-all-device-actions-given-device-id-as-completed put /api/v1/devices/{id}/actions/mark_as_completed # Ping-pong end point Source: https://bytebeam.io/docs/api-reference/ping-pong-end-point get /ping # null Source: https://bytebeam.io/docs/api-reference/post-apiv1dbcs-diff post /api/v1/dbcs/{dbc-id}/diff # null Source: https://bytebeam.io/docs/api-reference/post-apiv1firmware-bundles post /api/v1/firmware-bundles # null Source: https://bytebeam.io/docs/api-reference/post-mockapiv1actions post /mock/api/v1/actions # null Source: https://bytebeam.io/docs/api-reference/post-mockapiv2actions post /mock/api/v2/actions # null Source: https://bytebeam.io/docs/api-reference/put-apiv1dbcs-update put /api/v1/dbcs/{dbc-id}/update # null Source: https://bytebeam.io/docs/api-reference/put-apiv1firmware-bundlesid put /api/v1/firmware-bundles/id/{firmware-bundle-id} # null Source: https://bytebeam.io/docs/api-reference/put-apiv1firmware-bundlesversion put /api/v1/firmware-bundles/version/{version} # Request authorization for tenant Source: https://bytebeam.io/docs/api-reference/request-authorization-for-tenant post /api/v1/auth-end-user # Returns available filters for searching actions of a device Source: https://bytebeam.io/docs/api-reference/returns-available-filters-for-searching-actions-of-a-device get /api/v1/devices/{device_id}/actions/filter-options # Returns list of tenants Source: https://bytebeam.io/docs/api-reference/returns-list-of-tenants get /api/v1/tenants # Search device by metadata Source: https://bytebeam.io/docs/api-reference/search-device-by-metadata post /api/v1/devices/search # Show overall progress of actions triggered Source: https://bytebeam.io/docs/api-reference/show-overall-progress-of-actions-triggered get /api/v1/actions # Start alert rule Source: https://bytebeam.io/docs/api-reference/start-alert-rule put /api/v1/alert-rules/{id}/start # Start Parser Source: https://bytebeam.io/docs/api-reference/start-parser put /api/v1/dbcs/{dbc-id}/start # Start session type Source: https://bytebeam.io/docs/api-reference/start-session-type put /api/v1/session-types/{name}/start # Stop alert rule Source: https://bytebeam.io/docs/api-reference/stop-alert-rule put /api/v1/alert-rules/{id}/stop # Stop Parser Source: https://bytebeam.io/docs/api-reference/stop-parser put /api/v1/dbcs/{dbc-id}/stop # Stop session type Source: https://bytebeam.io/docs/api-reference/stop-session-type put /api/v1/session-types/{name}/stop # Store tenant's end user authentication method Source: https://bytebeam.io/docs/api-reference/store-tenants-end-user-authentication-method put /api/v1/tenants/{tenant-id}/auth # Takes a filter and returns parameters matching that filter Source: https://bytebeam.io/docs/api-reference/takes-a-filter-and-returns-parameters-matching-that-filter get /api/v1/actions/filter-options # Test alert notification rule Source: https://bytebeam.io/docs/api-reference/test-alert-notification-rule post /api/v1/alert-rules/{id}/test-alert-notification-rule # Update alert notification rule Source: https://bytebeam.io/docs/api-reference/update-alert-notification-rule put /api/v1/alert-rules/{alert-id}/alert-notification-rules/{notification-id} # Update alert rule Source: https://bytebeam.io/docs/api-reference/update-alert-rule put /api/v1/alert-rules/{id} # Update DBC settings Source: https://bytebeam.io/docs/api-reference/update-dbc-settings put /api/v1/dbcs/{dbc-id} # Updates the status of the action triggered on the device Source: https://bytebeam.io/docs/api-reference/updates-the-status-of-the-action-triggered-on-the-device post /api/v1/devices/action/status # Connect to Bytebeam cloud Source: https://bytebeam.io/docs/device-side-integrations/android/connect-to-bytebeam-cloud Learn how to connect your device to the Bytebeam cloud with this step-by-step guide. Start by creating an account on Bytebeam, then download the device configuration JSON file. Rename the file to "device.json" and store it in the "download" partition of your device. This page assumes that you have gone through the [Getting Started guide](https://bytebeamio.mintlify.app/getting-started/signup) for creating an account. # Provisioning the device Each device needs to be provisioned with a unique JSON file `device.json` that is used for authentication. Refer to the [Device Provisioning Guide](https://bytebeamio.mintlify.app/platform-guide/device-management/provisioning-a-device) to download the device configuration file. Rename the downloaded file to device.json and place it in the uplink data directory (/data/local/tmp/uplink in the example setup). # Running Uplink The entry point of the example setup is `service.sh`. You should ensure that it's started at boot with the correct privileges. In an AOSP setup, it would be done by adding a system service ([https://android.googlesource.com/platform/system/core/+/master/init/README.md](https://android.googlesource.com/platform/system/core/+/master/init/README.md)). # Customising device shadow Source: https://bytebeam.io/docs/device-side-integrations/android/customising-device-shadow Learn about streams and device shadows in client applications with this document. Discover how default parameters like timestamp and sequence number are pushed to the device shadow stream. Explore the possibility of creating custom device shadow streams with additional fields. Every project in Bytebeam comes with a default [Device Shadow](https://bytebeamio.mintlify.app/getting-started/device-shadow) stream. The stream by default contains just three fields `Status`, `timestamp`, and `sequence`. This guide shows how to create additional fields and write data to this stream from your application. For that, Click on the **username** at the top right corner of the Bytebeam  cloud console and navigate to **Settings**  Here under the **Stream** Tab, you can find “**device\_shadow**” For example, add two new columns `device_name` and `arch` to the device shadow. You can do this by entering the field name and type and clicking the + button. After adding both fields your device shadow will look like the below: Now update your application to push this data to the device. :::codeblocktabs ```python theme={null} import socket import json import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("localhost", 5050)) # Constructs a payload and sends it over TCP to uplink def send_data(s, payload): send = json.dumps(payload) + "\n" s.sendall(bytes(send, encoding="utf-8")) # Add more parameters to device shadow def send_device_shadow(s, sequence): timestamp = int(time.time() * 1000) payload = { "stream": "device_shadow", "sequence": sequence, "timestamp": timestamp, "device_name": "Beaglebone Black Rev. C", "arch": "armv7", } print(payload) send_data(s, payload) print("Starting Uplink Bridge App") sequence = 1 while True: time.sleep(10) send_device_shadow(s, sequence) sequence += 1 ``` ```javascript theme={null} const net = require("net"); // Connect to the server const client = new net.Socket(); client.connect(5050, "localhost", () => { console.log("Connected to server"); }); // Constructs a payload and sends it over TCP to uplink function sendData(payload) { const send = JSON.stringify(payload) + "\n"; client.write(send); } // Send device shadow data function sendDeviceShadow(sequence) { let timestamp = Date.now(); let payload = { stream: "device_shadow", sequence: sequence, timestamp: timestamp, device_name: "Beaglebone Black Rev. C", arch: "armv7", }; console.log(payload); sendData(payload); } console.log("Starting Uplink Bridge App"); let sequence = 1; setInterval(() => { sendDeviceShadow(sequence); sequence++; }, 10000); ``` ```rust theme={null} use std::net::TcpStream; use std::io::{Read, Write}; use std::thread; use std::time::{Duration, SystemTime}; use serde_json::{Value, json}; async fn send_data(mut stream: &TcpStream, payload: serde_json::Value) { let send = format!("{}\n", payload.to_string()); stream.write_all(send.as_bytes()).await.unwrap(); } async fn send_device_shadow(mut stream: &TcpStream, sequence: u64) { let timestamp = SystemTime::now() .duration_since(SystemTime::UNIX_EPOCH) .unwrap() .as_millis(); let payload = json!({ "stream": "device_shadow", "sequence": sequence, "timestamp": timestamp, "device_name": "Beaglebone Black Rev. C", "arch": "armv7" }); println!("{:?}", payload); send_data(&mut stream, payload).await; } #[tokio::main] async fn main() { let addr = "localhost:5050"; let mut stream = TcpStream::connect(&addr).await.unwrap(); println!("Starting Uplink Bridge App"); let mut sequence = 1; loop { thread::sleep(Duration::from_secs(5)); send_device_shadow(&mut stream, sequence); sequence += 1; } } ``` ```go theme={null} package main import ( "encoding/json" "fmt" "net" "os" "strconv" "time" ) // DeviceShadow represents the payload structure type DeviceShadow struct { Stream string `json:"stream"` Sequence int `json:"sequence"` Timestamp int64 `json:"timestamp"` DeviceName string `json:"device_name"` Arch string `json:"arch"` } func sendData(conn net.Conn, payload interface{}) { data, _ := json.Marshal(payload) fmt.Println(string(data)) conn.Write(append(data, '\n')) } // sendDeviceShadow constructs and sends a device shadow payload func sendDeviceShadow(conn net.Conn, sequence int) { t := time.Now().UnixNano() / int64(time.Millisecond) payload := DeviceShadow{ Stream: "device_shadow", Sequence: sequence, Timestamp: t, DeviceName: "Beaglebone Black Rev. C", Arch: "armv7", } fmt.Println(payload) sendData(conn, payload)(conn, payload) } func main() { conn, err := net.Dial("tcp", "localhost:5050") if err != nil { fmt.Println("Error connecting:", err.Error()) os.Exit(1) } defer conn.Close() fmt.Println("Starting Uplink Bridge App") sequence := 1 for { time.Sleep(5 * time.Second) sendDeviceShadow(conn, sequence) sequence++ } } ``` ::: You should now be able to see the new fields on Bytebeam cloud: # Device Setup Source: https://bytebeam.io/docs/device-side-integrations/android/device-setup Learn how to setup our device sdk on your android devices [uplink](https://github.com/bytebeamio/uplink) is our device side sdk. It is an executable that is supposed to run on the device as a system service. It will handle communication with our backend, buffering of uploaded data to disk in case of bad network, OTAs and features like remote shell. You can check out an example setup for android [here](https://github.com/bytebeamio/uplink/tree/main/examples/android). The entry point for this example setup is `service.sh`. There are a couple of configuration options in `env.sh`. # Disk Stats Source: https://bytebeam.io/docs/device-side-integrations/android/monitoring-your-device/disk-stats Learn how to view storage device details, such as available space and total size, with this comprehensive document. Explore the "Disk Stats" section and discover the corresponding stream, "uplink_disk_stats," which offers insights into partition names. The storage device details such as available space on disk, total size, etc can be viewed under Disk Stats. The stream corresponding to disk stats is "**uplink\_disk\_stats**" stream. This stream has the following fields: | Field | Description | | --------- | --------------------------------------------------------------- | | name | Name of the disk partition | | total | Total storage capacity of the partition in bytes. | | used | Disk space that is already occupied in the partition, in bytes. | | available | Disk space that is available in the partition, in bytes. | # Network Stats Source: https://bytebeam.io/docs/device-side-integrations/android/monitoring-your-device/network-stats Learn about the essential "**uplink\_network\_stats**" stream; discover how this document delineates crucial details like networking interface names, incoming and outgoing data rates. Network stats talk about the incoming and outgoing data rates of each networking interface. The "**uplink\_network\_stats**" stream has these details. This stream has the following fields: | Field name | Description | | -------------------- | ---------------------------------------------------------------- | | name | Name of the network interface. | | incoming\_data\_rate | The incoming data rate through the interface is in bytes/second. | | outgoing\_data\_rate | The outgoing data rate through the interface is in bytes/second. | # Process Stats Source: https://bytebeam.io/docs/device-side-integrations/android/monitoring-your-device/process-stats Learn how to view resource usage statistics of specific processes with this comprehensive guide. Discover how to specify process names in the config.toml file and access the uplink_process_stats stream. Explore the various fields available, such as PID, start_time, cpu_usage etc. Process stats allow you to monitor individual processes. To enable process stats we need to modify uplink's `config.toml` file to mention the process names that need monitoring. If you have followed the setup guide, this file should be present in `/usr/share/local/byebeam`. Add the below section to `config.toml` ```none theme={null} [system_stats] enabled = true process_names = ["uplink", "journalctl"] update_period = 30 ``` NOTE: The names of processes mentioned in the config should be the same as those in the output of `ps -eaf` The stream corresponding to process stats is **uplink\_process\_stats**. This stream has the below fields | Field name | Description | | ------------------------- | ------------------------------------------------------------------------------------------- | | pid | This field corresponds to a particular process's ID. | | start\_time | Time at which the process had started execution. | | cpu\_usage | Percentage of CPU being used by the process. | | mem\_usage | RAM is used by the process, in bytes. | | disk\_read\_bytes | The number of bytes of data read from the disk(or storage device) since the last update. | | disk\_total\_read\_bytes | Total number of bytes of data written to the disk(or storage device) since the last update. | | disk\_write\_bytes | A number of bytes of data read from the disk(or storage device) since the last update. | | disk\_total\_write\_bytes | Total number of bytes of data written to the disk(or storage device). | # Processor Stats Source: https://bytebeam.io/docs/device-side-integrations/android/monitoring-your-device/processor-stats Learn about processor stats and usage percentages in this informative document. Discover how the "uplink_processor_stats" stream conveys vital details such as CPU name, frequency, and overall usage percentage. Gain valuable insights into optimizing processor. Processor stats talk about the frequency at which each processor is running and the usage percentage of each processor. This data is pushed to the stream "**uplink\_processor\_stats**". This stream has the below field: | Field | Description | | --------- | ------------------------------------- | | name | Name of the CPU | | frequency | The clock frequency of the CPU in MHz | | usage | Percentage of CPU used | # System Stats Source: https://bytebeam.io/docs/device-side-integrations/android/monitoring-your-device/system-stats Learn about the valuable data provided by the "uplink_system_stats" stream, such as kernel version, running processes, device uptime, memory usage, and load averages. Enhance your understanding of system performance to optimize operations and improve efficiency. System stats contain information regarding the kernel version, memory usage, uptime, load average, etc. These details are pushed to the `uplink_system_stats` stream. This stream has the following fields: | Field name | Description | | ------------------ | ------------------------------------------------------- | | kernel\_version | The version of the currently running kernel. | | no\_processes | Count of the currently running processes in the system. | | uptime | Time elapsed in seconds since the device has booted. | | total\_memory | Total memory (RAM) present on the device in bytes | | used\_memory | Amount of memory being used by the device in bytes | | available\_memory | Memory available (unused) on the device in bytes | | load\_avg\_one | One-minute load average of the system | | load\_avg\_five | Five-minute load average of the system | | load\_avg\_fifteen | Fifteen-minute load average of the system | # Push application logs Source: https://bytebeam.io/docs/device-side-integrations/android/push-application-logs Learn how to effectively view journalctl logs on Bytebeam cloud with this comprehensive document. Discover the step-by-step instructions on setting up streams and dashboards, adding logging to devices, and configuring logging from the cloud. Detailed screrenshots are attached below. Using Bytebeam cloud, it is possible to view the logs of the device. Uplink is capable of collecting logcat logs and pushing them to cloud, which can then be visualized using the logs panel. You should create a stream called `logs` with this schema in your project: Now, we need to create a "**logs**" dashboard. # Create logs dashboard Go to the "**Dashboards**" section of Bytebeam Cloud and select "**Create Dashboard**" Give the title "**logs**" and select the Dashboard type as "**Device Dashboard**". Click on submit. The created dashboard should be visible now. Click on the "**logs**" dashboard and select the device for which you want to see the logs. Create a New Panel. Select the "Logs" panel. Give the appropriate title and select the "**Logs**" option from the "**Table**" drop-down menu. Click on submit. To enable the logging feature on the device, the following lines are to be added to the config.toml file. ```none theme={null} [logging] # logcat tags you want to upload tags = [ "AndroidContext", "io.bytebeam.android_web_wrapper.BluetoothService.R1", "io.bytebeam.android_web_wrapper.interfaces.WifiInterface", "BluetoothGatt" ] # 0 will collect all logs (VERBOSE) # 6 will collect only logs with priority "Fatal" min_level = 6 stream_size = 32 ``` Restart uplink. The logs should be visible on the cloud now. # Pushing data to Bytebeam Source: https://bytebeam.io/docs/device-side-integrations/android/pushing-data-to-bytebeam Learn how to push data to streams using ByteBeam Client with this comprehensive document. Includes a Rust code example for publishing data, emphasizing the need for JSON serialization. Discover the best practices, including omitting "id" and "timestamp" fields. You can use ByteBeam Client to push data to [Streams](https://bytebeamio.mintlify.app/platform-guide/streams-tables/introduction-to-streams). Follow [Creating a Stream](https://bytebeamio.mintlify.app/platform-guide/streams-tables/creating-a-stream) guide to create streams. ```rust theme={null} pub fn publish_to_stream( &self, // Bytebeam Client stream_name: &str, sequence: u32, payload: impl Serialize, ) -> anyhow::Result ``` Payload you want to publish must be something that can be Serialized to JSON. Lets say you have "**led\_status**" stream with field "**status**". You can create a struct and use **serde::Serialize** attribute. ```rust theme={null} #[derive(Serialize)] struct LedStream { // your custom fields! status: String, } fn main() { // .... let bytebeam_client = ByteBeamClient::init()?; let sequence = 1; let message = LedStream { status: "ON".into(), }; // You can remove .expect and handle the error bytebeam_client .publish_to_stream("led_status", sequence, message) .expect("published successfully"); //... } ``` *NOTE: Every stream has ****id**** and ****timestamp**** fields as well, we add them internally, so it is recommended to not include them in your custom struct!* \*\* # Receiving Actions Source: https://bytebeam.io/docs/device-side-integrations/android/receiving-actions Learn how to effectively use the actions feature of Bytebeam cloud on your Linux device with this comprehensive guide. Discover step-by-step instructions on creating a "reboot" action and gaining control over the uplink through essential commands. This guide shows you how to receive [Actions](/platform-guide/actions/action-details/introduction) (Commands) from the Cloud and execute them. Let us have a look at how to create a "reboot" action that restarts the device. To do this we need to first register this action with uplink using its configuration file `config.toml`. If you have followed the guide this file will be present in `/usr/local/share/bytebeam` folder. Edit this file to add the line actions=\[] under \[tcpapps.1] section. ```shell theme={null} persistence_path = "/data/local/tmp/uplink/persistence" action_redirections={update_firmware="install_firmware"} [tcpapps.1] port=5050 actions=[{name="reboot"}] [downloader] path="/data/local/tmp/uplink/downloads" actions=[{name="update_firmware", timeout=610}, {name="send_file"}] [apis] enabled=true port=3333 [ota_installer] path="/data/local/tmp/uplink/ota" actions=[{name="install_firmware", timeout=610}] uplink_port=5050 [logging] tags=["sshd", "systemd"] stream_size=1 min_level=7 ``` Restart the uplink using the following commands Create a new action type called "Reboot" by following the [Creating new Action Types](/platform-guide/actions/action-settings/creating-an-action-type) guide: The reboot action should now be visible on the device management page. Do not trigger the action yet. We need to first integrate the action into our application. Below you can find a sample application code for receiving actions. :::codeblocktabs ```python theme={null} import socket import json import time import os import threading s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("localhost", 5050)) # Converts JSON data received over TCP into a python dictionary def receive_action(s): return json.loads(s.recv(2048)) # Constructs a payload and sends it over TCP to uplink def send_data(s, payload): send = json.dumps(payload) + "\n" s.sendall(bytes(send, encoding="utf-8")) # Constructs a JSON `action_status` as a response to received action on completion def action_complete(id): return { "stream": "action_status", "sequence": 0, "timestamp": int(time.time() * 1000000), "action_id": id, "state": "Completed", "progress": 100, "errors": [], } # Reboots the device def reboot(action): payload = json.loads(action["payload"]) print(payload) resp = action_complete(action["action_id"]) print(resp) send_data(s, resp) os.system("sudo reboot") def receive_actions(): while True: action = receive_action(s) print(action) if action["name"] == "reboot": print("reboot action received") reboot(action) print("Starting Uplink Bridge App") threading.Thread(target=receive_actions).start() ``` ```javascript theme={null} const net = require("net"); const client = new net.Socket(); client.connect(5050, "localhost", () => { console.log("Connected to server"); }); // Converts JSON data received over TCP into a JavaScript object function receiveAction() { return new Promise((resolve, reject) => { client.once("data", (data) => { try { resolve(JSON.parse(data)); } catch (e) { reject(e); } }); }); } // Constructs a payload and sends it over TCP to uplink function sendData(payload) { const send = JSON.stringify(payload) + "\n"; client.write(send, "utf-8"); } // Constructs a JSON `action_status` as a response to received action on completion function actionComplete(id) { return { stream: "action_status", sequence: 0, timestamp: Date.now() * 1000, action_id: id, state: "Completed", progress: 100, errors: [], }; } // Reboots the device function reboot(action) { const payload = JSON.parse(action.payload); console.log(payload); const resp = actionComplete(action.action_id); console.log(resp); sendData(resp); exec("sudo reboot", (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } console.log(`stdout: ${stdout}`); console.error(`stderr: ${stderr}`); }); } async function receiveActions() { while (true) { const action = await receiveAction(); console.log(action); if (action.name === "reboot") { console.log("reboot action received"); reboot(action); } } } console.log("Starting Uplink Bridge App"); receiveActions(); ``` ```rust theme={null} use serde_json::{json, Value}; use std::io::{Read, Write}; use std::net::TcpStream; use std::process::Command; use std::{thread, time}; fn main() { let mut stream = TcpStream::connect("localhost:5050").expect("Could not connect to server"); // Start a thread to receive actions let mut stream_clone = stream.try_clone().expect("Failed to clone stream"); thread::spawn(move || { receive_actions(&mut stream_clone); }); } fn receive_action(stream: &mut TcpStream) -> Value { let mut buffer = [0; 2048]; stream .read(&mut buffer) .expect("Failed to read from stream"); serde_json::from_slice(&buffer).expect("Failed to parse JSON") } fn send_data(stream: &mut TcpStream, payload: Value) { let send = payload.to_string() + "\n"; stream .write_all(send.as_bytes()) .expect("Failed to write to stream"); } fn action_complete(id: i64) -> Value { json!({ "stream": "action_status", "sequence": 0, "timestamp": time::SystemTime::now() .duration_since(time::UNIX_EPOCH) .expect("Time went backwards") .as_micros() as i64, "action_id": id, "state": "Completed", "progress": 100, "errors": [] }) } fn reboot(action: &Value) { let payload = &action["payload"]; println!("{:?}", payload); let resp = action_complete(action["action_id"].as_i64().unwrap()); println!("{:?}", resp); send_data(&mut stream, resp); Command::new("sudo") .arg("reboot") .output() .expect("failed to execute process"); } fn receive_actions(stream: &mut TcpStream) { loop { let action = receive_action(stream); println!("{:?}", action); if action["name"] == "reboot" { println!("reboot action received"); reboot(&action); } } } ``` ```go theme={null} package main import ( "encoding/json" "fmt" "net" "os" "os/exec" "strconv" "time" ) func main() { conn, err := net.Dial("tcp", "localhost:5050") if err != nil { fmt.Println("Error connecting:", err.Error()) os.Exit(1) } // Start a goroutine for receiving actions go receiveActions(conn) fmt.Println("Starting Uplink Bridge App") } // receiveAction reads and decodes JSON data from the connection func receiveAction(conn net.Conn) map[string]interface{} { buffer := make([]byte, 2048) length, _ := conn.Read(buffer) var data map[string]interface{} json.Unmarshal(buffer[:length], &data) return data } // sendData encodes the payload to JSON and sends it over the connection func sendData(conn net.Conn, payload map[string]interface{}) { send, _ := json.Marshal(payload) conn.Write(append(send, '\n')) } // actionComplete constructs a JSON action_status response func actionComplete(id interface{}) map[string]interface{} { return map[string]interface{}{ "stream": "action_status", "sequence": 0, "timestamp": time.Now().UnixNano() / int64(time.Microsecond), "action_id": id, "state": "Completed", "progress": 100, "errors": []string{}, } } // reboot performs a system reboot func reboot(action map[string]interface{}) { payload := action["payload"].(map[string]interface{}) fmt.Println(payload) resp := actionComplete(action["action_id"]) fmt.Println(resp) sendData(conn, resp) cmd := exec.Command("sudo", "reboot") cmd.Run() } // receiveActions listens for actions and processes them func receiveActions(conn net.Conn) { for { action := receiveAction(conn) fmt.Println(action) if action["name"] == "reboot" { fmt.Println("reboot action received") reboot(action) } } } ``` ::: Once your app has been modified and is running, you can go to Bytebeam Cloud and click on the Reboot action button to trigger the action. Next, you will see the following message Click on **Yes.** Next, on the action panel, you can monitor the status of your last triggered action After completion of an action, the *Action Status* changes to **Completed** and you should see your device reboot # Remote login to your Linux device Source: https://bytebeam.io/docs/device-side-integrations/android/remote-login-to-your-linux-device Learn how to access the Linux device shell via Bytebeam cloud using tunshell tool. Follow our guide to easily navigate to the Bytebeam cloud, select your preferred device, and effortlessly access the remote shell option under the Operations section. From the Bytebeam cloud, it is possible to access the shell on the Linux device. To shell into your device, go to the Bytebeam cloud, select the device, and under the "**Operations**" section click on the "**Remote** **Shell**" Button. You should now be able to see the shell environment on the cloud. Note that the shell will be started with the privileges given to the uplink service by the operating system. # Connecting to Bytebeam cloud Source: https://bytebeam.io/docs/device-side-integrations/custom/connecting-to-bytebeam-cloud Download the device TLS certificates from platform and use them to authorise with server. # Download the device auth json file We use TLS Mutual authentication to connect a device to the cloud. Mutual authentication means that both the server and the client authenticate each other before the connection is setup. Three files are required for this authentication to happen correctly 1. CA Certificate: This file is used by the device to authenticate the server certificate 2. Device Certificate: This file is used by the device to authenticate itself to the server 3. Device Private Key: This file is also used by the device to authenticate itself to the server. Bytebeam provides a single json file that contains the contents of these three files. You can download the json file by [Provisioning a Device](/platform-guide/device-management/provisioning-a-device). This should give you a file like the below: ```json theme={null} { "project_id": "demo", "broker": "cloud.bytebeam.io", "port": 8883, "device_id": "2", "authentication": { "ca_certificate": "-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL\nBQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg\n<.. trimmed ..>u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj\nd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=\n-----END CERTIFICATE-----", "device_certificate": "-----BEGIN CERTIFICATE-----\nMIIEozCCBEmgAwIBAgIQTij3hrZsGjuULNLEDrdCpTAKBggqhkjOPQQDAjCBjzEL\nMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE\n<.. trimmed ..>bTAKBggqhkjOPQQDAgNIADBFAiEAru2McPr0eNwcWNuDEY0a/rGzXRfRrm+6XfZe\nSzhYZewCIBq4TUEBCgapv7xvAtRKdVdi/b4m36Uyej1ggyJsiesA\n-----END CERTIFICATE-----", "device_private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDNGprSdj+74i9/\n9lU+3d2XM4QIONUDKmqIuHRDxREGYcJg36kKeZc3S6iUH50oUSAYUyBSd8SyRmfa\n<.. trimmed ..>w85urMfh9z3Dq5xrNZJD+8TEDM/7Dz8meQj4n+oOIl8iHlKN9e7CTK4O3smS5/cN\n337I+FudGb8nO+Kv6PtsA6kD\n-----END RSA PRIVATE KEY-----" } } ``` **Note:** The certificates and keys in the above file and rest of this guide are just examples, you have to use the json file downloaded from the provisioning guide above. Let us extract the `ca_certificate`, `device_certificate` and `device_private_key` into three files. We will connect to Bytebeam cloud using these files and MQTTX. Note the "\n" characters in the strings. When extracting these into individual files we need to replace them with newlines. Here is how the three files would look like ```none CA Certificate theme={null} -----BEGIN CERTIFICATE----- MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv <...> nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= -----END CERTIFICATE----- ``` ```none Device Certificate theme={null} -----BEGIN CERTIFICATE----- MIIEozCCBEmgAwIBAgIQTij3hrZsGjuULNLEDrdCpTAKBggqhkjOPQQDAjCBjzEL MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE BxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQDEy5T <...> uLBsCE8ktCUfvsiRT7zWSqeXliA09TUCIQDcB7Xn97aEDMBKXIbdm5KZ9GjvRyoF 9skD5/4GneoMWzAlBgNVHREEHjAcggpnaXRodWIuY29tgg53d3cuZ2l0aHViLmNv bTAKBggqhkjOPQQDAgNIADBFAiEAru2McPr0eNwcWNuDEY0a/rGzXRfRrm+6XfZe SzhYZewCIBq4TUEBCgapv7xvAtRKdVdi/b4m36Uyej1ggyJsiesA -----END CERTIFICATE----- ``` ```none Device Key theme={null} -----BEGIN RSA PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDNGprSdj+74i9/ 9lU+3d2XM4QIONUDKmqIuHRDxREGYcJg36kKeZc3S6iUH50oUSAYUyBSd8SyRmfa shwTW0P2WA9kIccXbDlpWlbnRi7P/PrJ1pniDtgnJHJrhtvduPecyoS037nuYYRw <...> fyoQDuPjTuMBYKn0aj9JWfD4ohFRImcH1I3XcVkr0QKBgATjHK1sKXPNNnTD1MbL LJxhy5JmqY1pxwnO+XLEDMSNx3omrk7C2KmFUk2lg2NZM/2ZVnLmPvKKhV88df3C w85urMfh9z3Dq5xrNZJD+8TEDM/7Dz8meQj4n+oOIl8iHlKN9e7CTK4O3smS5/cN 337I+FudGb8nO+Kv6PtsA6kD -----END RSA PRIVATE KEY----- ``` # Connect using MQTTX Now open MQTTX and click on `+ New Connection` to create a new connection: Fill in the Name, Client ID, Host, Port as shown below. For the certificate field select "CA or self signed certificates" and upload the files we have extracted above. Select MQTT 3.1.1 as the protocol version in the advanced settings: Click on the Connect button on the top right and you should see a successful connection. Any errors need to be fixed before proceeding further with the guide. # Building this into your SDK Now that we have understood how to connect to bytebeam you can implement this programatically in your client. You can follow the below steps: 1. The first step towards building a client is figuring out how to implement MQTT. mqtt.org has a [list of client libraries for various operating systems and langauges.](https://mqtt.org/software/) If you are using a GSM modem in AT command mode it is possible that your modem comes built in with MQTT commands as well. 2. Note that bytebeam expects each device to present a unique MQTT client id. e.g. you can construct the client id as "client-\-\". 3. Once you have figured out an MQTT implementation, you can write code to connect using the certificates and private key downloaded from cloud. Note that we support only TLS 1.2 and above. Most modern systems support this version. 4. Make sure to handle disconnections and reconnect as required. # Implementing over the air updates Source: https://bytebeam.io/docs/device-side-integrations/custom/implementing-over-the-air-updates Receive and handle `update_firmware` action on device side which downloads the firmware and perform the update. Also publish the progress of OTA via the action status. Over the air updates is a special kind of action. Read the sections on [Creating a new Firmware Version](/platform-guide/actions/inventory-management/firmware-files/without-device-components/creating-a-new-firmware-version) and [Triggering OTA update](/platform-guide/device-management/triggering-ota-update) to learn how to upload a firmware file and push it to the device from the cloud. The payload for the OTA action `update_firmware` is as below: ```json theme={null} { "name": "update_firmware", "id": "3620755", "payload": "{\"content-length\":304,\"checksum\":null,\"status\":false,\"url\":\"https://firmware.cloud.bytebeam.io/api/v1/firmwares/v3.0.0/artifact\",\"version\":\"v3.0.0\"}", } ``` Notice that payload is json inside a string. Payload json has the following fields of interest: * `content-length`: The size of the firmware file * `url`: The url from which the firmware file needs to be downloaded * `version` The version of the file being downloaded Ignore the `checksum` and `status` fields. These fields are not implemented on cloud.bytebeam.io and are used by some of our enterprise clients The client needs to download the file at the url extracted from the payload above using https. Mutual TLS is implemented here as well i.e both the server and the client authenticate each other. The same certificates downloaded in the [Connect to Bytebeam cloud](/device-side-integrations/custom/connecting-to-bytebeam-cloud) section and used for settting up the MQTT connection need to be used here as well. # Implementing OTA in your client You can implement OTAs in your client as follows 1. As in the previous guide on [Receiving Actions](/device-side-integrations/custom/receiving-actions) subscribe to the actions topic 2. When an action with name `update_firmware` is received handle it as an OTA action: 1. Parse the payload as json 2. Extract the url field 3. Download the firmware using the certificates and private key from the json file downloaded earlier. Optionally send the download progress back to the cloud. 4. Implement the actual update. Send progress back during the update and at the end. It is useful to either have a factory version of the firmware or to store one previous version of the firmware to rollback in case the step 4 fails. In this case it is usefult to send the status as "Failed" and set the errors field to \["Rolled back to version xyz"] to the cloud. # Downloading the firmware file using curl We could not find a good GUI tool that supports custom certificates to show how to download the above files. However the curl command line tool is available for [different platforms](https://curl.se/download.html) and can be used for this purpose. Once curl has been installed you can run the below command to download the firmware file: ```shell theme={null} curl --cacert ./ca_certificate.pem --cert ./device_certificate.pem --key ./device_private_key.pem https://firmware.cloud.bytebeam.io/api/v1/firmwares/v3.0.0/artifact -o ./file.bin ``` In the above command replace `./ca_certificate.pem`, `./device_certificate.pem`, `./device_private_key.pem` and `./file.bin` with the full paths of these files on your system. # Pushing data to Bytebeam Source: https://bytebeam.io/docs/device-side-integrations/custom/pushing-data-to-bytebeam Publish data to `/tenants/{tenant_id}/devices/{device_id}/events/{stream_name}/jsonarray` in JSON array format. # Introduction The previous section shown us how to connect to bytebeam. It is now time to start pushing some data. All communication with Bytebeam happens using JSON. On Bytebeam data is organised into [Streams](https://bytebeamio.mintlify.app/platform-guide/streams-tables/introduction-to-streams). Each stream is mapped to an MQTT topic. Go through the [Creating a Stream](https://bytebeamio.mintlify.app/platform-guide/streams-tables/creating-a-stream) guide to create a stream. Every project in bytebeam comes with a default stream called [Device Shadow](https://bytebeamio.mintlify.app/getting-started/device-shadow). We will be illustring how to push data using this stream. # MQTT topic and payload structure ### Topic structure To push data to any stream, you need to publish data to the MQTT topic: `/tenants/{tenant_id}/devices/{device_id}/events/{stream_name}/jsonarray` Replace `{tenant_id}` with your project name and `{device_id}` with the device id. You can find these in the JSON file downloaded in the previous section. Say we are on `demo` project and device id is `1`, so in our case, topic for device shadow will be: `/tenants/demo/devices/1/events/device_shadow/jsonarray` Data should be published with QoS 0 or 1 only, QoS 2 is not supported yet. ### Payload The payload must be a jsonarray, which is an array of data point, where data point is just a JSON object with following fields: * `sequence`: an auto incrementing number for each packet * `timestamp`: Timestamp in milliseconds * other fields of the stream ( note: Field names are case sensitive ) so example of a payload for our device\_shadow which contains field `Status` will look like: ```json theme={null} [ { "sequence": 1, "timestamp": 1710760059006, "Status": "On" } ] ``` *A device should only publish data to the tenant it is connected*.
**\_Device will be disconnected** if device connected to tenant `demo`, tries to publish to other tenant, say `mytenant`, e.g. `/tenants/mytenant/devices/1/events/device_shadow/jsonarray`
### Batching Data As the payload that server accepts is a JSON array. If your client is expected to generate a large amount of data it will be more efficient to batch data and send it to the cloud instead of sending a single packet with each message. For example: ```json theme={null} [ { "sequence": 1, "timestamp": 1710760059006, ... }, { "sequence":2, "timestamp": 1710775681047, ... } ] ``` ### Compressing Data If you are sending larger batches of data you can save on data size by sending `zlib` or `lz4` compressed data. zlib compressed data for stream should be published to: ``` /tenants/{tenant_id}/devices/{device_id}/events/{stream_name}/jsonarray/zlibdeflate ``` ( Notice the `zlibdeflate` at end of topic ) LZ4 compressed data for stream should be published to: ``` /tenants/{tenant_id}/devices/{device_id}/events/{stream_name}/jsonarray/lz4 ``` ( Notice the `lz4` at end of topic ) Data must be compressed in **LZ4 Frame** format! You can verify it by magic bytes, i.e. the initial bytes of compressed data, they shoud be `04 22 4d 18` # Trying it out with MQTTX You can try publishing data using MQTTX as shown below. Notice the QoS1 setting: ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/A-L1Vb_lX8_oILcPVSEK9_image.png) You should see the Status change on Bytebeam now: ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/Se5Rryvfhu3wCt6pkjxZH_image.png) # Receiving Actions Source: https://bytebeam.io/docs/device-side-integrations/custom/receiving-actions Subscribe to `/tenants/{tenant_id}/devices/{device_id}/actions` to receive actions and publish the reponse to `/tenants/{tenant_id}/devices/{device_id}/action/status` in JSON array format. # Introduction To trigger an action from the cloud follow the guides on [Creating new Action Types](/platform-guide/actions/action-settings/creating-an-action-type) and [Triggering an Action](/platform-guide/device-management/triggering-ota-update). Let us assume an action called `print` has been created that prints the payload: ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/JkWw-TjfFURxcD0qSt-Qa_image.png) ### Receiving Action [Actions](/platform-guide/actions/action-details/introduction) or commands can be received from Bytebeam by **subscribing** to the actions MQTT topic: ``` /tenants/{tenant_id}/devices/{device_id}/actions ``` Replace `{tenant_id}` with your project name and `{device_id}` with the device id. *A device should only subscribe to the topic with tenant it is connected*.
**\_Device will be disconnected** if device connected to tenant `demo`, tries to subscribe to topic with other tenant, say `mytenant`, e.g. `/tenants/mytenant/devices/1/actions`
Once the action is triggered you will receive a message on MQTT: ```json theme={null} { "id": "3620695", "name": "print", "payload": "Hello World!", } ``` here: * `id`: An unique identifier generated for this event which will be used to ack back. * `name`: Name of the action that is triggered * `payload`: Optional payload that is provided while triggering the action ### Responding to Action with Action Status We need to send a response back to the cloud to indicate progress of executing the command. This response must be published to: ``` /tenants/{tenant_id}/devices/{device_id}/action/status ``` And the payload should look like this: ```json theme={null} [   {     "action_id": "3620695",     "timestamp": 1710774583249, "sequence": 123,     "state": "Completed",     "errors": [],     "progress": 100   } ] ``` In the above action response: * `id`: Must be a string and the same `id` which was received with action * `timestamp`: Timestamp in milliseconds * `state`: can be any text to indicuate current status. e.g. A long running commands, like OTA, might have multiple states "Downloading", "Updating ECU 1", "Updating ECU 2" so on so forth as statuses. `"Failed"` and `"Completed"` are special terminal states that indicate that the action is complete * `errors`: is an array of strings and is looked at *only if the `state` is sent as `"Failed"`*. The UI displays these errors. e.g. `["File not found"]` * `progress`: Percentage in range 0 to 100 indicating progress within a given state. e.g. if `state` is "Downloading" and `progress` is 50 it means 50% of Downlaod is complete. `progress` is ***ignored*** if `state` is `"Completed"` or `"Failed"` For long running actions, periodically send the action status. Sending action status as `"Received"` to notify the server that the action is received is optional but a good practice. Send `"Completed"` or `"Failed"` status at the end of the action. # Receiving actions using MQTTX Open MQTTX and click on the `+ New Subscription` button: ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/ouvtBHkW3DfPgk560M2ip_image.png) Enter the topic (Replace tenant and device\_id) and set QoS to 1: ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/MzOP8-VouiWP6MY1kG9fO_image.png) Hit confirm. You should see the subscription now: ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/57F304TNFHyYHM271I2Tw_image.png) From the device management screen on your project trigger the print command: ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/tWTrnsJqiqpnmBYVnJcOL_image.png) This will open up a dialog as shown below. Enter payload and click on "Yes": ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/BPuooOcYD_9ou4OyLf_R1_image.png) You will see the action get created with status as "Initiated" ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/waWofel1eKSFmxKYIOENp_image.png) On MQTTX you should now receive a message like below: ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/trU6Hkle9xBdjMJKqKLa__image.png) Notice the id in the payload matches the id on the you see on the UI. Ignore the additional field `kind`. That field has been deprecated. You can send progress back as shown below: ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/RN7s2Pxykh1A5zAKfev4v_image.png) Do not forget to set the id to what was received in the message by you and also change `demo` and device id `2` to your tenant and device id You should now be able to see the action as completed on the UI ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/FjDADa7i3iaPRVcebCdYZ_image.png) # Connect to Bytebeam cloud Source: https://bytebeam.io/docs/device-side-integrations/linux/connect-to-bytebeam-cloud Learn how to connect your device to the Bytebeam cloud with this step-by-step guide. Start by creating an account on Bytebeam, then download the device configuration JSON file. Rename the file to "device.json" and store it in the "download" partition of your device. This page assumes that you have gone through the [Getting Started guide](https://bytebeamio.mintlify.app/getting-started/signup) for creating an account. # Provisioning the device Each device needs to be provisioned with a unique JSON file `device.json` that is used for authentication. Refer to the [Device Provisioning Guide](https://bytebeamio.mintlify.app/platform-guide/device-management/provisioning-a-device) to download the device configuration file. Rename the downloaded file to device.json and place it in the "download" partition(/mnt/download) of the device. If you are connecting to the device via ssh you can use the below `scp` command. First, provide permission to the /mnt/download partition using `chmod` command. ```shell theme={null} chmod 777 /mnt/download ``` and then use `scp` command ```shell theme={null} scp /home/bytebeam/Downloads/device.json user@:/mnt/download ``` # Running Uplink Start uplink and enable it to run at boot. ```shell theme={null} sudo systemctl start uplink sudo systemctl enable uplink ``` To verify that the uplink is up and running, check the status in systemd, using the following command. ```shell theme={null} sudo systemctl status uplink ``` You should see the status as "active" like in the screenshot below: # Customising device shadow Source: https://bytebeam.io/docs/device-side-integrations/linux/customising-device-shadow Learn about streams and device shadows in client applications with this document. Discover how default parameters like timestamp and sequence number are pushed to the device shadow stream. Explore the possibility of creating custom device shadow streams with the instructions below. Every project in Bytebeam comes with a default [Device Shadow](https://bytebeamio.mintlify.app/getting-started/device-shadow) stream. The stream by default contains just three fields `Status`, `timestamp`, and `sequence`. This guide shows how to create additional fields and write data to this stream from your application. For that, Click on the **username** at the top right corner of the Bytebeam  cloud console and navigate to **Settings**  Here under the **Stream** Tab, you can find “**device\_shadow**” For example, add two new columns `device_name` and `arch` to the device shadow. You can do this by entering the field name and type and clicking the + button. After adding both fields your device shadow will look like the below: Now update your application to push this data to the device. :::codeblocktabs ```python theme={null} import socket import json import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("localhost", 5050)) # Constructs a payload and sends it over TCP to uplink def send_data(s, payload): send = json.dumps(payload) + "\n" s.sendall(bytes(send, encoding="utf-8")) # Add more parameters to device shadow def send_device_shadow(s, sequence): timestamp = int(time.time() * 1000) payload = { "stream": "device_shadow", "sequence": sequence, "timestamp": timestamp, "device_name": "Beaglebone Black Rev. C", "arch": "armv7", } print(payload) send_data(s, payload) print("Starting Uplink Bridge App") sequence = 1 while True: time.sleep(10) send_device_shadow(s, sequence) sequence += 1 ``` ```javascript theme={null} const net = require("net"); // Connect to the server const client = new net.Socket(); client.connect(5050, "localhost", () => { console.log("Connected to server"); }); // Constructs a payload and sends it over TCP to uplink function sendData(payload) { const send = JSON.stringify(payload) + "\n"; client.write(send); } // Send device shadow data function sendDeviceShadow(sequence) { let timestamp = Date.now(); let payload = { stream: "device_shadow", sequence: sequence, timestamp: timestamp, device_name: "Beaglebone Black Rev. C", arch: "armv7", }; console.log(payload); sendData(payload); } console.log("Starting Uplink Bridge App"); let sequence = 1; setInterval(() => { sendDeviceShadow(sequence); sequence++; }, 10000); ``` ```rust theme={null} use std::net::TcpStream; use std::io::{Read, Write}; use std::thread; use std::time::{Duration, SystemTime}; use serde_json::{Value, json}; async fn send_data(mut stream: &TcpStream, payload: serde_json::Value) { let send = format!("{}\n", payload.to_string()); stream.write_all(send.as_bytes()).await.unwrap(); } async fn send_device_shadow(mut stream: &TcpStream, sequence: u64) { let timestamp = SystemTime::now() .duration_since(SystemTime::UNIX_EPOCH) .unwrap() .as_millis(); let payload = json!({ "stream": "device_shadow", "sequence": sequence, "timestamp": timestamp, "device_name": "Beaglebone Black Rev. C", "arch": "armv7" }); println!("{:?}", payload); send_data(&mut stream, payload).await; } #[tokio::main] async fn main() { let addr = "localhost:5050"; let mut stream = TcpStream::connect(&addr).await.unwrap(); println!("Starting Uplink Bridge App"); let mut sequence = 1; loop { thread::sleep(Duration::from_secs(5)); send_device_shadow(&mut stream, sequence); sequence += 1; } } ``` ```go theme={null} package main import ( "encoding/json" "fmt" "net" "os" "strconv" "time" ) // DeviceShadow represents the payload structure type DeviceShadow struct { Stream string `json:"stream"` Sequence int `json:"sequence"` Timestamp int64 `json:"timestamp"` DeviceName string `json:"device_name"` Arch string `json:"arch"` } func sendData(conn net.Conn, payload interface{}) { data, _ := json.Marshal(payload) fmt.Println(string(data)) conn.Write(append(data, '\n')) } // sendDeviceShadow constructs and sends a device shadow payload func sendDeviceShadow(conn net.Conn, sequence int) { t := time.Now().UnixNano() / int64(time.Millisecond) payload := DeviceShadow{ Stream: "device_shadow", Sequence: sequence, Timestamp: t, DeviceName: "Beaglebone Black Rev. C", Arch: "armv7", } fmt.Println(payload) sendData(conn, payload)(conn, payload) } func main() { conn, err := net.Dial("tcp", "localhost:5050") if err != nil { fmt.Println("Error connecting:", err.Error()) os.Exit(1) } defer conn.Close() fmt.Println("Starting Uplink Bridge App") sequence := 1 for { time.Sleep(5 * time.Second) sendDeviceShadow(conn, sequence) sequence++ } } ``` ::: You should now be able to see the new fields on Bytebeam cloud: # BeagleBone Black Source: https://bytebeam.io/docs/device-side-integrations/linux/device-setup/beaglebone-black Learn how to set up a BeagleBone Black device using this comprehensive document. From flashing the ByteBeam BeagleBoneBlack image onto the SD card to accessing the device via UART, this guide covers it all. Get the step-by-step instructions below. # Selecting the OS This section explains how to do an initial setup, for an off-the-shelf BeagleBone Black. To get started, the following things are needed. 1. BeagleBoneBlack development kit. 2. An SD Card (of size 64GB). 3. An adapter for power supply (with at least 15W of power) 4. ByteBeam BeagleBoneBlack image ByteBeam BeagleBone image can be downloaded from this link. Install the balena etcher software by following the instructions in this link. Once the installation is done, plug in the SD card into the system and launch balena-etcher software. Follow these steps to flash the Bytebeam BeagleBone image to the SD Card. **Select the Flash from file option in balena-ecther** **Select Bytebeam BeagleBone image** **Select the appropriate SD Card and flash the image.** # Partition Schema The SD Card is now setup to contain 4 partitions. 1. Partition 1 - Boot partition (/dev/mmcblk0p1) 2. Partition 2 - Root partition 1  (/dev/mmcblk0p2) 3. Partition 3 - Root partition 2 (/dev/mmcblk0p3) 4. Partition 4 - download partition (/dev/mmcblk0p4) At any given point in time either "Partition 2" or "Partition 3" will be the active rootfs partition, and the other partition is referred to as the inactive partition. The download partition is where the persistent files are stored. During kernel & rootfs updates, the contents of inactive partitions are replaced with the new rootfs. # Booting BeagleBone Once the flashing is complete, insert the SD card into the BeagleBone. Push and hold the boot button(S2) on the BeagleBone dev. kit and power on the board. This ensures that the device boots from the SD Card and not from the onboard eMMC. Refer to this [link](https://subscription.packtpub.com/book/iot-and-hardware/9781785285059/1/ch01lvl1sec14/booting-your-beaglebone-board-from-a-sd-card) for a detailed description of this process. In order to flash the eMMC with the contents of the SD card: **Step 1:** Uncomment the following line from uEnv.txt in the boot partition. ```shell theme={null} cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh ``` **Step 2:** Push and hold the boot button(S2) on the BeagleBone dev. kit and power on the board. This process generally 30 to 40 minutes. This "[Getting Started](https://docs.beagleboard.org/latest/boards/beaglebone/black/ch03.html#connect-the-cable-to-the-board)" guide talks about different ways of accessing the BeagleBone from the Laptop/PC. It is also possible to access the BeagleBone via UART. Refer to [this](https://www.dummies.com/article/technology/computers/hardware/beaglebone/how-to-connect-the-beaglebone-black-via-serial-over-usb-144981/) link for details on connecting BeagleBone to the system via UART. # Download the one-time setup scripts Once the BeagleBone is up, run the below one-time setup script. This script installs Bytebeam's Linux agent [uplink](https://github.com/bytebeamio/uplink) as well as scripts required for over-the-air updates ```shell theme={null} curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/bytebeamio/uplink/main/scripts//one_time_setup.sh | bash ``` # Linux Generic Source: https://bytebeam.io/docs/device-side-integrations/linux/device-setup/linux-generic Learn how to efficiently integrate uboot as the bootloader for your device with this comprehensive document. From partition schema creation to switching logic implementation, this guide covers it all. Discover the steps to generate the boot.scr file, download uplink binary and setup scripts. # Overview This guide shows how to setup a generic Linux device to connect to Bytebeam. We assume you are using u-boot for the bootloader. If you are using a different bootloader please get in touch with us at [support@bytebeam.io](mailto:support@bytebeam.io) and we would be happy to guide you through the process. # Partition Schema Create the following partitions on the device Partition 1 - Boot partition of size around 100MB. Partition 2 - Root partition 1 (contains rootfs of Linux distro). Partition 3 - Root partition 2 (of size same as Root partition 1). Partition 4 - Download partition (to store application data) At any given point in time either "Partition 2" or "Partition 3" will be the active rootfs partition, and the other partition is referred to as the inactive partition. Data/Download partition is where the persistent files are stored. During kernel & rootfs updates, the contents of inactive partitions are replaced with the new rootfs. To begin with setup your existing rootfs into root partition 1 and point u-boot to boot into this partition. Once you have booted into partition 1: 1. Mount the boot partition at /uboot. 2. Mount the root partition 2 at /mnt/next\_root. 3. Mount the download partition 2 at /mnt/download. # Customizing u-boot for OTAs Bytebeam uses uboot as the bootloader in order to support rollback feature, during rootfs updates. U-boot can be configured with the help of a boot script called boot.scr. ## Root Switch Logic This section explains the workings of u-boot for choosing the right partition to boot from. Understanding this section is required to be able to troubleshoot any issues you may face. At a high level, we configure u-boot to look for a specific file in the boot partition to know which partition to boot form. For example, if file "two" is present, uboot boots from partition 2, and if file "three" is present, uboot boots from partition 3. The following flowchart explains the Root Switch logic in detail. ## Generate boot.scr The above logic needs to be implemented in the boot.scr file. Follow the below steps: **Step 1:** Download the [u-boot](https://github.com/u-boot/u-boot) source code. **Step 2:** Create the config. file named boot-cmd.txt. With the help of the "Root Switch" logic in this file, uboot can boot to the desired root partition. Note that this file depends on the type of the Linux device. Example files(uEnv.txt, rpi-boot-cmd.txt) are provied in the [Github](https://github.com/bytebeamio/uplink/tree/main/scripts) page. **Step 3:** From the config. file, boot script file boot.scr can be generated by: ```shell theme={null} cd /path/to/uboot u-boot/tools/mkimage -A arm64 -O linux -T script -C none -d boot-cmd.txt boot.scr ``` **Step 4:** Place the u-boot binary and boot script in the boot partition of the device. **Step 5:** Ensure that the fstab has the proper partition configuration. # Setup uplink and OTA scripts **Step 1:** Depending on the architecture of the device, the appropriate uplink binary can be downloaded from [this](https://github.com/bytebeamio/uplink/releases) link. Place it in the download partition, rename the binary as uplink, and make it executable. **Step 2:** Download the setup scripts ```shell theme={null} # get uplink.service curl --proto '=https' --tlsv1.2 -sSf -o /mnt/download/systemd/uplink.service https://raw.githubusercontent.com/bytebeamio/uplink/main/scripts/systemd/uplink.service # get check-root-partition.service curl --proto '=https' --tlsv1.2 -sSf -o /mnt/download/systemd/check-root-partition.service https://raw.githubusercontent.com/bytebeamio/uplink/main/scripts/systemd/check-root-partition.service # get config.toml curl --proto '=https' --tlsv1.2 -sSf -o /usr/local/share/bytebeam/config.toml https://raw.githubusercontent.com/bytebeamio/uplink/main/scripts/config.toml # get check_root_part.sh curl --proto '=https' --tlsv1.2 -sSf -o /mnt/download/check_root_part.sh https://raw.githubusercontent.com/bytebeamio/uplink/main/scripts/check_root_part.sh chmod +x /mnt/download/check_root_part.sh ``` **Step 3:** Add services to systemd ```shell theme={null} cp /mnt/download/systemd/uplink.service /etc/systemd/system/ cp /mnt/download/systemd/check-root-partition.service /etc/systemd/system/ systemctl daemon-reload systemctl enable check-root-partition.service systemctl start check-root-partition.service ``` **Step 4:** Depending on the root partition, create the file "two" or "three" in the boot partition and in the download partition as well. ```shell theme={null} BOOT=/uboot touch $BOOT/two touch /mnt/download/two ``` **Step 5:** Install vim and netcat ```shell theme={null} sudo apt update sudo apt install vim -y sudo apt install netcat -y ``` Boot the device. Ensure that the device has a good internet connection and that the system time is set properly. # Raspberry Pi Source: https://bytebeam.io/docs/device-side-integrations/linux/device-setup/raspberry-pi Learn how to set up a Raspberry Pi with this step-by-step document. Find out which components you need and how to install the rpi-imager software to select the operating system for your Pi. Get instructions on flashing the image to the SD card, setting up partition schema. # Selecting the OS This section explains how to do an initial setup, for an off-the-shelf Raspberry Pi. To get started, the following things are needed. 1. Raspberry Pi Board (In this example we use Raspberry Pi Model 3B+). 2. An SD Card (of size 64GB) 3. An adapter for power supply (with at least 15W of power) 4. ByteBeam RPI image ByteBeam RPI image can be downloaded from [this](https://drive.google.com/file/d/1fdH88IS-wuUvqT6SPsIt7Vmy3tzezECW/view?usp=sharing) link. Install the RPI-imager software by following the instructions in [this](https://www.raspberrypi.com/software/) link. Once the installation is done, connect the SD card to the Linux machine and launch the RPI-imager software. To do so, simply type in rpi-imager on the terminal. ```shell theme={null} sudo rpi-imager ``` Then click on Choose OS. A new window will open up, that has the list of all available Operating Systems for the Raspberry Pi. Select the Custom Image option. Select the downloaded ByteBeam RPI image. # Flashing the image to the SD Card Using RPI-imager, it’s possible to enable SSH, set a username and password for the Pi, and also input the WiFi credentials. Click on the settings icon on the rpi-imager GUI. Setup the necessary configurations. Save the configuration and click on Write, for the image to be flashed on the SD Card. # Partition Schema The SD Card is now setup to contain 4 partitions. 1. Partition 1 - Boot partition (/dev/mmcblk0p1) 2. Partition 2 - Root partition 1  (/dev/mmcblk0p2) 3. Partition 3 - Root partition 2 (/dev/mmcblk0p3) 4. Partition 4 - Download partition (/dev/mmcblk0p4) At any given point in time either "Partition 2" or "Partition 3" will be the active rootfs partition, and the other partition is referred to as the inactive partition. The download partition is where application data is stored. During kernel & rootfs updates, the contents of inactive partitions are replaced with the new rootfs. Once the flashing is complete, insert the SD card into the Pi and power on the Pi. If everything is alright, the Pi can be accessed either through SSH or via UART. Refer to [this](https://emteria.com/kb/connect-uart-rpi) link on how to connect the Pi to the system via UART. # SDK Setup Once the Pi is up run the below one-time setup script. This script installs Bytebeam's Linux agent [uplink](https://github.com/bytebeamio/uplink) as well as scripts required for over-the-air updates *** ```shell theme={null} sudo curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/bytebeamio/uplink/main/scripts/one_time_setup.sh | sudo bash ``` # Integrate Config Updates Source: https://bytebeam.io/docs/device-side-integrations/linux/integrate-config-updates Learn how to update the configuration of your device using Bytebeam cloud with this comprehensive guide. Follow the step-by-step instructions to access the device management section, create a new device config, and confirm your selection. Bytebeam enables you to remotely change the configuration of your application. This is done by sending JSON-based configuration to the device. This guide will walk you through how to achieve this. # Creating new device config. Steps to update configuration: **Step 1**: Go to the device management section in Bytebeam cloud. **Step 2**: Go to the "Device Configs" section **Step 3**: Click on "New Device Config" **Step 4**: Enter the appropriate details for the device configuration. In this example, We are changing the current log level of our Python application The new device config should be visible now. On the device, First, register this action with uplink using its configuration file **config.toml** as we did in the [Receiving Actions](https://bytebeamio.mintlify.app/device-side-integrations/linux/receiving-actions) section. This file is present in **/usr/local/share/bytebeam** folder. Edit this file to add the line **actions=\[]** under **\[tcpapps.1]** section. ```shell theme={null} persistence_path = "/tmp/uplink" action_redirections={update_firmware="install_firmware"} [tcpapps.1] port=5050 actions=[{name="reboot"}, {name="update_config"}] [downloader] path="/tmp/uplink/download" actions=[{name="update_firmware", timeout=610}, {name="send_file"}] [apis] enabled=true port=3333 [ota_installer] path="/tmp/uplink/installer" actions=[{name="install_firmware", timeout=610}] uplink_port=5050 [logging] tags=["sshd", "systemd"] stream_size=1 min_level=7 ``` Restart the uplink using the following commands ```shell theme={null} sudo systemctl restart uplink ``` Next using the following example you can update the configuration on your device :::codeblocktabs ```python theme={null} import socket import json import time import threading import logging s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("localhost", 5050)) # Converts JSON data received over TCP into a python dictionary def receive_action(s): return json.loads(s.recv(2048)) # Constructs a payload and sends it over TCP to uplink def send_data(s, payload): send = json.dumps(payload) + "\n" s.sendall(bytes(send, encoding="utf-8")) # Constructs a JSON `action_status` as a response to received action on completion def action_complete(id): return { "stream": "action_status", "sequence": 0, "timestamp": int(time.time() * 1000000), "action_id": id, "state": "Completed", "progress": 100, "errors": [], } def update_config(action): payload = json.loads(action["payload"]) print(payload) app = payload["name"] print(app) level = payload["level"] if app == "logging": set_log_level(level) resp = action_complete(action["action_id"]) print(resp) send_data(s, resp) def receive_actions(): while True: action = receive_action(s) print(action) if action["name"] == "update_config": print("update_config action received") print(json.loads(action["payload"])) update_config(action) def set_log_level(level): if level.lower() == "info": logging.getLogger().setLevel(logging.INFO) elif level.lower() == "error": logging.getLogger().setLevel(logging.ERROR) elif level.lower() == "verbose": logging.getLogger().setLevel(logging.VERBOSE) elif level.lower() == "debug": logging.getLogger().setLevel(logging.DEBUG) print("Starting Uplink Bridge App") threading.Thread(target=receive_actions).start() logging.getLogger().setLevel(logging.INFO) logging.Formatter("%(levelname)s - %(message)s") while True: time.sleep(5) logging.debug("This is debug") logging.info("This is info") ``` ```javascript theme={null} const logger = log4js.getLogger(); const net = require("net"); const log4js = require("log4js"); const client = new net.Socket(); client.connect(5050, "localhost", () => { console.log("Connected to server"); }); // Configure logger log4js.configure({ appenders: { console: { type: "console" } }, categories: { default: { appenders: ["console"], level: "info" } }, }); // Receive JSON data over TCP function receiveAction(socket) { return new Promise((resolve, reject) => { socket.once("data", (data) => { try { const action = JSON.parse(data.toString()); resolve(action); } catch (error) { reject(error); } }); }); } // Send JSON payload over TCP function sendData(socket, payload) { const send = JSON.stringify(payload) + "\n"; socket.write(send); } // Construct and send action status function actionComplete(id) { return { stream: "action_status", sequence: 0, timestamp: Date.now(), action_id: id, state: "Completed", progress: 100, errors: [], }; } async function updateConfig(action) { const payload = JSON.parse(action.payload); console.log(payload); const app = payload.name; console.log(app); const level = payload.level; if (app === "logging") { setLogLevel(level); } const resp = actionComplete(action.action_id); console.log(resp); sendData(client, resp); } // Receiving actions async function receiveActions() { while (true) { const action = await receiveAction(client); console.log(action); if (action.name === "update_config") { console.log("update_config action received"); console.log(JSON.parse(action.payload)); await updateConfig(action); } } } console.log("Starting Uplink Bridge App"); receiveActions(); // Log messages at intervals setInterval(() => { logger.debug("This is debug"); logger.info("This is info"); }, 5000); ``` ```rust theme={null} use chrono::Utc; use flexi_logger::{LevelFilter, LogSpecification, Logger}; use log::{debug, error, info}; use serde_json::json; use std::io::{BufRead, BufReader, Write}; use std::net::TcpStream; use std::thread; fn receive_action(stream: &mut TcpStream) -> serde_json::Result { let mut reader = BufReader::new(stream); let mut buffer = String::new(); reader.read_line(&mut buffer)?; serde_json::from_str(&buffer) } fn send_data(stream: &mut TcpStream, payload: serde_json::Value) { let serialized = serde_json::to_string(&payload).unwrap() + "\n"; stream.write_all(serialized.as_bytes()).unwrap(); } fn action_complete(action_id: &str) -> serde_json::Value { json!({ "stream": "action_status", "sequence": 0, "timestamp": Utc::now().timestamp_millis(), "action_id": action_id, "state": "Completed", "progress": 100, "errors": [] }) } fn update_config(stream: &mut TcpStream, action: &serde_json::Value) { let payload: serde_json::Value = serde_json::from_str(action["payload"].as_str().unwrap()).unwrap(); let app = payload["name"].as_str().unwrap(); let level = payload["level"].as_str().unwrap(); if app == "logging" { set_log_level(level); } let resp = action_complete(action["action_id"].as_str().unwrap()); send_data(stream, resp); } fn set_log_level(level: &str) { let level_filter = match level.to_lowercase().as_str() { "info" => LevelFilter::Info, "error" => LevelFilter::Error, "verbose" => LevelFilter::Trace, // Rust doesn't have 'verbose', using 'Trace' instead "debug" => LevelFilter::Debug, _ => LevelFilter::Info, }; let log_spec = LogSpecification::default().with_default(level_filter); Logger::with(log_spec).start().unwrap_or_else(|e| { eprintln!("Failed to initialize logger: {}", e); }); info!("Log level set to {}", level); } fn receive_actions(mut stream: TcpStream) { loop { let action = receive_action(&mut stream).unwrap(); if action["name"] == "update_config" { update_config(&mut stream, &action); } } } fn main() { Logger::with_env_or_str("info").start().unwrap(); let mut stream = TcpStream::connect("localhost:5050").unwrap(); println!("Starting Uplink Bridge App"); let stream_clone = stream.try_clone().unwrap(); thread::spawn(move || { receive_actions(stream_clone); }); loop { thread::sleep(std::time::Duration::from_secs(5)); debug!("This is debug"); info!("This is info"); error!("This is error"); } } ``` ```go theme={null} package main import ( "bufio" "encoding/json" "fmt" "io" "net" "os" "time" log "github.com/sirupsen/logrus" ) func main() { conn, err := net.Dial("tcp", "localhost:5050") if err != nil { fmt.Println("Error connecting:", err) os.Exit(1) } defer conn.Close() log.SetLevel(log.InfoLevel) log.SetFormatter(&log.TextFormatter{}) log.SetOutput(os.Stdout) go receiveActions(conn) fmt.Println("Starting Uplink Bridge App") for { time.Sleep(5 * time.Second) log.Debug("This is debug") log.Info("This is info") log.Error("This is error") } } // receiveAction reads and decodes a JSON message from the connection. func receiveAction(conn net.Conn) (map[string]interface{}, error) { reader := bufio.NewReader(conn) msg, err := reader.ReadString('\n') if err != nil { return nil, err } var action map[string]interface{} err = json.Unmarshal([]byte(msg), &action) return action, err } // sendAction encodes a payload as JSON and sends it over the connection. func sendAction(conn net.Conn, payload map[string]interface{}) error { msg, err := json.Marshal(payload) if err != nil { return err } _, err = conn.Write(append(msg, '\n')) return err } // actionComplete constructs a JSON `action_status` as a response to received action on completion. func actionComplete(id interface{}) map[string]interface{} { return map[string]interface{}{ "stream": "action_status", "sequence": 0, "timestamp": time.Now().UnixNano() / 1000, "action_id": id, "state": "Completed", "progress": 100, "errors": []string{}, } } // updateConfig processes the update_config action. func updateConfig(conn net.Conn, action map[string]interface{}) { payloadStr := action["payload"].(string) var payload map[string]interface{} json.Unmarshal([]byte(payloadStr), &payload) app := payload["name"].(string) level := payload["level"].(string) if app == "logging" { setLogLevel(level) } resp := actionComplete(action["action_id"]) sendAction(conn, resp) } func setLogLevel(level string) { switch level { case "info": log.SetLevel(log.InfoLevel) case "error": log.SetLevel(log.ErrorLevel) case "verbose": log.SetLevel(log.TraceLevel) // Go's logrus doesn't have 'verbose', using 'Trace' instead case "debug": log.SetLevel(log.DebugLevel) default: log.SetLevel(log.InfoLevel) } log.Infof("Log level set to %s", level) } // recvActions handles incoming actions in a separate goroutine. func receiveActions(conn net.Conn) { for { action, err := receiveAction(conn) if err != nil { if err == io.EOF { fmt.Println("Connection closed by server") return } fmt.Println("Error reading:", err) continue } fmt.Println("Action received:", action) if action["name"] == "update_config" { fmt.Println("update_config action received") updateConfig(conn, action) } } } ``` ::: # Triggering config update On the device management section of Bytebeam Cloud, select the device and click on **Update Configuration** Select the appropriate config. version. Confirm the selection. You should now be able to see the status of the update on the cloud. # App Update Source: https://bytebeam.io/docs/device-side-integrations/linux/integrate-over-the-air-updates/app-update Learn how to update an application binary on a remote device using Bytebeam cloud with this comprehensive guide. It covers essential steps such as setting the application path, incorporating the application into systemd, and creating an update tar file. This guide talks about how to update an application binary of the remote device from the Bytebeam cloud. App update replaces the existing binary on the system with the binary uploaded on the Bytebeam cloud. We have provided an example application on our [Github](https://github.com/bytebeamio/uplink/tree/main/examples/rpi/updates/app_update) page. There are four files in the example. * **hello\_app** - Prints "Hello from Bytebeam" every 3 seconds. * **app\_update.sh** - This script replaces the old application with new application. * **update.sh** - This is a wrapper script for app\_update.sh script. * **make\_firmware\_update.sh** - It creates the update tar file. ## Step1: Prepare update tar Firstly on your Linux system, we need to create an update tar file for Raspberry Pi. For that, Download all the files mentioned above from GitHub. Next, we need to change the permissions for all these files using `chmod` command ```shell theme={null} chmod a+x hello_app chmod a+x app_update.sh chmod a+x update.sh chmod a+x make_firmware_update.sh ``` Next run **make\_firmware\_update.sh** to create a tar.gz file. ```shell theme={null} ./make_firmware_update.sh ``` ## Step 2: upload update Tar Next, we need to upload the tar to [bytebeam cloud.](https://cloud.bytebeam.io/) For that go to device management panel and click on the **Firmware Versions** tab. Under the Firmware version tab, you will find an option to create a firmware version number and upload your updated tar file. Enter the new **Firmware version number** and click on **choose file** to upload tar file. Then click on **Create.** ## Step 3: Set the application path In **step 1** we have already assumed that you want to update\*\* **the** hello\_app\*\* that exists on your remote device and we created an update tar accordingly. On the remote device, the app is expected to be in **/usr/local/bin** location. If it's not there then create a new **hello\_app** in **/usr/local/bin.** ```shell theme={null} #!/bin/bash while [ 1 ] do sleep 3 echo "Hi from Bytebeam" done ``` If the application location and app name are different, set the path in app\_update.sh script in **Step 1**. ```shell theme={null} APP_NAME=hello_app APP_BIN_PATH=/usr/local/bin ``` ## Step 4: Create systemctl service to debug update changes To debug your changes after the app update, Let's create a service that runs hello\_app. So, create this service named **\.service** and place it in **/etc/systemd/system**. ```none theme={null} [Unit] Description=Simple Application service After=network.target auditd.service [Service] ExecStart=/usr/bin/bash /usr/local/bin/hello_app KillMode=process Restart=on-failure Type=simple [Install] WantedBy=multi-user.target ``` Reload systemctl daemon and start the service. ```shell theme={null} sudo systemctl daemon-reload sudo systemctl enable hello_app.service sudo systemctl start hello_app ``` ## Step 5: Trigger "update firmware" action from bytebeam cloud Now let's proceed with our OTA update. For that, Go to the **Device Management** panel and select the device Next, Click on the **update firmware** In the next prompt choose the **firmware version** and click on **next** Monitor the progress of firmware updates in the action panel. and on your remote device, you can see updated **hello\_app** ## Update uplink Using these steps we can update the uplink as well. ### Steps to follow **Step 1:** In the example, replace the hello\_app with the uplink binary. **Step 2:** Change the uplink path and application name in app\_update.sh **Step 3:** Run make\_firmware\_update.sh. **Step 4:** Upload the generated update tar file to Bytebeam cloud. # App Update with rollback Source: https://bytebeam.io/docs/device-side-integrations/linux/integrate-over-the-air-updates/app-update-with-rollback Learn how to update and rollback your app with this comprehensive document. It includes step-by-step instructions and an example on GitHub with four essential files. Discover how to set the application path, integrate it with systemd, create an update tar file and upload it. This section talks about how to do an app update and roll back to the previous working version of the app if the update fails. We have provided an example on our [Github](https://github.com/bytebeamio/uplink/tree/main/examples/rpi/updates/app_update_rollback) page. There are four files in the example. * **hello\_app** - Prints "Hello from Bytebeam" every 3 seconds. * **app\_update\_rollback.sh** - This script replaces the old application with the new application. If the new application doesn't work, this script replaces it with the working version of the application. * **updater** - This is a wrapper script for app\_update\_rollback.sh script. * **make\_firmware\_update.sh** - It creates the update tar file. It is expected that there is a working version of the application on the remote device and is expected to be run by systemd. To create an update file, with the custom application, follow these steps. ## Step1: Prepare update tar Firstly on your Linux system, we need to create an update tar file for Raspberry Pi. For that, Download all the files mentioned above from GitHub. Next, we need to change the permissions for all these files using `chmod` command ```shell theme={null} chmod a+x hello_app chmod a+x app_update.sh chmod a+x update.sh chmod a+x make_firmware_update.sh ``` Next run **make\_firmware\_update.sh** to create a tar.gz file. ```shell theme={null} ./make_firmware_update.sh ``` ## Step 2: upload update Tar Next, we need to upload the tar to [bytebeam cloud.](https://cloud.bytebeam.io/) For that go to the device management panel and navigate to the **Firmware Versions** tab. Then click on **Upload New Firmware** Under the Firmware version tab, you will find an option to create a firmware version number and upload your updated tar file. Enter the new **Firmware version number** and click on **choose file** to upload tar file. Then click on **Create.** ## Step 3: Set the application path In **step 1** we have already assumed that you want to update the **hello\_app** that exists on your remote device and we created an update tar accordingly. On the remote device, the app is expected to be in **/usr/local/bin** location. If it's not there then create a new **hello\_app** in **/usr/local/bin.** ```shell theme={null} #!/bin/bash while [ 1 ] do sleep 3 echo "Hi from Bytebeam" done ``` If the application location and app name are different, set the path in app\_update.sh script in **Step 1**. ```shell theme={null} APP_NAME=hello_app APP_BIN_PATH=/usr/local/bin ``` ## Step 4: Create systemctl service to debug update changes To debug your changes after the app update, Let's create a service that runs hello\_app. So, create this service named **\.service** and place it in **/etc/systemd/system**. ```none theme={null} [Unit] Description=Simple Application service After=network.target auditd.service [Service] ExecStart=/usr/bin/bash /usr/local/bin/hello_app KillMode=process Restart=on-failure Type=simple [Install] WantedBy=multi-user.target ``` Reload systemctl daemon and start the service. ```shell theme={null} sudo systemctl daemon-reload sudo systemctl enable app.service sudo systemctl start app ``` ## Step 5: Trigger the "update firmware" action from bytebeam cloud Now let's proceed with our OTA update. For that, Go to **Device Management** panel and select the device Next, Click on the **update firmware** In the next prompt choose the **firmware version** and click on **next** # Deb Update Source: https://bytebeam.io/docs/device-side-integrations/linux/integrate-over-the-air-updates/deb-update Learn how to install deb packages using deb_update on your device with this comprehensive guide. Follow a step-by-step example on Github that includes all necessary files. Replace the apt-src deb package, generate the update tar file with make_firmware_update.sh If you have a deb package to be installed on the device, then deb\_update is the right way to do it.  The example on [Github](https://github.com/bytebeamio/uplink/tree/main/examples/rpi/updates/deb_update) page shows how to install a deb package on the device. There are four files mentioned in the example. * **deb\_update.sh** - It installs the specified deb package on the device. * **apt-src\_0.25.3\_all.deb** - In the example, we try to install this deb package. * **update.sh** - This is the wrapper script for deb\_update.sh * **make\_firmware\_update.sh** - This creates the update tar file, that needs to be uploaded on the Bytebeam cloud. ## Step1: Prepare update tar Firstly on your Linux system, we need to create an update tar file for Raspberry Pi. For that, Download all the files mentioned above from GitHub. Next, we need to change the permissions for all these files using `chmod` command ```shell theme={null} chmod a+x apt-src_0.25.3_all.deb chmod a+x deb_update.sh chmod a+x update.sh chmod a+x make_firmware_update.sh ``` Next, run **make\_firmware\_update.sh** to create a tar.gz file. ```shell theme={null} ./make_firmware_update.sh ``` ## Step 2: upload update Tar Next, we need to upload the tar to [bytebeam cloud.](https://cloud.bytebeam.io/) For that go to the device management panel and navigate to the **Firmware Versions** tab. Then click on **Upload New Firmware** Under the Firmware version tab, you will find an option to create a firmware version number and upload your updated tar file. Enter the new **Firmware version number** and click on **choose file** to upload tar file. Then click on **Create.** ## Step 3: Trigger the "update firmware" action from bytebeam cloud Now let's proceed with our OTA update. For that, Go to **the Device Management** panel and select the device Next, Click on the **update firmware** In the next prompt choose the **firmware version** and click on **next** # Integrate Over The Air Updates Source: https://bytebeam.io/docs/device-side-integrations/linux/integrate-over-the-air-updates/overview Learn about the different types of OTA updates offered by Bytebeam for IoT devices, including app updates, app updates with rollback, deb updates, and rootfs updates. Discover the step-by-step process involved, from creating the update tar file to triggering it. OTA update has become a critical requirement for devices being deployed remotely. This guide covers how to integrate Over the Air Upgrades using uplink. There are four steps to trying out OTA updates with Bytbeam. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/2yt8p2xbn2YEQTchWttPr_algorithm-flowchart-example-3.jpeg) ## **Step 1:** Create the update artifact Update artifacts with Bytebeam are simple tar files containing an executable script called updater. Uplink download the tar file, extract it, and run the updater script. Currently, we support four types of updates. App update is the simplest form of update, to start with. Refer to the appropriate update sections to create the tar file for each update type. * [App Update](https://bytebeamio.mintlify.app/device-side-integrations/linux/integrate-over-the-air-updates/app-update): App update replaces the old app binary on the device with the new binary uploaded to the Bytebeam cloud. * [App Update with rollback](https://bytebeamio.mintlify.app/device-side-integrations/linux/integrate-over-the-air-updates/app-update-with-rollback): This is similar to an app update but with a rollback feature. This allows the device to roll back to the previous version of the app if the update fails. * [Deb Update](https://bytebeamio.mintlify.app/device-side-integrations/linux/integrate-over-the-air-updates/deb-update): Deb update installs the provided deb package onto the device. * [Rootfs Update](https://bytebeamio.mintlify.app/device-side-integrations/linux/integrate-over-the-air-updates/rootfs-update) This updates the entire rootfs, kernel, and firmware files(in the boot partition) as well. ## **Step 2**: Upload the update file Refer to the guide on [Creating a new Firmware Version](docId:IsAoIC5-7ftNjTTcO55ih) ## **Step 3**: Trigger an OTA update from the cloud. Refer to the guide on [Triggering OTA update](docId:adgo-fN2Yj0Q5lPtiBRQO) ## **Step 4:** Uplink runs updater script Uplink downloads the tar file, extracts the contents, and runs the updater script. # Rootfs Update Source: https://bytebeam.io/docs/device-side-integrations/linux/integrate-over-the-air-updates/rootfs-update Learn how to update the root file system (rootfs) of your system easily with this document. It includes detailed steps and an example, utilizing rootfs_update.sh, updater, and make_firmware_update.sh files. Create a tar file of your current rootfs, generate the update tar file. Rootfs update is one of the most common ways of updating the system. The example page on [Github](https://github.com/bytebeamio/uplink/tree/main/examples/rpi/updates/rootfs_update) talks about rootfs updates in detail. There are three files in the example. * **rootfs\_update.sh** - This script installs the rootfs (uploaded on the Bytebeam cloud) to the new partition and boots to the new rootfs. * **updater** - This is the wrapper script for rootfs\_update.sh. * **make\_firmware\_update.sh** - It creates the update tar file, that needs to be uploaded to the Bytebeam cloud. # Step 1: Create tar of the rootfs On the device, use the following command to take the backup of the rootfs. ```shell theme={null} #!/bin/bash # To create tar of current rootfs sudo find / -maxdepth 1 -mindepth 1 -not -type l -print0 | \ sudo tar -cvpzf /mnt/download/rootfs.tar.gz \ --exclude='/mnt/download/rootfs.tar.gz' \ --exclude='/proc/*' \ --exclude='/tmp/*' \ --exclude='/mnt/*' \ --exclude='/dev/*' \ --exclude='/sys/*' \ --exclude='/run/*' \ --exclude='/media/*' \ --exclude='/home/pi/*' / ``` **NOTE:** For BeagleBone, use the following script to backup the rootfs. We do not take the backup of the boot partition(named uboot). ```shell theme={null} #!/bin/bash # To create tar of current rootfs sudo find / -maxdepth 1 -mindepth 1 -not -type l -print0 | \ sudo tar -cvpzf /mnt/download/rootfs.tar.gz \ --exclude='/mnt/download/rootfs.tar.gz' \ --exclude='/uboot/*' \ --exclude='/proc/*' \ --exclude='/tmp/*' \ --exclude='/mnt/*' \ --exclude='/dev/*' \ --exclude='/sys/*' \ --exclude='/run/*' \ --exclude='/media/*' \ --exclude='/home/debian/*' / ``` # Step 2: Create the update tar file Run the make\_firmware\_update.sh script, which generates the update tar file named rootfs\_update.tar.gz. Upload this file in the "Firmware Upload" section of the Bytebeam cloud. Once the update is complete, the device will be booted to the new rootfs. # Disk Stats Source: https://bytebeam.io/docs/device-side-integrations/linux/monitoring-your-device/disk-stats Learn how to view storage device details, such as available space and total size, with this comprehensive document. Explore the "Disk Stats" section and discover the corresponding stream, "uplink_disk_stats," which offers insights into partition names. The storage device details such as available space on disk, total size, etc can be viewed under Disk Stats. The stream corresponding to disk stats is "**uplink\_disk\_stats**" stream. This stream has the following fields: | Field | Description | | --------- | --------------------------------------------------------------- | | name | Name of the disk partition | | total | Total storage capacity of the partition in bytes. | | used | Disk space that is already occupied in the partition, in bytes. | | available | Disk space that is available in the partition, in bytes. | # Network Stats Source: https://bytebeam.io/docs/device-side-integrations/linux/monitoring-your-device/network-stats Learn about the essential "**uplink\_network\_stats**" stream; discover how this document delineates crucial details like networking interface names, incoming and outgoing data rates. Network stats talk about the incoming and outgoing data rates of each networking interface. The "**uplink\_network\_stats**" stream has these details. This stream has the following fields: | Field name | Description | | -------------------- | ---------------------------------------------------------------- | | name | Name of the network interface. | | incoming\_data\_rate | The incoming data rate through the interface is in bytes/second. | | outgoing\_data\_rate | The outgoing data rate through the interface is in bytes/second. | # Monitoring your device Source: https://bytebeam.io/docs/device-side-integrations/linux/monitoring-your-device/overview Learn how to effectively monitor device parameters like disk usage, system stats, and network usage with Bytebeam cloud. Follow step-by-step instructions on creating dashboards and adding panels. Find detailed information on the streams associated with each parameter. This guide will show you how to remotely monitor your device using Bytebeam Cloud. Uplink, by default, collects several parameters of the device, such as disk usage, system stats, and network usage. Each of these parameters is stored in different streams. Please refer to the pages below to see the parameters being collected in each stream. * [System Stats](https://bytebeamio.mintlify.app/device-side-integrations/linux/monitoring-your-device/system-stats) * [Network Stats](https://bytebeamio.mintlify.app/device-side-integrations/linux/monitoring-your-device/network-stats) * [Process Stats](https://bytebeamio.mintlify.app/device-side-integrations/linux/monitoring-your-device/process-stats) * [Disk Stats](https://bytebeamio.mintlify.app/device-side-integrations/linux/monitoring-your-device/disk-stats) * [Processor Stats](https://bytebeamio.mintlify.app/device-side-integrations/linux/monitoring-your-device/processor-stats) You can create dashboards containing the required parameters. Follow the guides on [Creating a Dashboard](https://bytebeamio.mintlify.app/platform-guide/dashboards/creating-a-dashboard) and [Adding a Panel to Dashboard](https://bytebeamio.mintlify.app/platform-guide/dashboards/panels/introduction-to-panels) to learn how to work with dashboards. Here is an example dashboard created for a few Linux devices, using the stats. **Raspberry Pi:** ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/P5QJ-eZohb6JmIr0vjO9P_rpistats.png) **BeagleBoneBlack:** ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/LE3r1chW2snZOjAbvlRQs_monitorbbb.png) # Process Stats Source: https://bytebeam.io/docs/device-side-integrations/linux/monitoring-your-device/process-stats Learn how to view resource usage statistics of specific processes with this comprehensive guide. Discover how to specify process names in the config.toml file and access the uplink_process_stats stream. Explore the various fields available, such as PID, start_time, cpu_usage etc. Process stats allow you to monitor individual processes. To enable process stats we need to modify uplink's `config.toml` file to mention the process names that need monitoring. If you have followed the setup guide, this file should be present in `/usr/share/local/byebeam`. Add the below section to `config.toml` ```none theme={null} [system_stats] enabled = true process_names = ["uplink", "journalctl"] update_period = 30 ``` NOTE: The names of processes mentioned in the config should be the same as those in the output of `ps -eaf` The stream corresponding to process stats is **uplink\_process\_stats**. This stream has the below fields | Field name | Description | | ------------------------- | ------------------------------------------------------------------------------------------- | | pid | This field corresponds to a particular process's ID. | | start\_time | Time at which the process had started execution. | | cpu\_usage | Percentage of CPU being used by the process. | | mem\_usage | RAM is used by the process, in bytes. | | disk\_read\_bytes | The number of bytes of data read from the disk(or storage device) since the last update. | | disk\_total\_read\_bytes | Total number of bytes of data written to the disk(or storage device) since the last update. | | disk\_write\_bytes | A number of bytes of data read from the disk(or storage device) since the last update. | | disk\_total\_write\_bytes | Total number of bytes of data written to the disk(or storage device). | # Processor Stats Source: https://bytebeam.io/docs/device-side-integrations/linux/monitoring-your-device/processor-stats Learn about processor stats and usage percentages in this informative document. Discover how the "uplink_processor_stats" stream conveys vital details such as CPU name, frequency, and overall usage percentage. Gain valuable insights into optimizing processor. Processor stats talk about the frequency at which each processor is running and the usage percentage of each processor. This data is pushed to the stream "**uplink\_processor\_stats**". This stream has the below field: | Field | Description | | --------- | ------------------------------------- | | name | Name of the CPU | | frequency | The clock frequency of the CPU in MHz | | usage | Percentage of CPU used | # System Stats Source: https://bytebeam.io/docs/device-side-integrations/linux/monitoring-your-device/system-stats Learn about the valuable data provided by the "uplink_system_stats" stream, such as kernel version, running processes, device uptime, memory usage, and load averages. Enhance your understanding of system performance to optimize operations and improve efficiency. System stats contain information regarding the kernel version, memory usage, uptime, load average, etc. These details are pushed to the `uplink_system_stats` stream. This stream has the following fields: | Field name | Description | | ------------------ | ------------------------------------------------------- | | kernel\_version | The version of the currently running kernel. | | no\_processes | Count of the currently running processes in the system. | | uptime | Time elapsed in seconds since the device has booted. | | total\_memory | Total memory (RAM) present on the device in bytes | | used\_memory | Amount of memory being used by the device in bytes | | available\_memory | Memory available (unused) on the device in bytes | | load\_avg\_one | One-minute load average of the system | | load\_avg\_five | Five-minute load average of the system | | load\_avg\_fifteen | Fifteen-minute load average of the system | # Push application logs Source: https://bytebeam.io/docs/device-side-integrations/linux/push-application-logs Learn how to effectively view journalctl logs on Bytebeam cloud with this comprehensive document. Discover the step-by-step instructions on setting up streams and dashboards, adding logging to devices, and configuring logging from the cloud. Using Bytebeam cloud, it is possible to view the logs of the device. This guide assumes your device is running using **systemd** and logs are being pushed to **journald**. This guide will show you how to view **journald** logs on the cloud. Create a stream called "**logs**", with the following parameters. Now, we need to create a "**logs**" dashboard. # Create logs dashboard Go to the "**Dashboards**" section of Bytebeam Cloud and select "**Create Dashboard**" Give the title "**logs**" and select the Dashboard type as "**Device Dashboard**". Click on submit. The created dashboard should be visible now. Click on the "**logs**" dashboard and select the device for which you want to see the logs. Create a New Panel. Select the "Logs" panel. Give the appropriate title and select the "**Logs**" option from the "**Table**" drop-down menu. Click on submit. To enable the logging feature on the device, the following lines are to be added to the config.toml file. ```none theme={null} [logging] tags=["sshd", "systemd"] stream_size=1 min_level=7 ``` Restart uplink. The logs should be visible on the cloud now. # Update log config from the cloud With the help of **config.toml** file, we can filter the logs related to a particular process. In this example, we see logs related to ssh. It is possible to change the logging configuration, from the cloud as well. To do that, we need to create a new Action type called "**journalctl\_config**". Follow the guide on [Creating new Action Types](/platform-guide/actions/action-settings/creating-an-action-type). "**journalctl\_config**" is internally handled by uplink itself. It manages **log level** and **tags** Click on Submit. On the Device Management section, the "**journalctl config**" action should be visible. Select the device and click on "**Journalctl Config**". You will be prompted to create a JSON file. To see systemd logs also, use the following JSON. We can also choose the desired log level. Click on yes. This will trigger "**Journalctl Config**" action. To view the logs, select the device and click on "**Device Dashboards**" Select "logs" Dashboard. Now, you should be able to see the logs of **sshd** and **systemd** as well. # Pushing data to Bytebeam Source: https://bytebeam.io/docs/device-side-integrations/linux/pushing-data-to-bytebeam Learn how to push temperature data from your device to the Bytebeam cloud with step-by-step instructions in this document. It includes Python and JavaScript scripts, diagrams, and screenshots along with examples. This section talks about how to push the data from the device to the cloud. Data is pushed to the cloud in [Streams](https://bytebeamio.mintlify.app/platform-guide/streams-tables/introduction-to-streams). To push data you need to write an application that connects to uplink over TCP and pushes data to it. Uplink then in turn pushes the data to the cloud over MQTT. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/rGomf_Sjrf0djQaR0Bzlv_uplink.png) As an example, this guide assumes you are pushing temperature data to Bytebeam. # Create a stream on the cloud First, let us create a stream called `temperature` on the Bytebeam cloud. First, go to Bytebeam Cloud. Now, click on your username in the top right corner and navigate to the “**Settings**” section. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/5pBO4oO_X2na3qh9dm5it_linuxdocspushingwhite2.png) Next, select Streams and Click on "**Create Stream**". ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/BNw068AD3CGZ2J84z0l0-_linuxdocspushingwhile3.png) Now, enter the stream name and column name. In this example, we have chosen the data type of temperature as Float64. Click on the "**Submit**" button. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/WBw7xQZsKJe8fqPzgCykt_linuxdocspushingwhite4.png) The temperature stream should be visible under the "**Streams**" section. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/L9BYDlIh2NphXg5te8zDV_linuxdocspublishingwhite5.png) # Configuration on the device side You can now write to uplink from your application. Below you can see samples for some popular languages. :::codeblocktabs ```python theme={null} import socket import json import time from gpiozero import CPUTemperature s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("localhost", 5050)) # Constructs a payload and sends it over TCP to uplink def send_data(s, payload): send = json.dumps(payload) + "\n" s.sendall(bytes(send, encoding="utf-8")) # Send the temperature data def send_temperature_stream(s, sequence): cpu_temperature = CPUTemperature().temperature timestamp = int(time.time() * 1000) payload = { "stream": "temperature", "sequence": sequence, "timestamp": timestamp, "temp": cpu_temperature, } print(payload) send_data(s, payload) print("Starting Uplink Bridge App") sequence = 1 while True: time.sleep(5) send_temperature_stream(s, sequence) sequence += 1 ``` ```javascript theme={null} const net = require("net"); const util = require("util"); const exec = util.promisify(require("child_process").exec); // Connect to the server const client = new net.Socket(); client.connect(5050, "localhost", () => { console.log("Connected to server"); }); // Constructs a payload and sends it over TCP to uplink function sendData(payload) { const send = JSON.stringify(payload) + "\n"; client.write(send); } async function getCPUTemperature() { try { const { stdout } = await exec("cat /sys/class/thermal/thermal_zone0/temp"); const temperature = parseFloat(stdout) / 1000; return temperature; } catch (error) { console.error("Error:", error.message); return null; } } async function sendTemperatureStream(sequence) { const cpuTemperature = await getCPUTemperature(); if (cpuTemperature !== null) { const timestamp = Date.now(); const payload = { stream: "temperature", sequence: sequence, timestamp: timestamp, temp: cpuTemperature, }; console.log(payload); sendData(payload); } else { console.log("Failed to retrieve CPU temperature."); } } console.log("Starting Uplink Bridge App"); let sequence = 1; setInterval(() => { sendTemperatureStream(sequence++); }, 5000); ``` ```rust theme={null} use tokio::net::TcpStream; use tokio::prelude::*; use tokio::time::{self, Duration}; use serde_json::json; use std::fs; async fn send_data(mut stream: &TcpStream, payload: serde_json::Value) { let send = format!("{}\n", payload.to_string()); stream.write_all(send.as_bytes()).await.unwrap(); } fn read_cpu_temperature() -> f32 { let contents = fs::read_to_string("/sys/class/thermal/thermal_zone0/temp") .unwrap_or_else(|_| "0".to_string()); let temperature = contents.trim().parse::().unwrap_or(0.0); temperature / 1000.0 } async fn send_temperature_stream(mut stream: &TcpStream, sequence: u64) { let cpu_temperature = read_cpu_temperature(); let timestamp = SystemTime::now() .duration_since(SystemTime::UNIX_EPOCH) .unwrap() .as_millis(); let payload = json!({ "stream": "temperature", "sequence": sequence, "timestamp": timestamp, "temp": cpu_temperature }); println!("{:?}", payload); send_data(&mut stream, payload).await; } #[tokio::main] async fn main() { let addr = "localhost:5050"; let mut stream = TcpStream::connect(&addr).await.unwrap(); println!("Starting Uplink Bridge App"); let mut sequence = 1; let mut interval = time::interval(Duration::from_secs(5)); loop { interval.tick().await; send_temperature_stream(&stream, sequence).await; sequence += 1; } } ``` ```go theme={null} package main import ( "bufio" "encoding/json" "fmt" "io/ioutil" "net" "strconv" "time" ) func readCPUTemperature() float64 { data, err := ioutil.ReadFile("/sys/class/thermal/thermal_zone0/temp") if err != nil { fmt.Println("Error reading temperature:", err) return 0.0 } tempStr := string(data) tempInt, err := strconv.Atoi(tempStr[:len(tempStr)-1]) if err != nil { fmt.Println("Error parsing temperature:", err) return 0.0 } return float64(tempInt) / 1000.0 } func sendData(conn net.Conn, payload map[string]interface{}) { data, _ := json.Marshal(payload) fmt.Println(string(data)) conn.Write(append(data, '\n')) } func main() { conn, err := net.Dial("tcp", "localhost:5050") if err != nil { fmt.Println("Error connecting:", err.Error()) os.Exit(1) } defer conn.Close() fmt.Println("Starting Uplink Bridge App") sequence := 1 for { time.Sleep(5 * time.Second) temp := readCPUTemperature() t := time.Now().UnixNano() / int64(time.Millisecond) payload := map[string]interface{}{ "stream": "temperature", "sequence": sequence, "timestamp": t, "temp": temp, } sendData(conn, payload) sequence++ } } ``` ::: If you do not see your favorite language do not worry. You can write to uplink in 2 easy steps: 1. Create a TCP socket and connect to `localhost` and port 5050 2. Periodically write data in the below JSON format to the port (NOTE: newline delimited) ```json theme={null} { "stream": "temperature", "sequence": 1, "timestamp": 1698806057153, "temp": 17.0, } ``` In the above JSON you need to auto-increment the `sequence` for each packet and the timestamp needs to be in `milliseconds` The temperature data should now be visible on the cloud. Head over to Bytebeam Cloud and go to Device Management -> Device tab. Now click on the device and Select "Show Streams". Select "temperature" stream. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/8vJlkmKIVjNdrBQoSFdrr_linuxdocspushingwhite6.png) ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/LQCsxqUO2gALx8_TvxNeD_linuxdocspushingwhite7.png) The temperature data should be visible on the cloud now. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/pzPt9HoWZsXcNX0FKTYCt_linuxdocspushingwhite8.png) # Receiving Actions Source: https://bytebeam.io/docs/device-side-integrations/linux/receiving-actions Learn how to effectively use the actions feature of Bytebeam cloud on your Linux device with this comprehensive guide. Discover step-by-step instructions on creating a "reboot" action and gaining control over the uplink through essential commands. This guide shows you how to receive [Actions](/platform-guide/actions/action-details/introduction) (Commands) from the Cloud and execute them. Let us have a look at how to create a "reboot" action that restarts the device. To do this we need to first register this action with uplink using its configuration file `config.toml`. If you have followed the guide this file will be present in `/usr/local/share/bytebeam` folder. Edit this file to add the line actions=\[] under \[tcpapps.1] section. ```shell theme={null} persistence_path = "/tmp/uplink" action_redirections={update_firmware="install_firmware"} [tcpapps.1] port=5050 actions=[{name="reboot"}] [downloader] path="/tmp/uplink/download" actions=[{name="update_firmware", timeout=610}, {name="send_file"}] [apis] enabled=true port=3333 [ota_installer] path="/tmp/uplink/installer" actions=[{name="install_firmware", timeout=610}] uplink_port=5050 [logging] tags=["sshd", "systemd"] stream_size=1 min_level=7 ``` Restart the uplink using the following commands ```shell theme={null} sudo systemctl restart uplink ``` Create a new action type called "Reboot" by following the [Creating new Action Types](/platform-guide/actions/action-settings/creating-an-action-type) guide: The reboot action should now be visible on the device management page. Do not trigger the action yet. We need to first integrate the action into our application. Below you can find a sample application code for receiving actions. :::codeblocktabs ```python theme={null} import socket import json import time import os import threading s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("localhost", 5050)) # Converts JSON data received over TCP into a python dictionary def receive_action(s): return json.loads(s.recv(2048)) # Constructs a payload and sends it over TCP to uplink def send_data(s, payload): send = json.dumps(payload) + "\n" s.sendall(bytes(send, encoding="utf-8")) # Constructs a JSON `action_status` as a response to received action on completion def action_complete(id): return { "stream": "action_status", "sequence": 0, "timestamp": int(time.time() * 1000000), "action_id": id, "state": "Completed", "progress": 100, "errors": [], } # Reboots the device def reboot(action): payload = json.loads(action["payload"]) print(payload) resp = action_complete(action["action_id"]) print(resp) send_data(s, resp) os.system("sudo reboot") def receive_actions(): while True: action = receive_action(s) print(action) if action["name"] == "reboot": print("reboot action received") reboot(action) print("Starting Uplink Bridge App") threading.Thread(target=receive_actions).start() ``` ```javascript theme={null} const net = require("net"); const client = new net.Socket(); client.connect(5050, "localhost", () => { console.log("Connected to server"); }); // Converts JSON data received over TCP into a JavaScript object function receiveAction() { return new Promise((resolve, reject) => { client.once("data", (data) => { try { resolve(JSON.parse(data)); } catch (e) { reject(e); } }); }); } // Constructs a payload and sends it over TCP to uplink function sendData(payload) { const send = JSON.stringify(payload) + "\n"; client.write(send, "utf-8"); } // Constructs a JSON `action_status` as a response to received action on completion function actionComplete(id) { return { stream: "action_status", sequence: 0, timestamp: Date.now() * 1000, action_id: id, state: "Completed", progress: 100, errors: [], }; } // Reboots the device function reboot(action) { const payload = JSON.parse(action.payload); console.log(payload); const resp = actionComplete(action.action_id); console.log(resp); sendData(resp); exec("sudo reboot", (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } console.log(`stdout: ${stdout}`); console.error(`stderr: ${stderr}`); }); } async function receiveActions() { while (true) { const action = await receiveAction(); console.log(action); if (action.name === "reboot") { console.log("reboot action received"); reboot(action); } } } console.log("Starting Uplink Bridge App"); receiveActions(); ``` ```rust theme={null} use serde_json::{json, Value}; use std::io::{Read, Write}; use std::net::TcpStream; use std::process::Command; use std::{thread, time}; fn main() { let mut stream = TcpStream::connect("localhost:5050").expect("Could not connect to server"); // Start a thread to receive actions let mut stream_clone = stream.try_clone().expect("Failed to clone stream"); thread::spawn(move || { receive_actions(&mut stream_clone); }); } fn receive_action(stream: &mut TcpStream) -> Value { let mut buffer = [0; 2048]; stream .read(&mut buffer) .expect("Failed to read from stream"); serde_json::from_slice(&buffer).expect("Failed to parse JSON") } fn send_data(stream: &mut TcpStream, payload: Value) { let send = payload.to_string() + "\n"; stream .write_all(send.as_bytes()) .expect("Failed to write to stream"); } fn action_complete(id: i64) -> Value { json!({ "stream": "action_status", "sequence": 0, "timestamp": time::SystemTime::now() .duration_since(time::UNIX_EPOCH) .expect("Time went backwards") .as_micros() as i64, "action_id": id, "state": "Completed", "progress": 100, "errors": [] }) } fn reboot(action: &Value) { let payload = &action["payload"]; println!("{:?}", payload); let resp = action_complete(action["action_id"].as_i64().unwrap()); println!("{:?}", resp); send_data(&mut stream, resp); Command::new("sudo") .arg("reboot") .output() .expect("failed to execute process"); } fn receive_actions(stream: &mut TcpStream) { loop { let action = receive_action(stream); println!("{:?}", action); if action["name"] == "reboot" { println!("reboot action received"); reboot(&action); } } } ``` ```go theme={null} package main import ( "encoding/json" "fmt" "net" "os" "os/exec" "strconv" "time" ) func main() { conn, err := net.Dial("tcp", "localhost:5050") if err != nil { fmt.Println("Error connecting:", err.Error()) os.Exit(1) } // Start a goroutine for receiving actions go receiveActions(conn) fmt.Println("Starting Uplink Bridge App") } // receiveAction reads and decodes JSON data from the connection func receiveAction(conn net.Conn) map[string]interface{} { buffer := make([]byte, 2048) length, _ := conn.Read(buffer) var data map[string]interface{} json.Unmarshal(buffer[:length], &data) return data } // sendData encodes the payload to JSON and sends it over the connection func sendData(conn net.Conn, payload map[string]interface{}) { send, _ := json.Marshal(payload) conn.Write(append(send, '\n')) } // actionComplete constructs a JSON action_status response func actionComplete(id interface{}) map[string]interface{} { return map[string]interface{}{ "stream": "action_status", "sequence": 0, "timestamp": time.Now().UnixNano() / int64(time.Microsecond), "action_id": id, "state": "Completed", "progress": 100, "errors": []string{}, } } // reboot performs a system reboot func reboot(action map[string]interface{}) { payload := action["payload"].(map[string]interface{}) fmt.Println(payload) resp := actionComplete(action["action_id"]) fmt.Println(resp) sendData(conn, resp) cmd := exec.Command("sudo", "reboot") cmd.Run() } // receiveActions listens for actions and processes them func receiveActions(conn net.Conn) { for { action := receiveAction(conn) fmt.Println(action) if action["name"] == "reboot" { fmt.Println("reboot action received") reboot(action) } } } ``` ::: Once your app has been modified and is running, you can go to Bytebeam Cloud and click on the Reboot action button to trigger the action. Next, you will see the following message Click on **Yes.** Next, on the action panel, you can monitor the status of your last triggered action After completion of an action, the *Action Status* changes to **Completed** and you should see your device reboot # Remote login to your Linux device Source: https://bytebeam.io/docs/device-side-integrations/linux/remote-login-to-your-linux-device Learn how to access the Linux device shell via Bytebeam cloud using tunshell tool. Follow our guide to easily navigate to the Bytebeam cloud, select your preferred device, and effortlessly access the remote shell option under the Operations section. From the Bytebeam cloud, it is possible to access the shell on the Linux device. This is implemented using the amazing [tunshell](https://tunshell.com/) project. To shell into your device, go to the Bytebeam cloud, select the device, and under the "**Operations**" section click on the "**Remote** **Shell**" Button. You should now be able to see the shell environment on the cloud. # Advanced SDK Configurations Source: https://bytebeam.io/docs/device-side-integrations/mcu/arduino/advanced-sdk-configurations Customise the SDK as per your requirements by configuring the Bytebeam Aurdino via begin method You can additionally configure the **BytebeamArduino** via `begin` method. This would be helpful to customize the SDK as per your requirements. ## Provisioning Configuration As long as the file system is supported by the device, you can pick any of the following file systems for device provisioning. * SPIFFSProvisioning * LITTLEFSProvisioning * FATFSProvisioning Default Configuration inside the SDK are as follows, | Arch | File Sytem | File Name | | :------ | :--------- | :------------------- | | ESP32 | SPIFFS | /device\_config.json | | ESP8266 | LITTLEFS | /device\_config.json | You can override the default configurations as follows, * Provision your device with the required configurations. * Specify the same configurations in your sketch via `begin` method. Before moving further make sure you have the selected file system partition (say SPIFFS). For this to ensure, you can select the partition table setting under `Tools` section. See Tools > Partition Scheme within the Arduino IDE. ```cpp theme={null} // using spiffs file system Bytebeam.begin(BytebeamArduino::SPIFFS_FILE_SYSTEM, "/my_device_config.json"); // using littlefs file system Bytebeam.begin(BytebeamArduino::LITTLEFS_FILE_SYSTEM, "/my_device_config.json"); // using fatfs file system Bytebeam.begin(BytebeamArduino::FATFS_FILE_SYSTEM, "/my_device_config.json"); ``` ## Debug Configuration We have implemented the various log levels inside the **BytebeamArduino** and with this you can control the SDK logging as per your requirement. Default log level is `BytebeamLogger::LOG_WARN` inside the SDK. **Note:** We recommend going for `BytebeamLogger::LOG_INFO` log level while prototyping your sketch. ```cpp theme={null} // debug level : none Bytebeam.begin(BytebeamArduino::SPIFFS_FILE_SYSTEM, "/my_device_config.json", BytebeamLogger::LOG_NONE); // debug level : error Bytebeam.begin(BytebeamArduino::SPIFFS_FILE_SYSTEM, "/my_device_config.json", BytebeamLogger::LOG_ERROR); // debug level : warn Bytebeam.begin(BytebeamArduino::SPIFFS_FILE_SYSTEM, "/my_device_config.json", BytebeamLogger::LOG_WARN); // debug level : info Bytebeam.begin(BytebeamArduino::SPIFFS_FILE_SYSTEM, "/my_device_config.json", BytebeamLogger::LOG_INFO); // debug level : debug Bytebeam.begin(BytebeamArduino::SPIFFS_FILE_SYSTEM, "/my_device_config.json", BytebeamLogger::LOG_DEBUG); // debug level : trace Bytebeam.begin(BytebeamArduino::SPIFFS_FILE_SYSTEM, "/my_device_config.json", BytebeamLogger::LOG_TRACE); ``` # Integrate Over the Air Updates Source: https://bytebeam.io/docs/device-side-integrations/mcu/arduino/integrate-over-the-air-updates Guide that covers everything you need to know about Over the Air Firmware Upgrades with Bytebeam Arduino. OTA update has become a critical requirement for devices being deployed remotely. This guide covers everything you need to know about Over the Air Firmware Upgrades with **BytebeamArduino**. ## Enabling OTA updates OTA updates can be integrated into application by adding a single line of code! ```cpp theme={null} // // Enable OTA updates for your device // Bytebeam.enableOTA(); ``` Have a look at BasicOTA sketch for Wifi based OTA and BasicOTA\_GSM sketch if you are using a GSM Modem for connectivity Follow the below steps to trigger OTA updates: * Upload a .bin file and create a new firmware version on Bytebeam as per the instructions mentioned in the [Creating a new Firmware Version](/platform-guide/actions/inventory-management/firmware-files/without-device-components/creating-a-new-firmware-version) guide. * Once, new firmware version is created, trigger OTA update as per the instructions mentioned in the [Triggering OTA update](/platform-guide/device-management/triggering-ota-update) guide. * Progress of the firmware update can be monitored on Bytebeam platform using **Action status.** ## Disabling OTA updates If your device does not require OTA updates you can disable them. If you opt for the No OTA partition scheme, make sure you have the selected file system partition (say SPIFFS) for device provisioning. See Tools > Partition Scheme within the Arduino IDE. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/ao6tG50JOn7Mpjb-zxIb-_img5.png) ### Disabling OTA updates at Run Time You can use the `disableOTA` method to disable the OTA updates at any point of time in the code: ```cpp theme={null} // // Disable OTA updates for your device // Bytebeam.disableOTA(); ``` ### Disable OTA updates at Compile Time This approach will disable the OTA updates by excluding the OTA related stuff from the build thereby saving some flash size. Follow the below steps to do so: * Open the Arduino `libraries` location. * Step into `BytebeamArduino\src` folder. * Open BytebeamArduino.h in your favourite text editor. * Set `BYTEBEAM_OTA_ENABLE` macro to `false`. # PlatformIO Integration Source: https://bytebeam.io/docs/device-side-integrations/mcu/arduino/platformio-integration Learn how to easily install the bytebeam-esp-idf-sdk using PlatformIO with this comprehensive document. Follow step-by-step instructions using either the intuitive PlatformIO GUI or the convenient PlatformIO Core CLI. **bytebeam-esp-idf-sdk** is available in Platform IO registry. See [PlatformIO Registery](https://registry.platformio.org/libraries/bytebeamio/bytebeam-esp-idf-sdk) for details. ## Getting the SDK Via PlatformlO Home You can install the SDK with PlatformIO GUI. We recommend installing the latest version of the SDK for this integration. Follow the below steps to install the SDK :) Open the PlatformIO project. Go to PIO\~\~ \~\~Home Libraries section and search for the `bytebeam` keyword. The **bytebeam-esp-idf-sdk** will pop up. Go ahead select the latest version (say `1.0.1`) and hit the `Add to Project` button. ## Getting the SDK Via PlatformlO Core CLI You can install the SDK with`pio pkg install`command. We recommend installing the latest version of the SDK for this integration. Follow the below steps to install the SDK :) * Open PlatformIO Core CLI. * Change directory (cd) to the PlatformIO project where platformio.ini is located. * Copy the following [pio pkg install](https://docs.platformio.org/en/latest/core/userguide/pkg/cmd_install.html) command and paste into the CLI shell, press **Enter.** **Note:** You can mention the latest version (say `1.0.1`) in the below command if applicable. ```shell theme={null} pio pkg install --library "bytebeamio/bytebeam-esp-idf-sdk@^1.0.1" ``` If installation is successfully done, output should be as follows. # Pushing data to Bytebeam Source: https://bytebeam.io/docs/device-side-integrations/mcu/arduino/pushing-data-to-bytebeam Learn how you can push data to Bytebeam console. To push data to Bytebeam you need to first create a stream. You can do this by following the [Creating a Stream](https://bytebeamio.mintlify.app/platform-guide/streams-tables/creating-a-stream) guide. Once you have created a stream you can use the `publishToStream` method to publish data to the stream. ```cpp theme={null} // Publish data to the bytebeam stream // // streamName: Name of the stream to publish the payload // payload: Data to be published // bool Bytebeam.publishToStream(char* streamName, const char* payload); ``` Bytebeam expects the payload to be in the JSON format. Have a look at the PushData example sketch for a full fledged example showing how to use this function. # Receiving actions Source: https://bytebeam.io/docs/device-side-integrations/mcu/arduino/receiving-actions Learn how to create action handlers and map them to specific actions in the Bytebeam platform with this comprehensive document. It includes a code snippet for creating a handler for the "ToggleLED" action and mapping it. [Actions](/platform-guide/actions/action-details/introduction) are commands that the platform sends to the client. Every action has a type and we need to register an action handler for each action type. Following example shows a way to create action handler and map it to a particular action: ```cpp theme={null} // handler for ToggleLED action int ToggleLED_Handler(char* args, char* actionId) { // Log the recieved arguments and action id to serial for the reference Serial.printf("*** args : %s , actionId : %s ***\n", args, actionId); // // Include command for toggling LED over here // bool status = true; // This function allows platform to know about the completion of particuar action status = Bytebeam.publishActionCompleted(actionId); if(!status) { // // handle the publish action completed error here // return -1; } return 0; } // // Once you have created an action handler for particular action then it should be // mapped with particular action. Below function call would do that mapping. // // ToggleLED_Hanlder : pointer to action handler // ToggleLED : action Bytebeam.addActionHandler(ToggleLED_Handler, "ToggleLED"); ``` ### Action status response While we execute the action, we need to send the progress back to the server so that the user can monitor the action remotely. To do so the following APIs can be used: ```cpp theme={null} // // Action completed status response can be published by using below function // bool Bytebeam.publishActionCompleted(char* actionId); // // Action failed status response can be published by using below function // bool Bytebeam.publishActionFailed(char* actionId, char* error = "Action Failed"); // // Action progress status response can be published by using below function // bool Bytebeam.publishActionProgress(char* actionId, int progressPercentage, char* status = "Progress"); ``` Have a look at the ToggleLED example sketch for a full-fledged example showing how to add the action and publish the action status response to bytebeam cloud. # Setting up BytebeamArduino for GSM Connectivity Source: https://bytebeam.io/docs/device-side-integrations/mcu/arduino/setting-up-bytebeamarduino-for-gsm-connectivity Guide will show you how to setup your project for GSM connectivity. This guide will show you how to setup your project for GSM connectivity. ## **Step 1. Getting the SDK** You can install the SDK via Arduino Library Manager. We recommend installing the latest version of the SDK for this integration. Follow the below steps to install the SDK :) Open the Arduino Library Manager and search for the `bytebeam` keyword. The **BytebeamArduino** SDK will pop up. Go ahead select the latest version (say `1.0.1`) and hit the install button. Now you should be able to see the SDK in the Arduino IDE. See Sketch > Include Library > BytebeamArduino within the Arduino IDE. You can also look for example sketches that comes along with the SDK. See File > Examples > BytebeamArduino within the Arduino IDE. ## **Step 2. Getting the GSM Client Dependencies** In order to work with GSM Client, you need to install the following libraries, * [TinyGSM](https://github.com/vshymanskyy/TinyGSM) - Available in Arduino Library Manager * [ArduinoHttpClient ](https://github.com/arduino-libraries/ArduinoHttpClient) - Available in Arduino Library Manager * [SSLClient](https://github.com/govorox/SSLClient) - You need to install it via GitHub ## **Step 3. Device Provisioning** ### Provision device with device config data Provisioning the device is the first step towards getting cloud connectivity at your device end. So, before you get started with the **BytebeamArduino** you need to provision your device. Each device has its own config file which needs to be flashed into its file system. When you call the `begin` method our SDK will look for this device config data and use that in order to establish the secure connection with the remote device at the cloud end. For this integration we will go with the default configurations. If you want to change the configuration, check out the [Advanced SDK Configurations](/device-side-integrations/mcu/arduino/advanced-sdk-configurations) guide. Before getting ahead make sure you have the SPIFFS file system partition. For this you can select the partition table setting under Tools section. See Tools > Partition Scheme within the Arduino IDE: Follow the below steps to provision your device: 1. Download the device configuration JSON file from Bytebeam cloud by following the [Provisioning a Device](/platform-guide/device-management/provisioning-a-device) guide. 2. After downloading the config file, open it in your favourite text editor and format the json document. Once done copy the formatted json document to the clipboard. 3. Open SPIFFS Provisioning example sketch as per your choice of the file system. See File > Examples > BytebeamArduino > Provisioning > SPIFFSProvisioning within the Arduino IDE. 4. Paste the copied content to the deviceConfigWriteStr char array, Refer below code snippet to do so. 5. Setup the ESP32 board configurations and Hit the Upload button. 6. Watch out the Serial logs for the provisioning status. ```json theme={null} char deviceConfigWriteStr[DEVICE_CONFIG_STR_LENGTH] = R"( { "project_id": "espbytebeamsdktest", "broker": "cloud.bytebeam.io", "port": 8883, "device_id": "1", "authentication": { "ca_certificate": "-----BEGIN CERTIFICATE-----\nMIIFrDCCA5SgAwIBAgICB+\naWExETAPBgNVBAgTCEthcm5hdGFrMRIwEAYDVQQHEwlCYW5nYWxvcmUxFzAVBgNV\nBAkTDlN1YmJpYWggR2FyZGVuMQ8wDQYDVQQREwY1NjAwMTExFDASBgNVBAoTC0J5\ndGViZWFtLmlvMB4XDTIxMDkwMjExMDYyM1oXDTMxMDkwMjExMDYyM1owdzEOMAwG\nA1UEBhMFSW5kaWExETAPBgNVBAgTCEthcm5hdGFrMRIwEAYDVQQHEwlCYW5nYWxv\ncmUxFzAVBgNVBAkTDlN1YmJpYWggR2FyZGVuMQ8wDQYDVQQREwY1NjAwMTExFDAS\nBgNVBAoTC0J5dGViZWFtLmlvMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC\nAgEAr/bnOa/8AUGZmd/s+7rejuROgeLqqU9X15KKfKOBqcoMyXsSO65UEwpzadpw\nMl7GDCdHqFTymqdnAnbhgaT1PoIFhOG64y7UiNgiWmbh0XJj8G6oLrW9rQ1gug1Q\n/D7x2fUnza71aixiwEL+KsIFYIdDuzmoRD3rSer/bKOcGGs0WfB54KqIVVZ1DwsU\nk1wx5ExsKo7gAdXMAbdHRI2Szmn5MsZwGL6V0LfsKLE8ms2qlZe50oo2woLNN6XP\nRfRL4bwwkdsCqXWkkt4eUSNDq9hJsuINHdhO3GUieLsKLJGWJ0lq6si74t75rIKb\nvvsFEQ9mnAVS+iuUUsSjHPJIMnn/J64Nmgl/R/8FP5TUgUrHvHXKQkJ9h/a7+3tS\nlV2KMsFksXaFrGEByGIJ7yR4qu9hx5MXf8pf8EGEwOW/H3CdWcC2MvJ11PVpceUJ\neDVwE7B4gPM9Kx02RNwvUMH2FmYqkXX2DrrHQGQuq+6VRoN3rEdmGPqnONJEPeOw\nZzcGDVXKWZtd7UCbcZKdn0RYmVtI/OB5OW8IRoXFYgGB3IWP796dsXIwbJSqRb9m\nylICGOceQy3VR+8+BHkQLj5/ZKTe+AA3Ktk9UADvxRiWKGcejSA/LvyT8qzz0dqn\nGtcHYJuhJ/XpkHtB0PykB5WtxFjx3G/osbZfrNflcQZ9h1MCAwEAAaNCMEAwDgYD\nVR0PAQH/BAQDAgKEMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKl/MTbLrZ0g\nurneOmAfBHO+LHz+MA0GCSqGSIb3DQEBCwUAA4ICAQAlus/uKic5sgo1d2hBJ0Ak\ns1XJsA2jz+OEdshQHmCCmzFir3IRSuVRmDBaBGlJDHCELqYxKn6dl/sKGwoqoAQ5\nOeR2sey3Nmdyw2k2JTDx58HnApZKAVir7BDxbIbbHmfhJk4ljeUBbertNXWbRHVr\ncs4XBNwXvX+noZjQzmXXK89YBsV2DCrGRAUeZ4hQEqV7XC0VKmlzEmfkr1nibDr5\nqwbI+7QWIAnkHggYi27lL2UTHpbsy9AnlrRMe73upiuLO7TvkwYC4TyDaoQ2ZRpG\nHY+mxXLdftoMv/ZvmyjOPYeTRQbfPqoRqcM6XOPXwSw9B6YddwmnkI7ohNOvAVfD\nwGptUc5OodgFQc3waRljX1q2lawZCTh58IUf32CRtOEL2RIz4VpUrNF/0E2vts1f\npO7V1vY2Qin998Nwqkxdsll0GLtEEE9hUyvk1F8U+fgjJ3Rjn4BxnCN4oCrdJOMa\nJCaysaHV7EEIMqrYP4jH6RzQzOXLd0m9NaL8A/Y9z2a96fwpZZU/fEEOH71t3Eo3\nV/CKlysiALMtsHfZDwHNpa6g0NQNGN5IRl/w1TS1izzjzgWhR6r8wX8OPLRzhNRz\n2HDbTXGYsem0ihC0B8uzujOhTHcBwsfxZUMpGjg8iycJlfpPDWBdw8qrGu8LeNux\na0cIevjvYAtVysoXInV0kg==\n-----END CERTIFICATE-----\n", "device_certificate": "-----BEGIN CERTIFICATE-----\nMIIEcjCCAlqgAwIBAgICB+\naWExETAPBgNVBAgTCEthcm5hdGFrMRIwEAYDVQQHEwlCYW5nYWxvcmUxFzAVBgNV\nBAkTDlN1YmJpYWggR2FyZGVuMQ8wDQYDVQQREwY1NjAwMTExFDASBgNVBAoTC0J5\ndGViZWFtLmlvMB4XDTIyMTEwMzA3NDcwMloXDTMyMTEwMzA3NDcwMlowKTEbMBkG\nA1UEChMSZXNwYnl0ZWJlYW1zZGt0ZXN0MQowCAYDVQQDEwExMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzsm8CF8fKSzWFKZeO52RJRGER4z7sYrgTb9x\noIeljE8kmhR+EW217sxUyUn+rmJSCxRz6jtspKv37POPaQilmwtriVq8L46YCrXa\nbI9manlqw0WqAfaWAlFXzM13CuXeGZKhuAK3INs15jqP0s+oWFvww8+hww540I+s\nn6j5yEUnWKSIgoYEc82cwvj0qOvaxYxjUTXgV2IDLSXdFJbZq4k9LDbzPZdDe0aY\n4X9UpdrjS5cRWT3Ok4VwWpMRwOT654CTwE8WUja/pHTRFbMYkqd1jrD2Joqtm+u9\nplTq7I9/fDnkRqPjueDQ04LKTbUC2UsRKw1VmHPndw22+mDPUwIDAQABo1YwVDAO\nBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwHwYDVR0jBBgwFoAU\nqX8xNsutnSC6ud46YB8Ec74sfP4wDAYDVR0RBAUwA4IBMTANBgkqhkiG9w0BAQsF\nAAOCAgEAcj5Ytt47AdmsXBsv/K7YkUvkNwV64luBMQtqmTKRDWnIQLaFzPjdpieu\n81ktFKklKw6pReWdUPSBy6hKq3zzGvSsShBSghbOAJvlPkK6jpLy5TzZdIj8ug7g\nMCzZvqdmznekSg4elGHJIYUfHD6ZUJaEkkGD1yQpxOIVCnodhN2246SXJK23itmz\nB5y1AHU5zydN7Ys0oY1l8RCc5Iz24IcQAi//2pIPe9ORks3QBBi+qY9m+emHCqgb\n48hNe5v7X+yF4VITlWs3Mfk0gSgbDQ4OwVf/8/D7o0hQ8EU5bzXNvf49Kd2mWTii\nQdQDdNLxZsdgWNwYdqrQhA0qN02yJxkhNm5GXmP75zmg0bPe4I+pNwuy+B32wFZn\nNcZrh4HZzS1cAyyyr3E59zsPjqcohaUcBpe6oUoQ8z1V7K9FR31TnFfvjg9mbDnX\nv2+PXsp0m7f4e1QfepZxUwyjemxOe/b+IEc7PckIrkPy46JaIvi9ONrTR8Y5wDir\nbGuzpmiyMFlyzK4ULh7kt7MU/jU/ulnqDU8JvAnhhxK3kgV4vv8LSYJSEYYP9i1S\nj/EPPQBANdtr4B2pcV1ig13dinq7rir6Q/pnkKrAFOfZcvOWW2BvPOC2dcnCYJpB\n1R5QJGXqna8Uh+ZwThs0K/Nd9dml1w/Rug8hx0VHoIe6AjXEepQ=\n-----END CERTIFICATE-----\n", "device_private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAzsm8CF8fKSzWFKZeO52RJRGER4z7sYrgTb9xoIeljE8kmhR+\nEW217sxUyUn+\nAfaWAlFXzM13CuXeGZKhuAK3INs15jqP0s+oWFvww8+hww540I+sn6j5yEUnWKSI\ngoYEc82cwvj0qOvaxYxjUTXgV2IDLSXdFJbZq4k9LDbzPZdDe0aY4X9UpdrjS5cR\nWT3Ok4VwWpMRwOT654CTwE8WUja/pHTRFbMYkqd1jrD2Joqtm+u9plTq7I9/fDnk\nRqPjueDQ04LKTbUC2UsRKw1VmHPndw22+mDPUwIDAQABAoIBAHv3A/ogzBVrA4ut\nkKA8fV6zeZFLOzfcAUuakQujReMvLsoPruPT2VUmuU1SRpNT7csmn7azmRW+4gny\nmO5meKDR382fz2DTIuKI0kByVvtNfmtBwAEdSiBpkzD7m3m1A8hg1wHw3sebolw6\njy3Zvxn5RASe3GKKsnKVLu8n5VXgyytn2I6sYOmKoLv3N9V3tziHL3Gl2AfWAd5P\nJHJdxZ50hhjzUnI0MmvUU6M9G26xagxNNibzOWv3BEuBRw5fuVpt/QoBouFhcKF7\nEdCFpiZ8LJFpux6FyLDOOAa7mj+Y6yK1qKsJbFGG8AnhPTO/bAc1m7yQcJygH9cl\nretVDcECgYEA4z+NkjqIPRiAvOsmJD6KfMeABkZc4JmART+KtrpoJmPWc2WDxu8M\ngP1eqmh/aGGORY8hcFyl+SIf5JvP13Dd/47tSK4vhyEGnnqRt+wjjuzci0rDvFdH\ntaUbjlb4kKStssQPTTmG726Zd1f32eKzBnCY8YqWdMMM1HXak20rPo8CgYEA6PN8\nYIcIrRkFzyvam8m5pCeoHylBgSNjN2j8dGC8b6SGMG6y4+rUiuxfhC/Oq7UtOvf+\njYQQgeMjB22dhcvJa6rjuuKXXpbcgNnzcemnySohUr7Nm1bXHwRfoqMAmeh3pkcL\nL+K4Mf6Gd1i2hiYd4Dd59m5/p3W+QUyKa4iaRP0CgYAf2/UZHyOijSDfW4hJZIs9\n2ypTtuGmi160Vqg33gJj/3M9UmobJcB3BQ6UjXnvRF4R2nMxsYuDVglqn32QEr7M\n6VjS67i2FSc8aKqtQmnpy8NPs/elHAdtq+wlFIRcovnHKj2K8hm8z6CsXqTc4y9+\nI6MNmgRl8kKGNs+iA5ggeQKBgBKLN25zsWQeJtE8G3XlVArWQVLhtN4z0/UYPWiC\nPt3gSfJXDZSJIAxDDsN2DsyqaoRUM4ZOagX878/qkOySsWEJxIEfAo+8EKeNMgzy\nXbHs0aRFnhZsjklgzsAim6ykzcmFxEU2lhUcvtWHUVhSdnRf1iyg1Taeb9vA3Q/8\nWtN9AoGBAN+rik+pvcdPAexngqmsUgoW8Abvv7dyBmt99KfnyRDfbt6EM68CZI90\naOlNE9P7XZyOyfQdzOlJWv8B78dwrbwMiwkhGyb6ms11GGB5J90f8oON4tMjEzdW\nKFI0T+ZOXN99GcKLHeg5GfGqHcHlEhXP9BtRyTJVz914alvOIaiY\n-----END RSA PRIVATE KEY-----\n" } } )"; ``` ## **Step 4. Defining GSM Network Interface** By default, we define the Wi-Fi network interface inside the SDK and in order to work with GSM you need to define the Modem Network Interface. Follow the below steps to do so, * Open the Arduino library's location. * Step into BytebeamArduino\src folder. * Open BytebeamArduinoDefines.h in your favorite text editor. * Add Modem Network Interface instead of Wi-Fi Network Interface. Refer below code snippet for reference, ```cpp theme={null} // // Enable the define as per your connectivity interface // Make sure you enable only one interface at a time // // defines for using the wifi interface // #define BYTEBEAM_ARDUINO_USE_WIFI // defines for using the modem interface #define TINY_GSM_MODEM_SIM7600 // define the modem you're using #define BYTEBEAM_ARDUINO_USE_MODEM ``` ## **Step 5. Initialize and Start Bytebeam Client** The next step is to initialize and start bytebeam client. Refer below code snippet to do so :) ```cpp theme={null} // Add this include to your sketch #include // // By including the above header you got the access to the gloabl object named Bytebeam // Use Bytebeam global object to perform the required operations // void setup() { // put your setup code here, to run once: // // Your application setup stuff goes here // // Make sure your initialize modem and ntp before gettig ahead // If you want logging via Serial Monitor, consider initialzing Serial as well // setting up the device info i.e to be seen in the device shadow Bytebeam.status = "Device is Up!"; Bytebeam.softwareType = "setup-gsm-client-ino"; Bytebeam.softwareVersion = "1.0.0"; Bytebeam.hardwareType = "ESP32 Dev Module"; Bytebeam.hardwareVersion = "rev1"; // This method will initialize and start the bytebeam client // We expect the pointer to modem object of class TinyGSM in begin method // You can over-ride the default file system and file name options, if needed // eg. Bytebeam.begin(&modem, BytebeamArduino::LITTLEFS_FILE_SYSTEM, // "/my_device_config.json") if(!Bytebeam.begin(&modem)) { Serial.println("Bytebeam Client Initialization Failed."); } else { Serial.println("Bytebeam Client is Initialized Successfully."); } // // If above call is successfull then the bytebeam client is now configured for the // use. You can always check for the logs in serial monitor for the status of the // above call // // check if bytebeam client is connected or disconnected bool connectionStatus = Bytebeam.isConnected(); if(!connectionStatus) { SerialMon.println("Bytebeam Client is Disconnected."); } else { SerialMon.println("Bytebeam Client is Connected."); } // Call the end method to stop and de-initialize the bytebeam client at any point of // time in the code // Bytebeam.end(); } void loop() { // put your main code here, to run repeatedly: // // Your application regular stuff goes here // // This method will let you maintain the connection with the bytebeam cloud, In case // the connection is lost, it will attempt to reconnect to the bytebeam cloud Bytebeam.loop(); // software delay, you can customize it as per your application needs delay(5000); } ``` Look at the `SetupClient_GSM` example sketch for reference. See File > Examples > BytebeamArduino > ESP32 > SetupClient\_GSM within the Arduino IDE. ## **Step 6. Build and Flash Application** You can build and flash your application as usual with the Arduino IDE, just setup your board configurations and hit the upload button within the Arduino IDE. # Setting up BytebeamArduino SDK Source: https://bytebeam.io/docs/device-side-integrations/mcu/arduino/setting-up-bytebeamarduino-sdk Steps on how to set up and start using Bytebeam Arduino SDK. This section provides step by step instructions on how to set up and start using [BytebeamArduino](https://github.com/bytebeamio/bytebeam-arduino-sdk) This guide assumes that you are using ESP32 development board for this integration and the same instructions will work for ESP8266. ## **Step 1. Getting the SDK** You can install the SDK via Arduino Library Manager. We recommend installing the latest version of the SDK for this integration. Follow the below steps to install the SDK Open the Arduino Library Manager and search for the `bytebeam` keyword. The **BytebeamArduino** SDK will pop up. Go ahead select the latest version (say `1.0.1`) and hit the install button. Now you should be able to see the SDK in the Arduino IDE. See Sketch > Include Library > BytebeamArduino within the Arduino IDE. You can also look for example sketches that comes along with the SDK. See File > Examples > BytebeamArduino within the Arduino IDE. ## **Step 2. Device Provisioning** ### Provision device with device config data Before you get started with the **BytebeamArduino** you need to provision your device. Each device has its own config file which needs to be flashed into its file system. When you call the `begin` method our SDK will look for this device config data and use that in order to establish the secure connection with the remote device at the cloud end. For this integration we will go with the default configurations. If you want to change the configuration, check out the [Advanced SDK Configurations](/device-side-integrations/mcu/arduino/advanced-sdk-configurations) guide. **Note:** On ESP32 we use SPIFFS by default but if you are using ESP8266 you should use LITTLEFS by default Before getting ahead make sure you have the SPIFFS file system partition. For this you can select the partition table setting under `Tools` section. See Tools > Partition Scheme within the Arduino IDE. Follow the below steps to provision your device: 1. Download the device configuration JSON file from Bytebeam cloud by following the [Provisioning a Device](/platform-guide/device-management/provisioning-a-device) guide. 2. After downloading the config file, open it in your favourite text editor and format the json document. Once done copy the formatted json document to the clipboard. 3. Open SPIFFS Provisioning example sketch as per your choice of file system. See File > Examples > BytebeamArduino > Provisioning > SPIFFSProvisioning within the Arduino IDE. 4. Paste the copied content to the deviceConfigWriteStr char array, Refer below code snippet to do so. 5. Setup the ESP32 board configurations and Hit the Upload button. 6. Watch out the Serial logs for the provisioning status. ```json theme={null} char deviceConfigWriteStr[DEVICE_CONFIG_STR_LENGTH] = R"( { "project_id": "espbytebeamsdktest", "broker": "cloud.bytebeam.io", "port": 8883, "device_id": "1", "authentication": { "ca_certificate": "-----BEGIN CERTIFICATE-----\nMIIFrDCCA5SgAwIBAgICB+\naWExETAPBgNVBAgTCEthcm5hdGFrMRIwEAYDVQQHEwlCYW5nYWxvcmUxFzAVBgNV\nBAkTDlN1YmJpYWggR2FyZGVuMQ8wDQYDVQQREwY1NjAwMTExFDASBgNVBAoTC0J5\ndGViZWFtLmlvMB4XDTIxMDkwMjExMDYyM1oXDTMxMDkwMjExMDYyM1owdzEOMAwG\nA1UEBhMFSW5kaWExETAPBgNVBAgTCEthcm5hdGFrMRIwEAYDVQQHEwlCYW5nYWxv\ncmUxFzAVBgNVBAkTDlN1YmJpYWggR2FyZGVuMQ8wDQYDVQQREwY1NjAwMTExFDAS\nBgNVBAoTC0J5dGViZWFtLmlvMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC\nAgEAr/bnOa/8AUGZmd/s+7rejuROgeLqqU9X15KKfKOBqcoMyXsSO65UEwpzadpw\nMl7GDCdHqFTymqdnAnbhgaT1PoIFhOG64y7UiNgiWmbh0XJj8G6oLrW9rQ1gug1Q\n/D7x2fUnza71aixiwEL+KsIFYIdDuzmoRD3rSer/bKOcGGs0WfB54KqIVVZ1DwsU\nk1wx5ExsKo7gAdXMAbdHRI2Szmn5MsZwGL6V0LfsKLE8ms2qlZe50oo2woLNN6XP\nRfRL4bwwkdsCqXWkkt4eUSNDq9hJsuINHdhO3GUieLsKLJGWJ0lq6si74t75rIKb\nvvsFEQ9mnAVS+iuUUsSjHPJIMnn/J64Nmgl/R/8FP5TUgUrHvHXKQkJ9h/a7+3tS\nlV2KMsFksXaFrGEByGIJ7yR4qu9hx5MXf8pf8EGEwOW/H3CdWcC2MvJ11PVpceUJ\neDVwE7B4gPM9Kx02RNwvUMH2FmYqkXX2DrrHQGQuq+6VRoN3rEdmGPqnONJEPeOw\nZzcGDVXKWZtd7UCbcZKdn0RYmVtI/OB5OW8IRoXFYgGB3IWP796dsXIwbJSqRb9m\nylICGOceQy3VR+8+BHkQLj5/ZKTe+AA3Ktk9UADvxRiWKGcejSA/LvyT8qzz0dqn\nGtcHYJuhJ/XpkHtB0PykB5WtxFjx3G/osbZfrNflcQZ9h1MCAwEAAaNCMEAwDgYD\nVR0PAQH/BAQDAgKEMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKl/MTbLrZ0g\nurneOmAfBHO+LHz+MA0GCSqGSIb3DQEBCwUAA4ICAQAlus/uKic5sgo1d2hBJ0Ak\ns1XJsA2jz+OEdshQHmCCmzFir3IRSuVRmDBaBGlJDHCELqYxKn6dl/sKGwoqoAQ5\nOeR2sey3Nmdyw2k2JTDx58HnApZKAVir7BDxbIbbHmfhJk4ljeUBbertNXWbRHVr\ncs4XBNwXvX+noZjQzmXXK89YBsV2DCrGRAUeZ4hQEqV7XC0VKmlzEmfkr1nibDr5\nqwbI+7QWIAnkHggYi27lL2UTHpbsy9AnlrRMe73upiuLO7TvkwYC4TyDaoQ2ZRpG\nHY+mxXLdftoMv/ZvmyjOPYeTRQbfPqoRqcM6XOPXwSw9B6YddwmnkI7ohNOvAVfD\nwGptUc5OodgFQc3waRljX1q2lawZCTh58IUf32CRtOEL2RIz4VpUrNF/0E2vts1f\npO7V1vY2Qin998Nwqkxdsll0GLtEEE9hUyvk1F8U+fgjJ3Rjn4BxnCN4oCrdJOMa\nJCaysaHV7EEIMqrYP4jH6RzQzOXLd0m9NaL8A/Y9z2a96fwpZZU/fEEOH71t3Eo3\nV/CKlysiALMtsHfZDwHNpa6g0NQNGN5IRl/w1TS1izzjzgWhR6r8wX8OPLRzhNRz\n2HDbTXGYsem0ihC0B8uzujOhTHcBwsfxZUMpGjg8iycJlfpPDWBdw8qrGu8LeNux\na0cIevjvYAtVysoXInV0kg==\n-----END CERTIFICATE-----\n", "device_certificate": "-----BEGIN CERTIFICATE-----\nMIIEcjCCAlqgAwIBAgICB+\naWExETAPBgNVBAgTCEthcm5hdGFrMRIwEAYDVQQHEwlCYW5nYWxvcmUxFzAVBgNV\nBAkTDlN1YmJpYWggR2FyZGVuMQ8wDQYDVQQREwY1NjAwMTExFDASBgNVBAoTC0J5\ndGViZWFtLmlvMB4XDTIyMTEwMzA3NDcwMloXDTMyMTEwMzA3NDcwMlowKTEbMBkG\nA1UEChMSZXNwYnl0ZWJlYW1zZGt0ZXN0MQowCAYDVQQDEwExMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzsm8CF8fKSzWFKZeO52RJRGER4z7sYrgTb9x\noIeljE8kmhR+EW217sxUyUn+rmJSCxRz6jtspKv37POPaQilmwtriVq8L46YCrXa\nbI9manlqw0WqAfaWAlFXzM13CuXeGZKhuAK3INs15jqP0s+oWFvww8+hww540I+s\nn6j5yEUnWKSIgoYEc82cwvj0qOvaxYxjUTXgV2IDLSXdFJbZq4k9LDbzPZdDe0aY\n4X9UpdrjS5cRWT3Ok4VwWpMRwOT654CTwE8WUja/pHTRFbMYkqd1jrD2Joqtm+u9\nplTq7I9/fDnkRqPjueDQ04LKTbUC2UsRKw1VmHPndw22+mDPUwIDAQABo1YwVDAO\nBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwHwYDVR0jBBgwFoAU\nqX8xNsutnSC6ud46YB8Ec74sfP4wDAYDVR0RBAUwA4IBMTANBgkqhkiG9w0BAQsF\nAAOCAgEAcj5Ytt47AdmsXBsv/K7YkUvkNwV64luBMQtqmTKRDWnIQLaFzPjdpieu\n81ktFKklKw6pReWdUPSBy6hKq3zzGvSsShBSghbOAJvlPkK6jpLy5TzZdIj8ug7g\nMCzZvqdmznekSg4elGHJIYUfHD6ZUJaEkkGD1yQpxOIVCnodhN2246SXJK23itmz\nB5y1AHU5zydN7Ys0oY1l8RCc5Iz24IcQAi//2pIPe9ORks3QBBi+qY9m+emHCqgb\n48hNe5v7X+yF4VITlWs3Mfk0gSgbDQ4OwVf/8/D7o0hQ8EU5bzXNvf49Kd2mWTii\nQdQDdNLxZsdgWNwYdqrQhA0qN02yJxkhNm5GXmP75zmg0bPe4I+pNwuy+B32wFZn\nNcZrh4HZzS1cAyyyr3E59zsPjqcohaUcBpe6oUoQ8z1V7K9FR31TnFfvjg9mbDnX\nv2+PXsp0m7f4e1QfepZxUwyjemxOe/b+IEc7PckIrkPy46JaIvi9ONrTR8Y5wDir\nbGuzpmiyMFlyzK4ULh7kt7MU/jU/ulnqDU8JvAnhhxK3kgV4vv8LSYJSEYYP9i1S\nj/EPPQBANdtr4B2pcV1ig13dinq7rir6Q/pnkKrAFOfZcvOWW2BvPOC2dcnCYJpB\n1R5QJGXqna8Uh+ZwThs0K/Nd9dml1w/Rug8hx0VHoIe6AjXEepQ=\n-----END CERTIFICATE-----\n", "device_private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAzsm8CF8fKSzWFKZeO52RJRGER4z7sYrgTb9xoIeljE8kmhR+\nEW217sxUyUn+\nAfaWAlFXzM13CuXeGZKhuAK3INs15jqP0s+oWFvww8+hww540I+sn6j5yEUnWKSI\ngoYEc82cwvj0qOvaxYxjUTXgV2IDLSXdFJbZq4k9LDbzPZdDe0aY4X9UpdrjS5cR\nWT3Ok4VwWpMRwOT654CTwE8WUja/pHTRFbMYkqd1jrD2Joqtm+u9plTq7I9/fDnk\nRqPjueDQ04LKTbUC2UsRKw1VmHPndw22+mDPUwIDAQABAoIBAHv3A/ogzBVrA4ut\nkKA8fV6zeZFLOzfcAUuakQujReMvLsoPruPT2VUmuU1SRpNT7csmn7azmRW+4gny\nmO5meKDR382fz2DTIuKI0kByVvtNfmtBwAEdSiBpkzD7m3m1A8hg1wHw3sebolw6\njy3Zvxn5RASe3GKKsnKVLu8n5VXgyytn2I6sYOmKoLv3N9V3tziHL3Gl2AfWAd5P\nJHJdxZ50hhjzUnI0MmvUU6M9G26xagxNNibzOWv3BEuBRw5fuVpt/QoBouFhcKF7\nEdCFpiZ8LJFpux6FyLDOOAa7mj+Y6yK1qKsJbFGG8AnhPTO/bAc1m7yQcJygH9cl\nretVDcECgYEA4z+NkjqIPRiAvOsmJD6KfMeABkZc4JmART+KtrpoJmPWc2WDxu8M\ngP1eqmh/aGGORY8hcFyl+SIf5JvP13Dd/47tSK4vhyEGnnqRt+wjjuzci0rDvFdH\ntaUbjlb4kKStssQPTTmG726Zd1f32eKzBnCY8YqWdMMM1HXak20rPo8CgYEA6PN8\nYIcIrRkFzyvam8m5pCeoHylBgSNjN2j8dGC8b6SGMG6y4+rUiuxfhC/Oq7UtOvf+\njYQQgeMjB22dhcvJa6rjuuKXXpbcgNnzcemnySohUr7Nm1bXHwRfoqMAmeh3pkcL\nL+K4Mf6Gd1i2hiYd4Dd59m5/p3W+QUyKa4iaRP0CgYAf2/UZHyOijSDfW4hJZIs9\n2ypTtuGmi160Vqg33gJj/3M9UmobJcB3BQ6UjXnvRF4R2nMxsYuDVglqn32QEr7M\n6VjS67i2FSc8aKqtQmnpy8NPs/elHAdtq+wlFIRcovnHKj2K8hm8z6CsXqTc4y9+\nI6MNmgRl8kKGNs+iA5ggeQKBgBKLN25zsWQeJtE8G3XlVArWQVLhtN4z0/UYPWiC\nPt3gSfJXDZSJIAxDDsN2DsyqaoRUM4ZOagX878/qkOySsWEJxIEfAo+8EKeNMgzy\nXbHs0aRFnhZsjklgzsAim6ykzcmFxEU2lhUcvtWHUVhSdnRf1iyg1Taeb9vA3Q/8\nWtN9AoGBAN+rik+pvcdPAexngqmsUgoW8Abvv7dyBmt99KfnyRDfbt6EM68CZI90\naOlNE9P7XZyOyfQdzOlJWv8B78dwrbwMiwkhGyb6ms11GGB5J90f8oON4tMjEzdW\nKFI0T+ZOXN99GcKLHeg5GfGqHcHlEhXP9BtRyTJVz914alvOIaiY\n-----END RSA PRIVATE KEY-----\n" } } )"; ``` ## **Step 3. Initialize and Start Bytebeam Client** The next step is to initialize and start bytebeam client. Refer below code snippet to do so: ```cpp theme={null} // Add this include to your sketch #include // // By including the above header you got the access to the gloabl object named Bytebeam // Use Bytebeam global object to perform the required operations // void setup() { // put your setup code here, to run once: // // Your application setup stuff goes here // // Make sure you initialize the wifi and ntp before stepping ahead // If you want logging via Serial Monitor, consider initializing the Serial as well // setting up the device info i.e to be seen in the device shadow Bytebeam.status = "Device is Up!"; Bytebeam.softwareType = "setup-wifi-client-ino"; Bytebeam.softwareVersion = "1.0.0"; Bytebeam.hardwareType = "ESP32 Dev Module"; Bytebeam.hardwareVersion = "rev1"; // This function will initialize and start the bytebeam client // You can over-ride the default file system and file name options, if needed // eg. Bytebeam.begin(BytebeamArduino::LITTLEFS_FILE_SYSTEM,"/my_device_config.json") if(!Bytebeam.begin()) { Serial.println("Bytebeam Client Initialization Failed."); } else { Serial.println("Bytebeam Client is Initialized Successfully."); } // // If above call is successfull then your bytebeam client is now configured for the // use. You can always check for the logs in serial monitor for the status of the // above call // // check if bytebeam client is connected or disconnected bool connectionStatus = Bytebeam.isConnected(); if(!connectionStatus) { Serial.println("Bytebeam Client is Disconnected."); } else { Serial.println("Bytebeam Client is Connected."); } // Call the end method to stop and de-initialize the bytebeam client at any point of // time in the code // Bytebeam.end(); } void loop() { // put your main code here, to run repeatedly: // // Your application regular stuff goes here // // This function will let you maintain the connection with the bytebeam cloud // In case the connection is lost, it will attempt to reconnect to the bytebeam cloud Bytebeam.loop(); // software delay, you can customize it as per your application needs delay(5000); } ``` Look at the `SetupClient` example sketch for reference. See File > Examples > BytebeamArduino > ESP32 > SetupClient within the Arduino IDE. ## **Step 4. Build and Flash Application** You can build and flash your application as usual with the Arduino IDE, just setup your board configurations and hit the upload button within the Arduino IDE. # Add Device Heartbeat Parameters Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/esp-idf/add-device-heartbeat-parameters Learn how to add device parameters to your device shadow stream with these step-by-step instructions. Navigate to the Admin tab, and easily add highlighted device parameters to ensure they are visible in the device shadow. Enhance your device monitoring abilities. To add device parameters **Step 1:** Navigate to the ***Settings Tab*** by clicking on the user name at the top right **Step 2:** Add the highlighted device parameters in the device shadow stream. **Step 3:** You should see the device parameters in the device shadow. # Cloud Logging Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/esp-idf/cloud-logging Learn how to use cloud logging to remote debugging with bytebeam-esp-idf-sdk Cloud Logging is one of the most underrated features when it comes to remote debugging. With **bytebeam-esp-idf-sdk** it is as simple as Serial logging. Let me show you how in the following steps: ### Configure the Log Stream To push the log to Bytebeam Cloud you need to first create a stream. You can do this by following the [Creating a Stream](https://bytebeamio.mintlify.app/platform-guide/streams-tables/creating-a-stream) guide. Log stream is configured to `logs` by default inside the SDK and you have the option to tune it as per your choice using `bytebeam_log_stream_set` function. Once you have created a stream you can use the logging macros to publish the log to the stream. **Note:** Make sure to add the tag, level and message fields i.e. (data type is String) while creating the stream. ```cpp theme={null} // get the log stream name char* log_stream_name = bytebeam_log_stream_get(); // configure the log stream if needed, defaults to "logs" bytebeam_log_stream_set("device_logs"); ``` ### Let's send the log to Bytebeam Cloud We have implemented the cloud logging in ESP-IDF Style so if you're familiar with the ESP-IDF logging library, you can easily relate to it. ```cpp theme={null} // setting logging tag const char* TAG = "EXAMPLE_TAG"; // // Error Log // BYTEBEAM_LOGE(TAG, "I am %s Log", "Error"); // // Warn Log // BYTEBEAM_LOGW(TAG, "I am %s Log", "Warn"); // // Info Log // BYTEBEAM_LOGI(TAG, "I am %s Log", "Info"); // // Debug Log // BYTEBEAM_LOGD(TAG, "I am %s Log", "Debug"); // // Verbose Log // BYTEBEAM_LOGV(TAG, "I am %s Log", "Verbose"); ``` ### Logging Level We support multiple logging level ranging from `BYTEBEAM_LOG_LEVEL_NONE` to `BYTEBEAM_LOG_LEVEL_VERBOSE` and the level of logging you want to achieve in your code can be set by using `bytebeam_log_level_set` function anywhere in your code. When you call any logging macro the SDK will check the configured log level internally and will only log it if the log level is equal or less than the configured log level. ```cpp theme={null} // get the bytebeam log level int current_log_level = bytebeam_log_level_get(); // set the bytebeam log level bytebeam_log_level_set(log_level_to_set); ``` ### Enable/Disable Cloud Logging Few cases exists where you don't want to pump up the logs to cloud, In those scenarios you can disable the cloud logging using `bytebeam_disable_cloud_logging` function anywhere in the code. By default, cloud logging is enabled inside the SDK. ```cpp theme={null} // check if cloud logging is enabled or disabled for your device bool cloud_logging_status = bytebeam_is_cloud_logging_enabled(); if(!cloud_logging_status) { Serial.println("Cloud Logging is Disabled."); } else { Serial.println("Cloud Logging is Enabled."); } // enable cloud logging for your device (default) bytebeam_enable_cloud_logging(); // disable cloud logging for your device bytebeam_disable_cloud_logging(); ``` Have a look at [cloud\_logging](https://github.com/bytebeamio/esp-bytebeam-sdk/tree/main/examples/cloud_logging) example app for a full fledged example showing how you can use cloud logging feature to send some crucial information to bytebeam cloud. # Integrate Over the air updates Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/esp-idf/integrate-over-the-air-updates Learn how to implement Over the Air (OTA) Firmware Upgrades using bytebeam-esp-idf-sdk with this comprehensive guide. Find out how to enable OTA updates through an action handler and follow a step-by-step process to trigger updates. OTA update has become a critical requirement for devices being deployed remotely. This guide covers everything you need to know about Over the Air Firmware Upgrades with **bytebeam-esp-idf-sdk**. ## Enabling OTA Updates OTA updates can be integrated into application by adding action handler for OTA updates. ```cpp theme={null} /* Below function call adds action handler for "update_firmware" action */ /* handle_ota is the pointer to action handler*/ bytebeam_add_action_handler(&bytebeam_client, handle_ota, "update_firmware"); /* Use the bytebeam_remove_action_handler api to remove the handler for the update * firmware action at any point of time in the code , Also you can mantain the add * update firmware action handler and remove update firmware action handler flow as per * you application needs. */ // bytebeam_remove_action_handler(&bytebeam_client, "update_firmware"); ``` Have a look at basic\_ota example app for reference. Follow the below steps to trigger OTA updates- 1. Upload a .bin file and create a new firmware version on Bytebeam as per the instructions mentioned in the [Creating a new Firmware Version](/platform-guide/actions/inventory-management/firmware-files/without-device-components/creating-a-new-firmware-version) guide. 2. Once, new firmware version is created, trigger OTA update as per the instructions mentioned in the [Triggering OTA update](/platform-guide/device-management/triggering-ota-update) guide. 3. Progress of the firmware update can be monitored on Bytebeam platform using **Action status.** ## OTA Rollback You can create a checkpoint in your app to either mark the newly updated firmware image as active or rollback to previous firmware version. Have a look at basic\_ota\_rollback example app for reference. **Note:** For production cases, please tune the checkpoint behavior as per end application requirement. # PlatformIO Integration Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/esp-idf/platformio-integration Learn how to easily install the bytebeam-esp-idf-sdk using PlatformIO with this comprehensive document. Follow step-by-step instructions using either the intuitive PlatformIO GUI or the convenient PlatformIO Core CLI. **bytebeam-esp-idf-sdk** is available in Platform IO registry. See [PlatformIO Registery](https://registry.platformio.org/libraries/bytebeamio/bytebeam-esp-idf-sdk) for details. ## Getting the SDK Via PlatformlO Home You can install the SDK with PlatformIO GUI. We recommend installing the latest version of the SDK for this integration. Follow the below steps to install the SDK :) Open the PlatformIO project. Go to PIO\~\~ \~\~Home Libraries section and search for the `bytebeam` keyword. The **bytebeam-esp-idf-sdk** will pop up. Go ahead select the latest version (say `1.0.1`) and hit the `Add to Project` button. ## Getting the SDK Via PlatformlO Core CLI You can install the SDK with`pio pkg install`command. We recommend installing the latest version of the SDK for this integration. Follow the below steps to install the SDK :) * Open PlatformIO Core CLI. * Change directory (cd) to the PlatformIO project where platformio.ini is located. * Copy the following [pio pkg install](https://docs.platformio.org/en/latest/core/userguide/pkg/cmd_install.html) command and paste into the CLI shell, press **Enter.** **Note:** You can mention the latest version (say `1.0.1`) in the below command if applicable. ```shell theme={null} pio pkg install --library "bytebeamio/bytebeam-esp-idf-sdk@^1.0.1" ``` If installation is successfully done, output should be as follows. # Pushing data to Bytebeam Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/esp-idf/pushing-data-to-bytebeam Learn how you can push data to Bytebeam console. To push data to Bytebeam you need to first create a stream. You can do this by following the [Creating a Stream](https://bytebeamio.mintlify.app/platform-guide/streams-tables/creating-a-stream) guide. Once you have created a stream you can use the `publish_to_bytebeam_stream` function to publish data to the stream. ```cpp theme={null} // Publish data to a bytebeam stream // bytebeam_client: Bytebeam client object // stream: Name of the stream to publish to // payload: Data to be published bytebeam_err_t publish_to_bytebeam_stream(bytebeam_client* bytebeam_client, char* stream, char* payload) ``` Bytebeam expects the payload to be in the JSON format. Have a look at the push\_data in the example project for a full fledged example showing how to use this function. # Receiving actions Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/esp-idf/receiving-actions Guide on receiving actions in Rust ESP-IDF [Actions](/platform-guide/actions/action-details/introduction) are commands that platform sends to the client. The JSON format for Actions would look like: ```json theme={null} { "name": "toggle_board_led", "action_id": "101", "payload": "ON", "kind": "process" } ``` On device end, we need to write an action handler for handling individual action based on the name. Following example shows a way to create action handler and mapping it to a particular action: ```cpp theme={null} // handler for toggle led action int handle_toggle_led(bytebeam_client_t *bytebeam_client, char *args, char *action_id) { // Log the received arguments and action id to serial for refrence ESP_LOGI(TAG, "*** args : %s, action_id : %s ***", args, action_id); // // Include command for toggling LED over here // int ret_val = 0; // This function allows platform to know about the completion of particular action ret_val = bytebeam_publish_action_completed(bytebeam_client, action_id); if(ret_val != 0) { // // handle the publish action completed error here // return -1; } return 0; } /* Once you have created an action handler for particular action then it should * be mapped with particular action. Below function call would do that mapping */ // bytebeam_client : Bytebeam Client object // handle_toggle_led : pointer to action_handler // toggle_board_led : action bytebeam_add_action_handler(&bytebeam_client, handle_toggle_led, "toggle_board_led"); ``` ### Action status response While we execute the action, we need to send the progress back to the server so that the user can monitor the action remotely. To do so the following APIs can be used: ```cpp theme={null} /* Action completed status response can be published by using below function */ bytebeam_err_t bytebeam_publish_action_completed(bytebeam_client_t *bytebeam_client, char *action_id); /* Action failed status response can be published by using below function */ bytebeam_err_t bytebeam_publish_action_failed(bytebeam_client_t *bytebeam_client, char *action_id); /* Action progress status response can be published by using below function */ bytebeam_err_t bytebeam_publish_action_progress(bytebeam_client_t *bytebeam_client, char *action_id, int progress_percentage); /* Custom Action Status response can be published by using below function */ bytebeam_err_t bytebeam_publish_action_status(bytebeam_client_t* bytebeam_client, char *action_id, int percentage, char *status, char *error_message); ``` Have a look at toggle\_led example app for a full fledged example showing how to add the action and publish the action status response to bytebeam cloud. # Setting up Bytebeam ESP IDF SDK Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/esp-idf/setting-up-bytebeam-esp-idf-sdk Steps on how to set up and start using the Bytebeam ESP-IDF SDK This section provides step by step instructions on how to set up and start using the [Bytebeam ESP IDF SDK](https://github.com/bytebeamio/bytebeam-esp-idf-sdk) . This SDK can be used with any ESP32 board. The only requirements are WiFi and a working internet connection. ## **Step 1. Integrate Bytebeam SDK with an ESP project** ### Clone Bytebeam ESP IDF SDK Clone `bytebeam-esp-idf-sdk` using a Git client bytebeam-esp-idf-sdk ```shell theme={null} git clone https://github.com/bytebeamio/bytebeam-esp-idf-sdk.git ``` This repository consists of three folders: 1. src: This folder contains source code for various functions that can be used by applications for interacting with Bytebeam platform. 2. examples: This folder contains few example projects showing how you can use the SDK. 3. provisioning: Application to push device config data to file system of device (say SPIFFS). ### Provision device with device config data Each device needs a configuration file to connect to Bytebeam. Download the configuration file and flash it to SPIFFS by following the below steps: 1. Download the device configuration JSON file from Bytebeam cloud by following the [Provisioning a Device](/platform-guide/device-management/provisioning-a-device) guide. 2. After downloading the config file, rename it to the **device\_config.json** 3. Step into **config\_data** folder within the **provisioning** project and place **device\_config.json** file within this folder i.e Replace the file if it is already there. 4. Launch the ESP-IDF terminal and run the following command's. ```shell theme={null} # Make sure idf.py tool is accessible $ idf.py --version # Step into provisoning project $ cd path_to_provisioning_project # Set the target (say esp32) $ idf.py set-target esp32 # Configure the provisioning project (say partition table setting) $ idf.py menuconfig # Clear the entire flash $ idf.py erase-flash # Build, Flash and Monitor $ idf.py -p PORT flash monitor ``` ### Add Bytebeam ESP IDF SDK to the CMake Build System of ESP project Once the device is provisioned, integrate the `bytebeam-esp-idf-sdk` into your existing ESP project: * Open top-level `CMakeLists.txt` from your ESP project in an editor. * Add `bytebeam-esp-idf-sdk` component to your project by setting `EXTRA_COMPONENT_DIRS` ```none theme={null} set(EXTRA_COMPONENT_DIRS "") ``` This command needs to be after the `cmake_minimum_required()` command. Look at the example project for reference. * Open project-level `CMakeLists.txt` from your ESP project in an editor. * Add `bytebeam-esp-idf-sdk` component to your project `PRIV_REQUIRES` ## **Step 2. Configure Hardware** To connect your ESP device to Bytebeam cloud and exchange data, you need to configure wifi and partition settings. Follow the below steps to configure your project :) Launch the ESP-IDF terminal and run the following command's. ```shell theme={null} # Make sure idf.py tool is accessible $ idf.py --version # Step into project $ cd path_to_project # Set the target (say esp32) $ idf.py set-target esp32 # Configure your project $ idf.py menuconfig ``` ### Configure Wifi/Ethernet 1. Configure Wi-Fi/Ethernet settings by selecting **Example Connection Configuration** option. 2. Enter your WiFi SSID and Password. 3. Press `ESC` to exit out of the menu ### Configure Partition table settings This is required for implementing Over the air updates. The below steps partition your ESP flash into two app partitions and one partition for storing the device config file. 1. Copy `examples_partition.csv` file from example project and paste it into your ESP project. 2. Open menuconfig and select **Partition Table** option. 3. Select **Custom partition table CSV** option from the available options and press `ESC` button. 4. Set the name of Custom partition table CSV to partitions\_example.csv and press` ESC` button. **Note:** With above partition table selected, flash size of 4MB or more is recommended. ## **Step 3: Initialize and start bytebeam client** The next step is to initialhe below code to do so: ```cpp theme={null} // Add this include to your file #include "bytebeam_sdk.h" // Declare and initialise bytebeam client object. bytebeam_client_t bytebeam_client; void app_main(void) { // Initialise esp // Make sure you initialise the network as well as ntp before stepping ahead // setting up the device info i.e to be seen in the device shadow bytebeam_client.device_info.status = "Device is Up!"; bytebeam_client.device_info.software_type = "setup-client-app"; bytebeam_client.device_info.software_version = "1.0.0"; bytebeam_client.device_info.hardware_type = "ESP32 DevKit V1"; bytebeam_client.device_info.hardware_version = "rev1"; // initialize the bytebeam client bytebeam_init(&bytebeam_client); // start the bytebeam client bytebeam_start(&bytebeam_client); /* Use the bytebeam_stop api to stop the bytebeam client at any point of time in th * the code, Also you can mantain the bytebeam client start and bytebeam client * stop flow as per you application needs */ // bytebeam_stop(&bytebeam_client); /* Use the bytebeam_destroy api to destroy the bytebeam client at any point of time * in the code, Also you can mantain the bytebeam cient init and bytebeam client * destroy flow as per you application needs */ // bytebeam_destroy(&bytebeam_client); } ``` Look at the [setup\_client](https://github.com/bytebeamio/esp-bytebeam-sdk/tree/main/examples/setup_client) example app for reference. ## **Step 4: Build and Flash application** You can build and flash your application as usual with `idf.py` . ```shell theme={null} idf.py -p PORT flash monitor ``` # Update Configurations Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/esp-idf/update-configurations Guide on how you can remotely update the device configuration in the field at any time, this will make sure that the device has optimal configurartion all time. With Bytebeam you can remotely update the device configuration in the field at any time, this will make sure that the device has optimal configurartion at all time. You can use the `bytebeam_add_action_handler` function to add the handler for `update_config` action. ```cpp theme={null} // handler for update_config action int handle_update_config(bytebeam_client_t *bytebeam_client, char *args, char *action_id) { // log the received arguments and action id to serial for the refrence ESP_LOGI(TAG, "UpdateConfig Action Received !"); ESP_LOGI(TAG, "<--- args : %s, actionId : %s --->\n", args, actionId); // // parse the received json here // // // update the actual device configurations here // // // publish action status here // return 0; } // add the handler for update config action bytebeam_add_action_handler(&bytebeam_client, handle_update_config, "update_config"); ``` Have a look at [update\_config](https://github.com/bytebeamio/bytebeam-esp-idf-sdk/tree/main/examples/receive_data/update_config) example app for a full-fledged example showing how you can update the device configurations and publish the status response to bytebeam cloud. Follow the below steps to trigger device config updates :) * Add device configurations and create a new device config version on Bytebeam as per the instructions mentioned in the [Creating a new JSON Configuration version](/platform-guide/actions/inventory-management/json-configurations/creating-a-new-json-configuration-version) guide. * Once, new device config version is created, trigger device config update as per the instructions mentioned in the [Trigger new action](/platform-guide/actions/action-details/triggering-new-action) guide. * Progress of the device config update can be monitored on Bytebeam platform using **Action status.** # Over The Air (OTA) Updates Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/rust-esp-idf/over-the-air-ota-updates Guide on enabling Over the air updates in Rust ESP-IDF OTAs can be enabled like : ```rust theme={null} let bytebeam_client = ByteBeamClient::init()?; // This will register the ota handler for "update_firmware" action bytebeam_client.enable_ota(); ``` Follow this steps to trigger OTA update : 1. Create a new firmware version and upload the firmware on Bytebeam as per the instructions mentioned in the [Creating new Firmware Version](/platform-guide/actions/inventory-management/firmware-files/without-device-components/creating-a-new-firmware-version). 2. Once, new firmware version is created, trigger OTA update as per the instructions mentioned in the [Triggering OTA update](/platform-guide/device-management/triggering-ota-update). 3. Progress of the firmware update can be monitored on Bytebeam platform using **Action status** # Pushing data to Bytebeam Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/rust-esp-idf/pushing-data-to-bytebeam Learn how to push data to streams using ByteBeam Client with this comprehensive document. Includes a Rust code example for publishing data, emphasizing the need for JSON serialization. Discover the best practices, including omitting "id" and "timestamp" fields. You can use ByteBeam Client to push data to [Streams](https://bytebeamio.mintlify.app/platform-guide/streams-tables/introduction-to-streams). Follow [Creating a Stream](https://bytebeamio.mintlify.app/platform-guide/streams-tables/creating-a-stream) guide to create streams. ```rust theme={null} pub fn publish_to_stream( &self, // Bytebeam Client stream_name: &str, sequence: u32, payload: impl Serialize, ) -> anyhow::Result ``` Payload you want to publish must be something that can be Serialized to JSON. Lets say you have "**led\_status**" stream with field "**status**". You can create a struct and use **serde::Serialize** attribute. ```rust theme={null} #[derive(Serialize)] struct LedStream { // your custom fields! status: String, } fn main() { // .... let bytebeam_client = ByteBeamClient::init()?; let sequence = 1; let message = LedStream { status: "ON".into(), }; // You can remove .expect and handle the error bytebeam_client .publish_to_stream("led_status", sequence, message) .expect("published successfully"); //... } ``` *NOTE: Every stream has ****id**** and ****timestamp**** fields as well, we add them internally, so it is recommended to not include them in your custom struct!* \*\* # Receiving Actions Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/rust-esp-idf/receiving-actions Learn how to handle actions in our platform with this informative document. Understand the importance of defining and registering an action handler, and discover examples of using the "publish_action_status" function for progress updates. Find step-by-step instructions below. [Actions](/platform-guide/actions/action-details/introduction) are commands that platform sends to the client. The JSON format for Actions would look like : ```json theme={null} { "name": "toggle_board_led", "id": "101", "kind": "process", "payload": { "status": "ON", }, } ``` *NOTE: ****payload**** is optional, so it may or mayn't be there* To handle an incoming action, you need to define and register an action handler. An action handle must take **Action** and **\&ByteBeamClient** as arguments : ```rust theme={null} let bytebeam_client = ByteBeamClient::init()?; // You can pass a closure bytebeam_client.register_action_handle( "example_action".into(), &|action: Action, bytebeam_client: &ByteBeamClient| { // handler body }, ); // or you can also pass down a function bytebeam_client.register_action_handle("toggle".into(), &toggle); // Function signature fn toggle(action: Action, bytebeam_client: &ByteBeamClient) { // function body } ``` We can also send the progress updates for actions using **publish\_action\_status** : ```rust theme={null} pub fn publish_action_status( &self, action_id: &str, percentage: u32, status: &str, error_messages: Option<&[&str]>, ) -> anyhow::Result { ``` For example : ```rust theme={null} fn toggle(action: Action, bytebeam_client: &ByteBeamClient) { let mut onboard_led = ONBOARD_LED.lock().unwrap(); let onboard_led = onboard_led.get_mut().as_mut().unwrap(); match onboard_led.toggle() { Ok(_) => bytebeam_client.publish_action_status(&action.id, 100, "Toggled", None), Err(_) => bytebeam_client.publish_action_status( &action.id, 0, "Failed", Some(&["Failed to toggle LED"]), ), } .ok(); // just to satisfy clippy for now! } ``` Check out examples for more details # Setting up Bytebeam ESP-RS SDK Source: https://bytebeam.io/docs/device-side-integrations/mcu/esp32/rust-esp-idf/setting-up-bytebeam-esp-rs-sdk Learn how to set up and utilize the Bytebeam ESP-RS SDK on any ESP32 board with this comprehensive document. Get step-by-step instructions on provisioning the device, integrating the Bytebeam client into your project, and building and flashing. This section provides step by step instructions on how to set up and start using the [](https://github.com/bytebeamio/esp-bytebeam-sdk)[](https://github.com/bytebeamio/esp-bytebeam-sdk)[Bytebeam ESP-RS SDK](https://github.com/bytebeamio/bytebeam-esp-idf-sdk) . This SDK can be used with any ESP32 board. The only requirements are WiFi and a working internet connection. ## Provision device with device config data **bytebeam-esp-rs** requires **device\_config.json** file in SPIFFS partition. We provide a tool for provisioning device. ```shell theme={null} $ git clone https://github.com/bytebeamio/bytebeam-esp-rs-sdk.git $ cd bytebeam-esp-rs-sdk/tools/provision ``` Download the device configuration JSON file from Bytebeam cloud by following the Provisioning a Device guide and place it inside **the provision** project with the name **device\_config.json** You can use [cargo espflash](https://github.com/esp-rs/espflash) to build the project and flash it. Connect your ESP board using USB and run the following command inside **provision** project : ```shell theme={null} cargo espflash --release --monitor --partition-table partitions.csv ``` *NOTE: If you want to use custom partition table for your application, please replace ****partitions.csv**** file provided in provision project* You will see a log line with "Provisioning Done" message! You can then terminate it and move on to next step. ## Let's use bytebeam-esp-rs! Add **bytebeam-esp-rs** as a dependency in your **Cargo.toml** ```shell theme={null} cargo add bytebeam-esp-rs ``` This will add an entry in your **Cargo.toml** like: ```none theme={null} [dependency] bytebeam-esp-rs = "0.1.0" ``` Now you can start using Bytebeam client in your project ```rust theme={null} /* other imports */ use bytebeam_esp_rs::ByteBeamClient; fn main() -> anyhow::Result<()> { /*... Setup esp for Rust Connect to internet and initialize SNTP/NTP to sync time ...*/ let bytebeam_client = ByteBeamClient::init()?; // use bytebeam_client here! } ``` Check out examples for more details. ## Build and Flash Run this command within your application project : ```shell theme={null} cargo espflash --release --monitor --partition-table partitions.csv ``` *NOTE: Use the same ****partitions.csv**** that you used for provisioning! If you didn't use a custom table, you can download and use **partitions.csv** from the provision app!* # Actions Source: https://bytebeam.io/docs/getting-started/actions Learn how to use actions to command your device through dashboard using Bytebeam console Think of Actions as commands you can send to the device. Once the Device receives the command it can push updates back to the server as the command gets executed. You can then monitor the progress of the command on the Bytebeam Console. Learn about creating and managing Actions: [Creating new Action Types](/platform-guide/action-types/creating-an-action-type) [Triggering an Action from Device Management](/platform-guide/device-management/triggering-ota-update) [Triggering an Action from New Action page](/platform-guide/actions/action-details/triggering-new-action) [Monitor the progress of Actions](/platform-guide/actions/action-details/live-actions-list) # Alerts Source: https://bytebeam.io/docs/getting-started/alerts Alerts in Bytebeam keep you informed of critical events and changes in your IoT ecosystem. They are designed to notify you when specific conditions are met, ensuring you’re always aware of key updates or potential issues. For example, you can configure alerts to notify you about: * A sudden temperature spike. * A device going offline. * Unusual patterns in your data streams. You can receive notifications via your preferred channels, including Email, SMS, Whatsapp, Webhooks and Slack. Learn more about using Alerts & Notifications: [Understanding Alerts & Notifications](/platform-guide/alert-system/introduction-to-alerts-and-notifications) [Creating Alert Rules](/platform-guide/alert-system/alert-rules/signal-based-alerts) # Device Metadata Source: https://bytebeam.io/docs/getting-started/device-metadata Learn all about Device metadata, further simplyfing the process in Device Management Metadata are tags you would want to associate with your devices. For example, the device's serial number, the device's customer ID or the factory where the device was made, and so on. You can see Device Metadata from the [Device Management](/platform-guide/device-management/introduction) page: Learn how to create a new Metadata key here: [Creating new Metadata columns](/platform-guide/metadata/adding-a-metadata-key) Learn how to set value for a Metadata key on a Device here: [Editing Device Metadata](/platform-guide/device-management/editing-metadata-values-and-pinning-metadata-keys) # Device Shadow Source: https://bytebeam.io/docs/getting-started/device-shadow Learn all about Device shadow, further simplyfing the process in Device Management Device Shadow is a special stream that is created by default with every new project on Bytebeam. Device shadow is a digital clone of your Device. By default, it has one field called **Status** representing the status of the device. You can add other important parameters that help you keep track of the state of the device to this Stream. You can see the latest data pushed on the device shadow stream from the [Device Management](/platform-guide/device-management/introduction) page: You can learn more about streams here: [Streams (Tables)](/platform-guide/streams-tables/streams) # Projects Source: https://bytebeam.io/docs/getting-started/projects Guide on what are projects in Bytebeam console On Bytebeam a Project is a logical grouping of everything related to one **kind** of device. If you have multiple product lines you want to manage with Bytebeam, you will usually create one project for each product line. For example: If a smart home appliance manufacturer is making both smart fans and smart bulbs they would usually push different kinds of data and also would want to do different kinds of analytics for each product line. In this case, they will have two projects. If you have not already created a project you can learn how over here: [Getting started on Bytebeam Cloud](/getting-started/signup) # Sessions Source: https://bytebeam.io/docs/getting-started/sessions Sessions in the Bytebeam console is designed to help you monitor and analyze session-based data. Sessions represent periods of activity defined by user-configured conditions and provide valuable insights into behavior patterns and performance metrics. You can easily identify anomalies, patterns, or performance issues by monitoring session information in real-time or within historical data. Learn more about using Sessions: [Understanding Session Types](/platform-guide/session-types/introduction-to-session-types) [Creating Session Types](/platform-guide/session-types/creating-a-session-type) [Visualizing Sessions](/platform-guide/dashboards/panels/sessions) # Signup Source: https://bytebeam.io/docs/getting-started/signup A guide on how to get started with Bytebeam Cloud. Simplify the process of collect, store & visualize your data for better Device Management and Remote debugging with Bytebeam Cloud. The first step to getting started with Bytebeam Cloud is to create an Account. You can do this by logging in to [cloud.bytebeam.io](https://cloud.bytebeam.io) using any of these accounts: Google, Linkedin, Microsoft, or Github. Upon logging in, you may encounter one of the following scenarios: **Existing Project:** If you already have a project, you will be directed to the Device Management page for that project. **No Project Created:** If no project exists, you'll see a **Welcome** screen that suggests you to either create a new project or try the demo of the Bytebeam console. **Multiple Projects:** If you have multiple projects, you’ll be presented with a list to select the project you wish to access. **Welcome** screen looks like this: Click on Create New Project, enter the desired project name and click Submit. You have now created a Project and should see the **Device Management** screen You can switch projects or create additional projects from the drop-down on the top right: # Streams Source: https://bytebeam.io/docs/getting-started/streams Guide on Streams in Bytebeam console Streams are how you push data to Bytebeam console. A stream represents a series of time-series data points. For example, if your device has a GPS sensor you will probably be collecting data packets containing latitude, longitude, timestamp, etc periodically. You can create a GPS stream on Bytebeam and push this data to the stream. By default Bytebeam expects every stream to have at least three fields: * `id` to represent device id * `timestamp` to represent the timestamp at which the event happened * `sequence` an auto-incrementing number used to ensure all data has been transmitted correctly to the cloud. You can learn more about stream here: [Streams (Tables)](/platform-guide/streams-tables/streams) # Creating an Action Type Source: https://bytebeam.io/docs/platform-guide/action-types/creating-an-action-type ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/95fc0fba-36b6-472a-857a-1b5a582c85b1/f163bc46-1a2e-43e3-9b51-dd57aa3fdd89/images/ff6bfae5-59f2-4006-8e9e-c4598fdc1b0b.gif) To create a new action type in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Action Types** tab and click on the **Create Action Type** button Enter the action type name, choose the [payload](#payload-in-action-types), select an icon, and optionally set a timeout duration from the dropdown. Then, click on the Submit button to create the metadata key. ## Payload in Action Types There are 3 payload options in 4 variations available. You can choose this for action types like Shutdown which don't need any payload to be sent to the device while triggering the action. You can choose this for action types which need the JSON payload to be sent to the device while triggering the action. You can choose this for action types like Update CAN Config which enables the JSON data to be sent via form to the device while triggering the action. To choose this option, choose **JSON** option from the dropdown, enable the **Allow user to input data via form** toggle and enter the **JSON Schema** along with **JSON UI Schema** while creating or editing the action type You can choose this for action types which need the payload in text format to be sent to the device while triggering the action. # Deleting an Action Type Source: https://bytebeam.io/docs/platform-guide/action-types/deleting-an-action-type ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/95fc0fba-36b6-472a-857a-1b5a582c85b1/f163bc46-1a2e-43e3-9b51-dd57aa3fdd89/images/b0e806af-9cf7-4c56-8fb5-92e7a7ef7f7e.gif) To delete the existing action type in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Action Types** tab and click on the **trash** icon against the target action type Enter the action type name and click on **Submit** button to delete the action type. The default action types cannot be deleted # Editing an Action Type Source: https://bytebeam.io/docs/platform-guide/action-types/editing-an-action-type ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/95fc0fba-36b6-472a-857a-1b5a582c85b1/f163bc46-1a2e-43e3-9b51-dd57aa3fdd89/images/b0e806af-9cf7-4c56-8fb5-92e7a7ef7f7e.gif) To edit the existing action type in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Action Types** tab and click on the **edit** icon against the target action type Select the [payload](#payload-in-action-types), icon and the timeout duration and click on **Submit** button to edit the action type. Only timeout duration can be changed for default action types like update\_firmware, update\_config etc. ## Payload in Action Types There are 3 payload options in 4 variations available. You can choose this for action types like Shutdown which don't need any payload to be sent to the device while triggering the action. You can choose this for action types which need the JSON payload to be sent to the device while triggering the action. You can choose this for action types like Update CAN Config which enables the JSON data to be sent via form to the device while triggering the action. To choose this option, choose **JSON** option from the dropdown, enable the **Allow user to input data via form** toggle and enter the **JSON Schema** along with **JSON UI Schema** while creating or editing the action type You can choose this for action types which need the payload in text format to be sent to the device while triggering the action. # Introduction to Action Types Source: https://bytebeam.io/docs/platform-guide/action-types/introduction-to-action-types ## Overview Action types are commands that can be executed on a device directly from the Bytbeam console. These actions must be predefined in the device firmware. ## Uses of action types They can be used for tasks such as updating firmware or changing device configurations remotely, as well as for custom commands like shutting down the device. You can create an action type and trigger the action on devices either from Device Management or from New Action section. You can edit the existing action type and change details like payload, icon and timeout duration. You can delete the action types that are no longer needed. By default, every new project includes five pre-created action types: **update\_firmware**, **update\_config**, **update\_geofence**, **cancel\_action**, and **launch\_shell**. # Action Details & Device Management Source: https://bytebeam.io/docs/platform-guide/actions/action-details/detail-page-of-actions The detail view enables you to manage ongoing actions and monitor each device's progress in an action. To access the detailed page of an action: Go to the **Actions** tab at the top of the console. Select an action, then click on the **View Details** button to see the detailed view of the action. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/aa67c80f-6e9a-4d8d-8e99-e92205eac0f4/36ce91f7-19c5-4f6a-a6d9-5260c73a0989/images/7171b5c3-dc81-41a9-bd20-307a762ac435.gif) ## Viewing Payload and Additional Information **View Payload:** Click on View Payload to see the payload data for the selected action. This option will be disabled if the action has no payload. **More Info:** Click on More Info for action details such as type, ID, trigger time, schedule, auto-retry setting, and timeout duration. ## Data Visualizations The detail page includes the following graphs for visualizing action progress: **Status Distribution Graph**: Displays the number of devices in each state for the action. **Failure Distribution Graph**: Shows the reasons for any device failures during the action. **Latency Histogram**: Displays the time, devices spend in each state across phases. To view the Latency Histogram, click on the forward (>) icon. ## Adding Phases You can add additional phases to an action to include more devices, set a custom trigger time, and execute the action on the newly added devices. To add a phase: Select the action and click on **View Details**. Click on **Add Phase** at the top. Choose the devices and set a **Custom Time** using the **Calendar dropdown**, then click **Submit**. Devices already included in previous phases cannot be selected for a new phase. ## Filtering Devices by Action State The Filters feature allows you to view devices in a specific action state, such as Scheduled, Completed, or Failed. To filter devices by state: Navigate to the **Actions** tab at the top. Select an action, open the **View Details** button, and scroll down to the **Filters** section. Click **Filters** in the device list, select states by checking boxes like Scheduled, Completed, or Failed. Once applied, the selected filters will appear at the top of the device list. ## Managing Actions for Devices Within the device list, you can manage actions on individual devices: Marks all previous actions as complete on the selected device. Click the **Mark All Actions as Complete** icon next to the device to confirm. View logs detailing action progress by clicking the **Action Progress Logs** icon beside the device. Access a comprehensive device overview, including historical actions, by clicking the More Details icon. Cancel an action if it is no longer needed by selecting the device, clicking **Cancel Action**, and confirming. This option is disabled if the action is already completed or failed for the device. Retry a failed action by selecting the device, clicking **Retry Action**, and confirming. This option is disabled if the action is not in a 'Failed' state. Manually mark an action as complete by selecting the device, clicking **Complete Action**, and confirming. This option is disabled if the action is already in a 'Completed' or 'Failed' state. Cancel an entire phase if it is no longer needed by selecting the phase at the top, clicking **Cancel Phase**, and confirming. This option is disabled if all devices in the phase are already in completed or failed states. Retry a failed phase by selecting the phase at the top, clicking **Retry Phase**, and confirming. This option is disabled if any of the device is in a state other than 'Failed'. # Action Timeout Source: https://bytebeam.io/docs/platform-guide/actions/action-details/device-level-timeouts ## Overview Action Timeout allows you to set a timeout period for actions on a device if they remain stuck in any state other than "Completed" or "Failed." ## Why Use Action Timeouts? In certain situations, an action may get stuck in a particular state, preventing subsequent actions from executing. By setting an action timeout, you can mark these stuck actions as "Failed" to free up the device for future tasks. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/ce5451ce-97b4-4427-bbc6-9c9407629c36/a08e682b-19f1-4823-a6e7-0ed5696922a3/images/e863c3a3-547a-4252-9d20-d888e3548065.gif) ## Timeout Configuration Options Timeouts can be configured in three places: **Action Types** - Specific to individual action types. **Global Settings** - Applies to all action types. **Advanced Settings** - Global for all action types but only affects actions in the "Scheduled" state. ## Action Types Timeout Set timeouts for individual action types, applicable if they’re stuck in any state other than "Scheduled," "Failed," or "Completed." To set a timeout for an action type: Navigate to the Settings tab by clicking on your username at the top right. Go to [Action Types](/platform-guide/action-types/action-types) and click on the edit icon next to the action type you want to update. In the Timeout dropdown, select a duration from the list or set a custom time, then click Submit. ## Global Timeout The global timeout applies to all action types that are stuck in any state other than "Scheduled," "Failed," or "Completed." The default global timeout for new projects is set to 30 days. To configure the global timeout: Navigate to the Settings tab by clicking on your username at the top right. Go to the [General](/platform-guide/general-settings) tab, and click the edit icon next to Default Action Timeout. Select a duration from the Timeout dropdown, or set a custom time, then click the Save icon. ## Advanced Settings Timeout This timeout applies globally to all action types but only affects actions that are stuck in the "Scheduled" state. Use Case: If you have a phased action with a success-rate dependency, and a prior phase does not meet its criteria, the next phase may get stuck in "Scheduled." This timeout will help mark those phases as "Failed" to allow progression. The default for scheduled actions is set to "Never". To set a timeout for scheduled actions using Advanced Settings: In the Advanced Settings section, enable the Advanced Settings Toggle. Choose a timeout value from the dropdown, or set a custom time, then trigger the action. ## Summary of Timeout Precedence For actions stuck in any state other than "Scheduled," "Completed," or "Failed," the timeout is checked in this order: 1. Action Types Timeout (if configured) 2. Global Timeout (if action types timeout is not configured) For actions in the "**Scheduled**" state, only the **Advanced Settings Timeout** applies, overriding any Action Types or Global timeouts. This approach ensures that actions can proceed smoothly without getting indefinitely delayed in unresponsive states. # Device Overview & Historical Action Management Source: https://bytebeam.io/docs/platform-guide/actions/action-details/historical-actions You can view and manage all the historical actions from this section. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/98486da1-f1c4-49b2-9b04-4a314676a97b/6c5ae1c5-d653-4d0f-a3d6-c31182a87320/images/11147463-89a7-4b4d-b76d-31ef95308759.gif) ## Filters for Historical Actions Locating a specific historical action can be tricky when there are numerous actions. The Bytebeam console provides a Filters option to streamline this process. To apply filters to find a specific historical action, follow these steps: Click on the **Actions** tab at the top. Select an action from the **Actions List** and click on the **View Details** button at the top. Click on the **Eye** icon next to any device in the Devices List. Choose from Action Ids, Creators, or Action Types and select the appropriate option from the dropdown. Click the dropdown to apply the filter. Once applied, the selected filters will appear at the top with the corresponding keys and values. You can use a combination of filters to narrow down your search to specific historical actions. ## Show Incomplete Actions To view only incomplete historical actions, toggle the **Show Incomplete Actions** option. ## Mark All as Complete You can mark all historical actions as completed for a specific device. Simply click on the **Mark All Complete** button and confirm the completion. ## Manage Historical Actions For any historical action on a device, you can perform the following operations: You can view the payload sent while triggering the selected action. This option is disabled if the action has no payload type associated with it. You can mark the selected historical action as completed on a specific device. Simply click the **Mark Action on Device as Completed** icon and confirm the action. This option will be unavailable if the action has already been completed or failed. You can mark the entire historical action as completed. Just click the **Mark Action as Completed** icon and confirm the action. This option will be unavailable if the action is already completed or failed. You can view the progress logs of the selected action by clicking the **Action Progress Logs** icon. To see a detailed page of the historical action, which includes the list of devices on which the action was triggered, click the **More Details** icon. # Introduction to Actions Source: https://bytebeam.io/docs/platform-guide/actions/action-details/introduction Actions provides a centralized interface where you can initiate new actions and manage all ongoing and historical actions with detailed status updates. The Action Details section enables you to monitor live action progress and perform operations such as cancelling, retrying, or marking actions as complete. Here, you’ll find a comprehensive overview of each action, including the device list, historical actions on specific devices, and filter options for efficient action management. You can access a live overview of all actions and can even filter actions to focus on specific states and perform operations such as cancel or complete actions. You can view each action in detail, including associated devices and status-based filters for focused device management. Available options include cancel, complete, or retry actions. You can view individual device overview, apply filters, and perform operations such as marking all actions as complete or completing current actions. The New Action tab allows you to trigger actions across devices in phases, using settings like Success Rate, Abort Phase, and Custom Time. You can initiate a new action across multiple devices by selecting them individually or uploading a list. You can even configure conditions for phase-wise initiation, and enable auto-retry to handle failed actions automatically. You can set timeout durations globally in General Settings, by Action type, or specifically for scheduled actions through Advanced Settings while triggering the action. # Live Action Overview & Management Source: https://bytebeam.io/docs/platform-guide/actions/action-details/live-actions-list You can view and manage all ongoing actions here, with the ability to filter, sort, and perform specific operations on each action. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/10606449-fe98-4040-b266-197a669a040a/eefa4276-ed59-4365-ba04-b5c9cb47e67b/images/12752022-20a7-442e-aa62-a64ebff4e5c2.gif) ## Data Visualizations The action details page includes the following graphs for visualizing action progress: **Status Distribution Graph**: Displays the number of devices in each state for the action. **Failure Distribution Graph**: Shows the reasons for any device failures during the action. **Latency Histogram**: Displays the time, devices spend in each state across phases. To view the Latency Histogram, click on the forward (>) icon. ## Adding Phases You can add additional phases to an action to include more devices, set a custom trigger time, and execute the action on the newly added devices. To add a phase: Select the action in **Action Details** page Click on **Add Phase** at the top. Choose the devices and set a **Custom Time** using the **Calendar dropdown**, then click **Submit**. Devices already included in previous phases cannot be selected for a new phase. ## Filters at Actions List When there are many ongoing actions, finding a specific one can be difficult. The Bytebeam console provides a Filters option to streamline this process. Follow these steps to apply filters: Click the **Actions** tab at the top. Click the **Filters** option within the actions list. Choose the Ids, Creators, or Action Types and select the corresponding dropdown option. Choose the desired filter option to apply. Once applied, the selected filters will appear at the top with the chosen keys and values. You can combine multiple filters to narrow down your search. ## Sort by Incomplete Actions You can prioritize incomplete actions by sorting them to the top of the list. Simply enable the Sort by Incomplete Actions toggle in the Action Details to view incomplete actions first, followed by completed ones. ## Cancel Phase You can cancel an entire phase if it is no longer needed by selecting the phase at the top, clicking **Cancel Phase**, and confirming. This option is disabled if all devices in the phase are already in completed or failed states. ## Retry Phase You can manually retry a failed phase by selecting the phase at the top, clicking **Retry Phase**, and confirming. This option is disabled if any of the device is in a state other than 'Failed'. ## Managing Live Actions For any ongoing action, click the 3 dots next to it to perform the following operations: You can access the detailed page of the action, which includes the list of devices on which the action was triggered by simply clicking on **View Details** option. You can cancel an action by simply clicking on **Cancel Action** and confirm the cancellation. This option will be disabled if the action has already been completed or failed. You can retry any failed action by clickng on **Retry Action** to retry the operation. This option is only available if the action's status is 'Failed'. To mark the entire action that is triggered on all devices as completed, click **Mark Action as Completed** and confirm. This option will be disabled if the action is already completed or failed. You can view the **payload** associated with the selected action by simply clicking on **View Payload** option. This option will be disabled if the action has no payload. You can view the release notes added during the triggering of the action by simply clicking on **Release Notes** option. Release notes option is available exclusively for **Update Firmware** action. # Triggering a New Action Source: https://bytebeam.io/docs/platform-guide/actions/action-details/triggering-new-action ## Overview In the Bytebeam console, you can initiate actions such as firmware updates, configuration changes, or geofence adjustments by selecting target devices. Below are detailed instructions for triggering an Over-the-Air (OTA) firmware update. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/ff4f3197-e7c7-4eea-af21-f4024290f97b/f0639ca8-090e-4777-b7f3-0bd4a4ad5625/images/ca79678d-316c-4451-a592-33698809eabd.gif) ## Steps to Trigger an OTA Update Click on **Actions** tab and navigate to the **New Action** tab located at the top Locate devices using pagination if necessary. Select individual devices by checking the boxes next to each one, or select all visible devices by using the **Select All** checkbox. To refine results, apply filters using metadata keys or Device IDs, and then select the filtered devices. Select the action type as **Update Firmware** from the **Action Type dropdown**. From the options, choose the **Firmware Version** or **Firmware Bundle Version** (if Device Components is enabled) or upload **New Firmware Version** Select the devices along with other options such as adding [phases](#phase-wise), enabling [auto retry](#auto-retry) or [abort phase](#abort-phase), choosing [timeout](/platform-guide/actions/action-details/device-level-timeouts) duration etc., check the **Summary** section at the bottom and click on **Trigger Action** button. If using the same filter across multiple phases, make sure the total of all phase fractions equals 100%. If the device is offline, the action remains in the Initiated state and automatically begins progressing once the device comes online. We also support configurable timeouts and retry mechanisms for all actions.. # Phasewise Execution of Actions You can schedule the action in multiple phases, with each phase targeting a specific number or percentage of devices. This enables more controlled rollouts and monitoring. ## Phase Triggering Options **Success Percentage of Previous Phase** - Start the next phase based on a success rate (percentage of devices that completed the previous phase successfully). **Custom Timing** - Set custom timing for when each phase should begin. In addition, you can abort a phase if a certain percentage of devices in the previous phase encounter failures. The **Success Percentage** and **Abort Phase** options become visible starting from the second phase. ## Abort Phase To enable Abort Phase in any of the phases starting from second phase, Scroll down to the **Abort Phase** section, enable the **Abort Phase Toggle**. Enter a percentage value, then trigger the action. ## Auto Retry Enable Auto Retry to automatically retry failed actions due to temporary issues, eliminating the need for manual retries. To enable Auto Retry option for any action, Scroll down to the **Advanced Settings** section, enable the **Advanced Settings Toggle**. Enable the **Auto Retry Toggle**. ## Device List Upload This feature is available only in Actions/New Action currently and is not available in Device Management If you prefer not to select devices manually for each phase, you can upload a CSV file containing the phase details along with associated metadata keys and values for each device. To use the Device List upload feature: Scroll down to the **Device List** section and click on it. Upload a CSV file with all the phase details containing metadata keys and values. Review the device list generated from the upload, and deselect any devices as needed. You can proceed with triggering the action on the finalized device list. # Important Update When triggering an action on a device with ongoing actions, a warning modal will appear. From this modal, you can choose one of the following options: **Complete Actions on Selected Devices and Proceed** - This option marks all ongoing actions on the device as complete and immediately starts the new action. **Proceed Anyway with New Action** - This option queues the new action to begin only once all current actions on the device have either completed or failed. # Creating an Action Type Source: https://bytebeam.io/docs/platform-guide/actions/action-settings/creating-an-action-type ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/95fc0fba-36b6-472a-857a-1b5a582c85b1/f163bc46-1a2e-43e3-9b51-dd57aa3fdd89/images/ff6bfae5-59f2-4006-8e9e-c4598fdc1b0b.gif) To create a new action type in Bytebeam console, Click on the **Actions** tab at the top Navigate to the **Action Settings** tab and click on the **Create Action Type** button Enter the action type name, choose the [payload](#payload-in-action-types), select an icon, and optionally set a timeout duration from the dropdown. Then, click on the Submit button to create the metadata key. ## Payload for Action Types There are 3 payload options in 4 variations available while creating the action type. You can choose this for action types like Shutdown which don't need any payload to be sent to the device while triggering the action. You can choose this for action types which need the JSON payload to be sent to the device while triggering the action. You can choose this for action types like **Update CAN Config**, which enables JSON data to be sent via a form to the device while triggering the action. To choose this option: 1. Select **JSON** from the dropdown. 2. Enable the **Allow user to input data via form** toggle. 3. Enter the **JSON Schema** along with the **JSON UI Schema** while creating or editing the action type. ```json theme={null} { "title": "", "type": "object", "required": [ "can_bitrate", "can_filter_mask", "data_frequencies" ], "properties": { "can_bitrate": { "type": "string", "title": "CAN BitRate (kbps)", "default": "500" }, "can_filter_mask": { "type": "string", "title": "CAN Filter Mask", "default": "0x00" }, "data_frequencies": { "type": "array", "title": "Data Frequencies", "items": { "type": "object", "required": [ "can_mask", "frequency" ], "properties": { "can_mask": { "type": "string", "title": "CAN Mask" }, "frequency": { "type": "string", "title": "Frequency (Hz)" } } } } } } ``` ```json theme={null} { "can_bitrate": { "ui:placeholder": "Eg: 250" }, "can_filter_mask": { "ui:placeholder": "Eg: 0xffD", "ui:emptyValue": "" }, "data_frequencies": { "ui:options": { "orderable": false, "inline": true }, "items": { "can_mask": { "ui:inline": true, "ui:placeholder": "Eg: 0x7ff" }, "frequency": { "ui:inline": true, "ui:placeholder": "Eg: 100" } } } } ``` When the above configuration is used while creating the action type, it appears like this when triggering the action: You can choose this for action types which need the payload in text format to be sent to the device while triggering the action. # Deleting an Action Type Source: https://bytebeam.io/docs/platform-guide/actions/action-settings/deleting-an-action-type ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/95fc0fba-36b6-472a-857a-1b5a582c85b1/f163bc46-1a2e-43e3-9b51-dd57aa3fdd89/images/b0e806af-9cf7-4c56-8fb5-92e7a7ef7f7e.gif) To delete the existing action type in Bytebeam console, Click on the **Actions** tab at the top Navigate to the **Action Settings** tab and click on the **trash** icon against the target action type Enter the action type name and click on **Submit** button to delete the action type. The default action types cannot be deleted # Editing an Action Type Source: https://bytebeam.io/docs/platform-guide/actions/action-settings/editing-an-action-type ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/95fc0fba-36b6-472a-857a-1b5a582c85b1/f163bc46-1a2e-43e3-9b51-dd57aa3fdd89/images/238d57d9-5afc-4cfa-98f3-0e6fd52ab425.gif) To edit the existing action type in Bytebeam console, Click on the **Actions** tab at the top Navigate to the **Action Settings** tab and click on the **edit** icon against the target action type Select the [payload](#payload-in-action-types), icon and the timeout duration and click on **Submit** button to edit the action type. Only timeout duration can be changed for default action types like update\_firmware, update\_config etc. ## Payload for Action Types There are 3 payload options in 4 variations available while editing the action type. You can choose this for action types like Shutdown which don't need any payload to be sent to the device while triggering the action. You can choose this for action types which need the JSON payload to be sent to the device while triggering the action. You can choose this for action types like **Update CAN Config**, which enables JSON data to be sent via a form to the device while triggering the action. To choose this option: 1. Select **JSON** from the dropdown. 2. Enable the **Allow user to input data via form** toggle. 3. Enter the **JSON Schema** along with the **JSON UI Schema** while creating or editing the action type. ```json theme={null} { "title": "", "type": "object", "required": [ "can_bitrate", "can_filter_mask", "data_frequencies" ], "properties": { "can_bitrate": { "type": "string", "title": "CAN BitRate (kbps)", "default": "500" }, "can_filter_mask": { "type": "string", "title": "CAN Filter Mask", "default": "0x00" }, "data_frequencies": { "type": "array", "title": "Data Frequencies", "items": { "type": "object", "required": [ "can_mask", "frequency" ], "properties": { "can_mask": { "type": "string", "title": "CAN Mask" }, "frequency": { "type": "string", "title": "Frequency (Hz)" } } } } } } ``` ```json theme={null} { "can_bitrate": { "ui:placeholder": "Eg: 250" }, "can_filter_mask": { "ui:placeholder": "Eg: 0xffD", "ui:emptyValue": "" }, "data_frequencies": { "ui:options": { "orderable": false, "inline": true }, "items": { "can_mask": { "ui:inline": true, "ui:placeholder": "Eg: 0x7ff" }, "frequency": { "ui:inline": true, "ui:placeholder": "Eg: 100" } } } } ``` When the above configuration is used while editing the action type, it appears like this when triggering the action: You can choose this for action types which need the payload in text format to be sent to the device while triggering the action. # Introduction to Action Types Source: https://bytebeam.io/docs/platform-guide/actions/action-settings/introduction-to-action-types ## What are action types? Action types are commands that can be executed on a device directly from the Bytbeam console. These actions must be predefined in the device firmware. ## Uses of action types They can be used for tasks such as updating firmware or changing device configurations remotely, as well as for custom commands like shutting down the device. You can create an action type and trigger the action on devices either from Device Management or from New Action section. You can edit the existing action type and change details like payload, icon and timeout duration. You can delete the action types that are no longer needed. By default, every new project includes five pre-created action types: **update\_firmware**, **update\_config**, **update\_geofence**, **cancel\_action**, and **launch\_shell**. # Activating a deactivated Firmware File version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/with-device-components/activating-a-deactivated-firmware-version-for-a-component ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a899a100-180f-45fd-8777-8f33d2b32b2c/2239feb2-dc6e-480b-ad2e-6307786d5f37/images/a932fd5e-8016-460e-9062-8afb18fd2a6b.gif) To Activate a deactivated Firmware File version in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab and click on the desired **Device Component** tab Scroll to the desired **Firmware File version** Click on inactive toggle against the located version and click on **Activate** button. # Creating a Firmware Bundle Version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/with-device-components/creating-a-firmware-bundle-version ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a899a100-180f-45fd-8777-8f33d2b32b2c/2239feb2-dc6e-480b-ad2e-6307786d5f37/images/24fa9ba8-8c28-4838-94d5-bc01be59d086.gif) To create a new Firmware Bundle version in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab, click on the **Firmware Bundles** tab and click on **Create Firmware Bundle** button Enter details like bundle version, select the components and their versions from the dropdown and click on **Submit** button. ## Important Info The dependency among components and their versions should be satisfied while creating firmware bundle. This new firmware bundle can be applied to a device using the **update\_firmware** action type. # Creating a new Firmware File Version for Component Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/with-device-components/creating-a-new-firmware-version-for-a-component ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a899a100-180f-45fd-8777-8f33d2b32b2c/2239feb2-dc6e-480b-ad2e-6307786d5f37/images/dbd5b178-6856-4cea-a632-bb6cff50c4b8.gif) To create a new Firmware file version for a component in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab, click on the desired **Device Component** tab and click on **Upload New Firmware** button Enter details like version, upload the firmware file, enter uncompressed file size(Optional), add [dependencies](/platform-guide/actions/inventory-management/firmware-files/with-device-components/dependencies)(Optional) and click on **Create** button. This new firmware version can be used to create a firmware bundle and can be applied to a device using the **update\_firmware** action type. # Deactivating a Firmware File version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/with-device-components/deactivating-a-firmware-version-for-a-component ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a899a100-180f-45fd-8777-8f33d2b32b2c/2239feb2-dc6e-480b-ad2e-6307786d5f37/images/12a10f68-554a-4193-883d-8a939af0d6b3.gif) To deactivate a Firmware File version in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab and click on the desired **Device Component** tab Scroll to the desired **Firmware File version** Click on active toggle against the located version and click on **Deactivate** button. You can activate the deactivated firmware file versions for the components with the [following instructions](/platform-guide/actions/inventory-management/firmware-files/with-device-components/activating-a-deactivated-firmware-version-for-a-component) # Deleting a Firmware Bundle version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/with-device-components/deleting-a-firmware-bundle-version ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a899a100-180f-45fd-8777-8f33d2b32b2c/2239feb2-dc6e-480b-ad2e-6307786d5f37/images/b9f1965c-5f0f-4994-927a-7c2337603ffa.gif) To delete a Firmware Bundle version in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab, click on the **Firmware Bundles** tab and locate the **Firmware Bundle** to delete Click on **Delete** icon against the located bundle version and, enter the bundle version and click on **Confirm** button. # Dependency of Versions between Components Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/with-device-components/dependencies ## Why Are Version Dependencies Needed Between Components? In many devices, certain components depend on specific versions of other components to function correctly. When updating the firmware of one component, it’s essential to check that other interdependent components are running compatible versions. For instance, you might set a dependency between the Motor and Engine components, so that if the Engine is upgraded to version 3, the Motor must be on at least version 2 for the device to operate as expected. You can add a version dependency for a component while uploading the new firmware version by following the below steps: Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab, click on the desired **Device Component** tab and click on **Upload New Firmware** button Enter details like version, upload the firmware file, enter uncompressed file size(Optional). Click on **Add Dependencies** button and select the components and corresponding versions and click on **Submit** button. You can [view](/platform-guide/actions/inventory-management/firmware-files/with-device-components/viewing-a-dependency-for-a-component) and [update](/platform-guide/actions/inventory-management/firmware-files/with-device-components/updating-a-dependency-for-a-component) the dependencies for existing firmware versions # Editing a Firmware Bundle Version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/with-device-components/editing-a-firmware-bundle-version ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a899a100-180f-45fd-8777-8f33d2b32b2c/2239feb2-dc6e-480b-ad2e-6307786d5f37/images/84012de6-5725-4bc8-b237-a7f2aeb09ca6.gif) To edit a Firmware Bundle version in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab, click on the **Firmware Bundles** tab and locate the **Firmware Bundle** to edit Click on **Edit** icon against the located bundle version, enter the new uncompressed file size along with its unit and click on **Update** button. Only uncompressed file size can be edited for a firmware bundle # Updating the Version Dependency for a Component Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/with-device-components/updating-a-dependency-for-a-component ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a899a100-180f-45fd-8777-8f33d2b32b2c/2239feb2-dc6e-480b-ad2e-6307786d5f37/images/011d4205-3b05-4ea7-8216-7323bc158f48.gif) To update the existing version dependency for a component in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab, click on the desired **Device Component** tab and click on **Update Dependency** icon Remove or add the new components and corresponding versions and click on **Save Dependency** button. # Viewing the Version Dependency for a component Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/with-device-components/viewing-a-dependency-for-a-component ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a899a100-180f-45fd-8777-8f33d2b32b2c/2239feb2-dc6e-480b-ad2e-6307786d5f37/images/d76d13ee-ea21-4309-b568-a89b704e2a3e.gif) To view the existing version dependency for a component in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab, click on the desired **Device Component** tab and click on **View Dependency** icon # Activating a deactivated Firmware File version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/without-device-components/activating-a-deactivated-firmware-version ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/c6c213b2-d934-4510-8d0c-76d8c5e21e00/48c6961e-4d9a-420a-9505-0e8e462062fb/images/4bcedd62-66ea-434c-924b-3fc2bae3e3d2.gif) To Activate a deactivated Firmware File version in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab and locate the desired **Firmware File version** Click on inactive toggle against the located version and click on **Activate** button. # Creating a new Firmware File Version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/without-device-components/creating-a-new-firmware-version ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/c6c213b2-d934-4510-8d0c-76d8c5e21e00/5e53f86a-f16d-4beb-aa8c-9ecf81c48ea4/images/1f2b91f5-1000-41e2-b388-23a99ad1ef22.gif) To create a new Firmware file version in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab and click on **Upload New Firmware** button Enter details like version, upload the firmware file, enter uncompressed file size(Optional) and click on **Create** button. This new firmware version can be applied to a device using the **update\_firmware** action type. # Deactivating a Firmware File version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/without-device-components/deactivating-a-firmware-version ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/c6c213b2-d934-4510-8d0c-76d8c5e21e00/48c6961e-4d9a-420a-9505-0e8e462062fb/images/a5a7f6b5-f838-4631-9b7b-c95a9b76b12a.gif) To deactivate a Firmware File version in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab and locate the desired **Firmware File version** Click on the active toggle against the located version and click on **Deactivate** button. You can activate the deactivated firmware file versions with the [following instructions](/platform-guide/actions/inventory-management/firmware-files/without-device-components/activating-a-deactivated-firmware-version) # Editing a Firmware File version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/firmware-files/without-device-components/editing-a-firmware-version ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/c6c213b2-d934-4510-8d0c-76d8c5e21e00/5e53f86a-f16d-4beb-aa8c-9ecf81c48ea4/images/6b3866db-b91e-4a7c-8416-58b35590a433.gif) To edit a Firmware File version in Bytebeam console, Click on the **Actions** tab Navigate to the **Firmware Files** tab by clicking on Inventory section Click on **Firmware Files** tab and locate the desired **Firmware File version** Click on **Edit** icon against the located version, enter the new uncompressed file size along with its unit and click on **Upload** button. Version name cannot be edited and uploaded firmware file cannot be changed once uploaded. # Creating a new Geofence Configuration Version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/geofence-configurations/creating-a-new-geofence-configuration-version ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/242bbc33-a2e1-46fa-94df-ee482bf18716/6579a69a-dba9-4968-a422-ab82e5ca11c9/images/83707cfd-850a-4de5-9412-8097f69bb5fb.gif) To create a new Geofence Configuration version in Bytebeam console, Click on the **Actions** tab. Navigate to the **Geofence Configurations** tab by clicking on the Inventory section. Click on the **Geofence Configurations** tab and then click on the **Create Geofence Config** button. You can fill in the details using one of the following methods: 1. **Map-Based Input**:\ Click on Map View tab, enter the configuration version name, click on the map to mark points, ensure the polygon is completed by clicking inside the enclosed shape, enter the value for the Alert Threshold field (in seconds), and click **Create**. 2. **JSON Input**:\ Click on JSON View tab, enter the configuration version name, input the JSON payload directly, enable the checkbox to ensure the polygon is completed, enter the value for the Alert Threshold field (in seconds), and click **Create**. The JSON input method allows for precise geofence creation by specifying location details such as latitude and longitude. ## Important Info You can remove the last selected point by clicking on **Undo Last Point** on the map. This new geofence configuration can be applied to a device using the **update\_geofence** action type. # Deactivating a Geofence Configuration version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/geofence-configurations/deactivating-a-geofence-configuration ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/242bbc33-a2e1-46fa-94df-ee482bf18716/6579a69a-dba9-4968-a422-ab82e5ca11c9/images/f121e388-2896-47a8-a730-eaac19d98a31.gif) To deactivate a Geofence Configuration version in Bytebeam console, Click on the **Actions** tab Navigate to the **Geofence Configurations** tab by clicking on Inventory section Click on **Geofence Configurations** tab and locate the desired **Geofence Configuration version** Click on **Deactivate** icon against the located version and click on **Deactivate** button. When a Geofence Configuration version is deactivated, it cannot be activated again. # Editing a Geofence Configuration version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/geofence-configurations/editing-a-geofence-configuration ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/242bbc33-a2e1-46fa-94df-ee482bf18716/6579a69a-dba9-4968-a422-ab82e5ca11c9/images/966dbfbc-8db9-44be-8436-3dce913994f1.gif) To edit a Geofence Configuration version in Bytebeam console, Click on the **Actions** tab Navigate to the **Geofence Configurations** tab by clicking on Inventory section Click on **Geofence Configurations** tab and locate the desired **Geofence Configuration version** Click on the **Edit** icon next to the desired version and use one of the following methods: 1. **Map-Based Edit**:\ Click on Map View tab, modify the polygon by clicking on the points and ensuring the polygon is completed by clicking inside the enclosed shape. Update the value for the Alert Threshold field (in seconds) and click **Update**. 2. **JSON Edit**:\ Click on JSON View tab, modify the JSON payload directly, ensuring that the polygon and location details are accurate. Enable the checkbox to ensure the polygon is complete. Update the value for the Alert Threshold field (in seconds) and click **Update**. The JSON edit method allows for precise modifications to geofence configurations by updating location details such as latitude and longitude. ## Important Info You can remove the last selected point by clicking on **Undo Last Point** on the map. Version name cannot be edited once defined. # Viewing a Geofence Configuration version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/geofence-configurations/viewing-a-geofence-configuration ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/242bbc33-a2e1-46fa-94df-ee482bf18716/6579a69a-dba9-4968-a422-ab82e5ca11c9/images/d7dcc63d-3535-466e-a59a-da7330c667d0.gif) To view a Geofence Configuration version in Bytebeam console, Click on the **Actions** tab Navigate to the **Geofence Configurations** tab by clicking on Inventory section Click on **Geofence Configurations** tab and locate the desired **Geofence Configuration version** Click on **Eye** icon against the located version to view it. You can edit the Geofence Configuration version by clicking on Edit button and [follow the instructions](/platform-guide/actions/inventory-management/geofence-configurations/editing-a-geofence-configuration) You can view even the deactivated Geofence Configuration versions. To view a deactivated Geofence Configuration version, Click on the **Actions** tab Navigate to the **Geofence Configurations** tab by clicking on Inventory section Click on **Geofence Configurations** tab and click on **Show Deactivated** toggle. Scroll to the desired **Geofence Configuration version** Click on **Eye** icon against the located deactivated version to view it. # Introduction to Inventory Management Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/introduction Inventory is a place where you store all the firmware files, json configuration and geofence configuration versions. ## What Are Firmware Files? Firmware files are incremental updates to the software that runs on a device. Each firmware file has an associated version number which is used to to track changes and improvements (e.g., v1.0.0, v1.1.0, v2.0.0). These numbers help to identify the version running on a device and determine if an upgrade is necessary. Keeping firmware up to date is essential for device security, functionality, and compatibility with other systems. ## ○ Without Device Components You can upload a new firmware file and update any of the devices with it by triggering update\_firmware action. You can edit the exisitng firmware versions to change the uncompressed file sizes. You can deactivate the firmware versions that are not needed. You can activate the deactivated firmware versions again. ## ⚙ With Device Components You can enable [Device Components](/platform-guide/device-components/device-components) section following the [instructions](/platform-guide/actions/inventory-management/firmware-files/with-device-components/enabling-device-components). You can upload a new firmware file and update any of the devices with it by triggering update\_firmware action. You can update the dependency of any firmware version for a component. You can view the existing dependencies of a firmware version for a component. You can create a new firmware bundle by choosing the components and their versions and update any of the devices with it by triggering update\_firmware action. You can edit the firmware bundle to change the uncompressed size of it. You can deactivate the firmware versions of components that are not needed. You can activate the deactivated firmware versions of components again. You can delete the firmware bundles that are not needed. ## What are JSON Configurations? When configuring IoT devices, JSON is often used to define and send settings like operational parameters, thresholds, user preferences, or communication protocols, ensuring devices function as expected. ## Uses of JSON Configurations JSON configurations make managing IoT devices highly efficient, letting users deploy updates, change settings, and keep devices in sync with minimal manual effort. For instance, updating a configuration like `{"device_id": "1234", "firmware_version": "v2.1"}` across all devices ensures they operate on the latest version without manual intervention. You can create a JSON Config and update any of the devices with it by triggering update\_config action. You can view the existing JSON configs. You can edit the existing JSON configs. You can deactivate the JSON configs that are not needed. ## What are Geofence Configurations? A geofence is a virtual boundary set around a specific geographic area, often defined by GPS coordinates and a geofence config contains the coordinate information like latitude, longitude etc. ## Uses of Geofence Configurations In IoT, geofencing is used for location-based automation. For instance, an IoT device can send alerts or adjust its behavior based on its location relative to a geofence, which is commonly used in asset tracking, security, and fleet management applications. You can create a Geofence Config and update any of the devices with it by triggering update\_geofence action. You can view the existing geofence configs. You can edit the existing geofence configs. You can deactivate the geofence configs that are not needed. # Creating a new JSON Configuration Version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/json-configurations/creating-a-new-json-configuration-version ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/88551336-e1c0-4c73-8a16-08b1c2611127/7a41e8a2-aa34-45d7-810b-4239516c8d41/images/f9d5ad07-edc9-448a-ac14-16645748a434.gif) To create a new JSON Configuration version in Bytebeam console, Click on the **Actions** tab Navigate to the **JSON Configurations** tab by clicking on Inventory section Click on **JSON Configurations** tab and click on **+ Create JSON Config** button Enter details like config version name, enter the config in the JSON format and click on **Create** button. This new JSON configuration can be applied to a device using the **update\_config** action type. # Deactivating a JSON Configuration version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/json-configurations/deactivating-a-json-configuration ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/88551336-e1c0-4c73-8a16-08b1c2611127/7a41e8a2-aa34-45d7-810b-4239516c8d41/images/3a61dbc6-b063-4be5-a7bc-ab3e9b28ed18.gif) To deactivate a JSON Configuration version in Bytebeam console, Click on the **Actions** tab Navigate to the **JSON Configurations** tab by clicking on Inventory section Click on **JSON Configurations** tab and locate the desired **JSON Configuration version** Click on **Deactivate** icon against the located version and click on **Deactivate** button. When a JSON Configuration version is deactivated, it cannot be activated again. # Editing a JSON Configuration version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/json-configurations/editing-a-json-configuration ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/88551336-e1c0-4c73-8a16-08b1c2611127/7a41e8a2-aa34-45d7-810b-4239516c8d41/images/80addfb7-bc54-4e2d-994b-cbe5f2b1a6fa.gif) To edit a JSON Configuration version in Bytebeam console, Click on the **Actions** tab Navigate to the **JSON Configurations** tab by clicking on Inventory section Click on **JSON Configurations** tab and locate the desired **JSON Configuration version** Click on **Edit** icon against the located version, replace the existing config with new config and click on **Update** button. Version name cannot be edited once defined. # Viewing a JSON Configuration version Source: https://bytebeam.io/docs/platform-guide/actions/inventory-management/json-configurations/viewing-a-json-configuration ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/88551336-e1c0-4c73-8a16-08b1c2611127/7a41e8a2-aa34-45d7-810b-4239516c8d41/images/5ec6fa3d-bc23-4184-991a-98c05ec0a4c2.gif) To view a JSON Configuration version in Bytebeam console, Click on the **Actions** tab Navigate to the **JSON Configurations** tab by clicking on Inventory section Click on **JSON Configurations** tab and locate the desired **JSON Configuration version** Click on **Eye** icon against the located version to view it. You can edit the JSON Configuration version by clicking on Edit button and [follow the instructions](/platform-guide/actions/inventory-management/json-configurations/editing-a-json-configuration) You can view even the deactivated JSON Configuration versions. To view a deactivated JSON Configuration version, Click on the **Actions** tab Navigate to the **JSON Configurations** tab by clicking on Inventory section Click on **JSON Configurations** tab and click on **Show Deactivated** toggle. Scroll to the desired **JSON Configuration version** Click on **Eye** icon against the located deactivated version to view it. # Activation and Deactivation Thresholds in Alerts Source: https://bytebeam.io/docs/platform-guide/alert-system/alert-rules/activation-and-deactivation-thresholds-in-alerts ## Overview Activation threshold and deactivation threshold are key parameters that define how and when an alert session is triggered or ended. These thresholds help prevent false positives by requiring conditions to persist over a specified period before initiating or ending an alert session. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/11ab834c-dbf9-4e67-ae66-64e087292952/2175255f-5fc9-4c47-8762-e6e8b50af599/images/a65b958c-2f57-4fdd-baac-aff6fb86d8a1.gif) ## Activation Threshold The activation threshold specifies the minimum duration that the condition must be met before triggering an alert. This ensures that the alert is not activated prematurely, allowing for a more stable and reliable alerting mechanism. For example, if you are monitoring a temperature sensor, the alert will only trigger if the temperature exceeds a predefined threshold for a specific duration (e.g., 10 minutes). If the temperature briefly exceeds the threshold but returns to normal before the activation threshold is reached, the alert will not be triggered. ## Deactivation Threshold The deactivation threshold specifies the minimum duration that the condition must remain met before ending the alert session. The alert will continue as long as the condition holds and will only stop after the condition persists for the specified deactivation threshold. For No Signal Alerts, there is no deactivation threshold because the alert is triggered when data stops arriving, and it ends as soon as the data stream resumes. For signal-based alerts, both activation and deactivation thresholds come into play. Even when the condition is met (e.g., a value exceeds a threshold), the alert will wait for the activation threshold to pass before starting the alert session. Similarly, for the alert to end, the condition must persist for the deactivation threshold to pass. **Example Use Case:** **Condition:** A device's battery level drops below 20%. **Activation Threshold:** 10 minutes. **Deactivation Threshold:** 5 minutes. The alert will only trigger after the battery level has been below 20% for 10 minutes. Once triggered, the alert will continue until the battery level goes above 20%, but only if it remains above 20% for at least 5 minutes. # No Signal Alerts Source: https://bytebeam.io/docs/platform-guide/alert-system/alert-rules/no-signal-alerts ## What Are No-Signal Alerts? No-signal alerts are alerts which get triggered when expected data stops arriving from a particular source or stream. Unlike traditional signal-based alerts, which are based on specific conditions like thresholds or values, no-signal alerts monitor the continuity of data. They are designed to notify you when a data stream that is expected to be active is not receiving any updates, indicating a potential issue with the data flow or source. ## Uses of No-Signal Alerts The key purpose of no-signal alerts is to monitor the availability and health of data streams in real-time. These alerts are critical in IoT systems, where continuous data flow is essential for monitoring device performance, user activity, or sensor readings. When a stream stops unexpectedly, it could signal a malfunction, network issue, or system failure, and immediate action may be required. ## Creating No Signal Alerts ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/11ab834c-dbf9-4e67-ae66-64e087292952/2175255f-5fc9-4c47-8762-e6e8b50af599/images/4bf6a2c8-8ce9-4a8c-988f-d52af51cc9d4.gif) To create a No Signal Alert in the Bytebeam console: Navigate to the **Alerts** tab and click on **Alert Rules**. Click on the **+ Alert Rule** button and select the **No Signal Alert** option. Choose the specific stream and set the duration after which an alert will trigger if no data is received. Then, specify additional parameters such as alert name, criticality, alert group, [activation threshold](/platform-guide/alert-system/alert-rules/activation-and-deactivation-thresholds-in-alerts), select the dashboard to link from the dropdown list and click **Submit**. Your new Alert Rule will appear in the table under the selected **Alert Group** on the **Alert Rules** tab. To activate the alert, click the Start icon next to it. You can stop any active alert by clicking the Stop icon next to it. Hover over the alert rule name to view its ID and name in the tooltip. Click on the name to copy both to the clipboard. ## Editing No Signal Alerts ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/11ab834c-dbf9-4e67-ae66-64e087292952/2175255f-5fc9-4c47-8762-e6e8b50af599/images/b890033e-2f93-4b2b-aeb3-a084c5ba3a73.gif) To edit an existing No Signal Alert in the Bytebeam console: Navigate to the **Alerts** tab and click on **Alert Rules**. Find the alert within any **Alert Groups** and click the **Edit** icon next to it. Update details such as alert name, alert group, [activation threshold](/platform-guide/alert-system/alert-rules/activation-and-deactivation-thresholds-in-alerts), criticality, change the linked dashboard using dropdown list or clear the linked dashboard and click **Submit**. If you change the alert group, check the corresponding alert group as the alert will be moved there. ## Deleting No Signal Alerts ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/11ab834c-dbf9-4e67-ae66-64e087292952/2175255f-5fc9-4c47-8762-e6e8b50af599/images/e1cc6e09-ec24-4987-b9db-32c435fd314e.gif) To delete an existing No Signal Alert in the Bytebeam console: Navigate to the **Alerts** tab and click on **Alert Rules**. Find the alert within any **Alert Groups** and click the **Delete** icon next to it. Enter the correct alert rule name and click **Submit** to delete the alert. Alert rules cannot be deleted while they are running. Deleting an alert rule will also delete all the associated notification rules. # Signal Based Alerts Source: https://bytebeam.io/docs/platform-guide/alert-system/alert-rules/signal-based-alerts ## What Are Signal-Based Alerts? Signal-based alerts are triggered when certain conditions or thresholds within your data stream are met. These alerts are typically defined by specific criteria, such as exceeding a value, crossing a threshold, or when the data satisfies a predefined condition. Signal-based alerts are highly customizable, allowing you to set precise conditions to monitor the health and performance of your systems. ## Uses of Signal-Based Alerts Signal-based alerts are used to monitor specific, actionable events in real-time. By setting thresholds or conditions, you can be notified immediately when important changes occur in your data. For instance, in an industrial setting, you may set a signal-based alert if the temperature of a machine exceeds a critical threshold, ensuring that operators can act quickly to prevent equipment failure. ## Creating Signal-Based Alerts ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/11ab834c-dbf9-4e67-ae66-64e087292952/2175255f-5fc9-4c47-8762-e6e8b50af599/images/f4347223-8b34-49bd-993b-0bdab9f9747f.gif) To create a Signal-Based Alert in the Bytebeam console: Navigate to the **Alerts** tab and click on **Alert Rules**. Click on the **+ Alert Rule** button and select the **Signal Based Alert** option. Select the stream you want to monitor and define the condition or threshold that will trigger the alert. Specify other parameters such as alert name, criticality, alert group, [activation and deactivation thresholds](/platform-guide/alert-system/alert-rules/activation-and-deactivation-thresholds-in-alerts), select the dashboard to link from dropdown list then click **Submit**. Your new Alert Rule will appear in the table under the selected **Alert Group** on the **Alert Rules** tab. To activate the alert, click the Start icon next to it. You can stop any active alert by clicking the Stop icon next to it. Hover over the alert rule name to view its ID and name in the tooltip. Click on the name to copy both to the clipboard. ## Editing Signal-Based Alerts ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/11ab834c-dbf9-4e67-ae66-64e087292952/2175255f-5fc9-4c47-8762-e6e8b50af599/images/7ed124b0-acc0-42bb-9530-284bcf49d947.gif) To edit an existing Signal-Based Alert in the Bytebeam console: Navigate to the **Alerts** tab and click on **Alert Rules**. Find the alert within any **Alert Groups** and click the **Edit** icon next to it. Change the alert conditions, such as the alert name, alert group, [activation and deactivation thresholds](/platform-guide/alert-system/alert-rules/activation-and-deactivation-thresholds-in-alerts), change the linked dashboard using dropdown list or clear the linked dashboard and click **Submit** to save your changes. If you change the alert group, the alert will be moved to the selected group, so be sure to check the corresponding alert group after updating. ## Deleting Signal-Based Alerts ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/11ab834c-dbf9-4e67-ae66-64e087292952/2175255f-5fc9-4c47-8762-e6e8b50af599/images/46e36b8d-7fed-47c8-9cc7-2a874468dfd1.gif) To delete an existing Signal-Based Alert in the Bytebeam console: Navigate to the **Alerts** tab and click on **Alert Rules**. Find the alert within any **Alert Groups** and click the **Delete** icon next to it. Enter the correct alert rule name and click **Submit** to delete the alert. Alert rules cannot be deleted while they are running. Deleting an alert rule will also delete all the associated notification rules. # Introduction to Alerts and Notifications Source: https://bytebeam.io/docs/platform-guide/alert-system/introduction-to-alerts-and-notifications Alerts and notifications play a pivotal role in the dynamic world of IoT by delivering timely insights and keeping users informed of key events, thresholds, and changes within the IoT ecosystem. You can set up alerts to trigger notifications for specific events or conditions, like a sudden temperature spike, a device going offline, or an unusual data pattern. You decide the conditions, and we’ll make sure you’re notified across your preferred channels—whether it’s email, SMS, messaging apps, or webhooks. This way, you’re always in the loop, able to respond quickly, and stay in control of your IoT environment. Alert rules let you define the conditions that matter most. You can create rules that trigger alerts based on specific signals, such as when data crosses a set threshold, or set up no-signal alerts to notify you if a data stream goes silent. With flexible options for customizing each rule, you’re in control of how and when you’re alerted, ensuring you’re always aware of important changes or potential issues in your system. ## Alert Groups Alert groups make it simple to organize and manage your alert rules, giving you a clear, streamlined view on the dashboard. By grouping related alerts, you can quickly see patterns, track issues by category, and focus on what’s most important—all from one place. This organized approach enhances visibility, helping you keep a pulse on critical events and respond swiftly to any changes in your IoT environment. You can add a group for the alert while creating the alert itslef. You can even edit the existing alert rule and change the alert group in that to move the alert rule into a specified alert group. The alert group disappears when all the alert rules written in it are either deleted or moved to some other alert group All the existing alert rules are grouped under Default alert group. Following are the two types of alerts that you can configure in Bytebeam console: No-signal alerts are designed to notify you when expected data goes missing. They activate when a data stream unexpectedly stops, signaling a potential issue with connectivity, device status, or data flow. Signal-based alerts keep you informed whenever key conditions are met in your data streams. These alerts are triggered by specific thresholds or parameters you set, such as temperature limits, sensor readings, or activity levels Notification rules let you decide how and where you want to be alerted when an event occurs. Once an alert is triggered, notification rules determine which channels—like email, Slack, SMS, WhatsApp, or webhooks—will deliver the message. ## Alert Templates The alert template for Email, Slack and Webhook channels looks like this: ```json JSON theme={null} {% for alert in alerts -%} {{ alert.name }} triggered at {{ alert.start_time }} on device {{ alert.device.id }} From ByteBeam {% if not loop.last %} {% endif %} {% endfor %} ``` With alert template, you can get the data of device like Metadata, Device Shadow, Status, Start Time, End Time, Last Action Details, Activation Values & Deactivation Values. You can customize the template for the above mentioned channels to see the corresponding data in the notification message. Following are the available notification channels in Bytebeam console: Integrate with Slack to bring alerts directly to your team’s workspace. With Slack notifications, your team can monitor updates, discuss incidents, and respond in real-time, all within a familiar communication tool. With email notifications, alerts are delivered directly to your inbox, ensuring you never miss a critical update. Configure email notifications to reach specific individuals or groups for prompt awareness and action. Webhook notifications allow you to seamlessly pass alerts to other applications or systems, enabling customized workflows. With webhooks, you can trigger specific actions or integrate alerts with third-party tools for advanced processing. SMS notifications offer instant, on-the-go alerts sent right to your phone. Ideal for time-sensitive updates, SMS ensures that you stay informed even when away from other devices. WhatsApp notifications provide convenient, real-time alerts within a widely-used messaging platform. Ideal for teams and individuals who rely on WhatsApp for communication, this channel ensures alerts reach you quickly, wherever you are. # Alert Templates Source: https://bytebeam.io/docs/platform-guide/alert-system/notification-system/alert-templates ## Overview The templates are available in the create/edit notification rule modal both for activation and deactivation conditions! By customizing these alert templates, you can easily tailor notifications to include the most relevant device, action, or other alert data. These templates help ensure you receive the exact information you need. These templates can be edited only for **Email**, **Slack**, and **Webhook** channels. For **SMS** and **WhatsApp**, the templates are standard and cannot be modified. Enable the Advanced toggle in the create/edit notification rule modal to access the following templates: Default alert activation template: ```json JSON theme={null} {% for alert in alerts -%} Alert {{ alert.name }} triggered at {{ alert.start_time }} on device {{ alert.device.id }} From ByteBeam {% if not loop.last %} {% endif %} {% endfor %} ``` Default alert deactivation template: ```json JSON theme={null} {% for alert in alerts -%} Alert {{ alert.name }} resolved at {{ alert.end_time }} on device {{ alert.device.id }} From ByteBeam {% if not loop.last %} {% endif %} {% endfor %} ``` These templates can be edited to include any relevant details you want in the received notification. Below is an example of the JSON structure that is available in `{alert}`: ```json JSON theme={null} { "id": "alert rule id", "name": "alert name", "notification_rule_id": "id of notification rule", "notification_rule_name": "name of notification rule", "session_id": "alert instance id", "start_time": "2024-11-12 16:11:54.000 IST", "end_time": "2024-11-12 16:12:08.000 IST", "device": { "id": 1, "metadata": { "registration_number": null, "city": "city1", "town": null, "IMEI": "12345678901234567890", "Country": "Australia", "location": "Melbourne", "Branch": "branch1", "owner": "Liam", "model": "v1", "vin": "vin5627456" }, "state": { "mode": "off", ".range_timestamp": "2024-11-12T10:42:46.815", "IMEI": 0.0, ".ICCID_timestamp": "1970-01-01T00:00:00", "ICCID": 0.0, ".testfive_timestamp": "1970-01-01T00:00:00", "break": null, ".break_timestamp": "1970-01-01T00:00:00", "timestamp": "2024-11-12T10:42:39.655", "range": 53101 }, "status": "active", "action": { "errors": "[]", "type": "update_config", "user_email": "tester@bytebeam.io", "action_id": 15298, "icon": "configure", "updated_at": "2024-11-06T09:08:24Z", "status": "Completed", "user_name": "Test User", "progress": 100, "created_at": "2024-11-06T09:08:12Z" } }, "activation_values": { "s1": 10, "percentage_of_can_ids": 100.0, "number_of_records": 1, "sequence": 45 }, "deactivation_values": {} } ``` * **state** in the JSON corresponds to the device\_shadow data. * **action** refers to the last action that was triggered on the device. For example, if you want the VIN number and range values from the device, you can use the following in the template: ``` {{alert.device.metadata.vin}} {{alert.device.state.range}} ``` # Email Notification Rules Source: https://bytebeam.io/docs/platform-guide/alert-system/notification-system/email-notification ## Overview Email notification rules allow you to send alerts to specified email addresses when conditions or thresholds in your data streams are met. These real-time updates keep you informed about critical changes or events, even when you're away from the platform. For example, an email notification can be triggered when a machine's temperature exceeds a critical threshold, alerting maintenance staff to take action. ## Creating Email Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/c2e66ed0-b98b-4527-9df8-2f8bd844b214.gif) To create an Email Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Click on the **+ Notification Rule** button and select the **Email** option.

Enter the notification rule name and the email addresses separated by commas where you want the notifications to be sent. Select the created alert rules, enable the **Notify on Deactivation toggle**, and specify the notification interval, which determines how frequently emails are sent. Configure the timezone and select the alert template. Finally, click **Submit**.

Enabling the **Notify on Deactivation** toggle allows you to receive notifications when an alert is deactivated, in addition to the existing activation emails.
Your new **Email Notification Rule** will be listed in the Notification Rules table. You can test the notification for its working by clicking on **Test Notification** button and check your inbox. You can customize the activation and deactivation templates to suit your needs by following [this guide](/platform-guide/alert-system/notification-system/alert-templates). Hover over the notification rule name to view its ID and name in the tooltip. Click on the name to copy both to the clipboard. ## Editing Email Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/f481d876-1a0d-4f76-b044-44c9c05c146f.gif) To edit an existing Email Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the email notification in the **Notification Rules** and click the **Edit** icon next to it. Add or remove the email addresses, change the template, timezone, interval, enable or disable toggle for notifying on deactivation and click **Submit** to save your changes. You can not change the alert rule for the same notification rule once the notification rule is created with it. ## Deleting Email Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/9b5b8bc7-7b76-4372-97da-a15f2b8a4930.gif) To delete an existing Email Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the email notification in the **Notification Rules** and click the **Delete** icon next to it. Enter the exact text that is shown on the modal and click **Submit** to delete the notification. # Slack Notification Rules Source: https://bytebeam.io/docs/platform-guide/alert-system/notification-system/slack-notification ## Overview Slack notification rules allow you to send alerts to a specific Slack channel when conditions or thresholds in your data streams are met. These real-time updates help your team stay informed about critical changes or events that require immediate attention, enabling quick responses and coordination. For example, a Slack notification can be triggered when a machine's temperature exceeds a critical threshold, allowing the team to act swiftly to prevent failure. ## Creating Slack Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/adc41db5-e98a-4685-b3ff-f5fc77d502e9.gif) To create a Slack Notification Rule in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Click on the **+ Notification Rule** button and select the **Slack** option.

Enter the notification rule name and the **Slack Channel ID** and **Bot Token** for the channel where you want to send the notifications. Then, select the created alert rules, enable the **Notify on Deactivation toggle** and notification interval (which defines how frequently the notification is sent) and specify the alert template along with Timezone. Finally, click **Submit**.

Enabling the **Notify on Deactivation** toggle allows you to receive notifications when an alert is deactivated, in addition to the existing activation emails.
Your new **Slack Notification Rule** will appear in the Notification Rules table. You can test the notification by clicking on Test Notification to verify that the alert is being sent to the correct Slack channel. You can customize the activation and deactivation templates to suit your needs by following [this guide](/platform-guide/alert-system/notification-system/alert-templates). Hover over the notification rule name to view its ID and name in the tooltip. Click on the name to copy both to the clipboard. ## Editing Slack Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/6068a3b5-745f-4720-b9bb-f80e35d76e8d.gif) To edit an existing Slack Notification Rule in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the Slack notification in the **Notification Rules** and click the **Edit** icon next to it. You can change the Slack Channel ID, Bot Token, modify the template, timezone, notification interval and enable or disable toggle for notifying on deactivation. After making the changes, click **Submit** to save your modifications. You can not change the alert rule for the same notification rule once the notification rule is created with it. ## Deleting Slack Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/3d1ce68f-f78a-496f-87f0-38214a3be952.gif) To delete an existing Slack Notification Rule in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the Slack notification in the **Notification Rules** and click the **Delete** icon next to it. Enter the exact text that is shown on the modal and click **Submit** to delete the notification. # SMS Notification Rules Source: https://bytebeam.io/docs/platform-guide/alert-system/notification-system/sms-notification ## Overview SMS notification rules allow you to send real-time alerts to a specified phone number(s) when conditions or thresholds in your data streams are met. Ideal for quick updates on mobile devices, SMS notifications ensure personnel can respond to critical events even when away from a computer. For example, an SMS notification can alert maintenance staff when a machine's temperature exceeds a critical threshold, enabling immediate action. ## Creating SMS Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/b725daf0-23b3-4f6d-967b-3809bdc8f7cc.gif) To create an SMS Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Click on the **+ Notification Rule** button and select the **SMS** option.

Enter the notification rule name and the phone number(s) (in format followed by the country code(Ex:+91,+1)) where you want the SMS notifications to be sent. You can also select the created alert rules, enable Notify on Deactivation toggle and enter notification interval that defines how frequently the SMS should be sent, and specify the timezone. Finally, click **Submit**.

Enabling the **Notify on Deactivation** toggle allows you to receive notifications when an alert is deactivated, in addition to the existing activation emails.
Your new **SMS Notification Rule** will appear in the Notification Rules table. Unlike other notification methods, the template for SMS notifications is fixed and cannot be customized. You can test the notification by clicking on Test Notification to ensure the SMS is being sent correctly to the specified phone number. Hover over the notification rule name to view its ID and name in the tooltip. Click on the name to copy both to the clipboard. ## Editing SMS Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/0270496a-d7dd-4b11-bbdd-001ed849043a.gif) To edit an existing SMS Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the SMS notification in the **Notification Rules** and click the **Edit** icon next to it. You can update the phone number(s), timezone, notification interval and enable or disable toggle for notifying on deactivation. Once you have made the necessary changes, click **Submit** to save your updates. You can not change the alert rule for the same notification rule once the notification rule is created with it. Note that the SMS template is fixed and cannot be modified. ## Deleting SMS Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/7cd4ce9a-d527-4da3-a841-9b44091379b4.gif) To delete an existing SMS Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the SMS notification in the **Notification Rules** and click the **Delete** icon next to it. Enter the exact text that is shown on the modal and click **Submit** to delete the notification. # Webhook Notification Rules Source: https://bytebeam.io/docs/platform-guide/alert-system/notification-system/webhook-notifications-for-other-channels ## Overview Webhook notification rules allow you to send real-time alerts to a specified URL when conditions or thresholds in your data streams are met. Used to integrate Bytebeam with external services, webhook notifications automate workflows by allowing you to customize the request body and headers with key-value pairs. For example, a webhook notification can send data to a monitoring service when a device goes offline, triggering automated recovery actions. ## Creating Webhook Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/09e9e321-979b-4bfc-8b1a-99ec644f1d6f.gif) To create a Webhook Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Click on the **+ Notification Rule** button and select the **Webhook** option.

Enter the notification rule name and the **Webhook URL** where the notification should be sent. Optionally, you can add **Header Keys** such as Content-Type and **Header Values** such as application/json. You can also select the created alert rules, enable Notify on Deactivation toggle and enter notification interval, define how frequently the webhook should be sent, and specify the alert template along with timezone. Finally, click **Submit**.

Enabling the **Notify on Deactivation** toggle allows you to receive notifications when an alert is deactivated, in addition to the existing activation emails.
Your new **Webhook Notification Rule** will appear in the Notification Rules table. You can test the notification by clicking on Test Notification to ensure the webhook is being triggered correctly and received at the specified URL. You can customize the activation and deactivation templates to suit your needs by following [this guide](/platform-guide/alert-system/notification-system/alert-templates). Hover over the notification rule name to view its ID and name in the tooltip. Click on the name to copy both to the clipboard. ## Editing Webhook Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/e79ffd1d-1cec-4158-9d11-853442abeec1.gif) To edit an existing Webhook Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the Webhook notification in the **Notification Rules** and click the **Edit** icon next to it. You can change the Webhook URL, update or add new Header Keys and Header Values, modify the template, timezone, notification interval and enable or disable toggle for notifying on deactivation. After making the changes, click **Submit** to save your updates. You can not change the alert rule for the same notification rule once the notification rule is created with it. ## Deleting Webhook Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/58cafff5-0261-4d50-a305-40e1e6afb1d1.gif) To delete an existing Webhook Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the Webhook notification in the **Notification Rules** and click the **Delete** icon next to it. Enter the exact text that is shown on the modal and click **Submit** to delete the notification. # Whatsapp Notification Rules Source: https://bytebeam.io/docs/platform-guide/alert-system/notification-system/whatsapp-notification ## Overview WhatsApp notification rules allow you to send real-time alerts to a specified phone number(s) via WhatsApp when certain conditions or thresholds in your data streams are met. Ideal for urgent messages, WhatsApp notifications ensure important updates reach recipients directly in their inbox. This method is perfect for delivering timely alerts and ensuring swift action when needed. ## Creating WhatsApp Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/7fe5e6a8-0ea2-47a8-9da6-03e484f3a54d.gif) To create a WhatsApp Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Click on the **+ Notification Rule** button and select the **WhatsApp** option.

Enter the notification rule name and the phone number(s) (in format followed by the country code(Ex:+91,+1)) where you want the WhatsApp notifications to be sent. Provide the **Activation Template ID** that corresponds to the pre-approved WhatsApp template. You can also select the created alert rules, enable Notify on Deactivation toggle and notification interval, define how frequently the WhatsApp message should be sent, and specify the timezone. Finally, click **Submit**.

Enabling the **Notify on Deactivation** toggle allows you to receive notifications when an alert is deactivated, in addition to the existing activation emails.
Your new **WhatsApp Notification Rule** will appear in the Notification Rules table. Unlike other notification methods, the template for Whatsapp notifications is fixed and cannot be customized. You can test the notification by clicking on Test Notification to ensure the WhatsApp message is sent correctly to the specified phone number. Hover over the notification rule name to view its ID and name in the tooltip. Click on the name to copy both to the clipboard. ## Editing WhatsApp Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/e3cbd524-c737-4a86-9aaa-968ec994e1f8.gif) To edit an existing WhatsApp Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the WhatsApp notification in the **Notification Rules** and click the **Edit** icon next to it. You can update the phone number(s), change the notification interval, modify the activation template ID, update the timeone and enable or disable toggle for notifying on deactivation. Once you have made the necessary changes, click **Submit** to save your updates. You can not change the alert rule for the same notification rule once the notification rule is created with it. Note that the WhatsApp notification template cannot be customized. You must use the pre-approved activation template ID provided during setup. ## Deleting WhatsApp Notification Rule ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0b6e26dd-0757-429f-9981-f5ebad137891/7e09c5c1-1ebf-435b-9142-6ee044258c63/images/e8769db4-4845-4e27-a4b6-8c95d98f6ce2.gif) To delete an existing WhatsApp Notification in the Bytebeam console: Navigate to the **Alerts** tab and click on **Notification Rules**. Find the WhatsApp notification in the **Notification Rules** and click the **Delete** icon next to it. Enter the exact text that is shown on the modal and click **Submit** to delete the notification. # Create an API Key Source: https://bytebeam.io/docs/platform-guide/api-keys/create-an-api-key API keys enable you to connect our platform directly to your systems, streamlining data flow and automation. You can generate multiple API keys per project, each associated with a specific role. The assigned role defines the actions and permissions of each API key, allowing you to manage access securely and with precision. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a9501e10-33d1-4c78-a572-ef1d5a0ae159/e6a8f1ae-babd-4a51-93e4-c400dec6e62a/images/c02d53e2-c54e-4502-9a19-dc0ae18a4077.gif) To create an API key in Bytebeam console, Navigate to **Settings** by clicking your username at the top right. Navigate to the **API Keys** Tab and click on the **Create API Key** button Enter a name, select a role from the dropdown, and click **Submit** in the modal to create the API Key. ## Important Notes To view, copy, or edit the API Key, simply click on the respective icons located next to the API Key. You can only change the name of the API Key while editing it # Deactivate an API Key Source: https://bytebeam.io/docs/platform-guide/api-keys/deactivating-an-api-key ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a9501e10-33d1-4c78-a572-ef1d5a0ae159/e6a8f1ae-babd-4a51-93e4-c400dec6e62a/images/c9a076fb-3e2c-4445-9307-3b81937e4eeb.gif) To deactivate an API Key in Bytebeam Console, Navigate to **Settings** by clicking your username at the top right. Navigate to the **API Keys** Tab and click on the delete icon against the desired API Key Type "Delete Key" in the field, and Click on **Confirm** to delete the API Key. As this action is irreversible, please be certain that you have chosen the right key to deactivate. # Introduction to API Keys Source: https://bytebeam.io/docs/platform-guide/api-keys/introduction-to-api-keys API keys enable you to connect our platform directly to your systems, streamlining data flow and automation. You can generate multiple API keys per project, each associated with a specific role. The assigned role defines the actions and permissions of each API key, allowing you to manage access securely and with precision. You can create an API Key and use it You can delete the API Keys that are no longer needed. # Cloning a Dashboard Source: https://bytebeam.io/docs/platform-guide/dashboards/cloning-a-dashboard ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/049b24b7-77cf-4c22-a7ee-23ae98e570eb/567cf113-3cab-4799-810e-c7b45dbe90be/images/0bfda0ac-a64b-4ea6-baf7-d9964df9fc2b.gif) To clone a dashboard in the Bytebeam console, follow these steps: Go to the **Dashboards** tab in the Bytebeam console to view the list of available dashboards. Locate the dashboard you wish to clone and click on the **Clone icon** next to it.\\ * A modal will appear with the **Name** field automatically pre-filled as `Copy of + "existing dashboard name"`. * Modify the name if needed and adjust other settings if required.\\ * Click on **Submit** to clone the dashboard. * If the cloned dashboard is a **Device Dashboard**, you will be redirected to the **Devices List page**. * If the cloned dashboard is a **Fleet Dashboard**, you will directly enter the newly cloned dashboard. The cloned dashboard will retain all panels and configurations from the original dashboard. Make sure to rename and adjust as necessary for your project requirements. # Comparing Dashboards Source: https://bytebeam.io/docs/platform-guide/dashboards/compare-dashboard ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/049b24b7-77cf-4c22-a7ee-23ae98e570eb/567cf113-3cab-4799-810e-c7b45dbe90be/images/8fcd1fb7-2a5b-43dd-8ce4-e92c641a20a9.gif) The Compare Dashboard feature allows users to analyze and compare data across devices or different time ranges. Follow these steps to use this feature: Go to the **Dashboards** tab in the Bytebeam console and open the dashboard you want to compare. Inside the dashboard, click on the **Compare** button located in the dashboard toolbar. This will open the comparison view in a new tab. * If the dashboard is a **Device Dashboard**, the comparison view will display two partitioned windows side by side. * You can select one device on the **left side** and another device on the **right side** to compare dashboards for different devices simultaneously. * Alternatively, you can select the **same device** on both sides and modify the time range independently on each side to analyze data for the same device over different time periods. * Clicking on dashboard links within the comparison view will open the linked dashboards in a new tab, retaining the comparison mode. * If the dashboard is a **Fleet Dashboard**, the comparison view will directly open the dashboard in two partitioned windows in a new tab. * If the original fleet dashboard has metadata filters, you can select different devices for each partition to compare data across devices. * You can also keep the same devices as in original dashboard for both partitions and adjust the time ranges independently to compare data for the same device over different periods. * In the **Device Dashboard**, the comparison feature is most useful for analyzing multiple devices or time ranges for a single device. * In the **Fleet Dashboard**, ensure that metadata filters are properly configured to allow seamless device selection for comparisons. # Creating a Dashboard Source: https://bytebeam.io/docs/platform-guide/dashboards/creating-a-dashboard Steps to create a visually appealing dashboard in Bytebeam console ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/049b24b7-77cf-4c22-a7ee-23ae98e570eb/567cf113-3cab-4799-810e-c7b45dbe90be/images/f4569828-736d-4314-8cd1-335aeebd5e93.gif) To create a Dashboard in Bytebeam, follow the steps below. The process applies to both **Device Dashboards** and **Fleet Dashboards**, with some differences in metadata and available options. ## Steps to Create a Dashboard Go to the **Dashboards** tab and click on the **Create Dashboard** button.\\ Provide the necessary information in the following sections: * **General**: * **Title**: A name for the dashboard. * **Dashboard Type**: Choose between **Fleet Dashboard** and **Device Dashboard**.\ To switch between these types, use the dropdown for the **Dashboard Type** field. * **Device Metadata**: * **Allow filtering by**: Select from a list of device metadata options to enable filtering in the dashboard. For Device Dashboard: Displays only the devices that meet the selected filter conditions in the Devices List page. For Fleet Dashboard: Shows data specifically for devices that satisfy the filter conditions, applying these filters to panels as they are added. * **Show Metadata** (Available only for Device Dashboards): * **Allow Viewing**: Show the selected metadata keys and corresponding values for selected device in the dashboard. * **Time Range**: * **Default Time Range**: Sets the default recency for the data displayed on the dashboard. * Optionally, enable or disable the ability for users to change the time range. * **Refresh Interval**: * Set an interval (in seconds) to refresh the dashboard data automatically. * **Dashboard Links**: * Select additional dashboards from the dropdown list to open in a new tab while remaining on the current dashboard. * The selected dashboards will be displayed within the current dashboard, allowing you to open the corresponding dashboard in a new tab by clicking on them. * **Access Control**: * **Owners**: Define who can modify the dashboard. * **Viewers**: Define who can view the dashboard.\ Refer to [Sharing a Dashboard](/platform-guide/dashboards/sharing-a-dashboard) for more details. Once the dashboard is created: * For **Device Dashboards**: You will be redirected to the device list page.\\ * For **Fleet Dashboards**: You will be redirected directly to the empty dashboard. Once on the dashboard page, click the **+ Panel** button to start adding panels to your dashboard.\\ Learn about [Panels](/platform-guide/dashboards/panels/introduction-to-panels) and how to add different panels to a dashboard. ## Important Info You can always switch between dashboard types during the creation process, but note the differences in available features and metadata options. Dashboard Links will display device dashboards when a Device Dashboard is selected and fleet dashboards when a Fleet Dashboard is selected. # Using Custom Time Range Source: https://bytebeam.io/docs/platform-guide/dashboards/custom-time-range ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/049b24b7-77cf-4c22-a7ee-23ae98e570eb/567cf113-3cab-4799-810e-c7b45dbe90be/images/f029bca0-3891-46b4-9909-c2b3fd207f9f.gif) The **Custom Time Range** feature allows you to set specific time ranges for analyzing dashboard data. You can choose exact dates or relative time options and even save custom ranges with labels for future use. This feature ensures flexibility in viewing data and quick access to frequently used time ranges. ## Steps to Use Custom Time Range Go to the **Dashboards** tab in the Bytebeam console and open the dashboard where you want to use the custom time range feature. Inside the dashboard, click on the **Time Range dropdown** located in the toolbar, and select the **Custom Time Range** option.\\ * In the **Custom Time Range** modal: * Use the **From** and **To** date pickers to select specific dates, months, and years for the time range. * Enable the toggle to save the custom time range and enter a **Label** name to save the custom time range for future use. * Alternatively, use the **From** and **To** dropdowns to select relative time options like: * **15 minutes ago** * **30 minutes ago** * **45 minutes ago**, etc. * For example: * Set **From** to "45 minutes ago." * Set **To** to "30 minutes ago." * Enable the toggle to save the custom time range and enter a **Label** name for future reference. * To delete an existing label that is no longer needed: * Click on the same toggle which is used to save the custom time range that will show the previously added labels * Select the label you wish to delete, click on the cross icon and confirm the action. Once you’ve configured the custom time range: * Click on the **Apply** button in the modal. * The dashboard will refresh to display data for the selected time range. Custom time ranges can be saved with meaningful labels to enhance usability. Users can choose specific dates or relative time ranges to suit their data analysis needs. # Dashboard History Source: https://bytebeam.io/docs/platform-guide/dashboards/dashboard-history ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/049b24b7-77cf-4c22-a7ee-23ae98e570eb/567cf113-3cab-4799-810e-c7b45dbe90be/images/351abcc6-a90e-4547-9219-80f7c4feb8ff.gif) You can use the **Dashboard History** feature which is designed to track all changes made to a dashboard from its creation. With this feature, you can easily restore any previous version of a dashboard, ensuring flexibility and control over your configurations. You can rename versions for easy identification and even undo a previous rollback if needed. On the right side of the Dashboard History view, you’ll find the JSON representation of each version, providing a detailed look at every modification. ## Steps to Use Dashboard History Go to the **Dashboards** tab in the Bytebeam console and open the dashboard whose history you want to view. Inside the dashboard, click on the **Dashboard History** option located in the toolbar.\\ * The Dashboard History view will open, displaying: * A list of all saved versions of the dashboard with the latest version at the top. * Each version includes details like the date, time, and user who made the changes. * The **right panel** shows the JSON representation of the selected version, providing detailed insights into the dashboard's configuration.\\ * To rename a specific version for easier identification: * Click on the **Rename** button next to the version name. * Enter the new name and save it.\\ * To revert the dashboard to a previous version: * Click on the **Restore** button for the desired version. * Confirm the restoration action in the popup. * You can undo a rollback if needed by restoring the most recent version. * Use the JSON representation on the right side to analyze specific changes made in each version. * This view provides a detailed breakdown of modifications, ensuring transparency and accuracy.\\ The Dashboard History feature ensures you have full control over your configurations and provides flexibility to revert, analyze, or rename versions as required. # Deleting a Dashboard Source: https://bytebeam.io/docs/platform-guide/dashboards/deleting-a-dashboard ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/049b24b7-77cf-4c22-a7ee-23ae98e570eb/567cf113-3cab-4799-810e-c7b45dbe90be/images/882d9a7c-30e0-49a7-9204-ba74596cc273.gif) To delete a dashboard in the Bytebeam console, follow these steps carefully: Go to the **Dashboards** tab in the Bytebeam console to view the list of available dashboards. Locate the dashboard you wish to delete and click on the **Trash 🗑 icon** next to it.\\ * A confirmation modal will appear. * Enter the **exact name** of the dashboard you wish to delete in the input field to confirm.\\ Click on the **Confirm** button to delete the dashboard. This action cannot be undone. Deleting a dashboard is an **irreversible action**. Ensure that you have selected the correct dashboard before proceeding. # Editing a Dashboard Source: https://bytebeam.io/docs/platform-guide/dashboards/editing-a-dashboard ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/049b24b7-77cf-4c22-a7ee-23ae98e570eb/567cf113-3cab-4799-810e-c7b45dbe90be/images/9912064a-66de-4dc9-84b4-16d07441e804.gif) To edit a dashboard configuration in the Bytebeam console, follow these steps: Go to the **Dashboards** tab in the Bytebeam console to view the list of available dashboards. Locate the dashboard you wish to edit and click on the **Edit icon** next to it.\\ * An edit modal will appear where you can update various settings of the dashboard. * Options available for editing include: * **Name**: Update the title of the dashboard. * **Metadata Filters**: Add or modify metadata filters. * **Time Range**: Update the default time range or enable/disable time range selection. * **Refresh Interval**: Change the refresh frequency for the data. * **Dashboard Links**: Add the existing dashboards from the dropdown list. * **Access Control**: Update owners and viewers for the dashboard. * **Hide From Admins**: Enable the toggle to hide the existing dashboard even from other admins. * After making the required changes, click on **Save** to apply the updates. ## Important Info You cannot change the dashboard in the **Edit Dashboard** modal. Editing a dashboard allows you to customize its settings without affecting the data or panels within the dashboard. Ensure to save your changes to apply them successfully. **Hide From Admins** option will be visible only in the Edit or Clone Dashboard modals. # Editing a Dashboard within the Dashboard Source: https://bytebeam.io/docs/platform-guide/dashboards/editing-a-dashboard-within-the-dashboard ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/049b24b7-77cf-4c22-a7ee-23ae98e570eb/567cf113-3cab-4799-810e-c7b45dbe90be/images/0bcb84c7-081c-4178-88ee-a03a52cf954a.gif) To edit a dashboard while staying within the dashboard in the Bytebeam console, follow these steps: Go to the **Dashboards** tab in the Bytebeam console to view the list of available dashboards. * Locate the dashboard you wish to edit. * Click on the dashboard name to open it. * If it's a **Device Dashboard**, it will take you to the devices list page. * If it's a **Fleet Dashboard**, it will directly open the dashboard. * Once inside the dashboard, click on the **Settings icon** present in the dashboard toolbar.\\ * A configuration modal will appear where you can update the settings of the dashboard. * Options available for editing include: * **Name**: Update the title of the dashboard. * **Metadata Filters**: Add or modify metadata filters. * **Time Range**: Update the default time range or enable/disable time range selection. * **Refresh Interval**: Change the refresh frequency for the data. * **Dashboard Links**: Add the existing dashboards from the dropdown list. * **Access Control**: Update owners and viewers for the dashboard. * **Hide From Admins**: Enable the toggle to hide the existing dashboard even from other admins. * After making the required changes, click **Save** in the modal to apply the updates directly to the dashboard. * These changes will reflect in the dashboard immediately. * To ensure that these edited configurations are saved for future use, click on the **Save** button on the dashboard page. * Without saving the dashboard, the configuration changes will not persist after you leave the page. ## Important Info You cannot change the dashboard in the **Edit Dashboard** modal. Ensure you click on the **Save** button inside the Dashboard after making changes, or your edits will not be retained for future sessions. **Hide From Admins** option will be visible only in the Edit or Clone Dashboard modals. # Introduction to Dashboards Source: https://bytebeam.io/docs/platform-guide/dashboards/introduction-to-dashboards ## Overview Dashboards are dynamic and interactive visual displays of real-time or historical data. They consist of panels such as line charts, last value displays, time series graphs, and even device locators, allowing users to monitor and analyze device performance and behavior effectively. You can create dashboards by selecting [panels](/platform-guide/dashboards/panels/introduction-to-panels) that stream live data from the devices or process historical data stored in the system. ## Use Cases of Dashboards Following are some of the use cases for Dashboards: 1. Real-Time Monitoring for Quick Decision-Making Example: A factory manager can use a line chart panel to monitor equipment temperatures in real time. If the temperature exceeds the safe limit, they can act immediately to prevent downtime or accidents. 2. Comprehensive Insights with Historical Data Example: A timeseries panel helps visualize the energy consumption patterns of a smart building over the last week, enabling energy-saving decisions based on peak usage hours. 3. Locate and Manage Devices Efficiently Example: A delivery company can use the locate devices panel to track the real-time location of GPS-enabled vehicles, ensuring timely deliveries and efficient routing. ## Types of Dashboards to Create **1. Device Dashboards** Device dashboards are tailored to monitor and analyze data from individual devices. These dashboards provide a detailed view of a single device's performance, status, and metrics, enabling users to focus on its specific behavior. **Use Case:** A user can create a device dashboard for a smart thermostat to track temperature readings, energy usage, and connectivity status in real-time. **Panels:** These dashboards often include panels like line charts, last value, time series tables etc. for precise device-level insights. **2. Fleet Dashboards** Fleet dashboards are designed for managing and monitoring a group of devices collectively. They provide a holistic view of the performance and status of multiple devices, enabling efficient operations and comparison. **Use Case:** A fleet dashboard for a logistics company can track GPS locations, fuel consumption, and delivery statuses for all vehicles in the fleet. **Panels:** Fleet dashboards typically feature locate devices, track devices, device pulse panel etc. to monitor and manage large-scale deployments. ## Dashboard Operations You can create a device or fleet dashboard and add the panels to visualize the data. You can edit the existing dashboard and change configurations like timerange, refresh interval, and ownership of dashboards. You can edit the existing dashboard without leaving the dashboard and change configurations like timerange, refresh interval, and ownership of dashboards. You can clone an existing dashboard and modify it by adding or removing configurations. You can delete the existing dashboards that are no longer useful. You can share the existing dashboards by simply assigning their corresponding roles to the dashboard. You can compare the same dashboard for 2 different devices or with different configurations. You can check the dashboard history and rollback to any of the previous versions easily. You can set a custom time range and assign a label to it for future use. # Aggregate Value Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/aggregate-value The Aggregate Value Panel is designed to display aggregated metrics from selected streams, offering a summary of data through operations such as sum, average, maximum, and minimum. This panel is ideal for visualizing the overall performance or health of systems based on aggregated values, such as total usage, average temperature, or other key metrics that require aggregation across time or categories. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/82e0f96e-b5b9-4539-a75f-2850d6826d6c/11c16c61-c4b0-470d-b4f6-e00725ce5d83/images/56556f7a-d068-4582-890d-3c6302c766a4.gif) ## Add Aggregate Value Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Aggregate Value Panel** from the list of available panels. You will be presented with options to configure: * **Title**: Add a meaningful title for the panel. * **Stream**: Select the stream or data source to pull values from. * **Field**: Select the field or column to apply aggregation to. * **Aggregator**: Choose the aggregation type (**max, min, avg, sum, count, count distinct**). * **Second Aggregator**: Choose the second aggregation type * **Enable Groupby on Second Aggregator**: Enable the toggle for grouping on second aggregator * **Prefix and Suffix**: Optionally, add prefixes and suffixes to enhance the display. On selecting an aggregator (e.g., min) and a second aggregator (e.g., max), it creates combinations like max(min). With the Group by Second Aggregator toggle enabled, the grouping operation is applied to the secondary aggregator. Both second aggregator and the toggle to group by on second aggregator are available exclusively for fleet dashboards Switch to the **View** tab to adjust the appearance of the panel: * **Enable Units**: Show appropriate units for the aggregate value. * **Round Off Values**: Set the number of decimal places to display. * **Auto Resize Text**: Automatically adjust font size for better readability. After completing the configurations and customizations, click **Submit** to add the Aggregate Panel to the dashboard. # Alerts Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/alerts The Alerts panel enables visualization and configuration of alerts, allowing users to monitor alert groups, rules, and associated data during alert windows. ## Add Alerts Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Alerts Panel** from the list of available panels.\\ All created alerts will automatically be displayed in the preview as soon as you select the Alerts Panel.\\ * By default, the preview will show the alerts in **list view**. * Enabling the **Tabbed View** toggle will change the display from a list view to a tabbed view in the preview.\\ * Initially, the preview shows all alerts. * Enable the **Group by Alert Groups** toggle to switch the preview to show alert groups instead of individual alert rules. * You can also select specific alert groups or alert rules to display only the desired configurations in the panel.\\ * You can add aggregates to visualize data during the time window when an alert was triggered. * This helps in correlating data with the triggered alerts for deeper insights.\\ * Preview all the configurations to ensure that the panel displays alerts, alert groups, or rules as required. * Once satisfied, click **Submit** to add the Alerts Panel to the dashboard.\ The panel will now display real-time or historical alerts based on your configurations. When you click on the dashboard links in the alerts panel, you will be redirected to the corresponding dashboard with the time range and device ID automatically applied. # Bar Chart Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/bar-chart The Bar Chart panel visualization enables you to represent categorical data graphically, particularly when you want to visualize data from a specific field across all devices in a fleet dashboard. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0da98d18-fcec-4c69-81b9-26c8b6d0e7ee/74c4ebcd-727f-48d5-8703-01e8212b0c43/images/2bea5e39-191d-4d48-867e-d302042b4a35.gif) ## Add Bar Chart Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Bar Chart Panel** from the list of available panels. In the **General** tab: * **Title**: Add a title for the panel (optional). * **Stream**: Select the data stream to use. * **Group By Field**: Specify the column by which the data should be grouped (e.g., device ID or firmware version). * **Aggregated Field**: Select the column you want to visualize (e.g., range, timestamp). * **Select Aggregator**: Choose the aggregation method (e.g., average, sum, count). For instance, you can group data by firmware version to visualize the average range value across different firmware versions. Switch to the **View** tab to adjust the graph settings: * **Custom Y-Axis Range**: Define a minimum and maximum range for the Y-axis to focus on specific data ranges. Once all configurations and customizations are complete, click **Submit** to add the Bar Chart Panel to the dashboard.\ The bar chart will now display the data grouped and aggregated based on the configured settings. # Device Pulse Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/device-pulse The Device Pulse panel helps monitor the health of devices by visualizing the last heartbeat of each device. This panel is available only for fleet dashboards. ## Add Device Pulse Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Device Pulse Panel** from the list of available panels.\\ In the **General** tab: * **Stream**: Select the stream, e.g., `device_shadow`. * **Thresholds**: Add thresholds (in seconds) to categorize device pulses. By default, the following thresholds are configured: * Pulse less than 10 seconds * Pulse less than a minute * Pulse less than 10 minutes * Pulse less than an hour * Pulse less than a day * Pulse more than a day These thresholds can be customized to meet your monitoring needs.\\ * **Clicking on a Device Count**: When you click on any of the device counts in a pulse category, a modal will open displaying the list of devices along with their metadata. * **Device ID or VIN**: Clicking on any Device ID or VIN in the modal will redirect you to the corresponding device dashboard for detailed insights. * **Download Metadata**: The modal also has an option to download metadata for the listed devices by clicking on the **Download Metadata** button.\\ You can click on any pulse category in the panel to navigate to the device dashboard of the corresponding device for monitoring and troubleshooting.\\ Once all configurations are complete, click **Submit** to add the Device Pulse Panel to the dashboard.\ The panel will now visualize device health categorized by the configured thresholds, with interactive options to explore devices in detail. # Gauge Chart Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/gauge-chart The Gauge Chart Panel is designed to display a single data point in the form of a gauge, providing an easy-to-read visual representation of the data's current value relative to defined thresholds. This panel is ideal for visualizing metrics where you need to track performance within a specific range, such as system health, resource utilization, or other indicators that can be represented by a progress bar or dial. You can set minimum and maximum threshold values, and the gauge will dynamically adjust based on the value of the selected metric, giving you a clear indication of whether the metric is within the desired range. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/82e0f96e-b5b9-4539-a75f-2850d6826d6c/11c16c61-c4b0-470d-b4f6-e00725ce5d83/images/bbd5d27e-ae47-4747-8db6-64c6fd1fb4a6.gif) ## Add Gauge Chart Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Gauge Chart Panel** from the list of available panels. You will be presented with options to configure: * **Title**: Add a title for the chart. * **Min Threshold**: Set the minimum value for the gauge. * **Max Threshold**: Set the maximum value for the gauge. * **Stream**: Select the data stream for visualization. * **Field**: Select the specific field or column to display. Switch to the **View** tab to adjust the appearance of the gauge chart: * **Percentage Value**: Enable this to see the percentage value instead of the actual value for the chosen column. * **Start and End Colors**: Customize the start (low value) and end (high value) colors for the gauge. * **Divisions**: Adjust the number of divisions in the gauge for a finer or coarser scale. * **Show Units**: Optionally display units for the value being measured. After completing the configurations and customizations, click **Submit** to add the Gauge Chart Panel to the dashboard.\ The gauge chart will now appear on the left side of the screen. # Histogram Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/histogram-panel The Histogram panel calculates the distribution of values and visualizes them as a bar chart. The Y-axis represents the count of values in each bracket (bin), while the X-axis shows the value range. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0da98d18-fcec-4c69-81b9-26c8b6d0e7ee/74c4ebcd-727f-48d5-8703-01e8212b0c43/images/a24266dc-44fd-4dc0-bdb5-9fa48f8a54a7.gif) ## Add Histogram Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Histogram Panel** from the list of available panels. In the **General** tab: * **Title**: Add a title for the panel (optional). * **Stream**: Select the data stream to use. * **Field**: Choose the column whose data will be used to create the histogram. * **Number of Bins**: Adjust the slider to set the number of bins (brackets) for classifying the data. On hovering over a bar, the range of values within that bin will be displayed. Once all configurations are complete, click **Submit** to add the Histogram Panel to the dashboard.\ The histogram will now display the data distribution in bar chart format, allowing for easy visualization and analysis of the data. # Iframe Panel Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/iframe The Iframe Panel allows you to embed external content such as dashboards, charts, or other resources directly into your Bytebeam dashboard. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0da98d18-fcec-4c69-81b9-26c8b6d0e7ee/74c4ebcd-727f-48d5-8703-01e8212b0c43/images/b7c0d2a7-a7ef-4119-a8a5-2032a99a0503.gif) ## Add Iframe Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Iframe Panel** from the list of available panels. * Enter the URL of the content you want to embed in the Iframe panel. * Ensure the URL is accessible and formatted correctly. * Optionally, preview the embedded content to verify it displays as expected. * Preview the Iframe Panel to confirm that the content is embedded correctly. * Once satisfied, click **Submit** to add the Iframe Panel to the dashboard.\ The panel will now display the embedded content within the dashboard layout. The embedded content should allow iframe embedding; some websites may block embedding due to security policies. # Panels in Dashboards Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/introduction-to-panels ## Overview Panels are the building blocks of dashboards, allowing users to visualize specific data streams in various formats, such as line charts, last value displays, time series graphs, or device locators. Each panel is customizable and represents a focused view of a particular metric, enabling users to track real-time or historical data effectively. ## Panel Operations ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/82e0f96e-b5b9-4539-a75f-2850d6826d6c/11c16c61-c4b0-470d-b4f6-e00725ce5d83/images/ef1ffabb-dee3-4907-aab4-ae45b13c8d5f.gif) Following operations can be performed on panels: **Adding a Panel:** Adds the selected panel from the list of panels with the chosen details like stream, column etc. **How to use:** Click the **+ Panel** option, choose a panel from the list, fill in the required details, and submit. **Viewing a Panel in Full Page:** Opens the selected panel in a full page, providing a focused view of its data and functionality. **How to use:** Hover over the panel and click the **View Full Page** icon. **Viewing a Panel in Full Screen:** Expands the panel to fill the entire screen, ideal for presentations or detailed analysis without distractions. **How to use:** Hover over the panel and click the **View Full Screen** icon. **Editing a Panel:** Allows customization of panel settings such as changing the stream, changing the view settings etc. to meet specific requirements. **How to use:** Hover over the panel and click the **Edit** icon. **Cloning a Panel:** Creates a duplicate of the panel, enabling users to reuse its configuration in the same dashboard. **How to use:** Hover over the panel and click the **Clone** icon. **Deleting a Panel:** Removes the panel from the dashboard when it is no longer needed, helping to keep the layout organized. **How to use:** Hover over the panel and click the **Delete** icon. **Downloading Panel Data:** Exports the data displayed in the panel for offline analysis or sharing in formats such as CSV or XLSX. **How to use:** Hover over the panel and click the **Download** icon. The download option is available only for specific panels such as **Line Chart**, **Timeseries Table** and **Logs** panels. ## Panels Following are the available panels in Bytebeam dashboard: Visualize trends over time with line charts to monitor metrics like sensor readings, performance, or usage statistics for your devices or fleet. Display the most recent data point from a selected field to track real-time updates for key metrics. Use gauge charts to represent single data points visually, such as battery levels or system health, with customizable thresholds. Monitor the state changes of devices over time with a clear visual timeline, ideal for tracking operational modes or device behavior. Indicate active or inactive states for devices or components with LED-style panels for quick visual feedback. Display aggregated values like sum, average, or count to summarize key metrics across devices or data streams. Pinpoint the location of devices on a map and navigate directly to their dashboards for more details. Track the movement of devices over time and visualize their paths on a map for better logistics and monitoring. View detailed data in a tabular format, with filtering and sorting options for precise analysis. Visualize the distribution of values across a range using histograms for insightful data analysis. Monitor and filter real-time or historical logs for troubleshooting and system monitoring. Highlight important information or add contextual details with static text panels. Represent categorical data visually with bar charts for easy comparison and analysis. Track and visualize triggered alerts, group them, and add aggregates for detailed monitoring. Visualize and analyze session-based data to monitor user activity or device interactions over time. Embed external dashboards or resources directly into your Bytebeam dashboard for seamless integration. Monitor the activity of data streams across devices in real-time with visual status indicators. Monitor the health of devices by visualizing their last heartbeat and categorize devices by thresholds. # Last Value Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/last-value The Last Value Panel is designed to display the most recent data point from your selected stream. It is ideal for monitoring live metrics such as the current temperature, usage statistics, or any data point representing the latest state of a system. With its simple yet customizable features, the Last Value Panel provides quick insights at a glance. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/82e0f96e-b5b9-4539-a75f-2850d6826d6c/11c16c61-c4b0-470d-b4f6-e00725ce5d83/images/3f52642d-3980-4ff8-9f4f-06406f02d470.gif) ## Add Last Value Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Last Value Panel** from the list of available panels. Configure the following under the **General Settings** tab: * **Add a Title**: Provide a name for the panel to represent its purpose. * **Description**: Optionally, add a short description for context. * **Select Stream**: Choose the data stream from which the most recent value will be displayed. * **Select Field**: Pick the column (field) from which the latest value will be extracted. Choose individual columns to display or click **Add 40 More Columns** to include all available columns upto 40. You can add atmost 40 columns for a Stream in the Last Value panel. Refine the data to be displayed using the **Filters** section: * **Select Field**: Choose the column to apply the filter. * **Select Operator**: Set the filter condition (e.g., equals, not equals, greater than). * **Enter Value**: Provide the value for the selected filter. * Click **+** to apply more filters as needed. Switch to the **View Options** tab to personalize the panel's appearance: * **Enable Units**: Display the appropriate unit for the value (e.g., °C, %, MB). * **Round Off Values**: Set the number of decimal places for the displayed value. * **Auto Resize**: Adjust the font size for better readability. Once all customizations are complete, click **Submit** to add the Last Value Panel to the dashboard. # LED Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/led-panel The LED Panel is a highly intuitive way to visualize the current state (Active/Inactive) of devices or components. Each "LED" represents a field, allowing real-time monitoring of multiple devices or parameters. **Use Cases:** * Display whether a device or component is online (active) or offline (inactive). * Indicate the status of sensors, machines, or other equipment. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/82e0f96e-b5b9-4539-a75f-2850d6826d6c/11c16c61-c4b0-470d-b4f6-e00725ce5d83/images/4324831f-47cf-4fcc-b62d-6c3edb235f23.gif) ## Add LED Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **LED Panel** from the list of available panels. You will be presented with options to configure: * **Title**: Add a descriptive title for the panel. * **Stream**: Select the data stream to visualize. * **Fields**: Choose the fields or columns to represent as LED indicators.\ For example, the LED will be green for states such as `'true'`, `1`, or `'on'`. Switch to the **View** tab to adjust the visual appearance of the panel: * **Active State Color**: Choose a color for the active state (e.g., green for "on"). * **Inactive State Color**: Choose a color for the inactive state (e.g., red for "off"). * **Add Custom States**: Add specific states that define active or inactive conditions. * **LED Size**: Adjust the size of the LED indicators for better visualization. After completing the configurations and customizations, click **Submit** to add the LED Panel to the dashboard. # Line Charts Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/line-charts The Line Chart Panel is designed to visualize data trends over time. By plotting data points and connecting them with lines, it provides an intuitive way to track changes and patterns in real-time or historical data. Ideal for monitoring metrics like sensor readings, system performance, or usage statistics, the line chart panel offers rich customization options to tailor the visualization to specific needs. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/82e0f96e-b5b9-4539-a75f-2850d6826d6c/11c16c61-c4b0-470d-b4f6-e00725ce5d83/images/efbae55e-a59c-4e93-afa5-a9f45aa2990c.gif) ## Add Line Chart Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Line Chart Panel** from the list of available panels. Add a title for the chart and select the data source for the panel. You can: * Add multiple data sources (streams) in the same panel. * Add filter conditions and group the data by particular columns using the **Advanced** option. * Use an alternate axis on the right if multiple streams are selected. Switch to the **View** tab to personalize the appearance of your line chart. Options include: * **Area Chart:** Shade the area under the line to emphasize volume or magnitude over time. * **Connect Null Values:** Connect missing data points with lines for better continuity in trends. * **Show Points or Markers and Adjusting Line Width:** Highlight individual data points and control the line thickness for clarity. * **Upper and Lower Thresholds:** Add horizontal lines to indicate critical thresholds, such as limits or targets. * **Custom Y-Axis Range:** Focus on specific data ranges by adjusting the Y-axis scale. Use the **Axis Settings** section in the **View** tab to fine-tune the X and Y axes for better data clarity and visualization: * **Grid Options:** Enable or disable grid lines for both X and Y axes to improve graph readability. * **Label Options:** Customize axis labels to provide clear context for your data. * **Units Options:** Set appropriate units for the axes to ensure the values are well-understood. * **Auto Margin for Y-Axis:** Adjust margins automatically to handle graph shrinking and maintain proper scaling. Once all customizations are complete, click **Submit** to add the Line Chart Panel to the dashboard. # Locate Devices Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/locate-device The Locate Devices panel enables you to visualize the current location of your devices on a map. This panel is particularly useful for: * Real-time tracking of assets or vehicles. * Displaying the geographic distribution of devices. * Analyzing device movements and patterns. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/82e0f96e-b5b9-4539-a75f-2850d6826d6c/11c16c61-c4b0-470d-b4f6-e00725ce5d83/images/4eac80c7-51da-4e0e-b213-e3f003be7c4e.gif) ## Add Locate Devices Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Locate Device Panel** from the list of available panels. You will be presented with options to configure: * **Title**: Add a descriptive title for the panel. * **Stream**: Select the data stream containing the location data. * **Latitude Field and Longitude Field**: Choose the fields representing latitude and longitude values. * **Device Dashboard Links**: Add links to device dashboards for easy navigation. * **Metadata to Show**: Add metadata to display additional details about each device. * **Device Shadow Data to Show**: Include shadow data to provide more context for each device. Clicking on a marker allows you to view device shadow details, metadata, and links to device dashboards. Switch to the **View** tab to adjust the appearance and functionality of the map: * **Show Map Layers**: Enable or disable layers such as: * **Traffic Layer**: Display real-time traffic information on the map. * **Satellite Layer**: Show satellite imagery for better geographical context. * **Select Icon**: Choose a marker icon to represent the devices (e.g., vehicle, pin). * **Select Icon Color**: Set a color for the marker icons or dynamically configure the color based on the device's shadow status. Clicking on the location icon on the map shows the added metadata, dashboards and device shadow data. After completing the configurations and customizations, click **Submit** to add the Locate Device Panel to the dashboard.\ The map with the device markers will now appear, displaying real-time device locations. # Logs Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/logs-panel The Logs panel enables visualization of streaming events (logs) generated by any component. It allows users to filter logs based on message regex, log level, and tags for more refined insights. ## Add Logs Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Logs Panel** from the list of available panels.\\ In the **General** tab: * **Title**: Add a descriptive title for the panel (optional). * **Stream**: Select the data stream containing log information. * **Search Bar**: Enable the search bar option to search with a regular expression. * When enabled, the search regex, log level, tags, and search icon will appear in the preview panel. * **Search Regex**: Enter a regex pattern to filter messages. * **Log Level**: Specify a log level (e.g., info, warning, error). * **Tags**: Select or enter tags to further filter the logs. You can refine the log display by clicking the search icon after entering filters in the preview panel.\\ Switch to the **View** tab to adjust the graph settings: * **Number of Bins**: Adjust the slider to define the number of bins for the histogram of log events. Once all configurations and customizations are complete, click **Submit** to add the Logs Panel to the dashboard.\ The panel will now display real-time or historical logs based on the configured filters, allowing for efficient log monitoring and analysis. # Sessions Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/sessions The Sessions Panel is designed to visualize session-based data, such as user interactions or device usage sessions, allowing you to monitor and analyze session information and aggregates. ## Add Sessions Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Sessions Panel** from the list of available panels.\\ * Select the desired **Session Type** from the dropdown to specify the already created [session type](/platform-guide/session-types/introduction-to-session-types) that you want to monitor. * Add aggregates to analyze data during the session. You can: * Provide a name for the aggregate. * Select a field and stream for the aggregate calculation. * Choose the type of aggregation (e.g., sum, average, count). * Optionally, configure links to device dashboards to allow easy navigation to individual device data from the session panel.\\ * Preview the Sessions Panel to ensure that session data and aggregates are displayed as required. * Once satisfied, click **Submit** to add the Sessions Panel to the dashboard.\ The panel will now display session-based data in real-time or historical views, depending on your configuration. # State Timeline Panel Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/state-timeline The State Timeline Panel is a powerful tool for visualizing state changes over time. It is particularly useful in applications where monitoring transitions or durations of different states is critical. Examples include: * Monitoring machine or device states such as "on," "off," or "error." * Tracking operational modes like "idle," "active," or "maintenance." * Visualizing user actions or events over time. The panel offers a clear and interactive way to explore temporal patterns and provides an option to dynamically change the dashboard's timerange based on a specific state selection. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/82e0f96e-b5b9-4539-a75f-2850d6826d6c/11c16c61-c4b0-470d-b4f6-e00725ce5d83/images/9a88f69a-6761-4d18-8bcb-a4e3a6f569a6.gif) ## Add State Timeline Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **State Timeline Panel** from the list of available panels. You will be presented with options to configure: * **Title**: Add a descriptive title for the panel. * **Stream**: Select the data stream to visualize. * **Field**: Choose the field or column that represents the states. Switch to the **View** tab to adjust the behavior and appearance of the timeline: * **Enable 'Click State to Change Timerange'**: When enabled, clicking on any point in the State Timeline panel will adjust the dashboard's timerange to the corresponding time period. After completing the configurations and customizations, click **Submit** to add the State Timeline Panel to the dashboard. # Static Text Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/static-text The Static Text panel is used to display fixed text to highlight specific information or sections on the dashboard. It is ideal for creating headers, captions, or explanatory notes to improve the dashboard's clarity and user experience. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0da98d18-fcec-4c69-81b9-26c8b6d0e7ee/74c4ebcd-727f-48d5-8703-01e8212b0c43/images/fa5bc286-c730-43eb-ab2f-980f298e330d.gif) ## Add Static Text Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Static Text Panel** from the list of available panels. In the **General** tab: * Add a **Title**: Provide a title for the panel (optional). * Enter the **Text**: Type the static text you want to display on the panel. Switch to the **View** tab to customize the appearance of the text: * **Text Style**: Choose a text style (e.g., normal, bold, italic). * **Text Size**: Adjust the font size to suit the layout. * **Text Color**: Pick a color to make the text visually distinct. Once all configurations and customizations are complete, click **Submit** to add the Static Text Panel to the dashboard.\ The static text will now appear in the dashboard, helping to highlight or explain specific sections. # Stream Status Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/stream-status The Stream Status Panel provides a visual indicator of the activity status (active/inactive) of multiple data streams across all devices in a fleet or for a single device. It helps monitor the health of streams and detect any issues in real-time. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0da98d18-fcec-4c69-81b9-26c8b6d0e7ee/74c4ebcd-727f-48d5-8703-01e8212b0c43/images/65103ba1-ce09-49a9-9610-e51a50d91ecf.gif) ## Add Stream Status Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Stream Status Panel** from the list of available panels. * Add a title for the panel. * Select one or more streams to monitor by choosing them from the dropdown menu. * Each stream's status will be displayed as active (green) or inactive (red) in the preview. * Navigate to the **View** tab to set the colors for the active and inactive states of streams. * The default colors are green for active and red for inactive, but these can be customized to suit your preferences. * Preview the Stream Status Panel to ensure the selected streams and status indicators are correctly displayed. * Once satisfied, click **Submit** to add the Stream Status Panel to the dashboard.\ The panel will now show real-time stream statuses in the dashboard layout. The Stream Status Panel is ideal for monitoring multiple streams in real-time to ensure smooth data flow and detect potential issues quickly. # Timeseries Table Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/timeseries-table The Timeseries Table panel is a versatile way to view data in a tabular format for a specific stream or table. It allows users to select individual columns, sort data, and apply filters to customize the data view. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0da98d18-fcec-4c69-81b9-26c8b6d0e7ee/74c4ebcd-727f-48d5-8703-01e8212b0c43/images/2750d10a-9542-435a-922c-5b35f69c4299.gif) ## Add Timeseries Table Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Timeseries Table Panel** from the list of available panels. You will be presented with options to configure: * **Title**: Add a descriptive title for the panel. * **Stream**: Select the data stream or table. * **Columns**: Choose individual columns to display or click **Add All Columns** to include all available columns. * **Sort Order**: Toggle between ascending or descending order to sort the table by a specific column. * **Filters**: Apply filters to exclude or include rows based on conditions. Filters can be set by: * Selecting a column. * Choosing an operator (e.g., equals, greater than). * Entering a value. As you select columns and filters, a preview of the Timeseries Table will appear on the left side of the screen. This lets you validate the selected data and configuration. Switch to the **View** tab to fine-tune the appearance: * **Show Numeric Values in Hexadecimal**: Enable this option to display numeric values in hexadecimal format. * **Enable Units**: Display units associated with the data. * **Round Off Values**: Set the number of decimal places to display for numeric columns. Once all configurations and customizations are complete, click **Submit** to add the Timeseries Table Panel to the dashboard.\ The table will now display real-time or historical data in the configured format. # Track Devices Source: https://bytebeam.io/docs/platform-guide/dashboards/panels/track-devices The Track Devices panel is designed to visualize the path or route followed by a selected vehicle or device on a map. It is particularly useful for: * Monitoring the movement of delivery vehicles. * Tracking routes for logistics and supply chain management. * Analyzing movement patterns for IoT-enabled devices. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0da98d18-fcec-4c69-81b9-26c8b6d0e7ee/74c4ebcd-727f-48d5-8703-01e8212b0c43/images/4462d625-7964-4103-b556-3c75bc18ee91.gif) ## Add Track Devices Panel Go to the **Dashboards** tab, select the desired dashboard, and click on the **+ Panel** button to create a new panel. Choose **Track Devices Panel** from the list of available panels. You will be presented with options to configure: * **Title**: Add a descriptive title for the panel. * **Stream**: Select the data stream containing location data. * **Latitude Field and Longitude Field**: Choose the fields representing latitude and longitude values. Clicking on the device location pointer will take you to the device dashboard defined in the settings. Switch to the **View** tab to adjust the appearance of the map: * **Satellite Layer**: Enable this layer to display satellite imagery for better geographical context. * **Traffic Layer**: Enable this layer to overlay real-time traffic information on the map. Hovering over any point on the route in the map will display the corresponding latitude, longitude, and the timestamp when the vehicle was at that location. After completing the configurations and customizations, click **Submit** to add the Track Devices Panel to the dashboard.\ The map will now display the route or path followed by the selected vehicle in real-time or for historical data analysis. # Sharing a Dashboard Source: https://bytebeam.io/docs/platform-guide/dashboards/sharing-a-dashboard Steps to share a dashboard from Bytebeam console according to your requirements. The **Sharing a Dashboard** feature allows you to grant viewing or editing access to specific users or roles in the Bytebeam console. This ensures dashboards can be collaboratively managed or accessed based on predefined roles. ## Steps to Share a Dashboard Go to the **Dashboards** tab in the Bytebeam console and locate the dashboard you want to share. * Click on the **pencil ✎ icon** next to the dashboard name. * Alternatively, if the dashboard is already open, click on the **Gear icon** in the top-right corner to access its settings.\ \\ * In the settings modal, navigate to the **Access Control** section. * Specify: * **Viewers**: Users or roles who can view the dashboard. * **Owners**: Users or roles who can edit the dashboard.\\ * Assign roles to viewers and owners. For example: * Set **"Manager"** as the Owner. * Set **"demorole"** as the Viewer. * Adjust roles based on your organization’s access requirements.\\ Once the access control settings are configured, click **Save** to apply the changes.\ The dashboard is now shared according to the specified access control rules. Alternatively you can modify sharing settings by staying inside the dashboard through accessing the **Gear icon** in the dashboard’s toolbar. # Creating a DBC Parser Source: https://bytebeam.io/docs/platform-guide/dbc-parsers/creating-a-dbc-parser ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/246efdc5-ecb7-4ee7-9b4b-c1d0da52923f/00129675-d005-494d-8dc9-71cdbebc0632/images/eacd204f-c899-4f7c-aa01-7db33e4fe889.gif) To create a new dbc parser in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **DBC Parsers** tab and click on the **+ Add DBC Parser** button Select the DBC Type and fill all the other details such as DBC Name, DBC Version, Input Stream, Output Stream, Cycle time and Advanced settings(Optional) and click on **Submit** button to create the parser. ## DBC types There are 3 DBC types available. You can upload the custom DBC file to create the parser instead of relying on standard DBCs. You can choose this and select the PGNs(Parameter Group Numbers) from the dropdown to create the parser. You can choose this and enter the CAN ID to create the parser. ## Important Info Use the icons next to each created dbc parser to start or stop the parser. Adding CAN ID as suffix to columns and disabling enum parsing is not allowed when you choose DBC type as j1939 or obd. Hover over the DBC name to view its ID and name in the tooltip. Click on the name to copy both to the clipboard. # Deleting a DBC Parser Source: https://bytebeam.io/docs/platform-guide/dbc-parsers/deleting-a-dbc-parser ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/246efdc5-ecb7-4ee7-9b4b-c1d0da52923f/00129675-d005-494d-8dc9-71cdbebc0632/images/54358279-fb41-47d7-813d-fe1c5a19f6f1.gif) To delete the existing DBC parser in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **DBC Parsers** tab and click on the **trash**(🗑) icon against the target DBC parser Enter the DBC parser name and click on **Submit** button to delete it. When a DBC Parser is running, it cannot be deleted until it is stopped. # Editing a DBC Parser Source: https://bytebeam.io/docs/platform-guide/dbc-parsers/editing-a-dbc-parser ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/246efdc5-ecb7-4ee7-9b4b-c1d0da52923f/00129675-d005-494d-8dc9-71cdbebc0632/images/c3155f29-9b62-4fea-b956-88c2abe215d2.gif) To edit the existing DBC parser in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **DBC Parsers** tab, click on the 3 dots against the DBC parser and click on View/Edit DBC Parser option Change the existing details of the fields like DBC Name, DBC Version etc. and click on **Submit** button to edit it. You can only change values of fields like DBC Name, DBC Version, Cycle Time, Lower Threshold for flushing clusters (ms), Upper Threshold for flushing clusters (ms), DBC Version filter in CAN table on column dbc\_ver while editing any DBC Parser. Hover over the DBC name to view its ID and name in the tooltip. Click on the name to copy both to the clipboard. # Introduction to DBC Parsers Source: https://bytebeam.io/docs/platform-guide/dbc-parsers/introduction-to-dbc-parsers ## Overview A DBC parser is a software tool that decodes the messages transmitted on your IoT device's Controller Area Network (CAN) bus. DBC files define the structure, signals (meaningful data units), and scaling factors within these messages. The DBC parser references this file to interpret raw CAN data into clear, actionable information. ## Use of DBC Parsers You can use DBC parsers to track and analyze vehicle data for real-time monitoring and reporting. For instance, a logistics company can use a DBC parser to decode GPS data, engine RPM, and load information from trucks. This data can be displayed on a dashboard, helping managers track shipments and make data-driven decisions on routing and fuel efficiency. You can create a DBC parser by choosing one of the 3 DBC types: custom, obd, j1939. You can update the existing DBC parser by uploading a new DBC file. You can edit the existing DBC parser to change details like DBC Name, DBC Version etc. You can view the parsed DBC and download the custom DBC files that were uploaded while creating the parser. You can delete the existing DBC parsers that are no longer needed. # Updating a DBC Parser Source: https://bytebeam.io/docs/platform-guide/dbc-parsers/updating-a-dbc-parser ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/246efdc5-ecb7-4ee7-9b4b-c1d0da52923f/00129675-d005-494d-8dc9-71cdbebc0632/images/4266ec42-4f48-4571-a5ef-3106b8cc6bdd.gif) To update the existing DBC parser in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **DBC Parsers** tab, click on the 3 dots against the DBC parser and click on Update DBC Parsing option Choose the new DBC file to upload, verify the changes in the Compare DBC modal and click on **Update DBC Parsing** button to update it. In the Compare DBC modal, you can switch signals between **added**, **deleted** sections and **updated** section as needed. ## Important Info When a DBC Parser is running, it cannot be updated until it is stopped. When the DBC parser is created using j1939, it cannot be updated and the parsed DBC cannot be viewed as well When the DBC parser is created using obd, it cannot be updated but the parsed DBC can be viewed # View Parsed DBC Source: https://bytebeam.io/docs/platform-guide/dbc-parsers/viewing-parsed-dbc ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/246efdc5-ecb7-4ee7-9b4b-c1d0da52923f/00129675-d005-494d-8dc9-71cdbebc0632/images/fdd1298d-5131-488a-9f4e-8bbedee0bbc3.gif) To view the parsed DBC in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **DBC Parsers** tab, click on the 3 dots against the DBC parser and click on View Parsed DBC option to see the parsed data in tabular format. Similarly you can download the custom DBC file following the below steps: Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **DBC Parsers** tab, click on the 3 dots against the DBC parser and click on Download DBC File option. # Creating a Device Component Source: https://bytebeam.io/docs/platform-guide/device-components/creating-a-device-component ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/bba939b0-1a8d-42f2-8d80-b469918eb165/c23c2f44-7062-4517-9c0a-cef1c1d66c74/images/d2d6db6e-455d-4234-8e18-d51281e682f7.gif) To create a new device component in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Device Components** tab and click on the **Create Device Component** button Type the device component name and click on **Submit** button to it. Upon creation, each device component will appear as separate tabs in the Actions/Inventory section # Deleting a Device Component Source: https://bytebeam.io/docs/platform-guide/device-components/deleting-a-device-component ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/bba939b0-1a8d-42f2-8d80-b469918eb165/c23c2f44-7062-4517-9c0a-cef1c1d66c74/images/19a04af0-f755-491d-b81c-3ab9862587f6.gif) To delete the existing device component in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Device Components** tab and click on the **trash**(🗑) icon against the target device component Enter the device component name and click on **Submit** button to delete the device component. When a device component has firmware files uploaded, it cannot be deleted until all the firmware files are deactivated for that component. # Editing a Device Component Source: https://bytebeam.io/docs/platform-guide/device-components/editing-a-device-component ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/bba939b0-1a8d-42f2-8d80-b469918eb165/c23c2f44-7062-4517-9c0a-cef1c1d66c74/images/664043f7-c0c4-48c0-ae51-86f6915789a3.gif) To edit the existing device component in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Device Components** tab and click on the **Edit** icon against the target device component Enter the changed device component name and click on **Submit** button to edit it. # Introduction to Device Components Source: https://bytebeam.io/docs/platform-guide/device-components/introduction-to-device-components ## Overview Each IoT device is made up of multiple components, each of which can be updated independently. This modular approach allows for targeted updates, enhancing control over the device's configuration. ## Use of Device Components With the device components feature, you can create individual components and upload their respective firmwares along with any dependencies between them. You can then create a firmware bundle which can be used to update all components simultaneously by triggering a single action. You can create a device component and upload firmwares for it which can then be used to create a firmware bundle. You can edit the existing device component names. You can delete the existing device components that are no longer needed/present on the device. # Downloading/Updating Metadata in Bulk Source: https://bytebeam.io/docs/platform-guide/device-management/bulk-download-and-bulk-update-metadata ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/323741be-de42-419d-9356-3029f7cbc932/8dec9d6c-0f75-4a09-bf21-0c827daa0493/images/edd3de66-1768-4cb4-8c23-0608ae87dfc1.gif) You can download or update metadata for all devices in bulk using the Bytebeam console. To download all device metadata in bulk: Click on the **Device Management** tab at the top. Click on the **Metadata** option at the top. Select **Download All** to download all device metadata as a CSV file. To download filtered metadata in bulk: Click on the **Device Management** tab at the top. 1. Click on the **Filters** option at the top. 2. Use the dropdown to search for and select a metadata key (e.g., City) or device shadow column (e.g., Mode). 3. Enter a value (e.g., Bangalore for City or 100 for Mode) and press **Search** or **Enter**. Click on the **Metadata** option at the top. Select **Filter Download** to download metadata for the filtered devices as a CSV file. To update device metadata in bulk: Click on the **Device Management** tab at the top. Click on the **Metadata** option at the top. Select **Update** and download the template by clicking on the "Click here" link. Fill out the downloaded CSV file with updated metadata values, then upload it and click on **Update Metadata**. You will receive a success message once the update is completed. ## Important Info Ensure the serial metadata key is included with unique values for each device when uploading the updated file if the serial key is set. # Editing Values of Metadata Keys Source: https://bytebeam.io/docs/platform-guide/device-management/editing-metadata-values-and-pinning-metadata-keys ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/dd163138-d6e2-4a08-b87c-db22503b2c00/cb26520a-b324-4ba8-8481-b49c8006895e/images/737c7831-7c6b-4191-b0e8-d2fd9480cfb7.gif) You can update values of metadata key for any device, making it easier to identify devices when using filters. To edit metadata key values in the Bytebeam console, follow these steps: Click on the **Device Management** tab at the top. Use pagination to find the device if there are many devices available. You can use metadata keys or Device ID as filters to locate the desired device more easily. 1. Open the Device accordion. 2. Hover over the existing value of the desired metadata key. 3. Click on the edit icon. 4. Enter a new value or replace the existing one. 5. Click the check icon to save the update. To improve visibility in the Devices table, you can pin or unpin metadata keys by clicking on the Pin icon when you hover over the metadata key. # Using Filters in Device Management Source: https://bytebeam.io/docs/platform-guide/device-management/filters-in-device-management ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/323741be-de42-419d-9356-3029f7cbc932/6141a053-ff5f-40bb-8f52-97fe7573cd0f/images/5a0fc48c-8f37-4d1a-95e4-afb00af929ad.gif) When managing many devices, finding a specific one can be challenging. The Bytebeam console offers an advanced **Filters** option to help with this. To apply filters in the console, follow these steps: Click on the **Device Management** tab at the top. You can apply the filter in two ways: 1. **Using Metadata Keys**:\ Click on the dropdown at the top and select a metadata key from the dropdown list (e.g., City), enter its value (e.g., Bangalore), and hit **Enter** or click the **Search** icon. 2. **Using Device Shadow Columns**:\ Click on the dropdown at the top and select a column from the `device_shadow` stream in the dropdown list (e.g., Mode), enter its value (e.g., On/Off), and hit **Enter** or click the **Search** icon. The data persists when the device shadow filter is applied, and you can refresh the data manually using the **Refresh** button. Once applied, the filter will appear at the top with the selected keys and values and you can reset the filters using **Reset Filters** button. ## Important Info Filters applied using Metadata keys support **partial search** for added convenience. Use the operator dropdown to select different conditions when applying filters using Device Shadow columns. Filters can combine metadata keys and device shadow columns for more specific results. # Introduction to Device Management Source: https://bytebeam.io/docs/platform-guide/device-management/introduction-to-device-management Device Management is your central hub for handling all device-related tasks. Here, you can provision new devices, trigger actions on connected devices, remotely access device shells, update and download device metadata in bulk, all in one place for seamless management. You can provision new device with or without entering the values for the metadata keys. You can filter devices using device shadow data or metadata values to easily find and manage devices. You can access all available operations for the device, such as viewing streams and data, accessing device dashboards, and managing remote shells. You can trigger the actions like **update\_firmware**, **update\_config** etc. by selecting the devices and their corresponding versions. You can perform operations on the last triggered action for the device, such as completing, canceling, or retrying the action. You can edit metadata values and pin specific metadata keys for better visibility in the device management interface. You can download metadata for all devices or for filtered devices, and update metadata in bulk. # Operations on the Device Source: https://bytebeam.io/docs/platform-guide/device-management/operations-in-device-management ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/323741be-de42-419d-9356-3029f7cbc932/8dec9d6c-0f75-4a09-bf21-0c827daa0493/images/ff5d784e-7bd2-46ce-ab66-9491c0b97207.gif) After provisioning the device, you can perform various operations. Click on the device accordion and select the desired action: ## Download Config To download the device configuration file, simply click on Download Config. The configuration file will download instantly. ## Remote shell A Remote Shell provides a command-line interface (CLI) for remotely accessing and controlling an IoT device. It allows users to execute commands, monitor the device status, and manage configurations remotely, typically via protocols like SSH or Telnet. Through this shell, you can perform tasks such as updating firmware, monitoring logs or status, managing configurations, and running diagnostics. Click on Remote Shell to launch the shell. The Remote Shell option requires the Launch Shell action type. Ensure this action type is added if it doesn’t appear by default. ## Config Version To check the current configuration version of the device, click on Config Version. ## Streams Click on Streams to view the streams associated with the device. You can also select individual streams to view their data. ## Device Dashboards Click on Device Dashboards to view any dashboards created for the device. You can navigate to specific dashboards by selecting them. ## Logs To view the device logs, click on Logs. This opens a new tab displaying the logs panel. ## History Click on History to see the history of actions previously triggered on the device. ## Deactivate To deactivate a device that is no longer needed, click on Deactivate and confirm the action in the modal that appears. ## Activate If you need to reactivate a deactivated device, follow these steps: Click on the **Device Management** tab at the top. Scroll to the bottom and enable the **Show Inactive Devices** toggle. Use pagination to locate the device if there are many entries. You can filter devices using metadata keys or the Device ID for easier access. Click on the device accordion, select **Activate**, and confirm the activation in the modal. # Managing the Last Action for a Device Source: https://bytebeam.io/docs/platform-guide/device-management/operations-on-last-action-for-a-device ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/323741be-de42-419d-9356-3029f7cbc932/8dec9d6c-0f75-4a09-bf21-0c827daa0493/images/2afbd288-07bd-4706-a2c3-b3835e765ca1.gif) You can monitor the progress of the last action triggered on a device and perform specific operations. To begin, click on any of the device accordions, then select the three dots next to "Last Action," and choose from the following options: ## Complete All Actions on Device This option allows you to mark all pending actions (those in 'In Progress,' 'Initiated,' or 'Queued' states) on the device as completed. Click on Complete All Actions on Device and confirm your selection. ## Complete Last Action This option enables you to mark only the last pending action (in 'In Progress,' 'Initiated,' or 'Queued' states) on the device as completed. Click on Complete Last Action and confirm your selection. The Complete Last Action option is disabled if the last action is already marked as Completed or Failed. ## Cancel Last Action With this option, you can mark only the last pending action (in 'In Progress,' 'Initiated,' or 'Queued' states) on the device as canceled. Click on Cancel Last Action and confirm your selection. The Cancel Last Action option is disabled if the last action is already marked as Completed or Failed. ## Retry Last Action This option allows you to retry only the last failed action (in the 'Failed' state) on the device. Click on Retry Last Action and confirm your selection. The Retry Last Action option is disabled if the last action is in any state other than 'Failed'. ## View logs Use this option to view the logs for the last action on the device. Click on View Logs to access the action logs. The View Logs option is disabled if you do not have access to view that action's logs. ## View Action Details This option allows you to view detailed information about the last action on the device. Click on View Action Details to examine the action closely. The View Action Details option is disabled if you do not have access to that action. # Provisioning a Device Source: https://bytebeam.io/docs/platform-guide/device-management/provisioning-a-device ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/323741be-de42-419d-9356-3029f7cbc932/8dec9d6c-0f75-4a09-bf21-0c827daa0493/images/7f48f125-f23a-4d39-bd09-3ed42a665991.gif) Provisioning is the initial process of setting up a device so it can communicate securely with the Bytebeam platform. During provisioning, unique identifiers, credentials, and configuration settings are generated and assigned to the device. This process includes: **Registering the Device**: Adding the device to the Bytebeam console with its metadata and configuration details. **Configuring Security Credentials**: Generating a configuration file that includes the necessary security credentials, such as certificates and keys, to securely authenticate the device with the platform. **Connecting to the Cloud**: Once provisioned, the device uses the configuration file to establish a secure connection to the Bytebeam platform. To provision a device in Bytebeam console, Click on the **Device Management** tab at the top Click on the **Create Device** button Enter the values for **Metadata Keys** or Optionally, you can also * Skip adding Metadata Key values * Choose to create a duplicate device by unchecking the "Do not create duplicate device" option and finally click on **Submit** button to create the device. The device configuration file should be downloaded automatically onto your computer. The contents of the file will look similar to this: ```json JSON theme={null} { "project_id": "demo", "broker": "cloud.bytebeam.io", "port": 8883, "device_id": "1230", "authentication": { "ca_certificate": "-----BEGIN CERTIFICATE-----\\n...certificate contents...", "device_certificate": "-----BEGIN CERTIFICATE-----\\n...certificate contents...", "device_private_key": "-----BEGIN RSA PRIVATE KEY-----\\n...key contents..." } } ``` This file is used by the Bytebeam device SDK to establish a connection with the Cloud platform. # Triggering Actions on a Device Source: https://bytebeam.io/docs/platform-guide/device-management/triggering-ota-update Steps on how to trigger an OTA update in Bytebeam console ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/323741be-de42-419d-9356-3029f7cbc932/8dec9d6c-0f75-4a09-bf21-0c827daa0493/images/96702fd5-1301-49bd-935a-813e58a71261.gif) You can initiate various actions, such as updating firmware, updating configuration, or updating geofence settings, by selecting devices in the Bytebeam console. Below are the steps to trigger an OTA (Over-the-Air) update, specifically for updating firmware. Steps to Trigger the OTA Update: Click on the **Device Management** tab at the top. Find the devices using pagination if needed. Select the devices by clicking the checkboxes, or use the **Select All** checkbox to select all visible devices. To narrow down results, use filters based on metadata keys or Device IDs, then select the filtered devices. Click on the **Update Firmware** button. Choose the **Firmware Version** or **Firmware Bundle Version** (if Device Components is enabled), then click on **Next**. Click on the **Confirm** button to initiate the firmware update on the selected devices. ## Important Info Options like Auto Retry or setting a timeout for the action can be configured in the Advanced Settings section on the Update Device Firmware modal. You can monitor the action’s progress for each device in the Devices table. # General Settings Source: https://bytebeam.io/docs/platform-guide/general-settings ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a9501e10-33d1-4c78-a572-ef1d5a0ae159/e6a8f1ae-babd-4a51-93e4-c400dec6e62a/images/753e682b-1586-4a5e-b370-a6c62f395dfe.gif) All features in the General settings are applied at the project level and are applicable to all users within that project. ### Serial Key This feature allows you to set any metadata key as a serial key, replacing the device ID throughout the console. For example, if you have a metadata key such as the device's registration number, you can use it to identify the device instead of the default Device ID. To set a metadata key as serial key, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **General** tab and click on the **Edit** icon at the serial key section Select the metadata key from the dropdown and click on **Save** icon to set the serial key. Metadata key should have non null and unique values to be set as serial key ## Global Timeout The global timeout applies to all action types that are stuck in any state other than "Scheduled," "Failed," or "Completed." To configure the global timeout: Navigate to the **Settings** tab by clicking on your username at the top right. Go to the **General** tab, and click the edit icon next to **Default Action Timeout**. Select a duration from the **Timeout dropdown**, or set a custom time, then click the **Save** icon. The default global timeout for new projects is set to 30 days. ### Customize Logo & Customize Favicon You can add your logo and favicon to the console for a more personalized experience. To set a customized logo/favicon in the console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **General** tab and click on the **Choose File** option at Dark or Light sections Upload a picture from the system and click on **Save Changes** button You can reset the uploaded logo/favicon by clicking on Reset button ### Modules Enabled This feature is used to hide unwanted tabs from the console. To enable or disable any tab in the console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **General** tab and click on the **Modules Enabled** accordion Enable or Disable the toggle to show or hide any tab in the console. # Welcome to the Bytebeam Platform Guide Source: https://bytebeam.io/docs/platform-guide/introduction Your journey to seamless device management and advanced IoT workflows starts here! The Bytebeam Platform equips you with powerful tools to manage devices, monitor operations, and customize workflows—all in one place. Whether you're onboarding devices, analyzing dashboards, or configuring roles, this guide will help you unlock the full potential of Bytebeam. ## ✨ Key Features of the Bytebeam Platform Manage all your devices in one centralized hub! Easily provision devices, filter them using shadow data or metadata, monitor their performance, and trigger key actions like updates or configuration changes. Turn data into insights! Visualize real-time device streams, analyze trends, and monitor KPIs effortlessly. Build custom dashboards to stay on top of performance and make data-driven decisions. Simplify task automation! Trigger actions remotely to perform firmware updates, configuration changes, or any other operational commands. Keep devices running smoothly with just a click. Never miss a critical update! Set up alerts to monitor key events and receive notifications in real time. Proactively address issues and ensure smooth device performance across your fleet. Easily configure platform elements: manage Users and Roles (RBAC), access live Streams, integrate with API Keys, define Session Types, and parse device data with DBC Parsers. ## 📘 How to Use the Platform Guide The Bytebeam Platform Guide is designed to help you navigate and make the most of the platform’s features. Whether you’re new to Bytebeam or a seasoned user, this guide provides all the resources you need to succeed. Here's how to use it effectively: **Navigate Core Features with Ease:** Use the Sidebar to quickly access different sections of the platform guide like Device Management, Dashboards, Actions, and Settings. Each section is organized for easy navigation, making it simple to find what you need. **Interactive, Step-by-Step Instructions:** Follow the interactive tutorials and code snippets embedded directly in the guide. Each feature has clear instructions with embedded examples, so you can follow along in real time and implement them into your workflow. **Search Functionality:** Use the powerful search bar at the top of the page to quickly locate specific topics or terms. Whether you’re looking for API Keys, Session Types, or Alerts and Notifications, the search will take you straight to the most relevant section. **Jump to Key Sections:** With the table of contents, you can instantly jump to any section of the guide. Want to explore Device Management or dive deeper into Role-Based Access Control (RBAC)? Just click the section title and you’re there. **Stay Updated with Release Notes:** The guide includes a dedicated Release Notes section where you can find updates on the latest features and changes to the platform. Stay ahead by referring to new updates and apply them to your workflow. # Introduction to Settings Source: https://bytebeam.io/docs/platform-guide/introduction-to-settings This section allows you to manage and customize various aspects of the platform configuration. With Settings, you have complete control over the platform’s functionality, allowing you to tailor it to your specific use case. Whether you’re managing users, setting roles, or configuring device components, this section enables smooth and efficient configuration of the Bytebeam platform. ## Settings in the platform Easily manage the platform's core settings, including configuring serial keys, updating logos, and customizing favicons to personalize the platform’s appearance and branding. Add, edit, or delete data streams for your devices, allowing you to capture, visualize, and manage live data flows from your connected devices seamlessly. Manage team access by creating, editing, or deleting users. Control who can access the platform and define their roles and permissions. Configure roles and permissions with Role-Based Access Control (RBAC). Define user roles and grant specific permissions for better access control and security. Create, edit, or delete session types to define and manage your workflow sessions. Tailor the types of sessions based on your operational needs. Create and manage DBC Parsers to parse and analyze device data in the DBC format. Edit or delete existing parsers to keep your data processing efficient. Create, edit, and delete device components. This feature allows you to manage the various parts of your devices for better device control and operation management. # Creating a Metadata Key Source: https://bytebeam.io/docs/platform-guide/metadata/adding-a-metadata-key ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/1baf8e23-6b69-45e5-a57c-f435e084587f.gif) To create a new metadata key in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Metadata** tab and click on the **Create Metadata Key** button Type the metadata key name and click on **Submit** button to create the metadata key # Deleting a Metadata Key Source: https://bytebeam.io/docs/platform-guide/metadata/deleting-a-metadata-key ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/13b94a3d-4ab2-40fe-b73d-46d0c780e3f5.gif) To delete the existing metadata key in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Metadata** tab and click on the **trash**(🗑) icon against the target metadata key Enter the metadata key name and click on **Submit** button to delete the metadata key When a metadata key is set as a serial key, it cannot be deleted until the serial key is unset. # Editing a Metadata Key Source: https://bytebeam.io/docs/platform-guide/metadata/editing-a-metadata-key ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/50ecb4b1-4bcf-40ef-ba31-bbdc90003aa5.gif) To edit the existing metadata key in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Metadata** tab and click on the **edit** icon against the target metadata key Enter the changed metadata key name and click on **Submit** button to edit the metadata key When a metadata key is set as a serial key, it cannot be edited until the serial key is unset. # Introduction to Metadata Keys Source: https://bytebeam.io/docs/platform-guide/metadata/introduction-to-metadata-keys ## Overview Metadata keys are labels or identifiers used to categorize and describe data associated with IoT devices. They provide essential context, helping to organize and manage the data effectively. ## Use of metadata keys For instance, you can create metadata keys like location and use it in filtering devices in Device Management section and can even trigger actions like update\_firmware on those devices. You can create a metadata key and use it in various sections like Device Management, Dashboards etc. You can edit the existing metadata key names. You can delete the metadata keys that are not needed. # Cloning a Role Source: https://bytebeam.io/docs/platform-guide/roles/cloning-a-role ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/fcc83c17-4864-4af5-a84d-6ce1d4615d1a.gif) To clone an existing role in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Roles** tab, locate the role and click on the **clone** icon against it. Change the details from the [Tabs](/platform-guide/roles/roles-sections) and click on **Submit** button to clone the role. # Creating a Role Source: https://bytebeam.io/docs/platform-guide/roles/creating-a-role ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/5668e288-d722-4c98-8fad-b5da490baf6f.gif) To create a Role in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Roles** tab and click on the **Create Role** button Select the details from the [Tabs](/platform-guide/roles/roles-sections) and click on **Submit** button to create the role. You can also create a new role by cloning the existing role. Just click on **clone** icon against the existing role. # Deleting a Role Source: https://bytebeam.io/docs/platform-guide/roles/deleting-a-role ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/f67bbc8b-27c4-4a00-8b91-55d7476c7de1.gif) To delete a role in Bytebeam console, Navigate to the **Settings** tab by clicking on your username at the top right Go to **Roles** tab and scroll to the **Role** which needs to be deleted Click on the **Trash** 🗑 icon against the role you would like to delete Type role name in the field, and Click on **Confirm** to delete it. This action is not reversible. Please be sure of the role selected for deletion. The role cannot be deleted if it's assigned to any of the users # Editing a Role Source: https://bytebeam.io/docs/platform-guide/roles/editing-a-role ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/df568c37-0c5c-485d-bb6c-3868495abe3e.gif) To edit a Role in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Roles** tab, locate the role click on the **edit** icon against it. Change the details from the [Tabs](/platform-guide/roles/roles-sections) and click on **Submit** button to edit the role. # Role Based Access Control Source: https://bytebeam.io/docs/platform-guide/roles/role-based-access-control ## Overview Role-Based Access Control (RBAC) is a security mechanism that restricts access to resources based on the roles of individual users within an organization. RBAC enhances system security by enforcing access permissions based on predefined user roles, ensuring that users only have the permissions necessary for their role. ## Uses of Role Based Access Control: For instance, consider a user who only manages dashboards without needing to trigger any actions on devices. In this case, an admin can create a role that provides access solely to dashboards and streams and then this role can be assigned to the user. You can create a role with the required permissions and assign it to the users. You can edit the existing roles with added or removed permissions. You can delete the existing roles that are not needed. # Tabs in Create/Edit Role modal Source: https://bytebeam.io/docs/platform-guide/roles/roles-sections ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/d31aa5e9-533a-4048-9c2a-fe3122dabaa0.gif) When creating or editing a role, you can fully customize the permissions and then assign the role to specific users. The Create/Edit Role modal includes various tabs, each serving a unique purpose detailed below: ## General In the General tab, you can: * Specify the name of the role. * Select specific tabs * Select a default module as the home page for users with this role ## Device Filters In the Device Filters tab, you can: * Select the filters that determine which devices the user can view in the console. ## Data Access In the Data Access tab, you can: * Select the data streams and fields that the user can access. ## Device Management In the Device Management tab, you can: * Allow creating new devices * Allow user to view metadata keys in device management * Allow user to edit metadata keys in device management ## Dashboards In the Dashboards tab, you can: * Allow user to create, edit, and delete dashboards * Allow sharing dashboards with specific roles ## Actions In the Actions tab, you can: * Allow user to trigger actions * Allow marking action as completed * Allow user to approve or reject actions * Allow user to view firmware versions * Allow user to create, deactivate, and activate firmware versions * Allow user to view files * Allow user to create, deactivate, and activate files * Allow user to view config versions * Allow user to create, edit, and delete config versions * Allow user to create, edit and delete action types ## Settings * Allow user to edit Project settings like pinning metadata in Device Management # Creating a Session Type Source: https://bytebeam.io/docs/platform-guide/session-types/creating-a-session-type ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a9501e10-33d1-4c78-a572-ef1d5a0ae159/e6a8f1ae-babd-4a51-93e4-c400dec6e62a/images/7394febf-3460-46c1-b0ed-0497170cc3c6.gif) To create a new session type in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Session Types** tab and click on the **+ Create Session Type** button Type the session type name, add the conditions by selecting the stream and fields and click on **Submit** button to create the session type. Use the icons next to each created session type to start or stop the session. # Deleting a Session Type Source: https://bytebeam.io/docs/platform-guide/session-types/deleting-a-session-type ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/a9501e10-33d1-4c78-a572-ef1d5a0ae159/e6a8f1ae-babd-4a51-93e4-c400dec6e62a/images/53fde410-d382-4661-97eb-aea6015a7a75.gif) To delete the existing session type in Bytebeam console, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Session Types** tab and click on the **trash**(🗑) icon against the target session type Enter the session type name and click on **Submit** button to delete it. When a session type is running, it cannot be deleted until it is stopped. # Introduction to Session Types Source: https://bytebeam.io/docs/platform-guide/session-types/introduction-to-session-types ## Overview Session types define the rules for sessions, which are crucial for tracking the operating states of IoT devices, indicating whether a device is active, idle, or in a custom state. ## Use of Session Types For example, in vehicles, sessions can show if a car is "running" or "stopped," providing clear insights into its current status. By setting specific conditions while creating session types, you can control when a device starts or ends a session, allowing for better monitoring and management. You can create a session type and check it in Dashboards using Sessions panel You can delete the session types that are not needed. # Add field(s) to Stream Source: https://bytebeam.io/docs/platform-guide/streams-tables/add-fields-to-stream ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/8fce304f-0ade-49ab-baad-26fb6f03ba86/0979ed9e-52dc-4740-b41d-7f0886e4abf8/images/25153ac5-43ea-44de-b73e-2d5459ff2278.gif) To add a field(s) to the existing stream in Bytebeam console, Navigate to the **Settings** Tab by clicking on your username at the top right Go to **Streams** tab and scroll to the **Stream** where new fields need to be added. Enter the field name in the **Field Name** input of the selected Stream and select the field type from the **Select Type** dropdown Click on the plus **(+)** button to add the field right after the existing fields. # Creating a Stream Source: https://bytebeam.io/docs/platform-guide/streams-tables/creating-a-stream Streams (Data Tables) are essential in IoT, enabling real-time processing and analysis of data from connected devices, sensors, and systems. Before streams can be used to build panels in dashboards, they must first be created in the Settings/Streams section. The stream name must match the actual stream produced by the device. ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/8fce304f-0ade-49ab-baad-26fb6f03ba86/0979ed9e-52dc-4740-b41d-7f0886e4abf8/images/08297751-c17e-433a-a8ed-6d672abc4d0b.gif) To create a stream in Bytebeam console, Navigate to the **Settings** Tab by clicking on your username at the top right Go to **Streams** tab and click on the **Create Stream** button Type the Stream name, fields along with datatypes, then click on **Submit** button to create the stream. ## Important Info Make sure the stream name on the platform matches the actual stream name generated by the device. The **Timestamp** and **Sequence** fields are automatically added to every Stream by default. * The **Timestamp** indicates when an event occurred, while the **Sequence** is an auto-increment field pushed by the device. It is used internally to ensure all data sent by the device has reached the server. By default **device\_shadow** and **action\_status** streams get created for every new project # Delete field(s) in Stream Source: https://bytebeam.io/docs/platform-guide/streams-tables/delete-fields-in-stream ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/8fce304f-0ade-49ab-baad-26fb6f03ba86/0979ed9e-52dc-4740-b41d-7f0886e4abf8/images/80a6e55d-1a38-40e0-8f32-6556f0452bd6.gif) To delete a field in an existing stream in Bytebeam console, Navigate to the **Settings** Tab by clicking on your username at the top right Go to **Streams** tab and scroll to the **Stream** and the field which needs to be deleted Click on the **Trash** (🗑) icon against the field you would like to delete Type field name in the field, and Click on **Confirm** to delete the field. This action is not reversible. Deleting a field in a Stream will result in data loss. Please be sure of the field selected for deletion # Deleting a Stream Source: https://bytebeam.io/docs/platform-guide/streams-tables/deleting-a-stream ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/8fce304f-0ade-49ab-baad-26fb6f03ba86/0979ed9e-52dc-4740-b41d-7f0886e4abf8/images/6251d8c5-2a78-41e4-9350-55bf37a31d80.gif) To delete a stream in Bytebeam console, Navigate to the **Settings** tab by clicking on your username at the top right Go to **Streams** tab and scroll to the **Stream** which needs to be deleted Click on the **Trash** 🗑 icon against the stream you would like to delete Type stream name in the field, and Click on **Confirm** to delete the stream. This action is not reversible. Deleting a Stream will result in data loss. Please be sure of the Stream selected for deletion. # Edit the datatype of a field in a stream Source: https://bytebeam.io/docs/platform-guide/streams-tables/edit-datatypes-of-field-in-a-stream ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/8fce304f-0ade-49ab-baad-26fb6f03ba86/0979ed9e-52dc-4740-b41d-7f0886e4abf8/images/4dae19ac-9248-4ef2-9456-d3bf5d6351ea.gif) To edit the datatype of a field in an existing stream in Bytebeam console, Navigate to the **Settings** Tab by clicking on your username at the top right Go to **Streams** tab and locate the field for which the datatype needs to be changed Click on the **Edit** icon at the chosen field and select the desired datatype from the dropdown menu and click on the **Save** icon Type field name in the field, and Click on **Confirm** to edit the datatype of the field. You can modify a field's datatype, but certain restrictions apply. For example, changing a nullable datatype to a non-nullable datatype is not permitted. # Edit the unit of a field in a stream Source: https://bytebeam.io/docs/platform-guide/streams-tables/edit-units-of-field-in-a-stream ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/8fce304f-0ade-49ab-baad-26fb6f03ba86/0979ed9e-52dc-4740-b41d-7f0886e4abf8/images/33b7b35d-ca88-41ca-bca9-0089212e867a.gif) To edit the unit of a field in an existing stream in Bytebeam console, Navigate to the **Settings** Tab by clicking on your username at the top right Go to **Streams** tab and locate the field for which the unit needs to be changed Units are exclusive to Numeric data type columns. Click on the **Edit** icon at the chosen field and select the desired unit from the dropdown menu and click on the **Save** icon to change it. You can even remove the existing **Unit** of a field simply by clicking on cross icon after clicking on edit icon # Introduction to Streams (Data Tables) Source: https://bytebeam.io/docs/platform-guide/streams-tables/introduction-to-streams ## Overview Streams, also known as Data Tables, are a fundamental component in IoT. They enable the real-time processing and analysis of data coming from connected devices, sensors, and systems, making it possible to monitor and interpret data as it’s generated. ## Uses of Streams Streams are used to collect and process real-time data from IoT devices, which can then be visualized in dashboards for monitoring and analysis. For instance, you can create separate streams for temperature and GPS data, which enables you to monitor each truck’s temperature and location in real-time. You can create a stream and use it to visualize data in Dashboards. You can add new fields to an existing stream You can edit the datatypes of field in an existing stream You can edit the units of field in an existing stream You can delete the fields in an existing stream You can delete the streams that are no longer needed. # Creating a User Source: https://bytebeam.io/docs/platform-guide/users/adding-a-user ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/7865bc12-732e-4a6a-a241-9f613c07b204.gif) To create a new User, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Users** tab and click on the **Create User** button Enter the username, email, select a role from dropdown and click on **Submit** button to create the role. ## Important Notes Creating a new User will trigger a welcome e-mail to the given e-mail address. Only admin users have the ability to view, create, edit, and delete users within a project. # Editing a User Source: https://bytebeam.io/docs/platform-guide/users/assigning-a-user-to-a-role ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/ffa0db15-3012-4e01-8c29-d5843b920bc6.gif) To edit an existing user, Navigate to the **Settings Tab** by clicking on your username at the top right Navigate to the **Users** tab, locate the user click on the **edit** icon against it. Change the details like email, select a different role from dropdown and click on **Submit** button to edit the user. # Deleting a User Source: https://bytebeam.io/docs/platform-guide/users/deleting-a-user ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0359be30-7b32-4932-a5d0-d6fc90ecd8bf/a0af0905-f11e-41b5-b52e-98ec3f4f01a3/images/27f8f106-a2c9-40b5-aaf6-a8db3c9cc689.gif) To delete a User in Bytebeam console, Navigate to the **Settings** tab by clicking on your username at the top right Go to **Roles** tab and scroll to the **User** which needs to be deleted Click on the **Trash** 🗑 icon against the user you would like to delete Type user name in the field, and Click on **Confirm** to delete it. As this action is irreversible, please be certain that you have chosen the right User to delete. # Introduction to Users in Projects Source: https://bytebeam.io/docs/platform-guide/users/introduction-to-users-in-projects Every project can have multiple users, each assigned a specific role. For instance, consider a user who only manages dashboards without needing to trigger any actions on devices. In this case, an admin can create a role that provides access solely to dashboards and streams and assign this role to the user. This way, the user will only see the relevant sections needed for their work. [Learn more about Roles](/platform-guide/roles/creating-a-role) You can create a user with a specific role to provide personalized access. You can edit the existing user and change the role that was assigned to him. You can delete the users that are no longer needed. # R1 19-Jan-2023 Source: https://bytebeam.io/docs/release-notes/r1-19-jan-2023 Product Update by 19 Jan 2023, Microsoft Login, Aggregate Panel, Access multiple projects in same browser and other changes ## Support for Microsoft login You can now login to Bytebeam with your microsoft account ## Aggregate values panel now supports adding multiple aggregates This will now allow you to see min/max/avg of a metric in a single widget ## You can now sort actions to show incomplete actions first Bytebeam only pushes actions to devices if there is no other pending action. An annoyance with this was that if there was an action that was triggered long ago and has not yet completed it was hard to find that action out. With this change you can now see the incomplete actions at the top of the page. ## You can now access multiple projects in the same browser Earlier you could only access one project at once. If you had two tabs open and switched to a different project in one of them, the other would also be automatically switched to the new project. This was happenign as project information was stored in shared local storage between tabs. We've moved the project information to the URL. Another side effect of this is that it also makes sharing dashboard URLs easlier. ## Last value panel now supports filters You can now filter out rows being considered in last value panel. Similar support for other panels will be rolled out in upcoming releases. ## Bug fixes & Minor changes * UI elements were realigned and resized to be symmetrical in edit panel widgets * Emails are now stored in lowercase in the database to prevent login errors when emails are manually added in a different case. * Added appropriate response to handle 404 errors in the backend # R10 24-May-2023 Source: https://bytebeam.io/docs/release-notes/r10-24-may-2023 Product Update by 24 May 2023, Pinning Metadata in Device Management, Changes in bar chart panel and other changes ### Ability to pin metadata in device management The metadata fields have a new feature that allows them to be pinned, ensuring their immediate visibility at the top of the devices list table. By hovering over the metadata name, you can select the Pin icon to easily pin that specific metadata. Up to three metadata fields can be pinned. ### Locate device panel improvements Locate device panel has been enhanced with the following abilities: 1\. **Choose the icon for the map marker** \*\* 2. Select multiple device dashboards to link to the device\*\* \*\* 3. Configure Icon color based on Status in device\_shadow\*\* \*\* 4. Show device\_shadow data and metadata on the device popup in the map\*\* ### Bar chart panel We are excited to reintroduce the bar chart panel, which enables you to monitor device data grouped by parameters such as firmware or config version. This powerful tool can also be utilized to track common parameters across multiple devices in the Fleet dashboard. ### Dual y-axis in the line chart A dual y-axes chart **allows you to summarize or plot two y-axes variables that have different domains**. ### Select the number of devices visible on the Device management page Choose the desired number of devices to be displayed on the Device Management page. ### Unselect all from the device count bubble If you have selected multiple devices to trigger an action, you can swiftly deselect all devices by clicking on the bubble displaying the device count. ### Text type payload in actions Previously, there was no way to pass parameters to an action. However, in the preceding releases, we introduced action types that enabled Actions with custom JSON payloads. In our latest release, we are introducing **text-type actions**, which allow you to pass plain text as a payload to the action. ### Bug fixes & Minor changes * Fixed some issues related to the y-axis custom range on a line chart * Bugfixes in adding and saving roles * Changed Admin tab name to Settings for avoiding confusion with the role name * Showing user email Id and role name, on clicking the username * Improved loading time of Streams tab in settings * Validations in filters in the Timeseries panel # R11 21-June-2023 Source: https://bytebeam.io/docs/release-notes/r11-21-june-2023 Product Update by 21 Jun 2023, Updates in line panel, clone panel and other changes ### **Enhanced Fleet Dashboard: Line Chart Grouped by Device ID for Correlated Data Visualization** The line chart now displays data selected based on device ID grouping in Fleet dashboards, enabling you to easily correlate information for individual devices. Utilize dashboard filters to focus on a specific set of devices, further enhancing the line chart's clarity and usefulness. ### **Clone panels in the dashboard** Introducing panel cloning feature in the dashboard for swift creation of similar panels ### **Stay informed about the latest features in the Platform** Now, conveniently explore the newest features added to our platform directly from within the interface, ensuring you're always in the know. ### **Customize Action Overview: Choose the number of actions to display in one page** Added an option which allows you to select the number of actions you want to see in the action list page. Tailor the display to your preferences and optimize your workflow! ### **Select the Number of Devices to Show per Page** Empowering our users to choose the desired number of devices to display on a single page. Easily manage your devices by setting the optimal viewing quantity per page. This option is available in device management and in the device selection in the device dashboard. ### **Enhanced Filter Validation: Improved *****Last Value***** and *****Timeseries Panel***** Functionality** Improved Filters validations for ***Last Value***\*\* **and** *****Timeseries***** \*\*panels maintaining data type consistency, ensuring improved functionality and accurate filtering. ### **Cursor Automatically Focuses on First Action Element when Opening any New Modal** Whenever a new modal is opened, the cursor will automatically focus on the first action element, allowing for quicker and more efficient interaction. ### Bug fixes & Minor changes * Addressed a bug in panel editing where UI retained previous value despite reset in aggregate input, causing confusion. * Data validations have been enhanced to handle duplicate or empty entries across the platform. * Roles and User Accesses (RBAC) received miscellaneous bugfixes. * Overall user experience improved through minor bug fixes for increased platform robustness and error reduction. # R12 21-July-2023 Source: https://bytebeam.io/docs/release-notes/r12-21-july-2023 Product Update by 21 Jul 2023, Enhancement in device pulse panel, Color coding in Logs panel and other changes ### **Device Pulse panel enhancements** Device pulse panel now includes the pulse of all devices, regardless of whether they fall within the specified thresholds. It shows the pulse starting from the last threshold up to the selected time range, and also displays pulse measurements beyond that time range as separate data. In addition, it indicates the total number of devices that have been selected by the applied filters. Now, when viewing the list of devices for a specific threshold, the device list is paginated, allowing for easier navigation. Furthermore, you have the option to download the metadata of the devices listed. ### **Color encoding in the logs panel** Introducing ANSI escape code color encoding in the logs panel, enhancing visualization and improving log analysis. ### **Download metadata of filtered devices** After applying any filter in device management, you now have the option to download the metadata of the filtered devices, as well as the metadata of all devices. ### **Led Panel enhancements** The LED panel now offers the flexibility to choose the size of the LED circles. Additionally, they are presented in a visually appealing grid layout, departing from the previous table layout. ### **Customize point marker size in Line Chart panel** Customize the visual style of line charts by configuring the point marker size ### Bug fixes & Minor changes * Convenient "Click to Copy" functionality now available for metadata keys, values, and device\_shadow values in the device management page * Mandatory fields in each panel are now highlighted in red if validation fails * Micro animation added when uploading files * Creating a new action now retains already entered values upon clicking back * Numerous bug fixes and validations enhancing overall stability # R13 03-Aug-2023 Source: https://bytebeam.io/docs/release-notes/r13-03-aug-2023 Product Update by 03 Aug 2023, Advanced data filtering in charts, Enchance JSON schema and other changes ### **Advanced Data Filtering in Line Charts** We've enhanced our line chart capabilities to now support advanced data filtering. You can add filters based on 'where' conditions on any column value. Plus, you can combine multiple filters using AND or OR conditions. This update provides a more powerful and flexible way to visualize your data. ### **Introduction of GroupBy Feature in Line Charts** We've enhanced our line chart capabilities by introducing a GroupBy feature. This allows you to group data in the line chart based on column values within the device dashboard. Please note that in the fleet dashboard, data grouping is done by device ID by default. This update provides a more flexible way to analyze and visualize your data. ### **Enhanced JSON Schema Support in Configurations** We've enhanced our JSON type actions to now accept a JSON Schema. When such an action is triggered, a form will be presented to the user, allowing them to input the corresponding configuration. This update provides a more flexible and user-friendly way to manage your JSON configurations. ### **Geofence Configuration Enhancement** We've made it easier to set up geofence configurations. You can now do this directly through the maps user interface. The configurations are stored in JSON format and can be activated as an Action on your device. This update provides a more streamlined and efficient way to manage your geofencing needs. ### **Hexadecimal Display Option in Timeseries Panel** We've enhanced the flexibility of our timeseries panel. Now, you have the option to display numerical data as hexadecimal values. This update provides a more versatile way to view and analyze your data. ### Bug fixes & Minor changes * Introduced 'Jump to Page' feature in devices and actions list for easier navigation. * Fixed a bug on the Metadata list page where the page needed to be refreshed after deleting a metadata to create a new one with the deleted name. * Improved performance when triggering Actions using filters for more efficient operations. * Fixed a bug where long metadata were overflowing the device provisioning modal, ensuring a cleaner user interface. # R14 15-Sep-2023 Source: https://bytebeam.io/docs/release-notes/r14-15-sep-2023 Discover the latest enhancements and additions to our IoT dashboard in this document. Explore the new possibility to save personalized time ranges for data analysis, effortlessly rearrange columns in TimeSeries Panels, and enjoy a more user-friendly exper ### **Save Custom Time Ranges** In our latest feature update, you can now set and save custom time intervals to view crucial data. No more being tied to pre-set time frames. Whether it's the last 15 minutes or a specific period from last month, save these settings for quick access from the dropdown later. Analyze your data your way, tailored to your unique needs. ### **Column Reordering in TimeSeries Panels** We've added a new feature to our TimeSeries Panels that allows you to easily reorder columns, putting the most relevant data right where you want it. No more endless scrolling to find the information you need—simply drag and drop columns to customize your table view. This update makes it even more convenient to focus on the data that matters most to you. ### **Enhancing the Save Feature for a More Intuitive Dashboard Experience** We've introduced a new safeguard to ensure you never lose important data. If you attempt to close your IoT Dashboard with unsaved changes, a warning will now appear to remind you to save your work. Plus, we've made the save button more noticeable and added a subtle animation to draw your attention. ### **Highlighting Search Keyword in Log Messages** Now, when you perform a search in the logs panel, all instances of your search keywords will be highlighted. This makes it easier to spot critical information without having to read through each line of log messages. The highlighted text ensures that you can quickly locate and analyze the data you need. ### Bug fixes & Minor changes * Now access deactivated device configs and geofences. * Filters in line charts, timeseries, and aggregate panels now also support boolean and float values. * Fixed an issue where the last value displayed the current date and time incorrectly even when no data was available. * Various minor bug fixes enhance platform stability and reduce errors. # R15 18-Oct-2023 Source: https://bytebeam.io/docs/release-notes/r15-18-oct-2023 Learn about the design and functionality of a responsive dashboard page in this comprehensive document. Discover the benefits of a light mode, explore sorting options for the dashboard list, and find out how to create an engaging "Get started" page. Enhan ### **Light Mode: A Refreshed Look and Feel** Experience Bytebeam in a new light, literally! We're delighted to introduce our Light Mode interface. It's designed not just for aesthetics but also for improved readability and reduced eye strain. Enjoy a visually appealing and functional user experience with this update. ### **Responsive Dashboards: Perfect on Any Device** Our Dashboards page just got a significant upgrade. Now fully responsive, it ensures a seamless user experience across all devices. Whether accessed via desktop or smartphone, your dashboards have been optimized for enhanced clarity and user experience. **Please note:** this enhancement currently applies to the Dashboards page only, we will incrementally make rest of the pages responsive. ### **Introducing the 'Getting Started' Page** Ease into your Bytebeam journey with our newly designed 'Getting Started' page. This streamlined resource directs you to relevant setup documentation, ensuring smoother user onboarding and faster integration with our platform. Navigate with clarity and kickstart your ESP32 projects efficiently. ### **User Interface Update: Enhanced Dropdown Menu** To streamline navigation and improve user experience, we've relocated the project selection and admin settings tabs. You can now conveniently access them within the user dropdown menu, alongside other essential features. ***Please note***\*\* \*\*that the options for **Project Selection** and **Settings** have been relocated to the **User dropdown menu.** ### **Dashboard List Update: Enhanced Sorting Capabilities** We are always working to make navigation and management easier for you. With this in mind, we've introduced advanced sorting capabilities on the Dashboard List page. You can now effortlessly organize and view your dashboards by sorting them based on their Name, Description, Type, or ID. This added functionality ensures a more streamlined user experience, enabling you to find and access the desired dashboard with greater efficiency. ### **Aggregate Value panel: New "Count Distinct" Aggregator** This feature provides the count of unique values, offering a more precise insight compared to the total count. Perfect for identifying distinct data entries in any field. ### Bug fixes & Minor changes We've fine-tuned our platform, squashing various bugs and implementing subtle changes to enhance stability and performance. Enjoy a smoother user experience with these updates. . # R16 27-Dec-2023 Source: https://bytebeam.io/docs/release-notes/r16-27-dec-2023 ### **Alerts System** The platform now features an advanced alert system, designed to efficiently notify users of specific data-related conditions on their devices. These alerts facilitate monitoring and timely responses, and are integrated into the dashboard via the "Alerts" panel. This feature provides users with a rapid, comprehensive view of their device's status, ensuring they are always informed about critical data points. ### a. Alert Rules There can be two types of Alerts: 1. **No Signal Alert:** This alert is triggered when there's an interruption in the data stream from a device for a specified duration. 2. **Signal-based Alert:** This alert type is triggered based on specific conditions set on the data points received from the device. ### b. Alert Notifications Stay informed with real-time alerts. Choose from SMS, Email, Slack, or Webhook notifications to ensure prompt and efficient updates on your device's performance and activities. ### **Sessions** The platform's Sessions feature offers a structured representation of a device's operational states or modes. For example, in the context of vehicles, Sessions can distinguish whether a vehicle is in a "running" or "stopped" state. Utilizing conditions, users can precisely define the transitions into or out of a session. Additionally, Sessions augment the dashboard's visualization capabilities, enabling users to swiftly gauge a device's current state and review its historical session data, thereby enhancing overall operational oversight. ### **Compare Dashboards Feature** Introducing the 'Compare Dashboards' feature in our IoT platform, enabling users to view the same dashboard side-by-side for comprehensive data analysis. This enhancement allows for direct comparison of different devices or varied time ranges on a single screen, streamlining the process of monitoring and analyzing device performance and trends. ### **Add custom states in Led Panel** The latest update allows you to customize the LED panel on the dashboard, enabling the addition of distinct states for both active and inactive conditions. This enhancement brings a new level of personalization and clarity to device monitoring. ### **Ability to download panel data in CSV or XLSX format** ### Bug fixes & Minor changes * Ability to reorder fields in LED and Last Value Panels for improved data visibility. * Added support for Nullable type columns. * Enhanced user experience with persisting filter selections in Logs panel. * Improved visual clarity in line charts by allowing manual margin adjustments to address shrinking issues. * Resolved an issue where 'Last Value' incorrectly displayed '0' as 'No data', ensuring accurate data representation. # R17 26-Jan-2024 Source: https://bytebeam.io/docs/release-notes/r17-26-jan-2024 ### \*\* New Actions : Phased rollouts\*\* We've given our Actions page a fresh look, now displaying more details right on the home screen, including a summary of selected actions. This redesign introduces the phased rollout feature, enabling you to initiate actions in multiple stages and target various devices in each stage. It's a great way to test updates on a small group of devices before expanding to a larger scale. **Release Notes:** Phased rollouts come with the option to save release notes for specific actions, streamlining firmware and other updates for smoother operation. ### **LED and Last Value panels in Fleet Dashboard** The fleet dashboard has been enhanced with the addition of LED and Last Value panels. These new panels provide a visual representation of data for every device in your fleet, displayed in a grid format to show information for each individual device. ### Access Device Logs and History in Device Management Device management now offers direct access to a device's logs and action history. This feature enables you to review past actions taken on the device and examine device logs for efficient debugging. ### **Mark Historical Actions as complete** On the device details page, where you can view historical actions, there's now a feature to mark all outstanding actions, which might be hindering new actions, as complete. This effectively clears the queue, allowing other pending actions to proceed. ### **Streamlined Role Creation** We've made role creation easier and more intuitive with module-level management. Permissions are now neatly organized under corresponding top-level tabs, simplifying navigation. Additionally, we've removed redundant and unnecessary permissions, managing them behind the scenes to minimize complexity and enhance usability. ### Bug fixes & Minor changes * Streamlined Project Selection: Now Achievable with a Single Click. * Upgraded Remote Shell Access: Enables Concurrent Execution of Multiple Actions. * Beta version of StateTimeline Panel: Further Enhancements Coming Soon. * Enhanced Timeseries and Logs Panels: Features New Pagination and Customizable number of Row Display Options. We've fine-tuned our platform, squashing various bugs and implementing subtle changes to enhance stability and performance. Enjoy a smoother user experience with these updates. # R18 22-Feb-2024 Source: https://bytebeam.io/docs/release-notes/r18-22-feb-2024 ### Measurement Units in Stream Settings To elevate data clarity, we've introduced the ability to specify measurement units in stream settings. This update ensures that data streams are accurately annotated with their respective units of measurement in the Last value, Aggregated and Timeseries panels. ### **Filter for Incomplete Historical Actions** We've enhanced device action history by introducing a toggle to exclusively display incomplete actions. This feature allows for a streamlined view and the capability to directly mark these actions as complete. ### **Enhanced Sorting for Historical Actions** Navigating through historical actions is now more intuitive with the introduction of column-based sorting. This enables a better structured overview, allowing actions to be organized by key attributes such as status, or type, significantly improving the experience. ### Precision Control for Data Display Acknowledging the need for detailed data analysis, we've implemented precision control features that allow for the display of data and units with full accuracy. This update is pivotal for users who rely on precise data for decision-making, providing them with exact and detailed information at a glance. ### **List View for LED, Last value, and Aggregate Value Panels in Fleet Dashboard** The fleet dashboard now offers a list view for LED, Last Value and Aggregate Value Panels, complementing the existing grid format. This view mode presents device data in a streamlined list, facilitating easier comparison and analysis of device metrics in a concise format. ### **Delta Aggregate for Trend Analysis in Aggregate panel** Introducing the Delta Aggregate feature in our Aggregate Value Panels, designed to calculate and display the difference between consecutive data points. This analytical tool is invaluable for identifying trends and rate changes over time, offering deeper insights into device performance metrics. ### Bug fixes & Minor changes * Fixed the issue when "Mark all actions as completed" was not able to work on certain actions * Handling of null values in LED panel. * Fixed bugs in Clear All filters in Create New Action We've fine-tuned our platform, squashing various bugs and implementing subtle changes to enhance stability and performance. Enjoy a smoother user experience with these updates. # R19 02-Apr-2024 Source: https://bytebeam.io/docs/release-notes/r19-02-apr-2024 ### **DBC Parser Management** Our platform now provides a robust DBC parser management for streamlining the integration and analysis of data from the CAN-based IoT devices. A DBC parser is a software tool that decodes the messages transmitted on your IoT device's Controller Area Network (CAN) bus. DBC files (Diagnostic Bus Configuration) define the structure, signals (meaningful data units), and scaling factors within these messages. The DBC parser references this file to interpret raw CAN data into clear, actionable information. ### **Adding Phases to Actions** Our platform now offers enhanced flexibility for the New Actions through the ability to add phases post-action creation. This feature allows users to dynamically adjust their deployment strategy by scheduling additional phases for selected devices or device filters. To utilize this, navigate to the existing action, and click on "Add Phase" on top. Here, you can specify the devices or filters and set the schedule. ### **Timeouts and Retry Mechanisms for Non-Phased Actions** Our platform now enhances reliability and control for non-phased actions through the integration of timeouts and retry mechanisms. This feature is designed to mitigate the impact of transient network issues or device unavailability, ensuring that critical actions such as firmware updates or configuration changes are successfully executed. Users can configure action-specific timeout durations and set the number of retry attempts in Advanced options. ### **Enhanced Filter Search in New Action** The Create New Action feature now includes search capability within filters, significantly improving usability when dealing with extensive metadata lists or options. This enhancement allows users to swiftly navigate and select the desired criteria by simply typing in the search bar. ### **Device List Filtering by Status in Action history** Our device list page for actions now features a status filter, allowing users to refine the displayed devices based on their action status. This addition makes it easier to manage and monitor devices by quickly narrowing down the list devices with errors or still in queued state. ### Enabling List View for Alerts Panel Elevate your alert management with our new list view option in the panel's settings. Activate it to efficiently display and navigate through alerts in a streamlined, tabbed format. ### Bug fixes & Minor changes * 🐛 Rectified an issue where the device pulse panel failed to display metadata in the device list. * 🚀 Improved the Device Filter within the action summary, enhancing its performance and eliminating glitches. * 📋 Consolidated available operations for an Action into neatly organized three-dot menu. We've fine-tuned our platform, squashing various bugs and implementing subtle changes to enhance stability and performance. Enjoy a smoother user experience with these updates. # R2 01-Feb-2023 Source: https://bytebeam.io/docs/release-notes/r2-01-feb-2023 Product Update by 01 Feb 2023, New internals, Improved logging with distributed logging and other changes. We've made a lot of improvements and additions in the open source version of our MQTT broker - [rumqttd](https://github.com/bytebeamio/rumqtt). All of the latest advancements from it have been added to the cloud deployment. ### New internals The internal architecture of rumqttd (broker) has been revamped. Broker internally maintains a commitlog that publishers write to and subscribers read from. The earlier design maintained a copy of the entire commit log for each subscriber. In this version, there is now only one copy of the commit log per filter for all subscribers to read from. We maintain a read offset for subscribes into the commit log. This drastically reduces memory usage when there are multiple subscribers subscribed on the same filter.​ Read about other changes to broker's internals in our blog post [here](https://bytebeam.io/blog/the-rust-based-mqtt-broker-rumqtt-gets-new-internals-cl8d5ur0u650711mmnqn9elrxg/). ### Improved logging with Distributed Tracing Tracing support has been added to broker. Every log line emitted by the broker now contains contextual information and machine readable field structure. ​Logs are enriched with information like device id, packet and event types. This means that logs can be used effectively with other programs. Filtering based on a field like client id, topic, tenants, etc. or changing log levels can be done dynamically instead of restarting broker which would result in loosing old logs. A demo of tracing and other related changes can be found in our blog post [here](https://bytebeam.io/blog/rumqtt-release-r18-traceability-metering-and-native-tls-support-clati1td2571801kpsqcjku5bj/). ### Bug fixes & Minor changes * **MQTT v5 experimental support**: Broker supports MQTT v5 for connects, publishes, and subscribes * **Prometheus integration**: With this the broker exposes metrics on an endpoint your Prometheus instance can scrape directly from # R20 09-May-2024 Source: https://bytebeam.io/docs/release-notes/r20-09-may-2024 ### Serial Key Metadata Our platform now features an innovative enhancement that allows you to designate a specific metadata field as a serial key, seamlessly replacing the device ID throughout the console. This new capability streamlines system management by providing a unified identifier that simplifies tracking and improves traceability. With this update, you can enjoy enhanced flexibility in metadata configuration, reduce administrative overhead, and ensure a consistent user experience across the platform. ### Additional settings in DBC Parsers In the last release, we introduced the DBC Parser, a tool that decodes messages from your IoT device's CAN bus using DBC files to translate raw data into clear, actionable information. This release enhances the parser with optional settings, such as: * **Appending CAN IDs** to column names for easier identification. * **Disabling Enum Parsing** for flexible data interpretation. * Configurable **Upper and Lower Thresholds for Flushing Clusters (ms)** to control data processing timing. * A **DBC Version Filter** to identify versions in the CAN table. These improvements provide enhanced flexibility and precision for seamless data analysis. ### CSV/XLSX file upload for selecting devices in multiple phases We've added a new feature that streamlines device selection when triggering a new action. Now, you can upload a CSV or XLSX file containing a list of devices, either by device ID or serial key metadata, for each phase. This enhancement simplifies the selection process, minimizes manual errors, and makes action initiation faster and more accurate, providing a more efficient workflow overall. ### Customize Logo You can now customize the console by adding your own logo, giving it a personalized feel that aligns with your brand. This feature allows you to make the interface uniquely yours, fostering a consistent visual identity that enhances the user experience. ### Action Logs We've introduced action logs that provide detailed insights into each step of the action cycle. These comprehensive logs offer a transparent view of the entire process, making it easy to track progress, diagnose issues, and ensure accountability throughout the workflow. ### Bug fixes & Minor changes * 🤝 The Compare dashboard view is now fully shareable, including timestamps. This improvement enables better collaboration and analysis among team members * \*\*✅ \*\*The Alerts panel and Phased Action in New Action, now feature scrollable tabs, making navigation more intuitive. * 🔧 Panels now have the ability to auto-scale units, providing dynamic adjustments for clearer data visualization. * 🐛 Enhanced error handling in Dashboards and resolved known issues for a smoother user experience. * 🔒 If a user is logged out and then logs back in, they will be redirected to the page they initially attempted to access, ensuring a seamless continuation of their workflow. We've fine-tuned our platform, squashing various bugs and implementing subtle changes to enhance stability and performance. Enjoy a smoother user experience with these updates. # R21 20-June-2024 Source: https://bytebeam.io/docs/release-notes/r21-20-june-2024 ### **Ability to cancel an action** Users now have the ability to cancel an ongoing action. When an action is canceled, it triggers a new \*\*cancel\_action \*\*on the device. If the action is still in a queued state and has not yet reached the device, the system will update the action status to "canceled" without initiating a new cancel action. This will also delete any downloaded firmware or other files on the device. \*\*Note: \*\*This requires Uplink version **v2.13.0** ### **Ability to retry an Action** Users now have the option to retry an action if it is in a failed state. This feature allows the same action to be retriggered without creating a new entry in the user interface. The retry option ensures that users can quickly address and resolve issues without having to initiate a new action from scratch. Additionally, the system maintains the continuity of the action, providing a seamless experience by preserving the original context and parameters of the action, making it more efficient and user-friendly. ### **Show devices with Pending Actions (blockers) when Triggering a New Action** When a new action is triggered, it may be blocked by any pending actions on the device. Now, when initiating a new action, a warning icon will be displayed for devices with pending actions that have the potential to block the current action. Additionally, if you attempt to trigger an action on a device with pending actions, a warning modal will appear. This modal will list the devices with pending actions and provide an option to mark all actions on those devices as complete, thereby unblocking the current action. ### **Action Progress Histogram and Error Distribution Graphs** The summary in the Action Details section now includes an error distribution graph and a progress histogram for the selected action. The error distribution graph visualizes the errors that occurred for an action, showing the count of affected devices, helping to identify common issues. The progress histogram displays the number of devices and their progress in percentage, providing a clear overview of the action's overall progress. ### **Stream Status Panel** A new panel called the Stream Status Panel has been added. This panel visualizes whether devices have received any data in the selected streams within the chosen time range. Additionally, it displays the timestamp of the last received data when hovered over, allowing for easy tracking. This feature is especially useful for diagnosing issues where a device may be unable to send certain data points, helping to identify and troubleshoot data transmission problems more effectively. ### **iFrame Panel** A new Iframe Panel has been added to the dashboard. This panel allows users to embed external web pages directly into the dashboard by providing a URL in the edit settings. Once the URL is entered, the specified webpage will be displayed within an iframe in the panel. This feature enhances the dashboard's versatility by enabling the integration of various web-based tools and resources, such as live data feeds, analytics tools, or custom web applications, providing a more comprehensive and unified view of the operations. ### \*\*Ability to add name to an API key \*\* Users can now add names when creating an API key. This enhancement aids in tracking which API key is responsible for specific actions. The assigned names will appear in the Action List UI and logs, providing clear identification and better traceability of API key activities. This feature simplifies monitoring and management, ensuring users can easily identify and manage their API keys and the actions they perform. ### **Last action on a device can be retried, cancelled or marked as complete from Device management itself** The last action displayed in the device management section within device details now features a three-dot menu, providing a variety of options for managing that action on the device. The available operations include: marking all actions on the device as complete, completing the last action, canceling the action, retrying the action, viewing logs, and accessing the action detail page. This enhancement offers users greater control and flexibility in managing device actions and improving overall device management efficiency. ### Bug fixes & Minor changes * Show device ID on hover over Serial key field in device management * Ability to update Favicon in General Settings * Uncompressed size of the firmware can now be edited * Remote shell action will be marked as completed on closing the modal * Pending actions on devices can be marked as complete while triggering new action * Default device filter in Device Dashboard We've refined our platform by resolving various bugs and implementing subtle changes to boost stability and performance. Enjoy a smoother and more reliable user experience with this update. # R22 25-July-2024 Source: https://bytebeam.io/docs/release-notes/r22-25-july-2024 ### **Enhanced device shadow filters in device management** Now you can filter the devices in device shadow based on device shadow values. Multiple filters can also be applied together along with metadata values.You can now filter devices within the device shadow based on their specific shadow values, allowing for more precise and targeted device management. Additionally, you can apply multiple filters simultaneously, including those based on metadata values, to refine your search and better organize your devices. This enhancement makes it easier to manage and monitor large numbers of devices efficiently. ### **Show Timestamp and Linked Coordinates on hovering on Track Devices Panel** Track devices panel now display timestamps alongside correlated coordinates, when you hover on the device track. It also shows the start and end points if you click on the markers in map. This feature provides precise tracking information, enabling better visualization of device locations over time ### **Initiate Action Phases Based on Previous Phase Success Rate** In phased actions, you can now trigger a phase not only based on a predefined time but also on the success rate of the previous phase. For example, you can configure the second and subsequent phases to activate only if the first phase on test/pilot devices achieves a success rate greater than 60%. ### **Terminate Action Phase if Previous Phase Errors Exceed Defined Threshold** You can now terminate an action phase if the error rate of the previous phase exceeds a defined threshold percentage. This ensures that subsequent phases do not proceed if the earlier phase encounters significant issues, improving overall process reliability and error management. ### **Filters in List of actions** You can now filter the action list using various criteria, including action ID, action creator, and action type. These filters provide enhanced flexibility and ease in managing and organizing long lists of actions, allowing for quicker and more efficient navigation through the action list. ### **Test Alert Notification** You can now test alert notifications before finalizing and submitting them. This feature allows you to verify that notifications are configured correctly, ensuring they function as intended and reducing the likelihood of errors or missed alerts. ### **Enhanced Options when Triggering Actions from Device Management** You can now include advanced options such as action timeouts, auto-retries, and release notes when initiating actions from device management. ### **Optional Second Aggregate for Fleet Dashboard** In the aggregate panel, an optional second aggregate has been added for the fleet dashboard. This enhancement enables more complex calculations, such as determining the maximum speed within a duration by applying the maximum of the maximum speeds of individual cars, providing more accurate and insightful fleet performance metrics. ### **Set action timeouts in minutes and hours** You can now set action timeouts in minutes and hours also, allowing for more precise control over the duration of each action. This feature enables better time management and ensures that actions are completed within the desired timeframe, enhancing overall efficiency and process optimization. ### Bug fixes & Minor changes * 📍 **Track Panel:** Start and End points are now displayed in Blue and Red, respectively. * ⏰ **Fixed:** Custom time selection now persists when switching between action phases. * ⚠️ **Alerts Table:** Activation and deactivation thresholds added. * ⚙️ **DBC Parsers:** Ability to edit additional settings. * 🏷️ **Fixed:** Hover label overlapping in line charts. * 📊 **Panels:** First and Last value aggregators added. * 🗺️ **Map Panels:** Ability to change the default marker color * 🎯 Customizable Decimal Precision for Last Value, Aggregate, and Timeseries Panels We've refined our platform by resolving various bugs and implementing subtle changes to boost stability and performance. Enjoy a smoother and more reliable user experience with this update. # R23 14-Aug-2024 Source: https://bytebeam.io/docs/release-notes/r23-14-aug-2024 ### **Global Action Timeouts** Global timeouts for actions have been introduced across the platform, enabling you to define timeouts at both the action-type and tenant setting levels. In addition to setting timeouts when triggering actions, you can now establish them at a broader level. Actions that exceed the defined timeouts will automatically fail with a message indicating the timeout has been reached. This feature helps prevent older, stale actions from piling up and interfering with the execution of new actions, ensuring smoother and more reliable system performance. **Default timeouts have been set for 30 days at tenant level setting.** ### **Device Action History Improvements** * Pagination improvements * Addition of filters * Efficient column sorting ### **Enhanced Partial Search in Device Management Filters** We’ve upgraded the device management filters to support partial search functionality when searching for metadata. If you're searching for a single metadata key, the system now allows partial search across metadata keys, device shadow fields, and other relevant fields. This makes it easier to locate specific data with minimal input. However, when searching with two or more metadata values, the system will perform a complete exact search, ensuring precise results. This dual approach offers both flexibility and accuracy, enhancing your ability to manage and locate device information efficiently. ### **Serial Metadata in Alerts Panel** When the serial metadata key is configured in tenant settings, it now replaces the device ID column in the Alerts panel as well. While this feature was previously implemented across other sections following the serial metadata key update, the Alerts panel had been an exception. Support for this feature has now been added to the Alerts panel, ensuring consistent display across the platform. ### **Uploader Name in Firmware Inventory** We've added the ability to view the uploader's name directly in the Firmware list within the Inventory. This enhancement provides greater transparency and accountability, making it easier to track who uploaded each firmware version. ### **Improved Error Handling in Device Management** We've enhanced error handling in Device Management to provide clearer and more specific error messages. Whether you’re provisioning a device, performing a metadata bulk update, or updating metadata when a default serial key is set, the system now delivers precise error messages to help you quickly identify and resolve issues. * Serial-metadata value not being unique. * Serial-metadata value being null or empty. * Invalid device IDs * Invalid metadata keys ### **Improved Metadata File Download for Bulk Updates** We have enhanced the template file for bulk metadata updates. Previously, downloaded files included all metadata keys for which view access was granted, leading to complications during bulk updates. With this update, the downloaded file now only includes metadata keys for which edit access is available. This change simplifies the bulk update process by ensuring that only editable metadata is included, reducing the potential for errors and streamlining your workflow. ### Bug fixes & Minor changes * 😊 \[Fixed] The Device Overview page fails to load when stream data access is not granted in the role creation modal. * ⏳ Added a loader to the test notification submit button. * 🔄 Automatic data refresh enabled on the DBC parsers page. * 🚫 \[Fixed] The Action Details page displays as empty when access is not granted. * 🔍 Enhanced URL validation in the Iframe panel. * 🛠️ Bug fixes in bulk metadata updates when filters are applied. * 🔠 Lowered the minimum font size setting for the aggregate and last value panels from 50 to 15. * 📦 Displaying the current release version in the profile dropdown. # R24 04-Sep-2024 Source: https://bytebeam.io/docs/release-notes/r24-04-sep-2024 ### **Alert Groups** We've added alert groups to enhance alert rule management. You can now create or assign existing groups to alert rules. If no group is specified, rules are added to the 'default' group. This grouping displays alert rules in an organized manner, making it easier to manage a large number of alerts efficiently. ### **Filters in Alerts Panel** We have introduced advanced filtering options in the Alerts panel, allowing you to choose between viewing 'All' alerts or specific alerts. Additionally, a new toggle enables filtering by alert groups rather than individual alert rules. When this toggle is enabled, you can filter by 'All' alert groups or select specific groups. The results are sorted in the panel, prioritizing alert rules or groups with the highest number of alerts at the top, followed by those with fewer or no alerts. This enhancement is designed to improve visibility and streamline alert management. ### **Aggregates in Alerts Panel** The alerts panel now includes a dropdown menu for selecting aggregate data options, such as min, max, sum, avg, count, first, and last. These aggregates provide a detailed overview of the data generated during alerts, enhancing analysis and decision-making. Once selected, the chosen aggregate appears in a separate column within the panel, making it easier to compare and quickly assess alert data. ### **LTTB Aggregate** We've introduced a new aggregate option called LTTB (Largest Triangle Three Buckets) for line charts, now available in the Aggregator dropdown. LTTB provides a more accurate representation of data compared to traditional aggregators like min, max, and others. This enhancement ensures that your line charts more precisely reflect the underlying data, improving the accuracy and reliability of visual analyses. [Learn more about LTTB](https://clickhouse.com/docs/en/sql-reference/aggregate-functions/reference/largestTriangleThreeBuckets) ### **Timezone support added to notification rules.** Timezone support has been added to notification rules, allowing you to set timezone information when creating a notification rule. Once configured, notifications will be sent according to the selected timezone. A wide range of timezones are available, including Asia/Kolkata, UTC, America/New York, and more, ensuring your alerts are aligned with your local time. ### Bug fixes & Minor changes * 🛑 Disabled the delete icon and added a popup when a notification rule cannot be deleted. * 📄 Added pagination support in the Alerts panel for easier navigation. * 🔍 Sessions Panel: Implemented validation to prevent duplicate aggregate names. * 🛠️ \[Fixed] Issue where edited notification templates were not displaying correctly in the UI. * ✅ Applied filters are now accurately displayed in the download filter metadata modal. * 🚫 Added validation to prevent creating a DBC with existing table names. * 🖥️ Displaying Device Type data in the Profile dropdown menu. # R25 02-Oct-2024 Source: https://bytebeam.io/docs/release-notes/r25-02-oct-2024 ### **Actions V4** We have introduced a new **Device Components** option, which can be enabled or disabled in the General Settings as needed. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/WBF7cBTNd3KTYLQ__TAei_image.png) * When enabled, a *Device Components* section will appear in the Settings menu, allowing you to manage device components by adding, editing, and deleting them. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/zoZpCNRA6ZWH8DksWAtxT_image.png) * Enabling this feature will replace the existing firmware versions section with a new **Firmware Bundles** section. Each added device component will be displayed as a separate tab in the *Firmware Files* section, where you can upload firmware versions individually for each component. * You can also specify dependencies for other components during the firmware upload process. Additionally, existing dependencies can be updated or cleared. ![](https://archbee-image-uploads.s3.amazonaws.com/cnNH2TtsognywFGU1FgsQ-jXca1uxP1MFfMzatLJhEj-20241003-041313.png) * You can create **Firmware Bundles** by selecting specific components along with their respective versions, which can be downloaded as zip files. These bundles can also be used to trigger the **update\_firmware** action. ![](https://archbee-image-uploads.s3.amazonaws.com/cnNH2TtsognywFGU1FgsQ-7NHPVg24m-ujooslSPn1Y-20241003-041431.png) ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/htqPpqdx1gj86J2kb90-X_image.png) * **When disabled**, the *Device Components* section will be removed, and the system will revert to the previous *Firmware Files* setup. ### **DBC Update** ![](https://archbee-image-uploads.s3.amazonaws.com/cnNH2TtsognywFGU1FgsQ-3YYvD-vxh3vHsNBVKLQBR-20241003-054358.png) ![](https://archbee-image-uploads.s3.amazonaws.com/cnNH2TtsognywFGU1FgsQ-lAap3LFXVh0rLj-IPosom-20241003-054449.png) We've introduced a new feature to allow updating DBC files from the platform. Key highlights include: * **DBC File Upload**: Users can now update the DBC by uploading a new DBC file and comparing it against the existing one. * **Signal Comparison**: Current DBC file will be compared with the uploaded new DBC file and automatically differences will be categorized into three distinct categories: * **Added Signals**: Lists signals that are present in the new DBC file but not in the old one. * **Deleted Signals**: Lists signals that were present in the old DBC file but are missing in the new one. * **Updated Signals**: Shows signals that exist in both files but have changed attributes. * **Custom Modifications**: Users can manually adjust signals between these categories (e.g., Select a signal from *Added* and *Deleted* category and then transfer it to the *Updated* category) * **Note**: Parser cannot be updated while it is in a running state. You must stop the parser before starting any update. ### Latency Histogram We are displaying the \*\*Latency Histogram \*\*now for any action. This histogram represents various states such as *Scheduled*, *Queued*, *In Progress*, etc. The x-axis shows time in milliseconds, while the y-axis indicates the number of devices, providing a visual distribution of how long devices spent in each specific state. ![](https://archbee-image-uploads.s3.amazonaws.com/KgoQSkw-NkQJykt01OVJo/uRZf7n66Xq4LWO0SY4GqE_image.png) ### Line Chart Raw Data Download We've provided an option to download the raw data from line charts. Now, you can download the data for various streams in \*\*CSV \*\*and \*\*XLSX \*\*formats, enabling seamless data export and analysis directly from the chart view. ![](https://archbee-image-uploads.s3.amazonaws.com/cnNH2TtsognywFGU1FgsQ-qQoFoxqMo95LvXAaE4I3c-20241002-115016.png) ### Minmax Aggregate We've provided a Minmax option in the aggregate dropdown for the line chart. This feature allows you to visualize the minimum and maximum values of data points within each aggregation interval across the selected range, providing a clearer understanding of data variation and extremes. ![](https://archbee-image-uploads.s3.amazonaws.com/cnNH2TtsognywFGU1FgsQ-lcHA1x1YQyUgTfSmlRkg_-20241003-043437.png) ### Clone Roles We've introduced the option to clone an existing role and customize it to meet specific requirements. The cloned role can then be assigned to users, granting them access based on the permissions defined within the role. ![](https://archbee-image-uploads.s3.amazonaws.com/cnNH2TtsognywFGU1FgsQ-RlvHE0FDa5Vz00gh9JKCm-20241003-043017.png) ![](https://archbee-image-uploads.s3.amazonaws.com/cnNH2TtsognywFGU1FgsQ-CGBsNMEa-FdgmfpGe-PWL-20241003-041657.png) ### Bug fixes & Minor changes * ⏱ **Device-Level Timeouts**: Implemented timeouts for actions at the device level. * 📜 **Action Logs View**: Added the option to view action logs directly on the Action Details page. * 📊 **Threshold Options for Line Charts**: Added both upper and lower threshold settings for line charts. * 🚀 **Performance Improvement**: Introduced a limit of 40 on the "Last Value Panel" columns to enhance performance. **Existing dashboards with more than 40 columns will have to be updated or split into multiple last value panels.** # R26 06-Nov-2024 Source: https://bytebeam.io/docs/release-notes/r26-06-nov-2024 ### **Dashboard History** ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/2a33ee03-771f-43d6-b025-d960e8495f0f/bfa5ff14-a5b8-4879-bbcc-35a2f0f45f35/images/e4da79ae-61bb-4424-b897-e3d223c1a0b1.gif) We’re excited to introduce the Dashboard History feature, designed to track all changes made to a dashboard from its creation. With this feature, you can easily restore any previous version of a dashboard, ensuring flexibility and control over your configurations. Additionally, you can rename versions for easy identification and even undo a previous rollback if needed. On the right side of the Dashboard History view, you’ll find the JSON representation of each version, providing a detailed look at every modification. ### **DBC Types** ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/6cebd436-f759-4e2c-86f7-b83a05971b5e/7d197c22-cb19-41dc-bea1-3dd32eb16fc2/images/f9c51358-7415-474c-a8a1-ff5bb3919cce.gif) We’re pleased to announce the DBC Type Selection feature, offering greater flexibility in how you configure DBCs. You can now select from standard DBC types, including OBD and JDBC, directly from the dashboard. This allows you to create a JDBC DBC with a customized number of Parameter Group Numbers (PGNs) or an OBD DBC with your chosen CAN ID—all without needing to upload a DBC file. If you prefer to use a custom DBC file, simply select the Custom option and upload the file. ### **Notifications to Whatsapp channel** ![](https://usercontent.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/600c29cb-f3b7-4784-8a80-106044713d0b/5ecd17dd-7c5f-4866-a186-a3f1b2fbc0c1/images/e4f0569b-42ba-4aba-afd1-168b943b16cb.gif) We’ve added WhatsApp as a notification channel, allowing you to receive alerts directly through WhatsApp. You can enter a WhatsApp-enabled mobile number and provide alert rule along with template IDs for activation and deactivation to get started. This new feature offers a convenient way to stay informed with real-time notifications right on WhatsApp. ### Bug fixes & Minor changes * 📌 Made the table headers sticky in the Parsed DBC modal. * 🖥️ Displaying the count of devices in the Device Management. * 🛑 Disabled delete icon at the columns if the stream is being used in DBC parser. * 🛡️ Provided validations for filters in Device Management based on the data types of device shadow columns. # R27 05-Dec-2024 Source: https://bytebeam.io/docs/release-notes/r27-05-dec-2024 💡 **Explore Our Latest Features** Take a deep dive into our new features! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. ## Important Update The documentation has been updated! Check out the [Beta Version](https://bytebeamio.mintlify.app/getting-started/signup) and share your valuable feedback. ## Notify on Alert Deactivation We’ve introduced a new feature called **Notify on Deactivation**. Previously, users received notifications only when an alert was activated. Now, users can also receive notifications when an alert is deactivated, based on the configured deactivation template. To use this feature, simply enable the "Notify on Deactivation toggle" while creating or editing notification rules. **Important Note:** If you enable this toggle for existing notification rules, you will receive notifications for all the alerts that got deactivated within the last hour for the corresponding alert rule. [**Try Notify on Deactivation**](https://stage.bytebeam.io/projects/demo/alerts/alert-notification) ## JSON View for Geofence Configurations We’ve introduced a new **JSON View** feature for Geofence configurations. Previously, users needed to select a region on the map to define the geofence polygon while creating a geofence configuration. With this update, users can now directly input a JSON object containing latitude, longitude and enter the details such as alert threshold and version name. This allows for quicker and more precise geofence creation. Once the geofence configuration is created, users can update their devices with the corresponding geofence version to enable tracking. ## Dashboard Linking for Alerts We’ve introduced a new feature that allows users to link dashboards directly to alert rules. While creating an alert rule, you can now include a device or fleet dashboard link. This link will be displayed in the **Alert Rules table**. Additionally, the linked dashboard is accessible from the **Alerts panel**. Clicking the link in the Alerts panel will redirect you to the corresponding dashboard, with the alert's time range automatically applied for seamless analysis. ## Group by second aggregator For **fleet dashboards**, we’ve introduced a new feature in the **Aggregate Value panel** enabling users to apply a secondary aggregation with grouping. When selecting a primary aggregator (e.g., min) and a secondary aggregator (e.g., max), it creates combinations like max(min). With the Group by Second Aggregator toggle enabled, the grouping operation is applied to the secondary aggregator. **Example:** * If you select mode as the column and set the primary and secondary aggregators to max and count, it calculates count(max). * When the toggle is enabled, it groups by mode values (e.g., on and off) and shows the count of devices in each state. **Note:** This feature is exclusively available in fleet dashboards. ## Disabled Auto-Refresh for Device Shadow Filters We’ve disabled auto refresh functionality for device shadow filters to enhance usability and stability. Previously, when users applied filters like mode=on, the displayed devices would constantly update due to real-time data changes. With this update, the filtered data now remains stable, and users have the option to manually refresh the page using the **Refresh** button to update the device shadow data. **Note:** This feature applies only to device shadow filters and does not support metadata filters, such as City is Bangalore. ## Action Settings in Role Management We’ve moved the **Action Settings** tab inside Actions and updated the **Create Role modal** by introducing an additional permission option. **With this enhancement:** * Admins can now specify whether non-admin users can only view or also create, edit, and delete action types within the tenant. * Non-admin users will only see the action types for which the admin has granted access. This update provides more granular control over permissions for action types. ## Bug fixes & Minor changes * 🕒 **Insert Timestamp Column:** Added an insert\_timestamp column to every stream to facilitate easier debugging. * 🔗 **Dashboard Linking:** Enhanced dashboard linking by displaying both device and fleet dashboard links for better navigation. * 🆔 **Unique IDs:** Provided unique IDs for Notification Rules and DBC Parsers to improve identification and management. * 📤 **Firmware Upload Status:** Now showing upload status for individual firmware files for better visibility and tracking. 💡 **Need More Insights?**\ Want to better understand how these features work for you? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R28 05-Feb-2025 Source: https://bytebeam.io/docs/release-notes/r28-05-feb-2025 💡 **Explore Our Latest Features** Take a deep dive into our new features! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. ## Important Update The documentation has been updated! Check out the [Beta Version](https://bytebeamio.mintlify.app/getting-started/signup) and share your valuable feedback. ## Status Bar for Updates We have introduced a new status bar to provide a unified view of key platform insights. Situated at the bottom of each page, it lets you quickly check **device metrics**, **payment information**, and notifications without changing contexts. On the Device Management page, it shows how many devices are currently active and displays the most recent “Data Last Refreshed” timestamp. Once the invoice gets generated, the status bar displays a notification message under notification icon and when the specified date arrives, the message appears on the status bar, ensuring you never miss important renewals. These automatic reminders help you stay on top of subscription renewals and ensures avoiding last-minute rushes or service interruptions. ## Streams Section Redesign We’ve redesigned the **Streams** page to improve **performance** and **usability**. Streams are now displayed in an accordion format, allowing you to expand each stream to view its columns, data types, and units. You can easily add new columns using the + icon and remove entire streams with the delete icon. Each column’s data type and unit can be edited using the edit icon, while individual columns can also be deleted. A new **search** feature allows you to find both streams and columns by keyword, with matched results highlighted for better visibility. These updates enable faster loading times and simplify stream management, making it more intuitive and efficient. ## Bug fixes & Minor changes * **Line Chart:** Fixed the cursor focus issue in the Advanced Settings section of Line Chart in Dashboards. * **View Payload:** Added the view payload option in the Device list and Last Action sections 💡 **Need More Insights?**\ Want to better understand how these features work for you? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R29 08-Mar-2025 Source: https://bytebeam.io/docs/release-notes/r29-08-mar-2025 💡 **Explore Our Latest Features** Take a deep dive into our new features! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. ## Important Update The documentation has been updated! Check out the [Beta Version](https://bytebeamio.mintlify.app/getting-started/signup) and share your valuable feedback. ## Alerts & Notifications Enhancements We've made slight improvements to Alerts & Notifications. These updates improve flexibility and clarity in alert handling: * Introduced a field in the Create/Edit Notification Rule modal to specify a name for better identification. * You can now include **Alert Instance ID**, **Notification Rule ID**, and **Notification Rule Name** in your templates. See the image for reference and check out this [guide](/platform-guide/alert-system/notification-system/alert-templates) to learn more about configuring alert templates. * Notification rules can now be deleted, even if the associated alert has been processed. * Similarly, alert rules can now be deleted even if notification rules using these alert rules exist.\ Deleting an alert rule will also delete all the associated notification rules. ## Bug Fixes & Minor Improvements * **Auto-Retry Mechanism**: Actions now automatically retry if auto-retry is enabled, even if the action times out. * **Launch Shell Visibility Change**: The Launch Shell action has been removed from Actions List and Device Management but remains available in Historical Actions List. * **UI Refinements in Alerts & DBC Parsers**: Hovering over the name now reveals both the ID and name, making the interface cleaner while still providing access to key details. 💡 **Need More Insights?**\ Want to better understand how these features work for you? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R3 10-Feb-2023 Source: https://bytebeam.io/docs/release-notes/r3-10-feb-2023 Product Update by 10 Feb 2023, Device Management design overhaul, Advanced edits in dashboard, Description option in the Dashboard settings and other changes ## Device management design overhaul We have made more space in the device management by organising the Metadata, Device shadow and recent Action details inside the collapsible Accordion. ## Advanced edit in dashboards When you edit the dashboard you get an 'Advanced Edit' option at the bottom, on clicking it you get taken to editor page, where power users can directly edit the JSON body of the Dashboard ## Info(description) option in the Dashboard settings You can now add Info in Dashboard settings, which would be visible in Dashboard list ## Add all columns option in Timeseries Panel TimeSeries panel now has an option to add all columns in one click ## Confirmation dialog on activating and deactivating device Now the platform will ask for confirmation, when any device is activated or deactivated ## Bug fixes & Minor changes * Few bug fixes in Aggregate panel and Project selection modal * Showing Payload Type in Actions List page inside Admin tab * Bug fix for when after creating Actions or Metadata, we had to refresh the page again to see the new entries # R30 20-Mar-2025 Source: https://bytebeam.io/docs/release-notes/r30-20-mar-2025 💡 **Explore Our Latest Features** Take a deep dive into our new features! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. ## Important Update The documentation has been updated! Check out the [Beta Version](https://bytebeamio.mintlify.app/getting-started/signup) and share your valuable feedback. ## Live Alerts dashboard We have introduced an **Alerts Dashboard** section within the **Alerts** tab to provide real-time visibility into ongoing alerts. Users can: * Filter alert rules to view a specific set instead of all available rules. * Enable the **Group by Alert Groups** toggle to organize alerts by group. * Apply custom time ranges to focus on alerts within a specific period. * Benefit from continuous table refresh, ensuring updated alert data is always available. This feature allows to monitor alerts directly without navigating into other dashboards. ## Bug Fixes & Minor Improvements * **Shareable Filtered Views via URL**: Applied filters in sections like Device Management are now included in the URL query parameters, making it easier to share a specific filtered view. * **Real-Time Updates in Device Actions Table**: The Device List table for any action now auto-refreshes, allowing users to track action progress without manual intervention. * **Default Filter in Dashboards**: Dashboards now include ID/serial key filter options by default, ensuring users always have the option to filter devices, especially when creating a device dashboard. 💡 **Need More Insights?**\ Want to better understand how these features work for you? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R31 07-Apr-2025 Source: https://bytebeam.io/docs/release-notes/r31-07-apr-2025 💡 **Explore Our Latest Features** Take a deep dive into our new features! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. ## Important Update The documentation has been updated! Check out the [Beta Version](https://bytebeamio.mintlify.app/getting-started/signup) and share your valuable feedback. ## Filter by Last Heartbeat ![](https://usercontent.in.prod.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/1a6e9c4a-8b22-4157-a696-4505a2a78963/aa343f19-712a-4d90-9b5e-c92e37d156ca/images/4609c7f4-ab9e-4e26-9ef1-fd7753af975d.gif) We have introduced a Last Heartbeat filter in the Device Management section to enhance device monitoring. Users can: * Select predefined time intervals such as a few seconds, 5 minutes, or 1 hour. * Use the Custom option to enter a specific number and choose from time units like seconds, minutes, hours, days, weeks, or years. * Combine this filter with existing metadata and device shadow filters for more precise device management. This feature allows users to quickly filter active devices and perform operations such as triggering OTA updates and downloading metadata for the filtered devices. ## Panel search in Dashboards ![](https://usercontent.in.prod.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/29969e2a-9c11-45de-8e43-a190692dde12/387ee94b-b73f-44bc-8d16-54a280763709/images/f122ffe9-de2d-4ae8-a2da-b0dea4c34470.gif) Users can now search using a panel type (e.g., line chart), panel title, stream names used in the panel, or column names within the panel. This feature enhances panel filtering within dashboards, making it especially useful for navigating dashboards with a large number of panels. Ensure all changes are saved before applying a search. If modifications are made after applying the search filter, remove the filter first and then save the changes. ## Bug Fixes & Minor Improvements * **User Data in OTA Updates**: A user data field is now available when triggering an OTA update, allowing additional details, such as custom instructions, to be sent. These instructions can prompt the end user for confirmation before installation. * **Shareable Filtered Views**: Filters applied in the Alerts Dashboard are now reflected in the URL, allowing users to easily share specific filtered views. * **Null Filters for Metadata**: Added support for null and not null operators in metadata filters, enabling filtering based on missing or available metadata keys. 💡 **Need More Insights?**\ Want to better understand how these features work for you? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R32 24-Apr-2025 Source: https://bytebeam.io/docs/release-notes/r32-24-apr-2025 💡 **Explore Our Latest Features** Take a deep dive into our new features! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. ## Important Update The documentation has been updated! Check out the [Beta Version](https://bytebeamio.mintlify.app/getting-started/signup) and share your valuable feedback. ## Table View as Default in Fleet Dashboard ![](https://usercontent.in.prod.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/0980c69f-d25a-4c34-be1e-7ad7bcdcc9b9/27a65d1b-53fd-4b68-92f6-b4b55ed403c4/images/ab651988-4cac-4db0-aaef-742140aaacac.gif) We have introduced the tabular view as default for **LED**, **Aggregate Value** and **Last Value** panels in the **Fleet Dashboard**. Users can now select specific columns in each of the above panels. The first column will display Device IDs or metadata keys, followed by the columns you've selected for that panel. With all the selected information visible for all devices at once, users can quickly compare and identify patterns or anomalies across the fleet. ## Warning Modal for Devices with Ongoing Actions ![](https://usercontent.in.prod.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/afdafaef-3233-4b38-a9b3-22bdc58ac7ab/79d2305c-e6f2-40d8-8cbb-eecdbd5fcb33/images/03567a99-6a09-43e1-8c1f-2e0b65cfede1.gif) We have implemented a **warning modal** which will be displayed when users attempt to trigger an action from **Device Management** on devices with ongoing actions. Users have two options: * **Complete existing actions and proceed** – This will mark any pending actions on the platform as complete before proceeding and triggers the action. * **Proceed anyway with new action** – This will trigger the new action. If the action is scheduled for immediate and device is already busy, the action will enter the Queued state. This feature allows users to make informed decisions when managing device actions by providing visibility into ongoing tasks. It helps prevent conflicts and ensures better control over device workflows. ## Search bar in Streams modal ![](https://usercontent.in.prod.clueso.io/1f4455e0-789e-4beb-8cd9-4dac96bc47e4/c778734a-a399-4bcf-ad59-f6bbc79a87b9/5bdaea40-df67-440c-9484-aad2f1d1aca5/images/84a61411-5bfb-40c0-95b9-219aafa5892f.gif) We have added the **search bar** to the Devices/Streams modal, allowing users to quickly find specific streams by stream name or associated column names. This enhancement is especially useful when dealing with a large number of streams, making it easier to locate and view the desired stream data with just a click. ## Bug Fixes & Minor Improvements * **Improved Project Selection**: The "Select another project" hyperlink has been replaced with a more prominent call-to-action button named "Switch Project" for better visibility. * **Mobile Access to Alerts Dashboard**: The Alerts Dashboard is now accessible from the mobile navigation bar for improved usability on smaller screens. * **Boolean Dropdown in Alert Rule Modals**: Columns with boolean data types now display a dropdown with true/false options in the Create/Edit Alert Rule modals for easier rule configuration. * **Last Refresh Timestamp**: The Alerts Dashboard now shows the last refresh time in the status bar, giving users clearer visibility into data freshness. 💡 **Need More Insights?**\ Want to better understand how these features work for you? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R33 20-May-2025 Source: https://bytebeam.io/docs/release-notes/r33-20-may-2025 💡 **Explore Our Latest Features** Take a deep dive into our new features! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. ## Important Update The documentation has been updated! Check out the [Beta Version](https://bytebeamio.mintlify.app/getting-started/signup) and share your valuable feedback. ## Improved Filtering Experience in Device Management **Multi-Value Metadata Filters**: You can now enter multiple values for metadata keys simultaneously, allowing for more refined device selection. **Chained Filtering**: Combine multiple filters using parameters such as **Device ID**, **Metadata Keys**, **Device Shadow**, and **Last Heartbeat** to build complex queries with ease. Filters have been moved into a clean, dropdown modal. This modal allows the following. * Add multiple filtering conditions. * Apply various operators and logic. * Reset filters with a single click. When **Device Shadow** filters are active, automatic refresh is paused. Use the refresh icon to get the latest data. These updates significantly improve usability and control, allowing for more dynamic and efficient device management. ## Enhanced Device Selection in Device Management Users can now use **"Select All"** when device shadow filters are applied. The device list is frozen during selection to prevent changes from live data refreshes, making bulk actions like **OTA updates** more reliable. For example, if you're planning to perform an OTA firmware update for all devices running a specific version, you can: * Apply the device shadow filter based on the firmware version. * Use the **"Select All"** checkbox to select all filtered devices. * Trigger the **"Update Firmware"** action with confidence, knowing the targeted devices remain unchanged during selection. ## Layout Refinement for Cleaner Dashboard Experience We’ve made subtle but impactful layout improvements to enhance clarity and usability across the dashboards: Grouped the **Compare**, **Dashboard History**, and **Settings** options together and converted them into icons for a cleaner look.\ Moved the **filter** section to the left side to better align with natural scanning patterns.\ Relocated the **+ Panel** button below and redesigned it as a Call-to-Action (CTA) for better visibility and intuitive access. These layout changes aim to make navigation more seamless and actions easier to discover—without affecting existing functionality. ## Bug Fixes & Minor Improvements * **State update issue in Device Actions**: Resolved a bug where button states did not immediately reflect cancelling, retrying, or completing actions on devices * **Toggle selection persistence in Inventory**: Toggle selections in the Inventory view will now persist more reliably across interactions * **Dashboard options hidden for newly created dashboards**: To minimize visual clutter and improve user focus, dashboard options are now initially hidden for new dashboards. 💡 **Need More Insights?**\ Want to better understand how these features work for you? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R34 28-June-2025 Source: https://bytebeam.io/docs/release-notes/r34-28-june-2025 💡 **Explore Our Latest Features** Take a deep dive into our new features! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. ## Important Update The documentation has been updated! Check out the [Beta Version](https://bytebeamio.mintlify.app/getting-started/signup) and share your valuable feedback. ## DBC RBAC Enhancements We’ve introduced Role-Based Access Control (RBAC) for the DBC Parsers section to provide granular permission management. Now, roles can be configured with fine-grained access including the ability to: * View DBC Parsers * Create, Edit, Start, Stop, Delete Parsers * Update Parsers * Download DBC Parsers These permissions can be managed via the **Create/Edit Role** modal. Once assigned, users will only see and perform actions permitted by their role.\ Additionally, **DBC Parsers** has been moved from the **Settings** menu to the **Top Navigation Bar** for quicker access. ## Device IDs support in Alert Rules and Session Types We’ve added the ability to target specific devices when configuring Alert Rules and Session types. Instead of applying rules across all devices, users can now associate rules with selected **Device IDs** only. This improves how precisely users can define targeting conditions. Users can view associated devices via **tooltips** by hovering over the alert rule name or session type name. ## Filtering in Notification Rules We’ve added a **channel-based filter** to the Notification Rules page to streamline rule management. * Easily filter notification rules by their associated channel. * A **count** is displayed next to each channel to provide a quick overview of rule distribution. The count is displayed in **Users** section as well for Roles. ## Bug Fixes & Minor Improvements * **Simplified Alert and Notification Rule Configuration**: Included alert rule type and channel selection directly in the Create/Edit Alert Rule and Notification Rule modals to eliminate the extra configuration step. * **Alert Rule Count Per Group**: Displayed the alert rule count for each alert group in the Alert Rules section for better visibility and management. * **Session Type Visibility Based on Alerts Toggle**: Automatically hide the Session Types section when the Alerts & Notifications section is disabled to keep the interface clean and context-aware. 💡 **Need More Insights?**\ Want to better understand how these features work for you? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R35 08-October-2025 Source: https://bytebeam.io/docs/release-notes/r35-08-oct-2025 💡 **Explore Our Latest Features** Take a deep dive into our new features! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. ## 🚦 Duplicate Signals Handling We’ve enhanced the DBC parser workflow to automatically detect and display duplicate signals immediately after the DBC file is uploaded.\ Users can now choose to: * ✅ **Allow duplicate signals** and proceed with parser creation * 🛠️ **Fix duplicate signals** and re-upload the DBC file before creating the parser This improvement also applies when **updating an existing DBC parser**.\ Duplicate signals are automatically managed by appending the `can_id` as a suffix during updates. ## 📦 Bulk Download for Device Shadow & Last Action Details You can now **bulk download Device Shadow and Last Action details** along with Metadata for any specific device in **Device Management**. Filters can be applied to download data **only for selected devices**, giving you greater control and flexibility. ## ⚙️ Download Data with Hex & Precision Control A new option has been added to **download data in hexadecimal format**, and users can now **define round-off precision** for float values.\ This provides more flexibility when exporting data for analysis or integration. ## 🐞 Bug Fixes & 🔧 Minor Improvements * **Performance optimizations** – Improved performance with 5x faster parsing and 30x lower resource utilization in **DBC Parsers**. * **Copy multiple details at once** – Quickly copy Metadata, Device Shadow, and Last Action details for any device from the Device Management page. * **Enhanced Data API** – The Data API now supports additional filters like **serial metadata** and other parameters, making it easier to fetch precise information. 💡 **Need More Insights?**\ Want to better understand how these features work for you? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R36 03-December-2025 Source: https://bytebeam.io/docs/release-notes/r36-03-dec-2025 💡 **Explore Our Latest Features** Take a deep dive into what’s new in this release! Have questions? [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) for a personalized walkthrough. *** ## 🚦 Device Shadow & Last Heartbeat Filters in Actions We’ve expanded the filtering capabilities on the **New Action** page by adding: * **Device Shadow stream columns** * **Last Heartbeat timestamp** This enhancement allows you to precisely filter and target devices *before* selecting them and triggering an action — giving you greater accuracy and control when managing device operations. *** ## ✉️ Custom Subject Line for Email Notification Rules You can now **customize the Subject line** while configuring **Email Notification Rules**. A default subject template is provided, and users can easily edit it to align with their notification style, making alerts more meaningful and easier to identify. *** ## 🐞 Bug Fixes & 🔧 Minor Improvements * **Performance optimizations** – Improved performance with 5x faster parsing and 30x lower resource utilization in **DBC Parsers**. * **Phases sunset** – Removed the *Phases* feature from Actions for a cleaner and more streamlined experience. * **Hex & precision download options removed** – Removed the *Download with Hex* and *Round-off Precision* options from the Download Data modal due to performance concerns. *** 💡 **Need More Insights?**\ Want to understand how these improvements can help your workflow?\ [**Request a Demo**](https://cal.com/kraviteja/bytebeam-101) and schedule a personalized session with our team. # R4 22-Feb-2023 Source: https://bytebeam.io/docs/release-notes/r4-22-feb-2023 Product Update by 22 Feb 2023, Changes in device card, Change sin aggregate panel and device pulse panel and other changes ## View Device dashboard and Streams data from Device card in Device Management From Device Management, we can now directly open device dashboards and see the content of any streams for the device ## Aggregate panel to have option to select text size or auto mode In the Aggregate panel, now we can choose to auto adjust the font size based on panel size or we can give fixed font size. ## Enhancements to Device Pulse panel Now on clicking on the Pulse icon, you can navigate directly to the device dashboard specified in settings. Also, now on clicking of the Device numbers, you can see the list of the devices. ## Bug fixes & Minor changes * Fixed a bug where multiple filter changes on dashboard at once would show the wrong data * Fixed issues with horizontal scroll not being visible on lower resolutions * Fixed alignment issues with the project select dropdown when the tenant name is very big * UI will now auto logout when session times out instead of showing permission denied errors # R5 08-Mar-2023 Source: https://bytebeam.io/docs/release-notes/r5-08-mar-2023 Product Update by 08 Mar 2023, Changes in line chart, histogram, Configuration changes and other changes ## Line Chart - Ability to set custom range Now the users can set custom range for the Y-axis when showing values in line chart ## Line Chart - Disable/Enable connect null values Null values can be connected or not represented in the line chart from the **View** settings ## Histogram panel Now data can be visualised in the form of histogram, where we can select the stream and number of bins to classify the data into ## Show confirmation "\ is going to be deployed on \ devices" before triggering firmware update action When we trigger an action to update firmware, now we show a confirmation with version and device count as summary ## **Data pipeline metrics** We've added support to generate and collect important metrics in data pipeline. Metrics include: * Metering data like: * Number of active connections * Amount of data received from devices * Amount of data received on subscription * Alerting data to capture errors These metrics will be integrated with the UI and will be available for users soon. ## Bug fixes & Minor changes * Change range in Line Chart only when the data has been fetched instead of before loading the complete data to avoid confusion * Line Chart - Tooltip not completely visible when have to show many data points * Fixed the loader not working properly when previous request was aborted in dashboard filters and time range change * Bug fix in Welcome screen when new user was seeing blank screen # R6 22-Mar-2023 Source: https://bytebeam.io/docs/release-notes/r6-22-mar-2023 Product Update by 22 Mar 2023, Changes in configuration, changes in device pulse, UI imporvements and other changes ### Show config\_version in Device Management if its present in device\_shadow View the config version JSON for the device if it is pushed in the **device\_shadow**. ### Device Pulse panel enhancements UI improvements in Device pulse panel to show clickable device Pulse. Also you can redirect to the device dashboard from the device list in the panel. ### UI improvement and Validations in Histogram bin size (1-250) Histogram panel has limitation on Number of bins max limit being 250. ### Remote shell in full screen mode Remote shell now works in full screen, providing more real estate. And also will not close on clicking outside the modal. ### Find and replace option inside dashboard advanced edit You can search inside the dashboard JSON, which will help navigate the huge JSON easily. ### File size validation while uploading Firmware and sendFile Action Firmware upload and sendFile action used to fail silently in background, if the file size exceeded 1GB. Now it will not allow the files beyond 1GB size. ### Bug fixes & Minor changes * Fixed a bug line chart ends before current time if the data is not present * We now show a confirmation modal when launching any Action to avoid triggering the actions by mistake * We are now showing dashboard types in dashboards list * Fixed a bug where device dashboard would automatically select a device instead of showing the device list. * We now show the version when launching any action and activating/deactivating any device config. * Added error handling in case tenant already exists when creating new tenant. * Valid zero values are now show up as 0 instead of  '-' in Timeseries panels * Showing proper message instead of empty Table when there is no data * Fixed alignment when showing Loaders throughout the project # R7 05-Apr-2023 Source: https://bytebeam.io/docs/release-notes/r7-05-apr-2023 Product Update by 05 Apr 2023, Addition of Increament loading, Latest release notes in cloud and other changes ### Incremental loading of panels when loading dashboards The dashboard's panels will load progressively rather than attempting to load all panel data simultaneously. This approach enhances dependability and improves error management within the dashboard. If a particular panel encounters an issue, it will not hinder the entire dashboard's functionality. Instead, only the affected panel will be emphasised, with the option to refresh its data. ### Added Bytebeam documentation integration Now you can access the Bytebeam documentation within the cloud. You can click on help icon to get relevant documentation ### Access latest release notes from cloud ### Basic validations for data type in Panels Added basic validation in panels based on the data type of columns, it will prevent basic errors in the panel data due to mismatch between data types * Will be only able to set numerical fields in GPS columns * If the String type column is selected in the panels, it will only show 'Min' and 'Max' Aggregates ### Showing action errors in device management If any action has failed, you can see the status as well as the error message in Device Management directly ### Bug fixes & Minor changes * Downloaded metadata CSV file will have empty string to represent null values * Fixed device pulse sorting bug and started showing Total count in the panel # R8 26-Apr-2023 Source: https://bytebeam.io/docs/release-notes/r8-26-apr-2023 Product Update by 26 Apr 2023, Updates in Logs panel, Timerange in dashboard and other changes ### Log volume histogram in Logs Panel The Logs panel now displays a histogram of log volume, and users can zoom in on a specific timerange by dragging the cursor across the histogram. ### Self-serve UI for bulk update of metadata From the user interface, it is now possible for a user to update metadata in bulk. The user can download the template file, modify it, and use it to update metadata in bulk. ### The timerange on the dashboard now has support for precision up to seconds The user can now manually update the seconds precision while selecting a timerange on the dashboard by selecting a time from the UI and then making the necessary adjustments. ### Bug fixes & Minor changes * The issues related to auto-refresh in the incremental loading of the dashboard have been resolved. * The bug causing the dashboard to continuously load has been resolved. * The issue with pagination in the timeseries panel for raw CAN data (high frequency data) has been resolved. * The bug causing preset filters to be automatically added to a dashboard in certain cases has been fixed. # R9 10-May-2023 Source: https://bytebeam.io/docs/release-notes/r9-10-may-2023 Product Update by 10 May 2023,Introduction to Action V2, Updates in Dashboard settings, Locate device panel and other changes ### Actions V2 A new user interface has been released for viewing Action status, featuring improved visual representation and more detailed information. While the existing Action functionality will continue to operate as usual, it will gradually be phased out as the new UI adds additional capabilities and becomes more stable. Check out documentation for more details: [Actions V2](<../Bytebeam docs/Actions.md>) ### Dashboard setting to connect with other dashboards It is now possible to add links to other dashboards within the current dashboard. These links will appear in the header and, when clicked, will open the linked dashboard in a new tab. ### Enable access to multiple device dashboards from the 'Locate Device' panel ### Filters in Timeseries panel Timeseries panel now has option to add filters (where query). *Eg.* *In the screenshot below we are viewing ****device\_shadow**** stream data where SOC value is greater than 80.* ### Timeseries panel to use fixed range on using pagination When a user interacts with the timeseries panel, a fixed time range will be applied and displayed alongside the pagination. The time range will remain static until reset by clicking the refresh button. ### Developer API Key The API key can now be generated from the Admin settings UI, which allows for specific actions and data retrieval directly from our servers. The creation and viewing of API keys are restricted to Admins only. ### Remote shell full screen mode Remote shell can be accessed in full screen mode for deep work sessions ### File size in firmware UI On the firmware list page, file size is also displayed using binary units of measurement that includes kibibyte (KiB), mebibyte (MiB) ### Broker * Reduction in memory resource usage * Efficient TLS connection handling * Improved logging for debugging purposes ### Bug fixes & Minor changes * Fixed: Not connected to internet shows up frequently even when connection is stable * Fixed: Abrupt logout when user performs any invalid action without access * RBAC has been updated to include additional flags for view/edit files and changing settings, allowing for finer-grained control of access. * Some minor UI and bugfixes when adding metadata.