Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1,661 changes: 16 additions & 1,645 deletions src/assets/images/gateway/python-gateway-animd-ff.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 29 additions & 2 deletions src/components/PromoBanner.astro
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ const showBanner = Astro.url.pathname.replace(/\/+$/, '') !== TARGET_PATH;
text-align: center;
text-decoration: none;
background-color: var(--promo-bg);
font-family: var(--sl-font, var(--sl-font-system));
// Slides off as --promo-cur → 0 (banner height == --promo-h → fully hidden).
transform: translateY(calc(var(--promo-cur) - var(--promo-h)));
will-change: transform;
Expand Down Expand Up @@ -123,8 +124,10 @@ const showBanner = Astro.url.pathname.replace(/\/+$/, '') !== TARGET_PATH;

.promo-arrow {
display: inline-block;
vertical-align: middle; // center vertically, off the baseline
transform: translateY(-0.06em); // optical nudge
font-size: 1.25em; // larger, more visible
line-height: 1;
vertical-align: middle; // center vertically with the text
transform: translateY(-0.12em); // optical nudge up
font-weight: 700;
}
}
Expand All @@ -136,6 +139,30 @@ const showBanner = Astro.url.pathname.replace(/\/+$/, '') !== TARGET_PATH;
--promo-pill-fg: #fff;
}

// Pages whose "Try it now" CTA is the azure primary (not indigo): match the banner
// to the button. Two ids → beats the dark-theme rule, so it holds in both themes.
#home,
#thingsboard-pe,
#thingsboard-paas,
#thingsboard-edge,
#mobile-app,
#mobile-pe,
#mqtt-broker,
#trendz,
#development-services,
#services,
#trainings,
#company,
#mediakit,
#careers {
#promo-banner {
--promo-bg: #{$color-primary}; // azure, same as the CTA button
--promo-fg: #fff;
--promo-pill-bg: #fff;
--promo-pill-fg: #305680;
}
}

// Marketing: scrolls away inside the .tb-topbar sticky unit (see HeaderContent).
// Docs: fixed, hides via scroll-driven --promo-cur (see _starlight-overrides).
.tb-topbar #promo-banner {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import ImageGallery from '~/components/ImageGallery.astro';
import { Steps, Aside } from '@astrojs/starlight/components';
import MultiProductImageGallery from '~/components/MultiProductImageGallery.astro';
import DocImage from '~/components/DocImage.astro';
import GifVideo from '~/components/GifVideo.astro';
Comment on lines 1 to +4

## Introduction

This guide describes how to connect a Raspberry Pi with a Grove Base Hat to ThingsBoard over MQTT, collect data from Grove sensors, and control actuators from a ThingsBoard dashboard.

The Raspberry Pi runs a Python script that reads sensor data, sends telemetry to ThingsBoard, and responds to RPC commands for servo and LED control.

<DocImage src="/src/assets/devices-library/seeed/seeed-grove-demo.gif" alt="Grove Base Hat dashboard demo" width="100%" />
<GifVideo
srcWebm="/videos/device-library/seeed-grove-demo.webm"
srcMp4="/videos/device-library/seeed-grove-demo.mp4"
poster="/videos/device-library/seeed-grove-demo-poster.jpg"
/>
Comment on lines +12 to +16

## Prerequisites

Expand Down
7 changes: 6 additions & 1 deletion src/content/devices/en/raspberry-pi-cm4.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ category: Single-board computers
---

import DocImage from '~/components/DocImage.astro';
import GifVideo from '~/components/GifVideo.astro';
import HostNote from '~/components/DeviceLibrary/HostNote.astro';

<HostNote platform="ThingsBoard" />
Expand Down Expand Up @@ -167,7 +168,11 @@ Now we have a visualizing dashboard for displaying data and controlling the DO (

## Demonstration of the result

<DocImage src="/src/assets/devices-library/basic/single-board-computers/raspberry-pi-cm4/demonstration_show.gif" alt="Raspberry Pi CM4 sending live telemetry to ThingsBoard demonstration" width="100%" />
<GifVideo
srcWebm="/videos/device-library/demonstration_show.webm"
srcMp4="/videos/device-library/demonstration_show.mp4"
poster="/videos/device-library/demonstration_show-poster.jpg"
/>
Comment on lines +171 to +175

## Conclusion

Expand Down
7 changes: 0 additions & 7 deletions src/data/partners/distributors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,6 @@ export const DISTRIBUTORS: Distributor[] = [
email: "connect@archibus.ro",
website: "asc-ro.com",
},
{
name: "arx iT",
regions: ["Europe"],
countries: ["France"],
email: "info@arxit.com",
website: "arxit.com",
},
{
name: "Atea Sverige AB",
regions: ["Europe"],
Expand Down
18 changes: 9 additions & 9 deletions src/pages/services/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import BaseLayout from '../../layouts/BaseLayout.astro';
// ── Hero stats ──────────────────────────────────────────────────────────
const heroStats = [
{ value: '30 min', label: 'avg. support response\nwithin business hours' },
{ value: '99.95%', label: 'platform uptime\nScale plan and up' },
{ value: '99.95%', label: 'platform uptime\nPrivate Cloud' },
{ value: '350+', label: 'delivered\nIoT projects' },
{ value: '9 years', label: 'in the\nIoT domain' },
];
Expand All @@ -31,21 +31,21 @@ const maintainHandled = [
'Proactive 24/7 monitoring and incident response',
'Auto-scaling — compute (Enterprise) and storage (all tiers)',
'Security patching — OS, database, and ThingsBoard itself',
'Full access to logs and monitoring dashboards',
'Migration of existing self-managed ThingsBoard onto our infrastructure',
'Private Cloud logs and monitoring dashboards access',
'Migration of existing self-managed ThingsBoard to Private Cloud',
];

const maintainSLA = [
{ label: 'Pilot and Startup', value: '99.5%' },
{ label: 'Scale plans and above', value: '99.95%' },
{ label: 'Public Cloud', value: '99.5%' },
{ label: 'Private Cloud', value: '99.95%' },
];

const adviseHow = [
"20 hours per month of your Advisory Engineer's time",
'Same engineer every month — they learn your setup end-to-end (with a named backup for vacation coverage)',
'Weekly call + dedicated Slack channel + joint workshops',
'6-month minimum engagement',
'Available alongside any paid Support or Maintenance plan',
'Available regardless of licensing model',
];

const adviseUses = [
Expand Down Expand Up @@ -184,8 +184,8 @@ const recommendations = [
<div class="we-card__intro">
<p>
Open a ticket, get an expert response. Our support team is the same team that
builds ThingsBoard — committed response SLA, unlimited tickets, no
named-contact limits.
builds ThingsBoard — committed response SLA, unlimited tickets, and
access for up to 6 team members.
</p>
</div>

Expand Down Expand Up @@ -323,7 +323,7 @@ const recommendations = [

<footer class="we-card__footer">
<div class="we-card__footer-row">
<p class="we-card__note">99.95% uptime SLA on Scale plans and above.</p>
<p class="we-card__note">99.95% uptime SLA on Private Cloud.</p>
<a class="we-card__cta" href="/pricing/?section=thingsboard-pe-options&product=thingsboard-cloud">
Explore Plans <Icon name="tabler:chevron-right" />
</a>
Expand Down