{"id":55196,"date":"2026-04-17T10:41:22","date_gmt":"2026-04-17T17:41:22","guid":{"rendered":"https:\/\/www.griddb.net\/?p=55196"},"modified":"2026-04-17T10:41:22","modified_gmt":"2026-04-17T17:41:22","slug":"real-time-industrial-safety-monitoring-with-griddb-cloud","status":"publish","type":"post","link":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/","title":{"rendered":"Real-Time Industrial Safety Monitoring with GridDB Cloud"},"content":{"rendered":"<h2 id=\"introduction\">Introduction<\/h2>\n<p>\nIn large factories, accidents usually do not happen suddenly. They often begin with small changes in machine behavior and travel from one machine to another. For example, if a boiler becomes slightly hotter, it may later cause vibration in another machine connected to the same process.\n<\/p>\n<p>\nThe problem isn&#8217;t a lack of sensors, most factories have thousands of them. <strong>The real problem is that these sensors don&#8217;t talk to each other.<\/strong> Most systems only look at one machine at a time. They miss the &#8220;connection&#8221; between a hot boiler and a vibrating crusher.\n<\/p>\n<p>\nHere, we didn&#8217;t just build a dashboard to show numbers. We built an <strong>Industrial Safety Layer<\/strong> that &#8220;connects the dots.&#8221; By using GridDB, the system can track how machine conditions change across the factory and identify risks early.\n<\/p>\n<h2 id=\"why-time-series-databases-matter-for-industrial-iot\">Why Time-Series Databases Matter for Industrial IoT<\/h2>\n<p>\nImagine you are looking at a machine\u2019s temperature and it shows 90\u00b0C. Is that a problem?\n<\/p>\n<ul>\n<li>If it was 30\u00b0C a minute ago and suddenly reached 90\u00b0C, the machine may be heading toward a serious failure.<\/li>\n<li>If it has been around 90\u00b0C for several hours, it may simply be operating within its normal high-temperature cycle.<\/li>\n<\/ul>\n<p><strong>A single sensor reading is just a number. But a sequence of readings over time tells a story.<\/strong> <\/p>\n<p>\nThis type of information is known as <strong>time-series data<\/strong>. In industrial environments, machines generate thousands of such readings every second. Traditional databases, often used for typical web applications, can struggle when storing and querying large volumes of timestamped data.\n<\/p>\n<p>\nTime-series databases are designed specifically for this purpose. They work like security footage for machines, allowing engineers to look back at recent sensor readings and understand whether a machine is moving toward a potentially unsafe condition.\n<\/p>\n<h2 id=\"why-griddb-cloud-for-industrial-monitoring\">Why GridDB Cloud for Industrial Monitoring<\/h2>\n<p>\nIndustrial monitoring systems need a database that can store large amounts of sensor data and allow easy access to recent readings. <strong>GridDB Cloud<\/strong> provides an environment where the storage and management of such machine data are handled efficiently, allowing monitoring applications to focus on analyzing system conditions instead of managing database infrastructure.\n<\/p>\n<p>\nGridDB is a highly scalable, memory-first NoSQL database designed specifically for high-frequency time-series data, making it well-suited for industrial IoT workloads.\n<\/p>\n<p>\nWe use <strong>GridDB Cloud<\/strong> to:\n<\/p>\n<ol>\n<li>Store continuous sensor data using time-series containers with timestamp-based row keys.<\/li>\n<li>Maintain a fixed schema for predictable and fast reads\/writes.<\/li>\n<li>Ingest data in memory first and persist it safely to disk.<\/li>\n<li>Query recent time windows efficiently for early-warning detection.<\/li>\n<li>Correlate multiple sensor streams in real time.<\/li>\n<li>Replay sensor data before an alert for incident analysis.<\/li>\n<li>Support explainable alerts by allowing fast access to recent sensor history.<\/li>\n<\/ol>\n<p><strong>Without GridDB:<\/strong><\/p>\n<ul>\n<li>Real-time correlation would be slow.<\/li>\n<li>High-frequency ingestion would be difficult.<\/li>\n<li>Incident replay would be inefficient.<\/li>\n<\/ul>\n<h2 id=\"system-architecture\">System Architecture<\/h2>\n<p>\nIn this project, we simulate a simple monitoring system for a sugar mill. For simplicity, we consider three machines and monitor them using sensors that track values such as temperature, vibration, and power usage. The sensor data is generated through a simulator and stored in GridDB Cloud. The system then analyzes recent machine data to check if any unusual patterns appear and shows the results on a monitoring dashboard.\n<\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/architecture.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/architecture.png\" alt=\"\" width=\"2387\" height=\"1920\" class=\"aligncenter size-full wp-image-55200\" \/><\/a><\/p>\n<p>\nThe overall system consists of the following main components:\n<\/p>\n<ul>\n<li><strong>Sensor Simulation Layer<\/strong><\/li>\n<\/ul>\n<p>\nA Python-based simulator generates sensor readings for the machines. It produces values such as temperature, vibration, and power usage at regular intervals to imitate how real industrial sensors send data continuously.\n<\/p>\n<ul>\n<li><strong>Data Ingestion Layer<\/strong><\/li>\n<\/ul>\n<p>\nThe generated sensor readings are processed by the backend application. This layer receives the simulated data and prepares it for storage in the database.\n<\/p>\n<ul>\n<li><strong>GridDB Cloud Database<\/strong><\/li>\n<\/ul>\n<p>\nGridDB Cloud stores the machine sensor data generated during the simulation. It acts as the central data layer from which the application can retrieve recent machine readings when evaluating system conditions.\n<\/p>\n<ul>\n<li><strong>Monitoring Dashboard<\/strong><\/li>\n<\/ul>\n<p>\nA web-based dashboard displays the machine status and recent alerts. It visualizes sensor values and helps users observe how machine conditions change during monitoring.\n<\/p>\n<h2 id=\"setting-up-griddb-cloud\">Setting Up GridDB Cloud<\/h2>\n<p>\nTo store machine telemetry data, a GridDB Cloud instance can be deployed through the Microsoft Azure Marketplace. After subscribing to the service, users receive the cluster connection details including the notification provider address, cluster name, database name, and authentication credentials.\n<\/p>\n<p>\nUsing the GridDB Python client, applications connect to the GridDB cluster through the native API using the notification provider address provided in the GridDB Cloud dashboard.\n<\/p>\n<p>\nThe following example shows how a Python application can establish a connection to GridDB Cloud.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">import griddb_python as griddb\r\nimport threading\r\n\r\n_local = threading.local()\r\n\r\ndef get_store():\r\n    &quot;&quot;&quot;Return a per-thread GridDB connection to avoid concurrent access errors.&quot;&quot;&quot;\r\n    if not hasattr(_local, &quot;store&quot;) or _local.store is None:\r\n        factory = griddb.StoreFactory.get_instance()\r\n        _local.store = factory.get_store(\r\n            notification_member=NOTIFICATION_MEMBER,\r\n            cluster_name=CLUSTER_NAME,\r\n            database=&quot;df321dsdJF&quot;, \r\n            username=USERNAME,\r\n            password=PASSWORD\r\n        )\r\n    return _local.store<\/code><\/pre>\n<\/div>\n<p>\nOnce connected, the application can create containers and store the sensor data generated by the monitoring system.\n<\/p>\n<h2 id=\"project-overview\">Project Overview<\/h2>\n<p>\nThis project builds a smart safety monitoring system for a sugar mill. The system monitors three key machines in the production process &#8211; the Boiler, Crusher, and Centrifugal. Different sensor data such as temperature, vibration, and power usage is generated and stored, where it can be analyzed to observe how machine behavior changes over time.\n<\/p>\n<h3 id=\"key-ideas-behind-the-system\">Key ideas behind the system:<\/h3>\n<ul>\n<li><strong>System-wide monitoring<\/strong>: Instead of analyzing machines separately, the system observes how multiple machines behave together.<\/li>\n<li><strong>Pattern detection<\/strong>: It identifies small but meaningful changes in sensor values that may signal a developing issue.<\/li>\n<li><strong>Failure propagation awareness<\/strong>: It models how a problem in one machine can affect other machines in the process.<\/li>\n<\/ul>\n<h2 id=\"simulating-industrial-sensor-data\">Simulating Industrial Sensor Data<\/h2>\n<p>\nSince real industrial sensors were not available, the system uses a sensor simulator to generate realistic machine telemetry. The simulator creates readings for three machines in a sugar mill:\n<\/p>\n<ul>\n<li><strong>Boiler<\/strong>: Measures temperature, vibration, and power usage.<\/li>\n<li><strong>Crusher<\/strong>: Measures vibration, temperature, and power usage.<\/li>\n<li><strong>Centrifugal<\/strong>: Measures vibration, temperature, and power usage.<\/li>\n<\/ul>\n<p>\nTo make the simulation more realistic, the dataset is generated in three phases:\n<\/p>\n<ul>\n<li><strong>Normal<\/strong>: All machines operate within safe limits.<\/li>\n<li><strong>Escalation<\/strong>: The boiler begins to overheat, indicating a developing issue.<\/li>\n<li><strong>Cascade<\/strong>: The boiler failure spreads to the crusher and then the centrifugal, simulating a chain reaction.<\/li>\n<\/ul>\n<p>\nThis models how failures in industrial environments often propagate through connected machines rather than occurring in isolation.\n<\/p>\n<p>\nTo make the simulation mathematically sound and physically realistic, the system avoids generating flat, hardcoded values. Instead, it uses proportional interpolation and random noise to calculate sensor values dynamically:\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">import random\r\n\r\ndef interpolate(low, high, progress=None):\r\n    &quot;&quot;&quot;Smoothly interpolate between two values with optional random progress.&quot;&quot;&quot;\r\n    if progress is None:\r\n        progress = random.uniform(0.0, 1.0)\r\n    return low + progress * (high - low)\r\n    \r\ndef make_row(ts, machine_id, target_state):\r\n    &quot;&quot;&quot;Build a realistic sensor row using interpolation instead of hardcoded offsets.&quot;&quot;&quot;\r\n    t_nrm_low, t_nrm_high = MACHINES[machine_id][&quot;normal&quot;][&quot;temperature&quot;]\r\n    t_warn = MACHINES[machine_id][&quot;thresholds&quot;][&quot;temperature&quot;][&quot;warning&quot;]\r\n    \r\n    # Add realistic environmental noise\r\n    noise_t = random.uniform(-1.5, 1.5)\r\n    \r\n    if target_state == &quot;Normal&quot;:\r\n        # Calculate normal resting value + physical jitter\r\n        return [ts, interpolate(t_nrm_low, t_nrm_high) + noise_t, ...]\r\n        \r\n    elif target_state == &quot;Warning&quot;:\r\n        # Proportionally ramp upward toward the warning threshold\r\n        prog = random.uniform(0.1, 0.6)\r\n        return [ts, interpolate(t_nrm_high, t_warn, prog) + noise_t, ...]<\/code><\/pre>\n<\/div>\n<p>\nThis approach guarantees that simulated sensors drift naturally within a range (and occasionally spike) rather than resting rigidly at a static median.\n<\/p>\n<p>\nThe complete implementation can be found in the project repository: <a href=\"https:\/\/github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring\">github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring<\/a>\n<\/p>\n<h3 id=\"live-escalation-simulation\">Live Escalation Simulation<\/h3>\n<p>\nTo demonstrate how failures develop over time, the project also includes a small Python script that simulates a <strong>live escalation scenario<\/strong> in the sugar mill.\n<\/p>\n<p>\nInstead of inserting a full dataset at once, the script gradually sends sensor readings to GridDB Cloud to mimic how problems evolve in real industrial systems.\n<\/p>\n<p>\nThe simulation follows three stages:\n<\/p>\n<ul>\n<li><strong>Normal Operation<\/strong> \u2013 All machines operate within safe limits.<\/li>\n<li><strong>Boiler Escalation<\/strong> \u2013 The boiler temperature gradually increases toward critical levels.<\/li>\n<li><strong>Cascade Failure<\/strong> \u2013 Instability propagates from the boiler to the crusher and eventually to the centrifugal machine.<\/li>\n<\/ul>\n<p>\nDuring the simulation, new sensor readings are continuously inserted into GridDB Cloud. This allows the monitoring system and dashboard to react in real time as the cascade develops.\n<\/p>\n<p>\nA simplified example of the escalation trigger is shown below:\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">def trigger_cascade():\r\n    &quot;&quot;&quot;Simulates a live cascade that persists until resolved in the dashboard.&quot;&quot;&quot;\r\n    store = insert_data.get_gridstore()\r\n    start_sim()\r\n\r\n    i = 0\r\n    while is_sim_active():\r\n        ts = datetime.now(timezone.utc)\r\n        batch = {}\r\n\r\n        for machine_id in MACHINES:\r\n            # Dynamically generate realistic telemetry\r\n            row = make_row(ts, machine_id, determine_phase(i, machine_id))\r\n            batch[MACHINES[machine_id][&quot;container&quot;]] = [row]\r\n\r\n        store.multi_put(batch)\r\n        i += 1\r\n        time.sleep(1)<\/code><\/pre>\n<\/div>\n<p>\nThe complete implementation can be found in the project repository: <a href=\"https:\/\/github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring\">github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring<\/a>\n<\/p>\n<p>\nWhen the user clicks the <strong>&#8220;Issue Addressed&#8221;<\/strong> button in the dashboard, the backend disables the simulation flag. This causes the escalation loop to stop, and the script injects a final batch of normal sensor readings into GridDB Cloud. These healthy readings immediately restore the system to a stable state on the monitoring dashboard.\n<\/p>\n<h2 id=\"storing-sensor-data-in-griddb-cloud\">Storing Sensor Data in GridDB Cloud<\/h2>\n<p>\nAfter generating the simulated sensor readings, the data is stored in GridDB Cloud so it can be accessed by the monitoring system. Each machine is assigned its own TIME_SERIES container, where readings such as timestamp, temperature, vibration, and power consumption are stored. The timestamp acts as the key for each record, allowing the system to store and query machine telemetry in chronological order. Once the containers are created, the generated sensor dataset is inserted into GridDB so it can be used for monitoring and analysis.\n<\/p>\n<p><strong>Creating a TIME_SERIES container<\/strong><\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">def create_container(store, container_name):\r\n    con_info = griddb.ContainerInfo(\r\n        container_name,\r\n        [\r\n            [&quot;timestamp&quot;,   griddb.Type.TIMESTAMP],\r\n            [&quot;temperature&quot;, griddb.Type.DOUBLE],\r\n            [&quot;vibration&quot;,   griddb.Type.DOUBLE],\r\n            [&quot;power&quot;,       griddb.Type.DOUBLE],\r\n        ],\r\n        griddb.ContainerType.TIME_SERIES\r\n    )\r\n\r\n    return store.put_container(con_info)<\/code><\/pre>\n<\/div>\n<p>\nThe complete implementation can be found in the project repository: <a href=\"https:\/\/github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring\">github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring<\/a>\n<\/p>\n<p><strong>Inserting Data into GridDB Cloud<\/strong><\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">from datetime import datetime\r\n\r\ndef insert_data(store, dataset):\r\n    batch = {}\r\n\r\n    for machine_id, readings in dataset.items():\r\n        container_name = MACHINES[machine_id][&quot;container&quot;]\r\n\r\n        rows = []\r\n        for r in readings:\r\n            ts = datetime.fromisoformat(r[&quot;timestamp&quot;].replace(&quot;Z&quot;, &quot;+00:00&quot;))\r\n            rows.append([ts, r[&quot;temperature&quot;], r[&quot;vibration&quot;], r[&quot;power&quot;]])\r\n\r\n        batch[container_name] = rows\r\n\r\n    store.multi_put(batch)<\/code><\/pre>\n<\/div>\n<p>\nThe complete implementation can be found in the project repository: <a href=\"https:\/\/github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring\">github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring<\/a>\n<\/p>\n<p>\nThe <strong>multi_put<\/strong> operation allows rows for multiple containers to be written in a single request. This significantly improves ingestion efficiency when handling continuous machine telemetry streams.\n<\/p>\n<h3 id=\"continuous-telemetry-stream\">Continuous Telemetry Stream<\/h3>\n<p>\nIn addition to inserting the initial dataset, the system also supports a background data producer that continuously sends normal machine telemetry to GridDB Cloud.\n<\/p>\n<p>\nThis producer acts as a <strong>heartbeat<\/strong>, ensuring that the monitoring dashboard always receives fresh sensor data. When the escalation simulation is triggered, the producer automatically pauses to avoid overwriting the simulated failure sequence. Once the simulation ends, the producer resumes sending healthy readings, allowing the system to recover naturally.\n<\/p>\n<h2 id=\"querying-sensor-data-and-detecting-pre-incident-conditions\">Querying Sensor Data and Detecting Pre-Incident Conditions<\/h2>\n<p>\nOnce sensor data is stored in GridDB Cloud, the monitoring system queries recent readings to evaluate machine conditions. The system retrieves the latest records for each machine and analyzes whether sensor values are approaching unsafe ranges.\n<\/p>\n<p><strong>GridDB\u2019s Time-Series Query Language (TQL)<\/strong> allows the system to efficiently fetch the most recent sensor readings from each machine container.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">def query_recent(store, machine_id, limit=20):\r\n    container = store.get_container(MACHINES[machine_id][&quot;container&quot;])\r\n\r\n    query = container.query(f&quot;select * order by timestamp desc limit {limit}&quot;)\r\n    rs = query.fetch()\r\n\r\n    readings = []\r\n    while rs.has_next():\r\n        row = rs.next()\r\n        readings.append({\r\n            &quot;temperature&quot;: row[1],\r\n            &quot;vibration&quot;: row[2],\r\n            &quot;power&quot;: row[3],\r\n        })\r\n\r\n    return readings<\/code><\/pre>\n<\/div>\n<p>\nThe complete implementation can be found in the project repository: <a href=\"https:\/\/github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring\">github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring<\/a>\n<\/p>\n<p>\nTo avoid sudden status flickering near thresholds, the system evaluates machine conditions using <strong>a small rolling window of recent readings<\/strong>. By averaging the latest values, the monitoring logic becomes more stable and resistant to temporary sensor noise.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">def machine_risk_score(machine_id, avg_t, avg_v, avg_p):\r\n    &quot;&quot;&quot;Calculates a 0\u2013100 risk score based on continuous sensor severity.&quot;&quot;&quot;\r\n\r\n    s_t = sensor_severity(avg_t, nrm[&quot;temperature&quot;][1], thr[&quot;temperature&quot;][&quot;warning&quot;], thr[&quot;temperature&quot;][&quot;critical&quot;])\r\n    s_v = sensor_severity(avg_v, nrm[&quot;vibration&quot;][1],   thr[&quot;vibration&quot;][&quot;warning&quot;],   thr[&quot;vibration&quot;][&quot;critical&quot;])\r\n    s_p = sensor_severity(avg_p, nrm[&quot;power&quot;][1],       thr[&quot;power&quot;][&quot;warning&quot;],       thr[&quot;power&quot;][&quot;critical&quot;])\r\n\r\n    weighted = (\r\n        s_t * SENSOR_WEIGHTS[&quot;temperature&quot;] +\r\n        s_v * SENSOR_WEIGHTS[&quot;vibration&quot;] +\r\n        s_p * SENSOR_WEIGHTS[&quot;power&quot;]\r\n    )\r\n\r\n    return min(round(weighted * 100), 100)<\/code><\/pre>\n<\/div>\n<p>\nThe complete implementation can be found in the project repository: <a href=\"https:\/\/github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring\">github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring<\/a>\n<\/p>\n<h3 id=\"risk-scoring\">Risk Scoring<\/h3>\n<p>\nInstead of a simple status label, each machine also receives a <strong>continuous risk score (0\u2013100)<\/strong> based on exactly how far its sensor values have drifted from safe ranges.\n<\/p>\n<p>\nFor example, a boiler at 89\u00b0C and a boiler at 200\u00b0C both count as &#8220;Critical&#8221; in a simple system. With continuous scoring, the second scenario scores significantly higher because it is far more dangerous.\n<\/p>\n<p>\nThe fleet-wide score is a weighted average across all machines \u2014 the boiler contributes more to the overall score because a boiler failure affects everything downstream. Active cascade conditions add extra penalty points on top.\n<\/p>\n<h3 id=\"cascade-detection\">Cascade Detection<\/h3>\n<p>\nThe system understands that machines in a sugar mill are connected. If the boiler fails, the crusher that depends on its steam will eventually be affected too. These relationships are defined as rules:\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">CASCADE_RULES = [\r\n    {&quot;source&quot;: &quot;boiler&quot;,  &quot;target&quot;: &quot;crusher&quot;,    &quot;message&quot;: &quot;Boiler instability propagating to Crusher...&quot;},\r\n    {&quot;source&quot;: &quot;crusher&quot;, &quot;target&quot;: &quot;centrifugal&quot;, &quot;message&quot;: &quot;Crusher anomaly affecting Centrifugal...&quot;},\r\n    {&quot;source&quot;: &quot;boiler&quot;,  &quot;target&quot;: &quot;centrifugal&quot;, &quot;message&quot;: &quot;Full-Chain Cascade detected...&quot;},\r\n]<\/code><\/pre>\n<\/div>\n<p>\nWhen a source machine is in a dangerous state and its downstream target also shows elevated readings, a cascade alert is triggered on the dashboard.\n<\/p>\n<h2 id=\"building-the-monitoring-dashboard\">Building the Monitoring Dashboard<\/h2>\n<p>\nVisualization plays an important role in the monitoring system. To make machine conditions easier to understand, a <strong>web-based dashboard<\/strong> was created that displays machine status, sensor readings, cascade alerts, and the overall system risk score in real time. The interface is built using <strong>HTML, JavaScript, and Chart.js<\/strong>, which provides interactive charts for visualizing machine telemetry.\n<\/p>\n<p>\nThe backend exposes a set of simple API endpoints that the dashboard polls periodically to retrieve updated monitoring data.\n<\/p>\n<table class=\"markdown-table\" style=\"border-collapse: collapse; width: 100%; margin: 1em 0;\">\n<thead>\n<tr>\n<th style=\"border: 1px solid #ddd; padding: 8px; background-color: #f2f2f2; text-align: left;\">Endpoint<\/th>\n<th style=\"border: 1px solid #ddd; padding: 8px; background-color: #f2f2f2; text-align: left;\">What it returns<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\"><code>GET \/api\/fleet<\/code><\/td>\n<td style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">(Main) Status of all machines + cascade alerts + risk score<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\"><code>GET \/api\/machine\/<id><\/code><\/td>\n<td style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Sensor history for a single machine (used for charts)<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\"><code>GET \/api\/timeline<\/code><\/td>\n<td style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Log of escalation events over time<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\nBelow is a simplified example from the dashboard script showing how the system fetches fleet data and updates the interface.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">async function pollFleet() {\r\n    try {\r\n        const res  = await fetch(&#x27;\/api\/fleet&#x27;);\r\n        const data = await res.json();\r\n\r\n        \/\/ Update each machine card\r\n        for (const [machineId, status] of Object.entries(data.machines)) {\r\n            setStatus(machineId, status.status, status.message, status.latest);\r\n        }\r\n\r\n        renderCascades(data.cascades || []);\r\n        updateRiskScore(data.risk_score ?? 0);\r\n\r\n    } catch(e) {\r\n        console.error(&#x27;Fleet poll failed&#x27;, e);\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<p>\nThe complete implementation can be found in the project repository: <a href=\"https:\/\/github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring\">github.com\/ritigya03\/GridDB-Industrial-Safety-Monitoring<\/a>\n<\/p>\n<p>\nThe dashboard calls the fleet endpoint every few seconds to keep the interface synchronized with the latest machine data stored in GridDB Cloud. Additional endpoints provide sensor history and timeline events, which are used to render trend charts and escalation timelines for operators.\n<\/p>\n<h2 id=\"running-the-project\">Running the Project<\/h2>\n<p>\nMake sure GridDB Cloud is running and credentials are configured as environment variables. Then run the following in order:\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\"># Step 1: Create containers and seed historical data\r\n$ python src\/insert_data.py\r\n\r\n# Step 2: Start the monitoring backend\r\n$ python src\/app.py\r\n\r\n# Step 3 (optional): Keep dashboard alive with a live heartbeat\r\n$ python src\/insert_data.py --live\r\n\r\n# Step 4 (optional): Trigger a live cascade demo\r\n$ python src\/simulate_escalation.py<\/code><\/pre>\n<\/div>\n<p>\nOpen <code>http:\/\/localhost:5000<\/code> to view the dashboard.\n<\/p>\n<p>\nTo make the demonstration clear and repeatable, the project uses two separate data-feeding mechanisms:\n<\/p>\n<ul>\n<li><strong>The Background Heartbeat (<code>insert_data.py --live<\/code>)<\/strong>: This script provides a stable, healthy baseline so the dashboard stays active and &#8220;green&#8221; by default.<\/li>\n<li><strong>The Manual Escalation (<code>simulate_escalation.py<\/code>)<\/strong>: This script temporarily &#8220;takes over&#8221; the dashboard with a developing incident to show how failures propagate.<\/li>\n<\/ul>\n<p>\nOne of the key advantages of using GridDB is how it handles <strong>automatic recovery<\/strong>. Once the escalation script finishes, the background producer continues to send &#8220;Normal&#8221; data. These new healthy readings eventually &#8220;drown out&#8221; any temporary critical spikes, and the system automatically returns to a safe state without requiring a manual reset.\n<\/p>\n<h2 id=\"results-and-dashboard-overview\">Results and Dashboard Overview<\/h2>\n<p>\nAfter running the system, the monitoring dashboard displays the <strong>real-time status of all machines<\/strong> in the sugar mill simulation. The interface shows sensor readings for <strong>temperature, vibration, and power consumption<\/strong>, along with the current safety status of each machine.\n<\/p>\n<h3 id=\"normal-operation\">Normal Operation<\/h3>\n<p>\nIn the normal state, all machines operate within safe limits. The dashboard displays a low overall risk score and indicates that the factory is running under normal conditions.\n<\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/normal_state.png\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/normal_state.png\" alt=\"\" width=\"1882\" height=\"898\" class=\"aligncenter size-full wp-image-55204\" srcset=\"\/wp-content\/uploads\/2026\/04\/normal_state.png 1882w, \/wp-content\/uploads\/2026\/04\/normal_state-300x143.png 300w, \/wp-content\/uploads\/2026\/04\/normal_state-1024x489.png 1024w, \/wp-content\/uploads\/2026\/04\/normal_state-768x366.png 768w, \/wp-content\/uploads\/2026\/04\/normal_state-1536x733.png 1536w, \/wp-content\/uploads\/2026\/04\/normal_state-600x286.png 600w\" sizes=\"(max-width: 1882px) 100vw, 1882px\" \/><\/a><\/p>\n<p>\nAs sensor values begin drifting toward warning thresholds, the system detects early warning patterns. Individual machines may enter a <strong>Warning<\/strong> state, and the overall risk score begins to increase.\n<\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/moderate_risk.png\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/moderate_risk.png\" alt=\"\" width=\"1905\" height=\"899\" class=\"aligncenter size-full wp-image-55203\" srcset=\"\/wp-content\/uploads\/2026\/04\/moderate_risk.png 1905w, \/wp-content\/uploads\/2026\/04\/moderate_risk-300x142.png 300w, \/wp-content\/uploads\/2026\/04\/moderate_risk-1024x483.png 1024w, \/wp-content\/uploads\/2026\/04\/moderate_risk-768x362.png 768w, \/wp-content\/uploads\/2026\/04\/moderate_risk-1536x725.png 1536w, \/wp-content\/uploads\/2026\/04\/moderate_risk-600x283.png 600w\" sizes=\"(max-width: 1905px) 100vw, 1905px\" \/><\/a><\/p>\n<p>\nWhen multiple sensors exceed warning thresholds simultaneously, the system identifies a <strong>Pre-Incident<\/strong> condition. If instability spreads between machines, the dashboard highlights <strong>cascade alerts<\/strong> to indicate a potential chain reaction across the production process.\n<\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/high_risk.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/high_risk.png\" alt=\"\" width=\"1907\" height=\"873\" class=\"aligncenter size-full wp-image-55201\" srcset=\"\/wp-content\/uploads\/2026\/04\/high_risk.png 1907w, \/wp-content\/uploads\/2026\/04\/high_risk-300x137.png 300w, \/wp-content\/uploads\/2026\/04\/high_risk-1024x469.png 1024w, \/wp-content\/uploads\/2026\/04\/high_risk-768x352.png 768w, \/wp-content\/uploads\/2026\/04\/high_risk-1536x703.png 1536w, \/wp-content\/uploads\/2026\/04\/high_risk-600x275.png 600w\" sizes=\"(max-width: 1907px) 100vw, 1907px\" \/><\/a><\/p>\n<p>\nOnce the issue is addressed and sensor readings return to safe ranges, the monitoring system automatically returns to a stable state. The dashboard updates in real time, clearing cascade alerts and lowering the system risk score.\n<\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/issue_addressed.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/issue_addressed.png\" alt=\"\" width=\"1910\" height=\"897\" class=\"aligncenter size-full wp-image-55202\" srcset=\"\/wp-content\/uploads\/2026\/04\/issue_addressed.png 1910w, \/wp-content\/uploads\/2026\/04\/issue_addressed-300x141.png 300w, \/wp-content\/uploads\/2026\/04\/issue_addressed-1024x481.png 1024w, \/wp-content\/uploads\/2026\/04\/issue_addressed-768x361.png 768w, \/wp-content\/uploads\/2026\/04\/issue_addressed-1536x721.png 1536w, \/wp-content\/uploads\/2026\/04\/issue_addressed-600x282.png 600w\" sizes=\"(max-width: 1910px) 100vw, 1910px\" \/><\/a><\/p>\n<p>\nBy visualizing machine telemetry, cascade alerts, and system risk levels together, the dashboard provides operators with a clear operational overview of the factory. This helps engineers detect <strong>early warning patterns<\/strong> and respond before issues escalate into serious failures.\n<\/p>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>\nIndustrial accidents often develop gradually through small changes in machine behavior rather than sudden failures. Detecting these early signals requires systems that can store large volumes of sensor data and analyze how machine conditions evolve over time.\n<\/p>\n<p>\nIn this project, we built a simple safety monitoring prototype using <strong>GridDB Cloud<\/strong> to store and query machine telemetry data. By combining simulated sensor readings with rule-based analysis, the system can detect <strong>early warning patterns<\/strong> and potential <strong>cascade failures<\/strong> across machines.\n<\/p>\n<p>\nIn the future, this approach could be extended with <strong>machine learning models trained on historical sensor data in GridDB<\/strong>, enabling more advanced predictive maintenance and anomaly detection.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction In large factories, accidents usually do not happen suddenly. They often begin with small changes in machine behavior and travel from one machine to another. For example, if a boiler becomes slightly hotter, it may later cause vibration in another machine connected to the same process. The problem isn&#8217;t a lack of sensors, most [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":55199,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[121],"tags":[],"class_list":["post-55196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Real-Time Industrial Safety Monitoring with GridDB Cloud | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"Introduction In large factories, accidents usually do not happen suddenly. They often begin with small changes in machine behavior and travel from one\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Real-Time Industrial Safety Monitoring with GridDB Cloud | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"Introduction In large factories, accidents usually do not happen suddenly. They often begin with small changes in machine behavior and travel from one\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-17T17:41:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.griddb.net\/wp-content\/uploads\/2019\/04\/503.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"450\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"griddb-admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"griddb-admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/\"},\"author\":{\"name\":\"griddb-admin\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\"},\"headline\":\"Real-Time Industrial Safety Monitoring with GridDB Cloud\",\"datePublished\":\"2026-04-17T17:41:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/\"},\"wordCount\":2410,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2026\/04\/griddb_industrial_safety_featured_image_v2.svg\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/\",\"url\":\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/\",\"name\":\"Real-Time Industrial Safety Monitoring with GridDB Cloud | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2026\/04\/griddb_industrial_safety_featured_image_v2.svg\",\"datePublished\":\"2026-04-17T17:41:22+00:00\",\"description\":\"Introduction In large factories, accidents usually do not happen suddenly. They often begin with small changes in machine behavior and travel from one\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2026\/04\/griddb_industrial_safety_featured_image_v2.svg\",\"contentUrl\":\"\/wp-content\/uploads\/2026\/04\/griddb_industrial_safety_featured_image_v2.svg\",\"width\":1200,\"height\":640},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.griddb.net\/en\/#website\",\"url\":\"https:\/\/www.griddb.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.griddb.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.griddb.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/www.griddb.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\",\"name\":\"griddb-admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"caption\":\"griddb-admin\"},\"url\":\"https:\/\/www.griddb.net\/en\/author\/griddb-admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Real-Time Industrial Safety Monitoring with GridDB Cloud | GridDB: Open Source Time Series Database for IoT","description":"Introduction In large factories, accidents usually do not happen suddenly. They often begin with small changes in machine behavior and travel from one","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/","og_locale":"en_US","og_type":"article","og_title":"Real-Time Industrial Safety Monitoring with GridDB Cloud | GridDB: Open Source Time Series Database for IoT","og_description":"Introduction In large factories, accidents usually do not happen suddenly. They often begin with small changes in machine behavior and travel from one","og_url":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2026-04-17T17:41:22+00:00","og_image":[{"width":450,"height":400,"url":"https:\/\/www.griddb.net\/wp-content\/uploads\/2019\/04\/503.gif","type":"image\/gif"}],"author":"griddb-admin","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"Written by":"griddb-admin","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#article","isPartOf":{"@id":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/"},"author":{"name":"griddb-admin","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233"},"headline":"Real-Time Industrial Safety Monitoring with GridDB Cloud","datePublished":"2026-04-17T17:41:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/"},"wordCount":2410,"commentCount":0,"publisher":{"@id":"https:\/\/www.griddb.net\/en\/#organization"},"image":{"@id":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2026\/04\/griddb_industrial_safety_featured_image_v2.svg","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/","url":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/","name":"Real-Time Industrial Safety Monitoring with GridDB Cloud | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/www.griddb.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#primaryimage"},"image":{"@id":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2026\/04\/griddb_industrial_safety_featured_image_v2.svg","datePublished":"2026-04-17T17:41:22+00:00","description":"Introduction In large factories, accidents usually do not happen suddenly. They often begin with small changes in machine behavior and travel from one","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.griddb.net\/en\/blog\/real-time-industrial-safety-monitoring-with-griddb-cloud\/#primaryimage","url":"\/wp-content\/uploads\/2026\/04\/griddb_industrial_safety_featured_image_v2.svg","contentUrl":"\/wp-content\/uploads\/2026\/04\/griddb_industrial_safety_featured_image_v2.svg","width":1200,"height":640},{"@type":"WebSite","@id":"https:\/\/www.griddb.net\/en\/#website","url":"https:\/\/www.griddb.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/www.griddb.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.griddb.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.griddb.net\/en\/#organization","name":"Fixstars","url":"https:\/\/www.griddb.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233","name":"griddb-admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","caption":"griddb-admin"},"url":"https:\/\/www.griddb.net\/en\/author\/griddb-admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/posts\/55196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/comments?post=55196"}],"version-history":[{"count":3,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/posts\/55196\/revisions"}],"predecessor-version":[{"id":55205,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/posts\/55196\/revisions\/55205"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/media\/55199"}],"wp:attachment":[{"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/media?parent=55196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/categories?post=55196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/tags?post=55196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}