33*/
44// import * as proto from 'protobufjs';
55import { Message } from "../../common/tedge" ;
6- import { create , toBinary } from "@bufbuild/protobuf" ;
7- import { base64Encode } from "@bufbuild/protobuf/wire" ;
6+ import { create , toBinary , fromBinary } from "@bufbuild/protobuf" ;
7+ import { base64Decode , base64Encode } from "@bufbuild/protobuf/wire" ;
88import {
99 SensorMessageSchema ,
1010 EnvironmentSensorSchema ,
@@ -15,16 +15,36 @@ export interface Config {
1515 topic : string ;
1616}
1717
18- export function onMessage (
18+ function onSetpoint (
1919 message : Message ,
20- { topic = "out/proto/sensor" } ,
20+ { topic = "out/proto/actuator" , base64 = false } ,
2121) : Message [ ] {
22- const payload = JSON . parse ( message . payload ) ;
22+ let binPayload ;
23+ if ( base64 ) {
24+ binPayload = base64Decode ( message . payload ) ;
25+ } else {
26+ binPayload = message . raw_payload
27+ }
2328
29+ let setPoint = fromBinary ( SensorMessageSchema , binPayload )
30+ return [
31+ {
32+ timestamp : message . timestamp ,
33+ topic : topic ,
34+ payload : JSON . stringify ( setPoint ) ,
35+ } ,
36+ ] ;
37+ }
38+
39+ export function onMessage (
40+ message : Message ,
41+ { topic = "out/proto/sensor" , cmdtopic = "out/proto/actuator" , base64 = false } ,
42+ ) : Message [ ] {
2443 const payloadType = message . topic . split ( "/" ) . slice ( - 1 ) [ 0 ] ;
2544
2645 let data ;
2746 if ( payloadType == "environment" ) {
47+ const payload = JSON . parse ( message . payload ) ;
2848 data = {
2949 case : "environment" ,
3050 value : create ( EnvironmentSensorSchema , {
@@ -34,6 +54,7 @@ export function onMessage(
3454 } ) ,
3555 } ;
3656 } else if ( payloadType == "location" ) {
57+ const payload = JSON . parse ( message . payload ) ;
3758 data = {
3859 case : "location" ,
3960 value : create ( LocationSensorSchema , {
@@ -43,7 +64,10 @@ export function onMessage(
4364 } ,
4465 } ) ,
4566 } ;
67+ } else if ( payloadType == "setpoint" ) {
68+ return onSetpoint ( message , { topic : cmdtopic , base64 : base64 } ) ;
4669 }
70+
4771 if ( ! data ) {
4872 return [ ] ;
4973 }
@@ -54,11 +78,16 @@ export function onMessage(
5478
5579 const outputTopic = topic . replaceAll ( "{{type}}" , payloadType ) ;
5680
81+ let binPayload = toBinary ( SensorMessageSchema , sensor ) ;
82+ if ( base64 ) {
83+ binPayload = base64Encode ( binPayload ) ;
84+ }
85+
5786 return [
5887 {
5988 timestamp : message . timestamp ,
6089 topic : outputTopic ,
61- payload : base64Encode ( toBinary ( SensorMessageSchema , sensor ) ) ,
90+ payload : binPayload ,
6291 } ,
6392 ] ;
6493}
0 commit comments