Skip to content
Open
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
55 changes: 55 additions & 0 deletions client/sensorhub-client-nocode/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# DataFeed Driver

**Driver Dependencies:**
Ensure the `sensorhub-ui-datafeed` module is included. This module provides custom configuration forms for the datafeed-driver.

Update `AdminUI` in the `config.json` by adding the following under the `customForms` array:
```json
"customForms": [
{
"objClass": "org.sensorhub.ui.CustomUIConfig",
"configClass": "com.botts.impl.sensor.datafeed.DataFeedConfig",
"uiClass": "com.botts.ui.DataFeedConfigForm"
},
{
"objClass": "org.sensorhub.ui.CustomUIConfig",
"configClass": "com.botts.api.parser.DataParserConfig",
"uiClass": "com.botts.ui.DataParserConfigForm"
},
{
"objClass": "org.sensorhub.ui.CustomUIConfig",
"configClass": "com.botts.api.parser.data.DataField",
"uiClass": "com.botts.ui.ProtobufParserConfigForm"
},
{
"objClass": "org.sensorhub.ui.CustomUIConfig",
"configClass": "com.botts.impl.parser.protobuf.ProtobufDataParserConfig",
"uiClass": "com.botts.ui.ProtobufParserConfigForm"
}
],
```

## Configuration

### Communication Configuration
There are two types of communication providers currently implemented for the data feed driver: Stream-Based and Message Queue based communication.

**Stream-Based Communication**
Used for continuous data streams
- Example:
- TCP
- UDP

**Message Queue Communication:**
Used for event-driven messaging
- Example:
- MQTT
- Kafka


### Data Parser Configuration
Choose a parser to interpret the incoming data format. The following parsers are currently supported:
- CSV
- JSON
- XML
- Protobuf
37 changes: 37 additions & 0 deletions client/sensorhub-client-nocode/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
description = 'No Code Client'
ext.details = "A client module for building datastream mappings and encoding data to different outbound formats"
version = '1.0.0'

dependencies {
implementation 'org.sensorhub:sensorhub-core:' + oshCoreVersion

implementation project(':sensorhub-parser-utils')
implementation project(':sensorhub-ui-nocode')

testImplementation('junit:junit:4.13.1')
}

test {
useJUnit()
}

osgi {
manifest {
attributes ('Bundle-Vendor': 'GeoRobotix Innovative Research, Inc.')
attributes ('Bundle-Activator': 'com.georobotix.impl.client.nocode.Activator')
}
}

ext.pom >>= {
developers {
developer {
id 'kalynstricklin'
name 'Kalyn Stricklin'
organization 'GeoRobotix Innovative Research'
organizationUrl 'https://georobotix.us'
}
}
}
repositories {
mavenCentral()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/***************************** BEGIN LICENSE BLOCK ***************************
The contents of this file are subject to the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.

Copyright (C) 2026 GeoRobotix Innovative Research, Inc. All Rights Reserved.
******************************* END LICENSE BLOCK ***************************/
package com.georobotix.impl.client.nocode;

import org.sensorhub.utils.OshBundleActivator;

/**
* The presence of this class tells the OpenSensorHub OSGI machinery about this module.
* It is referenced in the 'Bundle-Activator' attribute in the OSGI section of the build.gradle file.
*/
@SuppressWarnings("unused")
public class Activator extends OshBundleActivator {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/***************************** BEGIN LICENSE BLOCK ***************************
The contents of this file are subject to the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.

Copyright (C) 2026 GeoRobotix Innovative Research, Inc. All Rights Reserved.
******************************* END LICENSE BLOCK ***************************/
package com.georobotix.impl.client.nocode;

import org.sensorhub.api.module.IModule;
import org.sensorhub.api.module.IModuleProvider;
import org.sensorhub.api.module.ModuleConfig;
import org.sensorhub.impl.module.JarModuleProvider;

public class Descriptor extends JarModuleProvider implements IModuleProvider {

@Override
public Class<? extends IModule<?>> getModuleClass()
{
return NoCodeClientModule.class;
}


@Override
public Class<? extends ModuleConfig> getModuleConfigClass()
{
return NoCodeClientConfig.class;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/***************************** BEGIN LICENSE BLOCK ***************************
The contents of this file are subject to the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.

Copyright (C) 2026 GeoRobotix Innovative Research, Inc. All Rights Reserved.
******************************* END LICENSE BLOCK ***************************/
package com.georobotix.impl.client.nocode;


public class NoCodeClient {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/***************************** BEGIN LICENSE BLOCK ***************************
The contents of this file are subject to the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.

Copyright (C) 2026 GeoRobotix Innovative Research, Inc. All Rights Reserved.
******************************* END LICENSE BLOCK ***************************/
package com.georobotix.impl.client.nocode;

import com.georobotix.ui.nocode.NoCodeEditor;
import org.sensorhub.api.client.ClientConfig;
import org.sensorhub.api.comm.CommProviderConfig;
import org.sensorhub.api.config.DisplayInfo;


public class NoCodeClientConfig extends ClientConfig {
@DisplayInfo(desc = "Comm settings used to interface")
public CommProviderConfig<?> commSettings;

@DisplayInfo(label = "Mapping Configuration", desc = "Build mappings from one datastream to any outbound format")
public NoCodeEditor noCodeEditor = new NoCodeEditor();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/***************************** BEGIN LICENSE BLOCK ***************************
The contents of this file are subject to the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.

Copyright (C) 2026 GeoRobotix Innovative Research, Inc. All Rights Reserved.
******************************* END LICENSE BLOCK ***************************/
package com.georobotix.impl.client.nocode;


import org.sensorhub.api.client.IClientModule;
import org.sensorhub.impl.module.AbstractModule;

public class NoCodeClientModule extends AbstractModule<NoCodeClientConfig> implements IClientModule<NoCodeClientConfig> {

@Override
public boolean isConnected() {
return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/***************************** BEGIN LICENSE BLOCK ***************************
The contents of this file are subject to the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.

Copyright (C) 2026 GeoRobotix Innovative Research, Inc. All Rights Reserved.
******************************* END LICENSE BLOCK ***************************/
package com.georobotix.impl.client.nocode;

public class OutboundFormatsConfig {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
com.georobotix.impl.client.nocode.Descriptor
15 changes: 15 additions & 0 deletions ui/sensorhub-ui-nocode/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# UI Forms for the No Code Client


## Configuration

Add this codeblock in the config.json, replacing the `customForms` block inside the `AdminUI` config.
```json
"customForms": [
{
"objClass": "org.sensorhub.ui.CustomUIConfig",
"configClass": "com.georobotix.ui.nocode.NoCodeEditor",
"uiClass": "com.georobotix.ui.nocode.NoCodeEditorForm"
}
],
```
40 changes: 40 additions & 0 deletions ui/sensorhub-ui-nocode/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
description = 'No Code UI'
ext.details = "UI forms for the no-code client"
version = '1.0.0'

dependencies {
implementation 'org.sensorhub:sensorhub-core:' + oshCoreVersion
implementation 'org.sensorhub:sensorhub-webui-core:' + oshCoreVersion
embeddedImpl 'com.vaadin:vaadin-server:8.14.3'
embeddedImpl 'com.vaadin:vaadin-compatibility-server:8.14.3'
embeddedImpl 'com.vaadin:vaadin-themes:8.14.3'

implementation project(':sensorhub-parser-utils')

testImplementation('junit:junit:4.13.1')
}

test {
useJUnit()
}

osgi {
manifest {
attributes ('Bundle-Vendor': 'GeoRobotix Innovative Research, Inc.')
attributes ('Bundle-Activator': 'com.georobotix.ui.nocode.Activator')
}
}

ext.pom >>= {
developers {
developer {
id 'kalynstricklin'
name 'Kalyn Stricklin'
organization 'GeoRobotix Innovative Research'
organizationUrl 'https://georobotix.us'
}
}
}
repositories {
mavenCentral()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/***************************** BEGIN LICENSE BLOCK ***************************
The contents of this file are subject to the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.

Copyright (C) 2026 GeoRobotix Innovative Research, Inc. All Rights Reserved.
******************************* END LICENSE BLOCK ***************************/
package com.georobotix.ui.nocode;

import org.osgi.framework.BundleActivator;
import org.sensorhub.utils.OshBundleActivator;

public class Activator extends OshBundleActivator implements BundleActivator {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/***************************** BEGIN LICENSE BLOCK ***************************
The contents of this file are subject to the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.

Copyright (C) 2026 GeoRobotix Innovative Research, Inc. All Rights Reserved.
******************************* END LICENSE BLOCK ***************************/
package com.georobotix.ui.nocode;

import org.sensorhub.api.config.DisplayInfo;

import java.util.LinkedHashMap;
import java.util.Map;

public class MappingEntry {

@DisplayInfo(label = "Datastream Name", desc = "The source datastream to map from")
public String datastreamName = "";

@DisplayInfo(label = "Serializer", desc = "The output serializer (JSON, CSV, XML, Protobuf, CoT)")
public String serializer = "JSON";

@DisplayInfo(label = "Field Mappings", desc = "Map output field names to source datastream fields")
public Map<String, String> fieldMappings = new LinkedHashMap<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/***************************** BEGIN LICENSE BLOCK ***************************
The contents of this file are subject to the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.

Copyright (C) 2026 GeoRobotix Innovative Research, Inc. All Rights Reserved.
******************************* END LICENSE BLOCK ***************************/
package com.georobotix.ui.nocode;

import org.sensorhub.api.config.DisplayInfo;

import java.util.ArrayList;
import java.util.List;

public class NoCodeEditor {
@DisplayInfo(label = "Datastream Mappings", desc = "List of datastream-to-outbound-format mappings")
public List<MappingEntry> mappings = new ArrayList<>();
}
Loading