Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 2019-03-12 09:39:36,761 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode!
- 2019-03-12 09:39:41,585 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode!
- 2019-03-12 09:39:43,785 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.rule.RuleNodeRepository.
- 2019-03-12 09:39:43,787 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.asset.AssetRepository.
- 2019-03-12 09:39:43,788 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.component.ComponentDescriptorRepository.
- 2019-03-12 09:39:43,790 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.rule.RuleChainRepository.
- 2019-03-12 09:39:43,791 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.attributes.AttributeKvRepository.
- 2019-03-12 09:39:43,793 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.entityview.EntityViewRepository.
- 2019-03-12 09:39:43,794 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.timeseries.TsKvRepository.
- 2019-03-12 09:39:43,796 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.user.UserRepository.
- 2019-03-12 09:39:43,797 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.timeseries.TsKvLatestRepository.
- 2019-03-12 09:39:43,798 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.device.DeviceCredentialsRepository.
- 2019-03-12 09:39:43,800 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.relation.RelationRepository.
- 2019-03-12 09:39:43,802 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.tenant.TenantRepository.
- 2019-03-12 09:39:43,804 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.device.DeviceRepository.
- 2019-03-12 09:39:43,806 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.widget.WidgetsBundleRepository.
- 2019-03-12 09:39:43,807 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.widget.WidgetTypeRepository.
- 2019-03-12 09:39:43,809 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.dashboard.DashboardRepository.
- 2019-03-12 09:39:43,810 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.user.UserCredentialsRepository.
- 2019-03-12 09:39:43,811 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.alarm.AlarmRepository.
- 2019-03-12 09:39:43,812 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.settings.AdminSettingsRepository.
- 2019-03-12 09:39:43,813 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.customer.CustomerRepository.
- 2019-03-12 09:39:43,814 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.audit.AuditLogRepository.
- 2019-03-12 09:39:43,815 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.event.EventRepository.
- 2019-03-12 09:39:43,817 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.thingsboard.server.dao.sql.dashboard.DashboardInfoRepository.
- 2019-03-12 09:39:48,436 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [class org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$5083668d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
- 2019-03-12 09:39:49,015 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.cache.annotation.ProxyCachingConfiguration' of type [class org.springframework.cache.annotation.ProxyCachingConfiguration$$EnhancerBySpringCGLIB$$99959cab] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
- 2019-03-12 09:39:49,769 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration' of type [class org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration$$EnhancerBySpringCGLIB$$e9312ec7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
- 2019-03-12 09:39:49,938 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'objectPostProcessor' of type [class org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
- 2019-03-12 09:39:49,956 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@187fff7' of type [class org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
- 2019-03-12 09:39:50,067 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration' of type [class org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration$$EnhancerBySpringCGLIB$$e05d179] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
- 2019-03-12 09:39:50,189 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'methodSecurityMetadataSource' of type [class org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
- 2019-03-12 09:39:56,317 [main] INFO o.s.b.c.e.t.TomcatEmbeddedServletContainer - Tomcat initialized with port(s): 8080 (http)
- 2019-03-12 09:39:56,409 [main] INFO o.a.catalina.core.StandardService - Starting service Tomcat
- 2019-03-12 09:39:56,417 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/8.5.6
- 2019-03-12 09:39:57,122 [localhost-startStop-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
- 2019-03-12 09:39:57,123 [localhost-startStop-1] INFO o.s.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 71466026 ms
- 2019-03-12 09:40:11,206 [localhost-startStop-1] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'default'
- 2019-03-12 09:40:11,389 [localhost-startStop-1] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [
- name: default
- ...]
- 2019-03-12 09:40:12,945 [localhost-startStop-1] INFO org.hibernate.Version - HHH000412: Hibernate Core {5.0.11.Final}
- 2019-03-12 09:40:12,976 [localhost-startStop-1] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
- 2019-03-12 09:40:12,992 [localhost-startStop-1] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
- 2019-03-12 09:40:13,936 [localhost-startStop-1] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
- 2019-03-12 09:40:17,199 [localhost-startStop-1] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL94Dialect
- 2019-03-12 09:40:18,215 [localhost-startStop-1] INFO o.h.e.j.e.i.LobCreatorBuilderImpl - HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
- 2019-03-12 09:40:18,234 [localhost-startStop-1] INFO org.hibernate.type.BasicTypeRegistry - HHH000270: Type registration [java.util.UUID] overrides previous : org.hibernate.type.UUIDBinaryType@19490d4
- 2019-03-12 09:40:32,889 [localhost-startStop-1] INFO o.h.h.i.QueryTranslatorFactoryInitiator - HHH000397: Using ASTQueryTranslatorFactory
- 2019-03-12 09:40:45,864 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'characterEncodingFilter' to: [/*]
- 2019-03-12 09:40:45,866 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
- 2019-03-12 09:40:45,866 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'httpPutFormContentFilter' to: [/*]
- 2019-03-12 09:40:45,867 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'requestContextFilter' to: [/*]
- 2019-03-12 09:40:45,881 [localhost-startStop-1] INFO o.s.b.w.s.DelegatingFilterProxyRegistrationBean - Mapping filter: 'springSecurityFilterChain' to: [/*]
- 2019-03-12 09:40:45,881 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'rateLimitProcessingFilter' to: [/*]
- 2019-03-12 09:40:45,882 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'buildRestLoginProcessingFilter' to: [/*]
- 2019-03-12 09:40:45,882 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'buildRestPublicLoginProcessingFilter' to: [/*]
- 2019-03-12 09:40:45,882 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'buildJwtTokenAuthenticationProcessingFilter' to: [/*]
- 2019-03-12 09:40:45,882 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'buildRefreshTokenProcessingFilter' to: [/*]
- 2019-03-12 09:40:45,883 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'buildWsJwtTokenAuthenticationProcessingFilter' to: [/*]
- 2019-03-12 09:40:45,883 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'corsFilter' to: [/*]
- 2019-03-12 09:40:45,883 [localhost-startStop-1] INFO o.s.b.w.s.FilterRegistrationBean - Mapping filter: 'resourceUrlEncodingFilter' to: [/*]
- 2019-03-12 09:40:45,883 [localhost-startStop-1] INFO o.s.b.w.s.ServletRegistrationBean - Mapping servlet: 'dispatcherServlet' to [/]
- 2019-03-12 09:40:47,162 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: zookeeper.version=3.5.3-beta-8ce24f9e675cbefffb8f21a47e06b42864475a60, built on 04/03/2017 16:19 GMT
- 2019-03-12 09:40:47,162 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: host.name=raspberrypi
- 2019-03-12 09:40:47,162 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: java.version=1.8.0_65
- 2019-03-12 09:40:47,162 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: java.vendor=Oracle Corporation
- 2019-03-12 09:40:47,162 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: java.home=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre
- 2019-03-12 09:40:47,162 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: java.class.path=/usr/share/thingsboard/bin/thingsboard.jar
- 2019-03-12 09:40:47,163 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: java.library.path=/usr/java/packages/lib/arm:/lib:/usr/lib
- 2019-03-12 09:40:47,163 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: java.io.tmpdir=/tmp
- 2019-03-12 09:40:47,163 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: java.compiler=<NA>
- 2019-03-12 09:40:47,163 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: os.name=Linux
- 2019-03-12 09:40:47,163 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: os.arch=arm
- 2019-03-12 09:40:47,163 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: os.version=4.14.98-v7+
- 2019-03-12 09:40:47,163 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: user.name=thingsboard
- 2019-03-12 09:40:47,163 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: user.home=/usr/share/thingsboard
- 2019-03-12 09:40:47,163 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: user.dir=/usr/share/thingsboard/bin
- 2019-03-12 09:40:47,164 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: os.memory.free=195MB
- 2019-03-12 09:40:47,164 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: os.memory.max=249MB
- 2019-03-12 09:40:47,164 [main] INFO o.t.s.s.e.EnvironmentLogService - Thingsboard server environment: os.memory.total=249MB
- 2019-03-12 09:40:47,266 [main] INFO o.t.s.s.c.d.CurrentServerInstanceService - Current server instance: [localhost;9001]
- 2019-03-12 09:40:47,272 [main] INFO o.t.s.s.c.d.DummyDiscoveryService - Initializing...
- 2019-03-12 09:40:51,229 [main] INFO o.t.s.s.c.r.ConsistentClusterRoutingService - Initializing Cluster routing service!
- 2019-03-12 09:40:51,298 [main] INFO o.t.s.s.c.r.ConsistentClusterRoutingService - Cluster routing service initialized!
- 2019-03-12 09:40:52,061 [pool-28-thread-1] WARN com.datastax.driver.core.utils.UUIDs - PID returned through native call was 0, JNR versions incompatible? Falling back to JMX.
- 2019-03-12 09:40:52,063 [pool-28-thread-1] INFO com.datastax.driver.core.utils.UUIDs - PID obtained through JMX: 463
- 2019-03-12 09:40:53,073 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=generator, clazz=org.thingsboard.rule.engine.debug.TbMsgGeneratorNode, configurationDescriptor={"nodeDefinition":{"details":"Generates messages with configurable period. Javascript function used for message generation.","description":"Periodically generates messages","inEnabled":false,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"msgCount":0,"periodInSeconds":1,"originatorId":null,"originatorType":null,"jsScript":"var msg = { temp: 42, humidity: 77 };\nvar metadata = { data: 40 };\nvar msgType = \"POST_TELEMETRY_REQUEST\";\n\nreturn { msg: msg, metadata: metadata, msgType: msgType };"},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeGeneratorConfig","icon":"repeat","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,252 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=generator, clazz=org.thingsboard.rule.engine.debug.TbMsgGeneratorNode, configurationDescriptor={"nodeDefinition":{"details":"Generates messages with configurable period. Javascript function used for message generation.","description":"Periodically generates messages","inEnabled":false,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"msgCount":0,"periodInSeconds":1,"originatorId":null,"originatorType":null,"jsScript":"var msg = { temp: 42, humidity: 77 };\nvar metadata = { data: 40 };\nvar msgType = \"POST_TELEMETRY_REQUEST\";\n\nreturn { msg: msg, metadata: metadata, msgType: msgType };"},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeGeneratorConfig","icon":"repeat","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,275 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=FILTER, scope=TENANT, name=originator type, clazz=org.thingsboard.rule.engine.filter.TbOriginatorTypeFilterNode, configurationDescriptor={"nodeDefinition":{"details":"If Originator Type of incoming message is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.","description":"Filter incoming messages by message Originator Type","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"originatorTypes":["DEVICE"]},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbFilterNodeOriginatorTypeConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,285 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=FILTER, scope=TENANT, name=originator type, clazz=org.thingsboard.rule.engine.filter.TbOriginatorTypeFilterNode, configurationDescriptor={"nodeDefinition":{"details":"If Originator Type of incoming message is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.","description":"Filter incoming messages by message Originator Type","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"originatorTypes":["DEVICE"]},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbFilterNodeOriginatorTypeConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,299 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=rpc call reply, clazz=org.thingsboard.rule.engine.rpc.TbSendRPCReplyNode, configurationDescriptor={"nodeDefinition":{"details":"Expects messages with any message type. Will forward message body to the device.","description":"Sends reply to RPC call from device","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"requestIdMetaDataAttribute":"requestId"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRpcReplyConfig","icon":"call_merge","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,307 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=rpc call reply, clazz=org.thingsboard.rule.engine.rpc.TbSendRPCReplyNode, configurationDescriptor={"nodeDefinition":{"details":"Expects messages with any message type. Will forward message body to the device.","description":"Sends reply to RPC call from device","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"requestIdMetaDataAttribute":"requestId"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRpcReplyConfig","icon":"call_merge","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,336 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=create alarm, clazz=org.thingsboard.rule.engine.action.TbCreateAlarmNode, configurationDescriptor={"nodeDefinition":{"details":"Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\nNode output:\nIf alarm was not created, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains one of those properties 'isNewAlarm/isExistingAlarm'. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.","description":"Create or Update Alarm","inEnabled":true,"outEnabled":true,"relationTypes":["Created","Updated","False","Failure"],"customRelations":false,"defaultConfiguration":{"alarmType":"General Alarm","alarmDetailsBuildJs":"var details = {};\nif (metadata.prevAlarmDetails) {\n details = JSON.parse(metadata.prevAlarmDetails);\n}\nreturn details;","severity":"CRITICAL","propagate":false,"useMessageAlarmData":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeCreateAlarmConfig","icon":"notifications_active","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,345 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=create alarm, clazz=org.thingsboard.rule.engine.action.TbCreateAlarmNode, configurationDescriptor={"nodeDefinition":{"details":"Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\nNode output:\nIf alarm was not created, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains one of those properties 'isNewAlarm/isExistingAlarm'. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.","description":"Create or Update Alarm","inEnabled":true,"outEnabled":true,"relationTypes":["Created","Updated","False","Failure"],"customRelations":false,"defaultConfiguration":{"alarmType":"General Alarm","alarmDetailsBuildJs":"var details = {};\nif (metadata.prevAlarmDetails) {\n details = JSON.parse(metadata.prevAlarmDetails);\n}\nreturn details;","severity":"CRITICAL","propagate":false,"useMessageAlarmData":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeCreateAlarmConfig","icon":"notifications_active","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,364 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=FILTER, scope=TENANT, name=originator type switch, clazz=org.thingsboard.rule.engine.filter.TbOriginatorTypeSwitchNode, configurationDescriptor={"nodeDefinition":{"details":"Routes messages to chain according to the originator type ('Device', 'Asset', etc.).","description":"Route incoming messages by Message Originator Type","inEnabled":true,"outEnabled":true,"relationTypes":["Device","Asset","Tenant","Customer","User","Dashboard","Rule chain","Rule node","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,371 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=FILTER, scope=TENANT, name=originator type switch, clazz=org.thingsboard.rule.engine.filter.TbOriginatorTypeSwitchNode, configurationDescriptor={"nodeDefinition":{"details":"Routes messages to chain according to the originator type ('Device', 'Asset', etc.).","description":"Route incoming messages by Message Originator Type","inEnabled":true,"outEnabled":true,"relationTypes":["Device","Asset","Tenant","Customer","User","Dashboard","Rule chain","Rule node","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,386 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=delay, clazz=org.thingsboard.rule.engine.delay.TbMsgDelayNode, configurationDescriptor={"nodeDefinition":{"details":"Delays messages for configurable period.","description":"Delays incoming message","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"periodInSeconds":60,"maxPendingMsgs":1000},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeMsgDelayConfig","icon":"pause","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,393 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=delay, clazz=org.thingsboard.rule.engine.delay.TbMsgDelayNode, configurationDescriptor={"nodeDefinition":{"details":"Delays messages for configurable period.","description":"Delays incoming message","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"periodInSeconds":60,"maxPendingMsgs":1000},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeMsgDelayConfig","icon":"pause","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,416 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=message count, clazz=org.thingsboard.rule.engine.action.TbMsgCountNode, configurationDescriptor={"nodeDefinition":{"details":"Count incoming messages for specified interval and produces POST_TELEMETRY_REQUEST msg with messages count","description":"Count incoming messages","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"telemetryPrefix":"messageCount","interval":1},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeMsgCountConfig","icon":"functions","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,423 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=message count, clazz=org.thingsboard.rule.engine.action.TbMsgCountNode, configurationDescriptor={"nodeDefinition":{"details":"Count incoming messages for specified interval and produces POST_TELEMETRY_REQUEST msg with messages count","description":"Count incoming messages","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"telemetryPrefix":"messageCount","interval":1},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeMsgCountConfig","icon":"functions","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,460 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=delete relation, clazz=org.thingsboard.rule.engine.action.TbDeleteRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If the relation(s) successfully deleted - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.","description":"Finds target Entity by entity name pattern and then delete a relation to Originator Entity by type and direction if 'Delete single entity' is set to true, otherwise rule node will delete all relations to the originator of the message by type and direction.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","relationTypePattern":"Contains","entityType":null,"entityNamePattern":"","entityTypePattern":null,"entityCacheExpiration":300,"deleteForSingleEntity":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeDeleteRelationConfig","icon":"remove_circle","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:53,468 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component ComponentDescriptor(type=ACTION, scope=TENANT, name=delete relation, clazz=org.thingsboard.rule.engine.action.TbDeleteRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If the relation(s) successfully deleted - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.","description":"Finds target Entity by entity name pattern and then delete a relation to Originator Entity by type and direction if 'Delete single entity' is set to true, otherwise rule node will delete all relations to the originator of the message by type and direction.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","relationTypePattern":"Contains","entityType":null,"entityNamePattern":"","entityTypePattern":null,"entityCacheExpiration":300,"deleteForSingleEntity":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeDeleteRelationConfig","icon":"remove_circle","iconUrl":"","docUrl":""}}, actions=null) will be updated to ComponentDescriptor(type=ACTION, scope=TENANT, name=delete relation, clazz=org.thingsboard.rule.engine.action.TbDeleteRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If the relation(s) successfully deleted - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.","description":"Finds target Entity by entity name pattern and then delete a relation to Originator Entity by type and direction if 'Delete single entity' is set to true, otherwise rule node will delete all relations to the originator of the message by type and direction.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","relationTypePattern":"Contains","entityType":null,"entityNamePattern":"","entityTypePattern":null,"entityCacheExpiration":300,"deleteForSingleEntity":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeDeleteRelationConfig","icon":"remove_circle","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,348 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=FILTER, scope=TENANT, name=script, clazz=org.thingsboard.rule.engine.filter.TbJsFilterNode, configurationDescriptor={"nodeDefinition":{"details":"Evaluate incoming Message with configured JS condition. If <b>True</b> - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.Message payload can be accessed via <code>msg</code> property. For example <code>msg.temperature < 10;</code><br/>Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>Message type can be accessed via <code>msgType</code> property.","description":"Filter incoming messages using JS script","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"jsScript":"return msg.temperature > 20;"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeScriptConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,355 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=FILTER, scope=TENANT, name=script, clazz=org.thingsboard.rule.engine.filter.TbJsFilterNode, configurationDescriptor={"nodeDefinition":{"details":"Evaluate incoming Message with configured JS condition. If <b>True</b> - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.Message payload can be accessed via <code>msg</code> property. For example <code>msg.temperature < 10;</code><br/>Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>Message type can be accessed via <code>msgType</code> property.","description":"Filter incoming messages using JS script","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"jsScript":"return msg.temperature > 20;"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeScriptConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,437 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=rabbitmq, clazz=org.thingsboard.rule.engine.rabbitmq.TbRabbitMqNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload to RabbitMQ queue.","description":"Publish messages to the RabbitMQ","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"exchangeNamePattern":"","routingKeyPattern":"","messageProperties":null,"host":"localhost","port":5672,"virtualHost":"/","username":"guest","password":"guest","automaticRecoveryEnabled":false,"connectionTimeout":60000,"handshakeTimeout":10000,"clientProperties":{}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRabbitMqConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZlcnNpb249IjEuMSIgeT0iMHB4IiB4PSIwcHgiIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiPjxwYXRoIHN0cm9rZS13aWR0aD0iLjg0OTU2IiBkPSJtODYwLjQ3IDQxNi4zMmgtMjYyLjAxYy0xMi45MTMgMC0yMy42MTgtMTAuNzA0LTIzLjYxOC0yMy42MTh2LTI3Mi43MWMwLTIwLjMwNS0xNi4yMjctMzYuMjc2LTM2LjI3Ni0zNi4yNzZoLTkzLjc5MmMtMjAuMzA1IDAtMzYuMjc2IDE2LjIyNy0zNi4yNzYgMzYuMjc2djI3MC44NGMtMC4yNTQ4NyAxNC4xMDMtMTEuNDY5IDI1LjU3Mi0yNS43NDIgMjUuNTcybC04NS42MzYgMC42Nzk2NWMtMTQuMTAzIDAtMjUuNTcyLTExLjQ2OS0yNS41NzItMjUuNTcybDAuNjc5NjUtMjcxLjUyYzAtMjAuMzA1LTE2LjIyNy0zNi4yNzYtMzYuMjc2LTM2LjI3NmgtOTMuNTM3Yy0yMC4zMDUgMC0zNi4yNzYgMTYuMjI3LTM2LjI3NiAzNi4yNzZ2NzYzLjg0YzAgMTguMDk2IDE0Ljc4MiAzMi40NTMgMzIuNDUzIDMyLjQ1M2g3MjIuODFjMTguMDk2IDAgMzIuNDUzLTE0Ljc4MiAzMi40NTMtMzIuNDUzdi00MzUuMzFjLTEuMTg5NC0xOC4xODEtMTUuMjkyLTMyLjE5OC0zMy4zODgtMzIuMTk4em0tMTIyLjY4IDI4Ny4wN2MwIDIzLjYxOC0xOC44NiA0Mi40NzgtNDIuNDc4IDQyLjQ3OGgtNzMuOTk3Yy0yMy42MTggMC00Mi40NzgtMTguODYtNDIuNDc4LTQyLjQ3OHYtNzQuMjUyYzAtMjMuNjE4IDE4Ljg2LTQyLjQ3OCA0Mi40NzgtNDIuNDc4aDczLjk5N2MyMy42MTggMCA0Mi40NzggMTguODYgNDIuNDc4IDQyLjQ3OHoiLz48L3N2Zz4=","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,445 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=rabbitmq, clazz=org.thingsboard.rule.engine.rabbitmq.TbRabbitMqNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload to RabbitMQ queue.","description":"Publish messages to the RabbitMQ","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"exchangeNamePattern":"","routingKeyPattern":"","messageProperties":null,"host":"localhost","port":5672,"virtualHost":"/","username":"guest","password":"guest","automaticRecoveryEnabled":false,"connectionTimeout":60000,"handshakeTimeout":10000,"clientProperties":{}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRabbitMqConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZlcnNpb249IjEuMSIgeT0iMHB4IiB4PSIwcHgiIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiPjxwYXRoIHN0cm9rZS13aWR0aD0iLjg0OTU2IiBkPSJtODYwLjQ3IDQxNi4zMmgtMjYyLjAxYy0xMi45MTMgMC0yMy42MTgtMTAuNzA0LTIzLjYxOC0yMy42MTh2LTI3Mi43MWMwLTIwLjMwNS0xNi4yMjctMzYuMjc2LTM2LjI3Ni0zNi4yNzZoLTkzLjc5MmMtMjAuMzA1IDAtMzYuMjc2IDE2LjIyNy0zNi4yNzYgMzYuMjc2djI3MC44NGMtMC4yNTQ4NyAxNC4xMDMtMTEuNDY5IDI1LjU3Mi0yNS43NDIgMjUuNTcybC04NS42MzYgMC42Nzk2NWMtMTQuMTAzIDAtMjUuNTcyLTExLjQ2OS0yNS41NzItMjUuNTcybDAuNjc5NjUtMjcxLjUyYzAtMjAuMzA1LTE2LjIyNy0zNi4yNzYtMzYuMjc2LTM2LjI3NmgtOTMuNTM3Yy0yMC4zMDUgMC0zNi4yNzYgMTYuMjI3LTM2LjI3NiAzNi4yNzZ2NzYzLjg0YzAgMTguMDk2IDE0Ljc4MiAzMi40NTMgMzIuNDUzIDMyLjQ1M2g3MjIuODFjMTguMDk2IDAgMzIuNDUzLTE0Ljc4MiAzMi40NTMtMzIuNDUzdi00MzUuMzFjLTEuMTg5NC0xOC4xODEtMTUuMjkyLTMyLjE5OC0zMy4zODgtMzIuMTk4em0tMTIyLjY4IDI4Ny4wN2MwIDIzLjYxOC0xOC44NiA0Mi40NzgtNDIuNDc4IDQyLjQ3OGgtNzMuOTk3Yy0yMy42MTggMC00Mi40NzgtMTguODYtNDIuNDc4LTQyLjQ3OHYtNzQuMjUyYzAtMjMuNjE4IDE4Ljg2LTQyLjQ3OCA0Mi40NzgtNDIuNDc4aDczLjk5N2MyMy42MTggMCA0Mi40NzggMTguODYgNDIuNDc4IDQyLjQ3OHoiLz48L3N2Zz4=","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,460 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=save timeseries, clazz=org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode, configurationDescriptor={"nodeDefinition":{"details":"Saves timeseries telemetry data based on configurable TTL parameter. Expects messages with 'POST_TELEMETRY_REQUEST' message type","description":"Saves timeseries data","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"defaultTTL":0},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeTimeseriesConfig","icon":"file_upload","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,469 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component ComponentDescriptor(type=ACTION, scope=TENANT, name=save timeseries, clazz=org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode, configurationDescriptor={"nodeDefinition":{"details":"Saves timeseries telemetry data based on configurable TTL parameter. Expects messages with 'POST_TELEMETRY_REQUEST' message type","description":"Saves timeseries data","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"defaultTTL":0},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeTimeseriesConfig","icon":"file_upload","iconUrl":"","docUrl":""}}, actions=null) will be updated to ComponentDescriptor(type=ACTION, scope=TENANT, name=save timeseries, clazz=org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode, configurationDescriptor={"nodeDefinition":{"details":"Saves timeseries telemetry data based on configurable TTL parameter. Expects messages with 'POST_TELEMETRY_REQUEST' message type","description":"Saves timeseries data","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"defaultTTL":0},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeTimeseriesConfig","icon":"file_upload","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,510 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=synchronization start, clazz=org.thingsboard.rule.engine.transaction.TbSynchronizationBeginNode, configurationDescriptor={"nodeDefinition":{"details":"This node should be used together with \"synchronization end\" node. \n This node will put messages into queue based on message originator id. \nSubsequent messages will not be processed until the previous message processing is completed or timeout event occurs.\nSize of the queue per originator and timeout values are configurable on a system level","description":"Starts synchronization of message processing based on message originator","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,520 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=synchronization start, clazz=org.thingsboard.rule.engine.transaction.TbSynchronizationBeginNode, configurationDescriptor={"nodeDefinition":{"details":"This node should be used together with \"synchronization end\" node. \n This node will put messages into queue based on message originator id. \nSubsequent messages will not be processed until the previous message processing is completed or timeout event occurs.\nSize of the queue per originator and timeout values are configurable on a system level","description":"Starts synchronization of message processing based on message originator","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,567 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=TRANSFORMATION, scope=TENANT, name=change originator, clazz=org.thingsboard.rule.engine.transform.TbChangeOriginatorNode, configurationDescriptor={"nodeDefinition":{"details":"Related Entity found using configured relation direction and Relation Type. If multiple Related Entities are found, only first Entity is used as new Originator, other entities are discarded. ","description":"Change Message Originator To Tenant/Customer/Related Entity","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"originatorSource":"CUSTOMER","relationsQuery":{"direction":"FROM","maxLevel":1,"filters":[{"relationType":"Contains","entityTypes":[]}]}},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbTransformationNodeChangeOriginatorConfig","icon":"find_replace","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,574 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=TRANSFORMATION, scope=TENANT, name=change originator, clazz=org.thingsboard.rule.engine.transform.TbChangeOriginatorNode, configurationDescriptor={"nodeDefinition":{"details":"Related Entity found using configured relation direction and Relation Type. If multiple Related Entities are found, only first Entity is used as new Originator, other entities are discarded. ","description":"Change Message Originator To Tenant/Customer/Related Entity","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"originatorSource":"CUSTOMER","relationsQuery":{"direction":"FROM","maxLevel":1,"filters":[{"relationType":"Contains","entityTypes":[]}]}},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbTransformationNodeChangeOriginatorConfig","icon":"find_replace","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,599 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=originator telemetry, clazz=org.thingsboard.rule.engine.metadata.TbGetTelemetryNode, configurationDescriptor={"nodeDefinition":{"details":"The node allows you to select fetch mode <b>FIRST/LAST/ALL</b> to fetch telemetry of certain time range that are added into Message metadata without any prefix. If selected fetch mode <b>ALL</b> Telemetry will be added like array into Message Metadata where <b>key</b> is Timestamp and <b>value</b> is value of Telemetry. <b>Note</b>: The maximum size of the fetched array is 1000 records. If selected fetch mode <b>FIRST</b> or <b>LAST</b> Telemetry will be added like string without Timestamp","description":"Add Message Originator Telemetry for selected time range into Message Metadata\n","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"startInterval":2,"endInterval":1,"startIntervalPattern":"","endIntervalPattern":"","useMetadataIntervalPatterns":false,"startIntervalTimeUnit":"MINUTES","endIntervalTimeUnit":"MINUTES","fetchMode":"FIRST","latestTsKeyNames":[]},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeGetTelemetryFromDatabase","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,606 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=originator telemetry, clazz=org.thingsboard.rule.engine.metadata.TbGetTelemetryNode, configurationDescriptor={"nodeDefinition":{"details":"The node allows you to select fetch mode <b>FIRST/LAST/ALL</b> to fetch telemetry of certain time range that are added into Message metadata without any prefix. If selected fetch mode <b>ALL</b> Telemetry will be added like array into Message Metadata where <b>key</b> is Timestamp and <b>value</b> is value of Telemetry. <b>Note</b>: The maximum size of the fetched array is 1000 records. If selected fetch mode <b>FIRST</b> or <b>LAST</b> Telemetry will be added like string without Timestamp","description":"Add Message Originator Telemetry for selected time range into Message Metadata\n","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"startInterval":2,"endInterval":1,"startIntervalPattern":"","endIntervalPattern":"","useMetadataIntervalPatterns":false,"startIntervalTimeUnit":"MINUTES","endIntervalTimeUnit":"MINUTES","fetchMode":"FIRST","latestTsKeyNames":[]},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeGetTelemetryFromDatabase","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,669 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=rest api call, clazz=org.thingsboard.rule.engine.rest.TbRestApiCallNode, configurationDescriptor={"nodeDefinition":{"details":"Will invoke REST API call <code>GET | POST | PUT | DELETE</code> to external REST server. Message payload added into Request body. Configured attributes can be added into Headers from Message Metadata. Outbound message will contain response fields (<code>status</code>, <code>statusCode</code>, <code>statusReason</code> and response <code>headers</code>) in the Message Metadata. Response body saved in outbound Message payload. For example <b>statusCode</b> field can be accessed with <code>metadata.statusCode</code>.","description":"Invoke REST API calls to external REST server","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"restEndpointUrlPattern":"http://localhost/api","requestMethod":"POST","headers":{},"useSimpleClientHttpFactory":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRestApiCallConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB2ZXJzaW9uPSIxLjEiIHk9IjBweCIgeD0iMHB4Ij48ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTQ5NzUgMCAwIC45NDk3NSAxNy4xMiAyNi40OTIpIj48cGF0aCBkPSJtMTY5LjExIDEwOC41NGMtOS45MDY2IDAuMDczNC0xOS4wMTQgNi41NzI0LTIyLjAxNCAxNi40NjlsLTY5Ljk5MyAyMzEuMDhjLTMuNjkwNCAxMi4xODEgMy4yODkyIDI1LjIyIDE1LjQ2OSAyOC45MSAyLjIyNTkgMC42NzQ4MSA0LjQ5NjkgMSA2LjcyODUgMSA5Ljk3MjEgMCAxOS4xNjUtNi41MTUzIDIyLjE4Mi0xNi40NjdhNi41MjI0IDYuNTIyNCAwIDAgMCAwLjAwMiAtMC4wMDJsNjkuOTktMjMxLjA3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMCAtMC4wMDJjMy42ODU1LTEyLjE4MS0zLjI4Ny0yNS4yMjUtMTUuNDcxLTI4LjkxMi0yLjI4MjUtMC42OTE0NS00LjYxMTYtMS4wMTY5LTYuODk4NC0xem04NC45ODggMGMtOS45MDQ4IDAuMDczNC0xOS4wMTggNi41Njc1LTIyLjAxOCAxNi40NjlsLTY5Ljk4NiAyMzEuMDhjLTMuNjg5OCAxMi4xNzkgMy4yODUzIDI1LjIxNyAxNS40NjUgMjguOTA4IDIuMjI5NyAwLjY3NjQ3IDQuNTAwOCAxLjAwMiA2LjczMjQgMS4wMDIgOS45NzIxIDAgMTkuMTY1LTYuNTE1MyAyMi4xODItMTYuNDY3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMC4wMDIgLTAuMDAybDY5Ljk4OC0yMzEuMDdjMy42OTA4LTEyLjE4MS0zLjI4NTItMjUuMjIzLTE1LjQ2Ny0yOC45MTItMi4yODE0LTAuNjkyMzEtNC42MTA4LTEuMDE4OS02Ljg5ODQtMS4wMDJ6bS0yMTcuMjkgNDIuMjNjLTEyLjcyOS0wLjAwMDg3LTIzLjE4OCAxMC40NTYtMjMuMTg4IDIzLjE4NiAwLjAwMSAxMi43MjggMTAuNDU5IDIzLjE4NiAyMy4xODggMjMuMTg2IDEyLjcyNy0wLjAwMSAyMy4xODMtMTAuNDU5IDIzLjE4NC0yMy4xODYgMC4wMDA4NzYtMTIuNzI4LTEwLjQ1Ni0yMy4xODUtMjMuMTg0LTIzLjE4NnptMCAxNDYuNjRjLTEyLjcyNy0wLjAwMDg3LTIzLjE4NiAxMC40NTUtMjMuMTg4IDIzLjE4NC0wLjAwMDg3MyAxMi43MjkgMTAuNDU4IDIzLjE4OCAyMy4xODggMjMuMTg4IDEyLjcyOC0wLjAwMSAyMy4xODQtMTAuNDYgMjMuMTg0LTIzLjE4OC0wLjAwMS0xMi43MjYtMTAuNDU3LTIzLjE4My0yMy4xODQtMjMuMTg0em0yNzAuNzkgNDIuMjExYy0xMi43MjcgMC0yMy4xODQgMTAuNDU3LTIzLjE4NCAyMy4xODRzMTAuNDU1IDIzLjE4OCAyMy4xODQgMjMuMTg4aDE1NC45OGMxMi43MjkgMCAyMy4xODYtMTAuNDYgMjMuMTg2LTIzLjE4OCAwLjAwMS0xMi43MjgtMTAuNDU4LTIzLjE4NC0yMy4xODYtMjMuMTg0eiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMzc2IDAgMCAxLjAzNzYgLTcuNTY3NiAtMTQuOTI1KSIgc3Ryb2tlLXdpZHRoPSIxLjI2OTMiLz48L2c+PC9zdmc+","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,682 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=rest api call, clazz=org.thingsboard.rule.engine.rest.TbRestApiCallNode, configurationDescriptor={"nodeDefinition":{"details":"Will invoke REST API call <code>GET | POST | PUT | DELETE</code> to external REST server. Message payload added into Request body. Configured attributes can be added into Headers from Message Metadata. Outbound message will contain response fields (<code>status</code>, <code>statusCode</code>, <code>statusReason</code> and response <code>headers</code>) in the Message Metadata. Response body saved in outbound Message payload. For example <b>statusCode</b> field can be accessed with <code>metadata.statusCode</code>.","description":"Invoke REST API calls to external REST server","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"restEndpointUrlPattern":"http://localhost/api","requestMethod":"POST","headers":{},"useSimpleClientHttpFactory":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRestApiCallConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB2ZXJzaW9uPSIxLjEiIHk9IjBweCIgeD0iMHB4Ij48ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTQ5NzUgMCAwIC45NDk3NSAxNy4xMiAyNi40OTIpIj48cGF0aCBkPSJtMTY5LjExIDEwOC41NGMtOS45MDY2IDAuMDczNC0xOS4wMTQgNi41NzI0LTIyLjAxNCAxNi40NjlsLTY5Ljk5MyAyMzEuMDhjLTMuNjkwNCAxMi4xODEgMy4yODkyIDI1LjIyIDE1LjQ2OSAyOC45MSAyLjIyNTkgMC42NzQ4MSA0LjQ5NjkgMSA2LjcyODUgMSA5Ljk3MjEgMCAxOS4xNjUtNi41MTUzIDIyLjE4Mi0xNi40NjdhNi41MjI0IDYuNTIyNCAwIDAgMCAwLjAwMiAtMC4wMDJsNjkuOTktMjMxLjA3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMCAtMC4wMDJjMy42ODU1LTEyLjE4MS0zLjI4Ny0yNS4yMjUtMTUuNDcxLTI4LjkxMi0yLjI4MjUtMC42OTE0NS00LjYxMTYtMS4wMTY5LTYuODk4NC0xem04NC45ODggMGMtOS45MDQ4IDAuMDczNC0xOS4wMTggNi41Njc1LTIyLjAxOCAxNi40NjlsLTY5Ljk4NiAyMzEuMDhjLTMuNjg5OCAxMi4xNzkgMy4yODUzIDI1LjIxNyAxNS40NjUgMjguOTA4IDIuMjI5NyAwLjY3NjQ3IDQuNTAwOCAxLjAwMiA2LjczMjQgMS4wMDIgOS45NzIxIDAgMTkuMTY1LTYuNTE1MyAyMi4xODItMTYuNDY3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMC4wMDIgLTAuMDAybDY5Ljk4OC0yMzEuMDdjMy42OTA4LTEyLjE4MS0zLjI4NTItMjUuMjIzLTE1LjQ2Ny0yOC45MTItMi4yODE0LTAuNjkyMzEtNC42MTA4LTEuMDE4OS02Ljg5ODQtMS4wMDJ6bS0yMTcuMjkgNDIuMjNjLTEyLjcyOS0wLjAwMDg3LTIzLjE4OCAxMC40NTYtMjMuMTg4IDIzLjE4NiAwLjAwMSAxMi43MjggMTAuNDU5IDIzLjE4NiAyMy4xODggMjMuMTg2IDEyLjcyNy0wLjAwMSAyMy4xODMtMTAuNDU5IDIzLjE4NC0yMy4xODYgMC4wMDA4NzYtMTIuNzI4LTEwLjQ1Ni0yMy4xODUtMjMuMTg0LTIzLjE4NnptMCAxNDYuNjRjLTEyLjcyNy0wLjAwMDg3LTIzLjE4NiAxMC40NTUtMjMuMTg4IDIzLjE4NC0wLjAwMDg3MyAxMi43MjkgMTAuNDU4IDIzLjE4OCAyMy4xODggMjMuMTg4IDEyLjcyOC0wLjAwMSAyMy4xODQtMTAuNDYgMjMuMTg0LTIzLjE4OC0wLjAwMS0xMi43MjYtMTAuNDU3LTIzLjE4My0yMy4xODQtMjMuMTg0em0yNzAuNzkgNDIuMjExYy0xMi43MjcgMC0yMy4xODQgMTAuNDU3LTIzLjE4NCAyMy4xODRzMTAuNDU1IDIzLjE4OCAyMy4xODQgMjMuMTg4aDE1NC45OGMxMi43MjkgMCAyMy4xODYtMTAuNDYgMjMuMTg2LTIzLjE4OCAwLjAwMS0xMi43MjgtMTAuNDU4LTIzLjE4NC0yMy4xODYtMjMuMTg0eiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMzc2IDAgMCAxLjAzNzYgLTcuNTY3NiAtMTQuOTI1KSIgc3Ryb2tlLXdpZHRoPSIxLjI2OTMiLz48L2c+PC9zdmc+","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,707 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=FILTER, scope=TENANT, name=switch, clazz=org.thingsboard.rule.engine.filter.TbJsSwitchNode, configurationDescriptor={"nodeDefinition":{"details":"Node executes configured JS script. Script should return array of next Chain names where Message should be routed. If Array is empty - message not routed to next Node. Message payload can be accessed via <code>msg</code> property. For example <code>msg.temperature < 10;</code><br/>Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>Message type can be accessed via <code>msgType</code> property.","description":"Route incoming Message to one or multiple output chains","inEnabled":true,"outEnabled":true,"relationTypes":["Failure"],"customRelations":true,"defaultConfiguration":{"jsScript":"function nextRelation(metadata, msg) {\n return ['one','nine'];\n}\nif(msgType === 'POST_TELEMETRY_REQUEST') {\n return ['two'];\n}\nreturn nextRelation(metadata, msg);"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeSwitchConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,719 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=FILTER, scope=TENANT, name=switch, clazz=org.thingsboard.rule.engine.filter.TbJsSwitchNode, configurationDescriptor={"nodeDefinition":{"details":"Node executes configured JS script. Script should return array of next Chain names where Message should be routed. If Array is empty - message not routed to next Node. Message payload can be accessed via <code>msg</code> property. For example <code>msg.temperature < 10;</code><br/>Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>Message type can be accessed via <code>msgType</code> property.","description":"Route incoming Message to one or multiple output chains","inEnabled":true,"outEnabled":true,"relationTypes":["Failure"],"customRelations":true,"defaultConfiguration":{"jsScript":"function nextRelation(metadata, msg) {\n return ['one','nine'];\n}\nif(msgType === 'POST_TELEMETRY_REQUEST') {\n return ['two'];\n}\nreturn nextRelation(metadata, msg);"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeSwitchConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,728 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=copy to view, clazz=org.thingsboard.rule.engine.action.TbCopyAttributesToEntityViewNode, configurationDescriptor={"nodeDefinition":{"details":"Copy attributes from asset/device to related entity view according to entity view configuration. \n Copy will be done only for attributes that are between start and end dates and according to attribute keys configuration. \nChanges message originator to related entity view and produces new messages according to count of updated entity views","description":"Copy attributes from asset/device to entity view and changes message originator to related entity view","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"content_copy","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,735 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=copy to view, clazz=org.thingsboard.rule.engine.action.TbCopyAttributesToEntityViewNode, configurationDescriptor={"nodeDefinition":{"details":"Copy attributes from asset/device to related entity view according to entity view configuration. \n Copy will be done only for attributes that are between start and end dates and according to attribute keys configuration. \nChanges message originator to related entity view and produces new messages according to count of updated entity views","description":"Copy attributes from asset/device to entity view and changes message originator to related entity view","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"content_copy","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,756 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=tenant attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.","description":"Add Originators Tenant Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"attrMapping":{"temperature":"tempo"},"telemetry":false},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbEnrichmentNodeTenantAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,763 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=tenant attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.","description":"Add Originators Tenant Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"attrMapping":{"temperature":"tempo"},"telemetry":false},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbEnrichmentNodeTenantAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,784 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=FILTER, scope=TENANT, name=message type, clazz=org.thingsboard.rule.engine.filter.TbMsgTypeFilterNode, configurationDescriptor={"nodeDefinition":{"details":"If incoming MessageType is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.","description":"Filter incoming messages by Message Type","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"messageTypes":["POST_ATTRIBUTES_REQUEST","POST_TELEMETRY_REQUEST","TO_SERVER_RPC_REQUEST"]},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbFilterNodeMessageTypeConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,791 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=FILTER, scope=TENANT, name=message type, clazz=org.thingsboard.rule.engine.filter.TbMsgTypeFilterNode, configurationDescriptor={"nodeDefinition":{"details":"If incoming MessageType is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.","description":"Filter incoming messages by Message Type","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"messageTypes":["POST_ATTRIBUTES_REQUEST","POST_TELEMETRY_REQUEST","TO_SERVER_RPC_REQUEST"]},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbFilterNodeMessageTypeConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,820 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=originator attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetAttributesNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, <b>CLIENT/SHARED/SERVER</b> attributes are added into Message metadata with specific prefix: <i>cs/shared/ss</i>. Latest telemetry value added into metadata without prefix. To access those attributes in other nodes this template can be used <code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ","description":"Add Message Originator Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"clientAttributeNames":[],"sharedAttributeNames":[],"serverAttributeNames":[],"latestTsKeyNames":[]},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeOriginatorAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:54,835 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=originator attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetAttributesNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, <b>CLIENT/SHARED/SERVER</b> attributes are added into Message metadata with specific prefix: <i>cs/shared/ss</i>. Latest telemetry value added into metadata without prefix. To access those attributes in other nodes this template can be used <code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ","description":"Add Message Originator Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"clientAttributeNames":[],"sharedAttributeNames":[],"serverAttributeNames":[],"latestTsKeyNames":[]},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeOriginatorAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,046 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=mqtt, clazz=org.thingsboard.rule.engine.mqtt.TbMqttNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload to the MQTT broker with QoS <b>AT_LEAST_ONCE</b>.","description":"Publish messages to the MQTT broker","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"topicPattern":"my-topic","host":"localhost","port":1883,"connectTimeoutSec":10,"clientId":null,"cleanSession":true,"ssl":false,"credentials":{"type":"anonymous"}},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeMqttConfig","icon":"call_split","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,053 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=mqtt, clazz=org.thingsboard.rule.engine.mqtt.TbMqttNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload to the MQTT broker with QoS <b>AT_LEAST_ONCE</b>.","description":"Publish messages to the MQTT broker","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"topicPattern":"my-topic","host":"localhost","port":1883,"connectTimeoutSec":10,"clientId":null,"cleanSession":true,"ssl":false,"credentials":{"type":"anonymous"}},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeMqttConfig","icon":"call_split","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,086 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=kafka, clazz=org.thingsboard.rule.engine.kafka.TbKafkaNode, configurationDescriptor={"nodeDefinition":{"details":"Will send record via Kafka producer to Kafka server. Outbound message will contain response fields (<code>offset</code>, <code>partition</code>, <code>topic</code>) from the Kafka in the Message Metadata. For example <b>partition</b> field can be accessed with <code>metadata.partition</code>.","description":"Publish messages to Kafka server","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"topicPattern":"my-topic","bootstrapServers":"localhost:9092","retries":0,"batchSize":16384,"linger":0,"bufferMemory":33554432,"acks":"-1","keySerializer":"org.apache.kafka.common.serialization.StringSerializer","valueSerializer":"org.apache.kafka.common.serialization.StringSerializer","otherProperties":{}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeKafkaConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUzOCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTIwMS44MTYgMjMwLjIxNmMtMTYuMTg2IDAtMzAuNjk3IDcuMTcxLTQwLjYzNCAxOC40NjFsLTI1LjQ2My0xOC4wMjZjMi43MDMtNy40NDIgNC4yNTUtMTUuNDMzIDQuMjU1LTIzLjc5NyAwLTguMjE5LTEuNDk4LTE2LjA3Ni00LjExMi0yMy40MDhsMjUuNDA2LTE3LjgzNWM5LjkzNiAxMS4yMzMgMjQuNDA5IDE4LjM2NSA0MC41NDggMTguMzY1IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI5Ljg3OS0yNC4zMDktNTQuMTg0LTU0LjE4NC01NC4xODQtMjkuODc1IDAtNTQuMTg0IDI0LjMwNS01NC4xODQgNTQuMTg0IDAgNS4zNDguODA4IDEwLjUwNSAyLjI1OCAxNS4zODlsLTI1LjQyMyAxNy44NDRjLTEwLjYyLTEzLjE3NS0yNS45MTEtMjIuMzc0LTQzLjMzMy0yNS4xODJ2LTMwLjY0YzI0LjU0NC01LjE1NSA0My4wMzctMjYuOTYyIDQzLjAzNy01My4wMTlDMTI0LjE3MSAyNC4zMDUgOTkuODYyIDAgNjkuOTg3IDAgNDAuMTEyIDAgMTUuODAzIDI0LjMwNSAxNS44MDMgNTQuMTg0YzAgMjUuNzA4IDE4LjAxNCA0Ny4yNDYgNDIuMDY3IDUyLjc2OXYzMS4wMzhDMjUuMDQ0IDE0My43NTMgMCAxNzIuNDAxIDAgMjA2Ljg1NGMwIDM0LjYyMSAyNS4yOTIgNjMuMzc0IDU4LjM1NSA2OC45NHYzMi43NzRjLTI0LjI5OSA1LjM0MS00Mi41NTIgMjcuMDExLTQyLjU1MiA1Mi44OTQgMCAyOS44NzkgMjQuMzA5IDU0LjE4NCA1NC4xODQgNTQuMTg0IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI1Ljg4My0xOC4yNTMtNDcuNTUzLTQyLjU1Mi01Mi44OTR2LTMyLjc3NWE2OS45NjUgNjkuOTY1IDAgMCAwIDQyLjYtMjQuNzc2bDI1LjYzMyAxOC4xNDNjLTEuNDIzIDQuODQtMi4yMiA5Ljk0Ni0yLjIyIDE1LjI0IDAgMjkuODc5IDI0LjMwOSA1NC4xODQgNTQuMTg0IDU0LjE4NCAyOS44NzUgMCA1NC4xODQtMjQuMzA1IDU0LjE4NC01NC4xODQgMC0yOS44NzktMjQuMzA5LTU0LjE4NC01NC4xODQtNTQuMTg0em0wLTEyNi42OTVjMTQuNDg3IDAgMjYuMjcgMTEuNzg4IDI2LjI3IDI2LjI3MXMtMTEuNzgzIDI2LjI3LTI2LjI3IDI2LjI3LTI2LjI3LTExLjc4Ny0yNi4yNy0yNi4yN2MwLTE0LjQ4MyAxMS43ODMtMjYuMjcxIDI2LjI3LTI2LjI3MXptLTE1OC4xLTQ5LjMzN2MwLTE0LjQ4MyAxMS43ODQtMjYuMjcgMjYuMjcxLTI2LjI3czI2LjI3IDExLjc4NyAyNi4yNyAyNi4yN2MwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3em01Mi41NDEgMzA3LjI3OGMwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3YzAtMTQuNDgzIDExLjc4NC0yNi4yNyAyNi4yNzEtMjYuMjdzMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3em0tMjYuMjcyLTExNy45N2MtMjAuMjA1IDAtMzYuNjQyLTE2LjQzNC0zNi42NDItMzYuNjM4IDAtMjAuMjA1IDE2LjQzNy0zNi42NDIgMzYuNjQyLTM2LjY0MiAyMC4yMDQgMCAzNi42NDEgMTYuNDM3IDM2LjY0MSAzNi42NDIgMCAyMC4yMDQtMTYuNDM3IDM2LjYzOC0zNi42NDEgMzYuNjM4em0xMzEuODMxIDY3LjE3OWMtMTQuNDg3IDAtMjYuMjctMTEuNzg4LTI2LjI3LTI2LjI3MXMxMS43ODMtMjYuMjcgMjYuMjctMjYuMjcgMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3YzAgMTQuNDgzLTExLjc4MyAyNi4yNzEtMjYuMjcgMjYuMjcxeiIvPjwvc3ZnPg==","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,093 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=kafka, clazz=org.thingsboard.rule.engine.kafka.TbKafkaNode, configurationDescriptor={"nodeDefinition":{"details":"Will send record via Kafka producer to Kafka server. Outbound message will contain response fields (<code>offset</code>, <code>partition</code>, <code>topic</code>) from the Kafka in the Message Metadata. For example <b>partition</b> field can be accessed with <code>metadata.partition</code>.","description":"Publish messages to Kafka server","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"topicPattern":"my-topic","bootstrapServers":"localhost:9092","retries":0,"batchSize":16384,"linger":0,"bufferMemory":33554432,"acks":"-1","keySerializer":"org.apache.kafka.common.serialization.StringSerializer","valueSerializer":"org.apache.kafka.common.serialization.StringSerializer","otherProperties":{}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeKafkaConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUzOCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTIwMS44MTYgMjMwLjIxNmMtMTYuMTg2IDAtMzAuNjk3IDcuMTcxLTQwLjYzNCAxOC40NjFsLTI1LjQ2My0xOC4wMjZjMi43MDMtNy40NDIgNC4yNTUtMTUuNDMzIDQuMjU1LTIzLjc5NyAwLTguMjE5LTEuNDk4LTE2LjA3Ni00LjExMi0yMy40MDhsMjUuNDA2LTE3LjgzNWM5LjkzNiAxMS4yMzMgMjQuNDA5IDE4LjM2NSA0MC41NDggMTguMzY1IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI5Ljg3OS0yNC4zMDktNTQuMTg0LTU0LjE4NC01NC4xODQtMjkuODc1IDAtNTQuMTg0IDI0LjMwNS01NC4xODQgNTQuMTg0IDAgNS4zNDguODA4IDEwLjUwNSAyLjI1OCAxNS4zODlsLTI1LjQyMyAxNy44NDRjLTEwLjYyLTEzLjE3NS0yNS45MTEtMjIuMzc0LTQzLjMzMy0yNS4xODJ2LTMwLjY0YzI0LjU0NC01LjE1NSA0My4wMzctMjYuOTYyIDQzLjAzNy01My4wMTlDMTI0LjE3MSAyNC4zMDUgOTkuODYyIDAgNjkuOTg3IDAgNDAuMTEyIDAgMTUuODAzIDI0LjMwNSAxNS44MDMgNTQuMTg0YzAgMjUuNzA4IDE4LjAxNCA0Ny4yNDYgNDIuMDY3IDUyLjc2OXYzMS4wMzhDMjUuMDQ0IDE0My43NTMgMCAxNzIuNDAxIDAgMjA2Ljg1NGMwIDM0LjYyMSAyNS4yOTIgNjMuMzc0IDU4LjM1NSA2OC45NHYzMi43NzRjLTI0LjI5OSA1LjM0MS00Mi41NTIgMjcuMDExLTQyLjU1MiA1Mi44OTQgMCAyOS44NzkgMjQuMzA5IDU0LjE4NCA1NC4xODQgNTQuMTg0IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI1Ljg4My0xOC4yNTMtNDcuNTUzLTQyLjU1Mi01Mi44OTR2LTMyLjc3NWE2OS45NjUgNjkuOTY1IDAgMCAwIDQyLjYtMjQuNzc2bDI1LjYzMyAxOC4xNDNjLTEuNDIzIDQuODQtMi4yMiA5Ljk0Ni0yLjIyIDE1LjI0IDAgMjkuODc5IDI0LjMwOSA1NC4xODQgNTQuMTg0IDU0LjE4NCAyOS44NzUgMCA1NC4xODQtMjQuMzA1IDU0LjE4NC01NC4xODQgMC0yOS44NzktMjQuMzA5LTU0LjE4NC01NC4xODQtNTQuMTg0em0wLTEyNi42OTVjMTQuNDg3IDAgMjYuMjcgMTEuNzg4IDI2LjI3IDI2LjI3MXMtMTEuNzgzIDI2LjI3LTI2LjI3IDI2LjI3LTI2LjI3LTExLjc4Ny0yNi4yNy0yNi4yN2MwLTE0LjQ4MyAxMS43ODMtMjYuMjcxIDI2LjI3LTI2LjI3MXptLTE1OC4xLTQ5LjMzN2MwLTE0LjQ4MyAxMS43ODQtMjYuMjcgMjYuMjcxLTI2LjI3czI2LjI3IDExLjc4NyAyNi4yNyAyNi4yN2MwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3em01Mi41NDEgMzA3LjI3OGMwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3YzAtMTQuNDgzIDExLjc4NC0yNi4yNyAyNi4yNzEtMjYuMjdzMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3em0tMjYuMjcyLTExNy45N2MtMjAuMjA1IDAtMzYuNjQyLTE2LjQzNC0zNi42NDItMzYuNjM4IDAtMjAuMjA1IDE2LjQzNy0zNi42NDIgMzYuNjQyLTM2LjY0MiAyMC4yMDQgMCAzNi42NDEgMTYuNDM3IDM2LjY0MSAzNi42NDIgMCAyMC4yMDQtMTYuNDM3IDM2LjYzOC0zNi42NDEgMzYuNjM4em0xMzEuODMxIDY3LjE3OWMtMTQuNDg3IDAtMjYuMjctMTEuNzg4LTI2LjI3LTI2LjI3MXMxMS43ODMtMjYuMjcgMjYuMjctMjYuMjcgMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3YzAgMTQuNDgzLTExLjc4MyAyNi4yNzEtMjYuMjcgMjYuMjcxeiIvPjwvc3ZnPg==","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,108 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=originator fields, clazz=org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode, configurationDescriptor={"nodeDefinition":{"details":"Will fetch fields values specified in mapping. If specified field is not part of originator fields it will be ignored.","description":"Add Message Originator fields values into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"fieldsMapping":{"name":"originatorName","type":"originatorType"}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeOriginatorFieldsConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,115 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=originator fields, clazz=org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode, configurationDescriptor={"nodeDefinition":{"details":"Will fetch fields values specified in mapping. If specified field is not part of originator fields it will be ignored.","description":"Add Message Originator fields values into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"fieldsMapping":{"name":"originatorName","type":"originatorType"}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeOriginatorFieldsConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,152 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=aws sqs, clazz=org.thingsboard.rule.engine.aws.sqs.TbSqsNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload and metadata attributes to the AWS SQS queue. Outbound message will contain response fields (<code>messageId</code>, <code>requestId</code>, <code>messageBodyMd5</code>, <code>messageAttributesMd5</code>, <code>sequenceNumber</code>) in the Message Metadata from the AWS SQS. For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.","description":"Publish messages to the AWS SQS","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"queueType":"STANDARD","queueUrlPattern":"https://sqs.us-east-1.amazonaws.com/123456789012/my-queue-name","delaySeconds":0,"messageAttributes":{},"accessKeyId":null,"secretAccessKey":null,"region":"us-east-1"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeSqsConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,160 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=aws sqs, clazz=org.thingsboard.rule.engine.aws.sqs.TbSqsNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload and metadata attributes to the AWS SQS queue. Outbound message will contain response fields (<code>messageId</code>, <code>requestId</code>, <code>messageBodyMd5</code>, <code>messageAttributesMd5</code>, <code>sequenceNumber</code>) in the Message Metadata from the AWS SQS. For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.","description":"Publish messages to the AWS SQS","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"queueType":"STANDARD","queueUrlPattern":"https://sqs.us-east-1.amazonaws.com/123456789012/my-queue-name","delaySeconds":0,"messageAttributes":{},"accessKeyId":null,"secretAccessKey":null,"region":"us-east-1"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeSqsConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,175 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=related attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode, configurationDescriptor={"nodeDefinition":{"details":"Related Entity found using configured relation direction and Relation Type. If multiple Related Entities are found, only first Entity is used for attributes enrichment, other entities are discarded. If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.","description":"Add Originators Related Entity Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"attrMapping":{"temperature":"tempo"},"relationsQuery":{"direction":"FROM","maxLevel":1,"filters":[{"relationType":"Contains","entityTypes":[]}]},"telemetry":false},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbEnrichmentNodeRelatedAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,181 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=related attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode, configurationDescriptor={"nodeDefinition":{"details":"Related Entity found using configured relation direction and Relation Type. If multiple Related Entities are found, only first Entity is used for attributes enrichment, other entities are discarded. If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.","description":"Add Originators Related Entity Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"attrMapping":{"temperature":"tempo"},"relationsQuery":{"direction":"FROM","maxLevel":1,"filters":[{"relationType":"Contains","entityTypes":[]}]},"telemetry":false},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbEnrichmentNodeRelatedAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,194 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=TRANSFORMATION, scope=TENANT, name=script, clazz=org.thingsboard.rule.engine.transform.TbTransformMsgNode, configurationDescriptor={"nodeDefinition":{"details":"JavaScript function receive 3 input parameters <br/> <code>metadata</code> - is a Message metadata.<br/><code>msg</code> - is a Message payload.<br/><code>msgType</code> - is a Message type.<br/>Should return the following structure:<br/><code>{ msg: <i style=\"color: #666;\">new payload</i>,<br/>   metadata: <i style=\"color: #666;\">new metadata</i>,<br/>   msgType: <i style=\"color: #666;\">new msgType</i> }</code><br/>All fields in resulting object are optional and will be taken from original message if not specified.","description":"Change Message payload, Metadata or Message type using JavaScript","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"jsScript":"return {msg: msg, metadata: metadata, msgType: msgType};"},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbTransformationNodeScriptConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,200 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=TRANSFORMATION, scope=TENANT, name=script, clazz=org.thingsboard.rule.engine.transform.TbTransformMsgNode, configurationDescriptor={"nodeDefinition":{"details":"JavaScript function receive 3 input parameters <br/> <code>metadata</code> - is a Message metadata.<br/><code>msg</code> - is a Message payload.<br/><code>msgType</code> - is a Message type.<br/>Should return the following structure:<br/><code>{ msg: <i style=\"color: #666;\">new payload</i>,<br/>   metadata: <i style=\"color: #666;\">new metadata</i>,<br/>   msgType: <i style=\"color: #666;\">new msgType</i> }</code><br/>All fields in resulting object are optional and will be taken from original message if not specified.","description":"Change Message payload, Metadata or Message type using JavaScript","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"jsScript":"return {msg: msg, metadata: metadata, msgType: msgType};"},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbTransformationNodeScriptConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,216 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=aws sns, clazz=org.thingsboard.rule.engine.aws.sns.TbSnsNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload to the AWS SNS topic. Outbound message will contain response fields (<code>messageId</code>, <code>requestId</code>) in the Message Metadata from the AWS SNS. For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.","description":"Publish message to the AWS SNS","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"topicArnPattern":"arn:aws:sns:us-east-1:123456789012:MyNewTopic","accessKeyId":null,"secretAccessKey":null,"region":"us-east-1"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeSnsConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,222 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=aws sns, clazz=org.thingsboard.rule.engine.aws.sns.TbSnsNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload to the AWS SNS topic. Outbound message will contain response fields (<code>messageId</code>, <code>requestId</code>) in the Message Metadata from the AWS SNS. For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.","description":"Publish message to the AWS SNS","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"topicArnPattern":"arn:aws:sns:us-east-1:123456789012:MyNewTopic","accessKeyId":null,"secretAccessKey":null,"region":"us-east-1"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeSnsConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,238 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=FILTER, scope=TENANT, name=check relation, clazz=org.thingsboard.rule.engine.filter.TbCheckRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If at least one relation exists - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.","description":"Checks the relation from the selected entity to the originator of the message by type and direction if 'Check for single entity' is set to true, otherwise rule node will check if exist any relation to the originator of the message by type and direction.","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","entityId":null,"entityType":null,"relationType":"Contains","checkForSingleEntity":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeCheckRelationConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,245 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=FILTER, scope=TENANT, name=check relation, clazz=org.thingsboard.rule.engine.filter.TbCheckRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If at least one relation exists - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.","description":"Checks the relation from the selected entity to the originator of the message by type and direction if 'Check for single entity' is set to true, otherwise rule node will check if exist any relation to the originator of the message by type and direction.","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","entityId":null,"entityType":null,"relationType":"Contains","checkForSingleEntity":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeCheckRelationConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,262 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=TRANSFORMATION, scope=TENANT, name=to email, clazz=org.thingsboard.rule.engine.mail.TbMsgToEmailNode, configurationDescriptor={"nodeDefinition":{"details":"Transforms message to email message by populating email fields using values derived from message metadata. Set 'SEND_EMAIL' output message type.","description":"Transforms message to email message","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"fromTemplate":"[email protected]","toTemplate":"${userEmail}","ccTemplate":null,"bccTemplate":null,"subjectTemplate":"Device ${deviceType} temperature high","bodyTemplate":"Device ${deviceName} has high temperature ${temp}"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbTransformationNodeToEmailConfig","icon":"email","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,268 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=TRANSFORMATION, scope=TENANT, name=to email, clazz=org.thingsboard.rule.engine.mail.TbMsgToEmailNode, configurationDescriptor={"nodeDefinition":{"details":"Transforms message to email message by populating email fields using values derived from message metadata. Set 'SEND_EMAIL' output message type.","description":"Transforms message to email message","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"fromTemplate":"[email protected]","toTemplate":"${userEmail}","ccTemplate":null,"bccTemplate":null,"subjectTemplate":"Device ${deviceType} temperature high","bodyTemplate":"Device ${deviceName} has high temperature ${temp}"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbTransformationNodeToEmailConfig","icon":"email","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,287 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=create relation, clazz=org.thingsboard.rule.engine.action.TbCreateRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If the relation already exists or successfully created - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.","description":"Finds target Entity by entity name pattern and (entity type pattern for Asset, Device) and then create a relation to Originator Entity by type and direction. If Selected entity type: Asset, Device or Customer will create new Entity if it doesn't exist and selected checkbox 'Create new entity if not exists'.<br> In case that relation from the message originator to the selected entity not exist and If selected checkbox 'Remove current relations', before creating the new relation all existed relations to message originator by type and direction will be removed.<br> If relation from the message originator to the selected entity created and If selected checkbox 'Change originator to related entity', outbound message will be processed as a message from this entity.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","relationTypePattern":"Contains","entityType":null,"entityNamePattern":"","entityTypePattern":null,"entityCacheExpiration":300,"createEntityIfNotExists":false,"changeOriginatorToRelatedEntity":false,"removeCurrentRelations":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeCreateRelationConfig","icon":"add_circle","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,294 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component ComponentDescriptor(type=ACTION, scope=TENANT, name=create relation, clazz=org.thingsboard.rule.engine.action.TbCreateRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If the relation already exists or successfully created - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.","description":"Finds target Entity by entity name pattern and (entity type pattern for Asset, Device) and then create a relation to Originator Entity by type and direction. If Selected entity type: Asset, Device or Customer will create new Entity if it doesn't exist and selected checkbox 'Create new entity if not exists'.<br> In case that relation from the message originator to the selected entity not exist and If selected checkbox 'Remove current relations', before creating the new relation all existed relations to message originator by type and direction will be removed.<br> If relation from the message originator to the selected entity created and If selected checkbox 'Change originator to related entity', outbound message will be processed as a message from this entity.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","relationTypePattern":"Contains","entityType":null,"entityNamePattern":"","entityTypePattern":null,"entityCacheExpiration":300,"createEntityIfNotExists":false,"changeOriginatorToRelatedEntity":false,"removeCurrentRelations":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeCreateRelationConfig","icon":"add_circle","iconUrl":"","docUrl":""}}, actions=null) will be updated to ComponentDescriptor(type=ACTION, scope=TENANT, name=create relation, clazz=org.thingsboard.rule.engine.action.TbCreateRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If the relation already exists or successfully created - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.","description":"Finds target Entity by entity name pattern and (entity type pattern for Asset, Device) and then create a relation to Originator Entity by type and direction. If Selected entity type: Asset, Device or Customer will create new Entity if it doesn't exist and selected checkbox 'Create new entity if not exists'.<br> In case that relation from the message originator to the selected entity not exist and If selected checkbox 'Remove current relations', before creating the new relation all existed relations to message originator by type and direction will be removed.<br> If relation from the message originator to the selected entity created and If selected checkbox 'Change originator to related entity', outbound message will be processed as a message from this entity.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","relationTypePattern":"Contains","entityType":null,"entityNamePattern":"","entityTypePattern":null,"entityCacheExpiration":300,"createEntityIfNotExists":false,"changeOriginatorToRelatedEntity":false,"removeCurrentRelations":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeCreateRelationConfig","icon":"add_circle","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,344 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=save attributes, clazz=org.thingsboard.rule.engine.telemetry.TbMsgAttributesNode, configurationDescriptor={"nodeDefinition":{"details":"Saves entity attributes based on configurable scope parameter. Expects messages with 'POST_ATTRIBUTES_REQUEST' message type","description":"Saves attributes data","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"scope":"SERVER_SCOPE"},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeAttributesConfig","icon":"file_upload","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,350 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=save attributes, clazz=org.thingsboard.rule.engine.telemetry.TbMsgAttributesNode, configurationDescriptor={"nodeDefinition":{"details":"Saves entity attributes based on configurable scope parameter. Expects messages with 'POST_ATTRIBUTES_REQUEST' message type","description":"Saves attributes data","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"scope":"SERVER_SCOPE"},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeAttributesConfig","icon":"file_upload","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,357 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=synchronization end, clazz=org.thingsboard.rule.engine.transaction.TbSynchronizationEndNode, configurationDescriptor={"nodeDefinition":{"details":"","description":"Stops synchronization of message processing based on message originator","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,363 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=synchronization end, clazz=org.thingsboard.rule.engine.transaction.TbSynchronizationEndNode, configurationDescriptor={"nodeDefinition":{"details":"","description":"Stops synchronization of message processing based on message originator","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,388 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=device attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, <b>CLIENT/SHARED/SERVER</b> attributes are added into Message metadata with specific prefix: <i>cs/shared/ss</i>. Latest telemetry value added into metadata without prefix. To access those attributes in other nodes this template can be used <code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ","description":"Add Originators Related Device Attributes and Latest Telemetry value into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"clientAttributeNames":[],"sharedAttributeNames":[],"serverAttributeNames":[],"latestTsKeyNames":[],"deviceRelationsQuery":{"direction":"FROM","maxLevel":1,"relationType":"Contains","deviceTypes":["default"]}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeDeviceAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,396 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=device attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, <b>CLIENT/SHARED/SERVER</b> attributes are added into Message metadata with specific prefix: <i>cs/shared/ss</i>. Latest telemetry value added into metadata without prefix. To access those attributes in other nodes this template can be used <code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ","description":"Add Originators Related Device Attributes and Latest Telemetry value into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"clientAttributeNames":[],"sharedAttributeNames":[],"serverAttributeNames":[],"latestTsKeyNames":[],"deviceRelationsQuery":{"direction":"FROM","maxLevel":1,"relationType":"Contains","deviceTypes":["default"]}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeDeviceAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,408 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=log, clazz=org.thingsboard.rule.engine.action.TbLogNode, configurationDescriptor={"nodeDefinition":{"details":"Transform incoming Message with configured JS function to String and log final value into Thingsboard log file. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.","description":"Log incoming messages using JS script for transformation Message into String","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"jsScript":"return 'Incoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeLogConfig","icon":"menu","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,413 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=log, clazz=org.thingsboard.rule.engine.action.TbLogNode, configurationDescriptor={"nodeDefinition":{"details":"Transform incoming Message with configured JS function to String and log final value into Thingsboard log file. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.","description":"Log incoming messages using JS script for transformation Message into String","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"jsScript":"return 'Incoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeLogConfig","icon":"menu","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,430 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=send email, clazz=org.thingsboard.rule.engine.mail.TbSendEmailNode, configurationDescriptor={"nodeDefinition":{"details":"Expects messages with <b>SEND_EMAIL</b> type. Node works only with messages that where created using <code>to Email</code> transformation Node, please connect this Node with <code>to Email</code> Node using <code>Successful</code> chain.","description":"Sends email message via SMTP server.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"useSystemSmtpSettings":true,"smtpHost":"localhost","smtpPort":25,"username":null,"password":null,"smtpProtocol":"smtp","timeout":10000,"enableTls":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeSendEmailConfig","icon":"send","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,436 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=send email, clazz=org.thingsboard.rule.engine.mail.TbSendEmailNode, configurationDescriptor={"nodeDefinition":{"details":"Expects messages with <b>SEND_EMAIL</b> type. Node works only with messages that where created using <code>to Email</code> transformation Node, please connect this Node with <code>to Email</code> Node using <code>Successful</code> chain.","description":"Sends email message via SMTP server.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"useSystemSmtpSettings":true,"smtpHost":"localhost","smtpPort":25,"username":null,"password":null,"smtpProtocol":"smtp","timeout":10000,"enableTls":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeSendEmailConfig","icon":"send","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,466 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=unassign from customer, clazz=org.thingsboard.rule.engine.action.TbUnassignFromCustomerNode, configurationDescriptor={"nodeDefinition":{"details":"Finds target Entity Customer by Customer name pattern and then unassign Originator Entity from this customer.","description":"Unassign Message Originator Entity from Customer","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"customerNamePattern":"","customerCacheExpiration":300},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeUnAssignToCustomerConfig","icon":"remove_circle","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,472 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component ComponentDescriptor(type=ACTION, scope=TENANT, name=unassign from customer, clazz=org.thingsboard.rule.engine.action.TbUnassignFromCustomerNode, configurationDescriptor={"nodeDefinition":{"details":"Finds target Entity Customer by Customer name pattern and then unassign Originator Entity from this customer.","description":"Unassign Message Originator Entity from Customer","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"customerNamePattern":"","customerCacheExpiration":300},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeUnAssignToCustomerConfig","icon":"remove_circle","iconUrl":"","docUrl":""}}, actions=null) will be updated to ComponentDescriptor(type=ACTION, scope=TENANT, name=unassign from customer, clazz=org.thingsboard.rule.engine.action.TbUnassignFromCustomerNode, configurationDescriptor={"nodeDefinition":{"details":"Finds target Entity Customer by Customer name pattern and then unassign Originator Entity from this customer.","description":"Unassign Message Originator Entity from Customer","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"customerNamePattern":"","customerCacheExpiration":300},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeUnAssignToCustomerConfig","icon":"remove_circle","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,546 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=customer attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.","description":"Add Originators Customer Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"attrMapping":{"temperature":"tempo"},"telemetry":false},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbEnrichmentNodeCustomerAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,552 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=customer attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.","description":"Add Originators Customer Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"attrMapping":{"temperature":"tempo"},"telemetry":false},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbEnrichmentNodeCustomerAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,559 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=FILTER, scope=TENANT, name=message type switch, clazz=org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode, configurationDescriptor={"nodeDefinition":{"details":"Sends messages with message types <b>\"Post attributes\", \"Post telemetry\", \"RPC Request\"</b> etc. via corresponding chain, otherwise <b>Other</b> chain is used.","description":"Route incoming messages by Message Type","inEnabled":true,"outEnabled":true,"relationTypes":["Post attributes","Post telemetry","RPC Request from Device","RPC Request to Device","Activity Event","Inactivity Event","Connect Event","Disconnect Event","Entity Created","Entity Updated","Entity Deleted","Entity Assigned","Entity Unassigned","Attributes Updated","Attributes Deleted","Alarm Acknowledged","Alarm Cleared","Other","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,564 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=FILTER, scope=TENANT, name=message type switch, clazz=org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode, configurationDescriptor={"nodeDefinition":{"details":"Sends messages with message types <b>\"Post attributes\", \"Post telemetry\", \"RPC Request\"</b> etc. via corresponding chain, otherwise <b>Other</b> chain is used.","description":"Route incoming messages by Message Type","inEnabled":true,"outEnabled":true,"relationTypes":["Post attributes","Post telemetry","RPC Request from Device","RPC Request to Device","Activity Event","Inactivity Event","Connect Event","Disconnect Event","Entity Created","Entity Updated","Entity Deleted","Entity Assigned","Entity Unassigned","Attributes Updated","Attributes Deleted","Alarm Acknowledged","Alarm Cleared","Other","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,578 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=clear alarm, clazz=org.thingsboard.rule.engine.action.TbClearAlarmNode, configurationDescriptor={"nodeDefinition":{"details":"Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\nNode output:\nIf alarm was not cleared, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains 'isClearedAlarm' property. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.","description":"Clear Alarm","inEnabled":true,"outEnabled":true,"relationTypes":["Cleared","False","Failure"],"customRelations":false,"defaultConfiguration":{"alarmType":"General Alarm","alarmDetailsBuildJs":"var details = {};\nif (metadata.prevAlarmDetails) {\n details = JSON.parse(metadata.prevAlarmDetails);\n}\nreturn details;"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeClearAlarmConfig","icon":"notifications_off","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,583 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=clear alarm, clazz=org.thingsboard.rule.engine.action.TbClearAlarmNode, configurationDescriptor={"nodeDefinition":{"details":"Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\nNode output:\nIf alarm was not cleared, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains 'isClearedAlarm' property. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.","description":"Clear Alarm","inEnabled":true,"outEnabled":true,"relationTypes":["Cleared","False","Failure"],"customRelations":false,"defaultConfiguration":{"alarmType":"General Alarm","alarmDetailsBuildJs":"var details = {};\nif (metadata.prevAlarmDetails) {\n details = JSON.parse(metadata.prevAlarmDetails);\n}\nreturn details;"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeClearAlarmConfig","icon":"notifications_off","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,597 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=rpc call request, clazz=org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode, configurationDescriptor={"nodeDefinition":{"details":"Expects messages with \"method\" and \"params\". Will forward response from device to next nodes.If the RPC call request is originated by REST API call from user, will forward the response to user immediately.","description":"Sends RPC call to device","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"timeoutInSeconds":60},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRpcRequestConfig","icon":"call_made","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,603 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=ACTION, scope=TENANT, name=rpc call request, clazz=org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode, configurationDescriptor={"nodeDefinition":{"details":"Expects messages with \"method\" and \"params\". Will forward response from device to next nodes.If the RPC call request is originated by REST API call from user, will forward the response to user immediately.","description":"Sends RPC call to device","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"timeoutInSeconds":60},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRpcRequestConfig","icon":"call_made","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,617 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=ACTION, scope=TENANT, name=assign to customer, clazz=org.thingsboard.rule.engine.action.TbAssignToCustomerNode, configurationDescriptor={"nodeDefinition":{"details":"Finds target Customer by customer name pattern and then assign Originator Entity to this customer. Will create new Customer if it doesn't exists and 'Create new Customer if not exists' is set to true.","description":"Assign Message Originator Entity to Customer","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"customerNamePattern":"","customerCacheExpiration":300,"createCustomerIfNotExists":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeAssignToCustomerConfig","icon":"add_circle","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:55,623 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component ComponentDescriptor(type=ACTION, scope=TENANT, name=assign to customer, clazz=org.thingsboard.rule.engine.action.TbAssignToCustomerNode, configurationDescriptor={"nodeDefinition":{"details":"Finds target Customer by customer name pattern and then assign Originator Entity to this customer. Will create new Customer if it doesn't exists and 'Create new Customer if not exists' is set to true.","description":"Assign Message Originator Entity to Customer","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"customerNamePattern":"","customerCacheExpiration":300,"createCustomerIfNotExists":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeAssignToCustomerConfig","icon":"add_circle","iconUrl":"","docUrl":""}}, actions=null) will be updated to ComponentDescriptor(type=ACTION, scope=TENANT, name=assign to customer, clazz=org.thingsboard.rule.engine.action.TbAssignToCustomerNode, configurationDescriptor={"nodeDefinition":{"details":"Finds target Customer by customer name pattern and then assign Originator Entity to this customer. Will create new Customer if it doesn't exists and 'Create new Customer if not exists' is set to true.","description":"Assign Message Originator Entity to Customer","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"customerNamePattern":"","customerCacheExpiration":300,"createCustomerIfNotExists":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeAssignToCustomerConfig","icon":"add_circle","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:56,183 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Processing scanned component: ComponentDescriptor(type=FILTER, scope=TENANT, name=check existence fields, clazz=org.thingsboard.rule.engine.filter.TbCheckMessageNode, configurationDescriptor={"nodeDefinition":{"details":"If selected checkbox 'Check that all selected keys are present'\" and all keys in message data and metadata are exist - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.\nElse if the checkbox is not selected, and at least one of the keys from data or metadata of the message exists - send Message via <b>True</b> chain, otherwise, <b>False</b> chain is used. ","description":"Checks the existence of the selected keys from message data and metadata.","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"messageNames":[],"metadataNames":[],"checkAllKeys":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeCheckMessageConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:56,190 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Component is already persisted: ComponentDescriptor(type=FILTER, scope=TENANT, name=check existence fields, clazz=org.thingsboard.rule.engine.filter.TbCheckMessageNode, configurationDescriptor={"nodeDefinition":{"details":"If selected checkbox 'Check that all selected keys are present'\" and all keys in message data and metadata are exist - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.\nElse if the checkbox is not selected, and at least one of the keys from data or metadata of the message exists - send Message via <b>True</b> chain, otherwise, <b>False</b> chain is used. ","description":"Checks the existence of the selected keys from message data and metadata.","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"messageNames":[],"metadataNames":[],"checkAllKeys":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeCheckMessageConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)
- 2019-03-12 09:40:56,190 [main] INFO o.t.s.s.c.AnnotationComponentDiscoveryService - Found following definitions: [ComponentDescriptor(type=TRANSFORMATION, scope=TENANT, name=change originator, clazz=org.thingsboard.rule.engine.transform.TbChangeOriginatorNode, configurationDescriptor={"nodeDefinition":{"details":"Related Entity found using configured relation direction and Relation Type. If multiple Related Entities are found, only first Entity is used as new Originator, other entities are discarded. ","description":"Change Message Originator To Tenant/Customer/Related Entity","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"originatorSource":"CUSTOMER","relationsQuery":{"direction":"FROM","maxLevel":1,"filters":[{"relationType":"Contains","entityTypes":[]}]}},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbTransformationNodeChangeOriginatorConfig","icon":"find_replace","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=create relation, clazz=org.thingsboard.rule.engine.action.TbCreateRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If the relation already exists or successfully created - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.","description":"Finds target Entity by entity name pattern and (entity type pattern for Asset, Device) and then create a relation to Originator Entity by type and direction. If Selected entity type: Asset, Device or Customer will create new Entity if it doesn't exist and selected checkbox 'Create new entity if not exists'.<br> In case that relation from the message originator to the selected entity not exist and If selected checkbox 'Remove current relations', before creating the new relation all existed relations to message originator by type and direction will be removed.<br> If relation from the message originator to the selected entity created and If selected checkbox 'Change originator to related entity', outbound message will be processed as a message from this entity.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","relationTypePattern":"Contains","entityType":null,"entityNamePattern":"","entityTypePattern":null,"entityCacheExpiration":300,"createEntityIfNotExists":false,"changeOriginatorToRelatedEntity":false,"removeCurrentRelations":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeCreateRelationConfig","icon":"add_circle","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=device attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, <b>CLIENT/SHARED/SERVER</b> attributes are added into Message metadata with specific prefix: <i>cs/shared/ss</i>. Latest telemetry value added into metadata without prefix. To access those attributes in other nodes this template can be used <code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ","description":"Add Originators Related Device Attributes and Latest Telemetry value into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"clientAttributeNames":[],"sharedAttributeNames":[],"serverAttributeNames":[],"latestTsKeyNames":[],"deviceRelationsQuery":{"direction":"FROM","maxLevel":1,"relationType":"Contains","deviceTypes":["default"]}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeDeviceAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=aws sqs, clazz=org.thingsboard.rule.engine.aws.sqs.TbSqsNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload and metadata attributes to the AWS SQS queue. Outbound message will contain response fields (<code>messageId</code>, <code>requestId</code>, <code>messageBodyMd5</code>, <code>messageAttributesMd5</code>, <code>sequenceNumber</code>) in the Message Metadata from the AWS SQS. For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.","description":"Publish messages to the AWS SQS","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"queueType":"STANDARD","queueUrlPattern":"https://sqs.us-east-1.amazonaws.com/123456789012/my-queue-name","delaySeconds":0,"messageAttributes":{},"accessKeyId":null,"secretAccessKey":null,"region":"us-east-1"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeSqsConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=log, clazz=org.thingsboard.rule.engine.action.TbLogNode, configurationDescriptor={"nodeDefinition":{"details":"Transform incoming Message with configured JS function to String and log final value into Thingsboard log file. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.","description":"Log incoming messages using JS script for transformation Message into String","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"jsScript":"return 'Incoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeLogConfig","icon":"menu","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=send email, clazz=org.thingsboard.rule.engine.mail.TbSendEmailNode, configurationDescriptor={"nodeDefinition":{"details":"Expects messages with <b>SEND_EMAIL</b> type. Node works only with messages that where created using <code>to Email</code> transformation Node, please connect this Node with <code>to Email</code> Node using <code>Successful</code> chain.","description":"Sends email message via SMTP server.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"useSystemSmtpSettings":true,"smtpHost":"localhost","smtpPort":25,"username":null,"password":null,"smtpProtocol":"smtp","timeout":10000,"enableTls":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeSendEmailConfig","icon":"send","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=clear alarm, clazz=org.thingsboard.rule.engine.action.TbClearAlarmNode, configurationDescriptor={"nodeDefinition":{"details":"Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\nNode output:\nIf alarm was not cleared, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains 'isClearedAlarm' property. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.","description":"Clear Alarm","inEnabled":true,"outEnabled":true,"relationTypes":["Cleared","False","Failure"],"customRelations":false,"defaultConfiguration":{"alarmType":"General Alarm","alarmDetailsBuildJs":"var details = {};\nif (metadata.prevAlarmDetails) {\n details = JSON.parse(metadata.prevAlarmDetails);\n}\nreturn details;"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeClearAlarmConfig","icon":"notifications_off","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=assign to customer, clazz=org.thingsboard.rule.engine.action.TbAssignToCustomerNode, configurationDescriptor={"nodeDefinition":{"details":"Finds target Customer by customer name pattern and then assign Originator Entity to this customer. Will create new Customer if it doesn't exists and 'Create new Customer if not exists' is set to true.","description":"Assign Message Originator Entity to Customer","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"customerNamePattern":"","customerCacheExpiration":300,"createCustomerIfNotExists":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeAssignToCustomerConfig","icon":"add_circle","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=TRANSFORMATION, scope=TENANT, name=to email, clazz=org.thingsboard.rule.engine.mail.TbMsgToEmailNode, configurationDescriptor={"nodeDefinition":{"details":"Transforms message to email message by populating email fields using values derived from message metadata. Set 'SEND_EMAIL' output message type.","description":"Transforms message to email message","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"fromTemplate":"[email protected]","toTemplate":"${userEmail}","ccTemplate":null,"bccTemplate":null,"subjectTemplate":"Device ${deviceType} temperature high","bodyTemplate":"Device ${deviceName} has high temperature ${temp}"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbTransformationNodeToEmailConfig","icon":"email","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=unassign from customer, clazz=org.thingsboard.rule.engine.action.TbUnassignFromCustomerNode, configurationDescriptor={"nodeDefinition":{"details":"Finds target Entity Customer by Customer name pattern and then unassign Originator Entity from this customer.","description":"Unassign Message Originator Entity from Customer","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"customerNamePattern":"","customerCacheExpiration":300},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeUnAssignToCustomerConfig","icon":"remove_circle","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=aws sns, clazz=org.thingsboard.rule.engine.aws.sns.TbSnsNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload to the AWS SNS topic. Outbound message will contain response fields (<code>messageId</code>, <code>requestId</code>) in the Message Metadata from the AWS SNS. For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.","description":"Publish message to the AWS SNS","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"topicArnPattern":"arn:aws:sns:us-east-1:123456789012:MyNewTopic","accessKeyId":null,"secretAccessKey":null,"region":"us-east-1"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeSnsConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=synchronization end, clazz=org.thingsboard.rule.engine.transaction.TbSynchronizationEndNode, configurationDescriptor={"nodeDefinition":{"details":"","description":"Stops synchronization of message processing based on message originator","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=kafka, clazz=org.thingsboard.rule.engine.kafka.TbKafkaNode, configurationDescriptor={"nodeDefinition":{"details":"Will send record via Kafka producer to Kafka server. Outbound message will contain response fields (<code>offset</code>, <code>partition</code>, <code>topic</code>) from the Kafka in the Message Metadata. For example <b>partition</b> field can be accessed with <code>metadata.partition</code>.","description":"Publish messages to Kafka server","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"topicPattern":"my-topic","bootstrapServers":"localhost:9092","retries":0,"batchSize":16384,"linger":0,"bufferMemory":33554432,"acks":"-1","keySerializer":"org.apache.kafka.common.serialization.StringSerializer","valueSerializer":"org.apache.kafka.common.serialization.StringSerializer","otherProperties":{}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeKafkaConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUzOCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTIwMS44MTYgMjMwLjIxNmMtMTYuMTg2IDAtMzAuNjk3IDcuMTcxLTQwLjYzNCAxOC40NjFsLTI1LjQ2My0xOC4wMjZjMi43MDMtNy40NDIgNC4yNTUtMTUuNDMzIDQuMjU1LTIzLjc5NyAwLTguMjE5LTEuNDk4LTE2LjA3Ni00LjExMi0yMy40MDhsMjUuNDA2LTE3LjgzNWM5LjkzNiAxMS4yMzMgMjQuNDA5IDE4LjM2NSA0MC41NDggMTguMzY1IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI5Ljg3OS0yNC4zMDktNTQuMTg0LTU0LjE4NC01NC4xODQtMjkuODc1IDAtNTQuMTg0IDI0LjMwNS01NC4xODQgNTQuMTg0IDAgNS4zNDguODA4IDEwLjUwNSAyLjI1OCAxNS4zODlsLTI1LjQyMyAxNy44NDRjLTEwLjYyLTEzLjE3NS0yNS45MTEtMjIuMzc0LTQzLjMzMy0yNS4xODJ2LTMwLjY0YzI0LjU0NC01LjE1NSA0My4wMzctMjYuOTYyIDQzLjAzNy01My4wMTlDMTI0LjE3MSAyNC4zMDUgOTkuODYyIDAgNjkuOTg3IDAgNDAuMTEyIDAgMTUuODAzIDI0LjMwNSAxNS44MDMgNTQuMTg0YzAgMjUuNzA4IDE4LjAxNCA0Ny4yNDYgNDIuMDY3IDUyLjc2OXYzMS4wMzhDMjUuMDQ0IDE0My43NTMgMCAxNzIuNDAxIDAgMjA2Ljg1NGMwIDM0LjYyMSAyNS4yOTIgNjMuMzc0IDU4LjM1NSA2OC45NHYzMi43NzRjLTI0LjI5OSA1LjM0MS00Mi41NTIgMjcuMDExLTQyLjU1MiA1Mi44OTQgMCAyOS44NzkgMjQuMzA5IDU0LjE4NCA1NC4xODQgNTQuMTg0IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI1Ljg4My0xOC4yNTMtNDcuNTUzLTQyLjU1Mi01Mi44OTR2LTMyLjc3NWE2OS45NjUgNjkuOTY1IDAgMCAwIDQyLjYtMjQuNzc2bDI1LjYzMyAxOC4xNDNjLTEuNDIzIDQuODQtMi4yMiA5Ljk0Ni0yLjIyIDE1LjI0IDAgMjkuODc5IDI0LjMwOSA1NC4xODQgNTQuMTg0IDU0LjE4NCAyOS44NzUgMCA1NC4xODQtMjQuMzA1IDU0LjE4NC01NC4xODQgMC0yOS44NzktMjQuMzA5LTU0LjE4NC01NC4xODQtNTQuMTg0em0wLTEyNi42OTVjMTQuNDg3IDAgMjYuMjcgMTEuNzg4IDI2LjI3IDI2LjI3MXMtMTEuNzgzIDI2LjI3LTI2LjI3IDI2LjI3LTI2LjI3LTExLjc4Ny0yNi4yNy0yNi4yN2MwLTE0LjQ4MyAxMS43ODMtMjYuMjcxIDI2LjI3LTI2LjI3MXptLTE1OC4xLTQ5LjMzN2MwLTE0LjQ4MyAxMS43ODQtMjYuMjcgMjYuMjcxLTI2LjI3czI2LjI3IDExLjc4NyAyNi4yNyAyNi4yN2MwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3em01Mi41NDEgMzA3LjI3OGMwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3YzAtMTQuNDgzIDExLjc4NC0yNi4yNyAyNi4yNzEtMjYuMjdzMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3em0tMjYuMjcyLTExNy45N2MtMjAuMjA1IDAtMzYuNjQyLTE2LjQzNC0zNi42NDItMzYuNjM4IDAtMjAuMjA1IDE2LjQzNy0zNi42NDIgMzYuNjQyLTM2LjY0MiAyMC4yMDQgMCAzNi42NDEgMTYuNDM3IDM2LjY0MSAzNi42NDIgMCAyMC4yMDQtMTYuNDM3IDM2LjYzOC0zNi42NDEgMzYuNjM4em0xMzEuODMxIDY3LjE3OWMtMTQuNDg3IDAtMjYuMjctMTEuNzg4LTI2LjI3LTI2LjI3MXMxMS43ODMtMjYuMjcgMjYuMjctMjYuMjcgMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3YzAgMTQuNDgzLTExLjc4MyAyNi4yNzEtMjYuMjcgMjYuMjcxeiIvPjwvc3ZnPg==","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=save attributes, clazz=org.thingsboard.rule.engine.telemetry.TbMsgAttributesNode, configurationDescriptor={"nodeDefinition":{"details":"Saves entity attributes based on configurable scope parameter. Expects messages with 'POST_ATTRIBUTES_REQUEST' message type","description":"Saves attributes data","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"scope":"SERVER_SCOPE"},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeAttributesConfig","icon":"file_upload","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=delete relation, clazz=org.thingsboard.rule.engine.action.TbDeleteRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If the relation(s) successfully deleted - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.","description":"Finds target Entity by entity name pattern and then delete a relation to Originator Entity by type and direction if 'Delete single entity' is set to true, otherwise rule node will delete all relations to the originator of the message by type and direction.","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","relationTypePattern":"Contains","entityType":null,"entityNamePattern":"","entityTypePattern":null,"entityCacheExpiration":300,"deleteForSingleEntity":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeDeleteRelationConfig","icon":"remove_circle","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=FILTER, scope=TENANT, name=switch, clazz=org.thingsboard.rule.engine.filter.TbJsSwitchNode, configurationDescriptor={"nodeDefinition":{"details":"Node executes configured JS script. Script should return array of next Chain names where Message should be routed. If Array is empty - message not routed to next Node. Message payload can be accessed via <code>msg</code> property. For example <code>msg.temperature < 10;</code><br/>Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>Message type can be accessed via <code>msgType</code> property.","description":"Route incoming Message to one or multiple output chains","inEnabled":true,"outEnabled":true,"relationTypes":["Failure"],"customRelations":true,"defaultConfiguration":{"jsScript":"function nextRelation(metadata, msg) {\n return ['one','nine'];\n}\nif(msgType === 'POST_TELEMETRY_REQUEST') {\n return ['two'];\n}\nreturn nextRelation(metadata, msg);"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeSwitchConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=delay, clazz=org.thingsboard.rule.engine.delay.TbMsgDelayNode, configurationDescriptor={"nodeDefinition":{"details":"Delays messages for configurable period.","description":"Delays incoming message","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"periodInSeconds":60,"maxPendingMsgs":1000},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeMsgDelayConfig","icon":"pause","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=save timeseries, clazz=org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode, configurationDescriptor={"nodeDefinition":{"details":"Saves timeseries telemetry data based on configurable TTL parameter. Expects messages with 'POST_TELEMETRY_REQUEST' message type","description":"Saves timeseries data","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"defaultTTL":0},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeTimeseriesConfig","icon":"file_upload","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=rabbitmq, clazz=org.thingsboard.rule.engine.rabbitmq.TbRabbitMqNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload to RabbitMQ queue.","description":"Publish messages to the RabbitMQ","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"exchangeNamePattern":"","routingKeyPattern":"","messageProperties":null,"host":"localhost","port":5672,"virtualHost":"/","username":"guest","password":"guest","automaticRecoveryEnabled":false,"connectionTimeout":60000,"handshakeTimeout":10000,"clientProperties":{}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRabbitMqConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZlcnNpb249IjEuMSIgeT0iMHB4IiB4PSIwcHgiIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiPjxwYXRoIHN0cm9rZS13aWR0aD0iLjg0OTU2IiBkPSJtODYwLjQ3IDQxNi4zMmgtMjYyLjAxYy0xMi45MTMgMC0yMy42MTgtMTAuNzA0LTIzLjYxOC0yMy42MTh2LTI3Mi43MWMwLTIwLjMwNS0xNi4yMjctMzYuMjc2LTM2LjI3Ni0zNi4yNzZoLTkzLjc5MmMtMjAuMzA1IDAtMzYuMjc2IDE2LjIyNy0zNi4yNzYgMzYuMjc2djI3MC44NGMtMC4yNTQ4NyAxNC4xMDMtMTEuNDY5IDI1LjU3Mi0yNS43NDIgMjUuNTcybC04NS42MzYgMC42Nzk2NWMtMTQuMTAzIDAtMjUuNTcyLTExLjQ2OS0yNS41NzItMjUuNTcybDAuNjc5NjUtMjcxLjUyYzAtMjAuMzA1LTE2LjIyNy0zNi4yNzYtMzYuMjc2LTM2LjI3NmgtOTMuNTM3Yy0yMC4zMDUgMC0zNi4yNzYgMTYuMjI3LTM2LjI3NiAzNi4yNzZ2NzYzLjg0YzAgMTguMDk2IDE0Ljc4MiAzMi40NTMgMzIuNDUzIDMyLjQ1M2g3MjIuODFjMTguMDk2IDAgMzIuNDUzLTE0Ljc4MiAzMi40NTMtMzIuNDUzdi00MzUuMzFjLTEuMTg5NC0xOC4xODEtMTUuMjkyLTMyLjE5OC0zMy4zODgtMzIuMTk4em0tMTIyLjY4IDI4Ny4wN2MwIDIzLjYxOC0xOC44NiA0Mi40NzgtNDIuNDc4IDQyLjQ3OGgtNzMuOTk3Yy0yMy42MTggMC00Mi40NzgtMTguODYtNDIuNDc4LTQyLjQ3OHYtNzQuMjUyYzAtMjMuNjE4IDE4Ljg2LTQyLjQ3OCA0Mi40NzgtNDIuNDc4aDczLjk5N2MyMy42MTggMCA0Mi40NzggMTguODYgNDIuNDc4IDQyLjQ3OHoiLz48L3N2Zz4=","docUrl":""}}, actions=null), ComponentDescriptor(type=FILTER, scope=TENANT, name=originator type switch, clazz=org.thingsboard.rule.engine.filter.TbOriginatorTypeSwitchNode, configurationDescriptor={"nodeDefinition":{"details":"Routes messages to chain according to the originator type ('Device', 'Asset', etc.).","description":"Route incoming messages by Message Originator Type","inEnabled":true,"outEnabled":true,"relationTypes":["Device","Asset","Tenant","Customer","User","Dashboard","Rule chain","Rule node","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=originator telemetry, clazz=org.thingsboard.rule.engine.metadata.TbGetTelemetryNode, configurationDescriptor={"nodeDefinition":{"details":"The node allows you to select fetch mode <b>FIRST/LAST/ALL</b> to fetch telemetry of certain time range that are added into Message metadata without any prefix. If selected fetch mode <b>ALL</b> Telemetry will be added like array into Message Metadata where <b>key</b> is Timestamp and <b>value</b> is value of Telemetry. <b>Note</b>: The maximum size of the fetched array is 1000 records. If selected fetch mode <b>FIRST</b> or <b>LAST</b> Telemetry will be added like string without Timestamp","description":"Add Message Originator Telemetry for selected time range into Message Metadata\n","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"startInterval":2,"endInterval":1,"startIntervalPattern":"","endIntervalPattern":"","useMetadataIntervalPatterns":false,"startIntervalTimeUnit":"MINUTES","endIntervalTimeUnit":"MINUTES","fetchMode":"FIRST","latestTsKeyNames":[]},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeGetTelemetryFromDatabase","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=originator attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetAttributesNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, <b>CLIENT/SHARED/SERVER</b> attributes are added into Message metadata with specific prefix: <i>cs/shared/ss</i>. Latest telemetry value added into metadata without prefix. To access those attributes in other nodes this template can be used <code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ","description":"Add Message Originator Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"clientAttributeNames":[],"sharedAttributeNames":[],"serverAttributeNames":[],"latestTsKeyNames":[]},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeOriginatorAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=message count, clazz=org.thingsboard.rule.engine.action.TbMsgCountNode, configurationDescriptor={"nodeDefinition":{"details":"Count incoming messages for specified interval and produces POST_TELEMETRY_REQUEST msg with messages count","description":"Count incoming messages","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"telemetryPrefix":"messageCount","interval":1},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeMsgCountConfig","icon":"functions","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=copy to view, clazz=org.thingsboard.rule.engine.action.TbCopyAttributesToEntityViewNode, configurationDescriptor={"nodeDefinition":{"details":"Copy attributes from asset/device to related entity view according to entity view configuration. \n Copy will be done only for attributes that are between start and end dates and according to attribute keys configuration. \nChanges message originator to related entity view and produces new messages according to count of updated entity views","description":"Copy attributes from asset/device to entity view and changes message originator to related entity view","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"content_copy","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=FILTER, scope=TENANT, name=message type, clazz=org.thingsboard.rule.engine.filter.TbMsgTypeFilterNode, configurationDescriptor={"nodeDefinition":{"details":"If incoming MessageType is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.","description":"Filter incoming messages by Message Type","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"messageTypes":["POST_ATTRIBUTES_REQUEST","POST_TELEMETRY_REQUEST","TO_SERVER_RPC_REQUEST"]},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbFilterNodeMessageTypeConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=related attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode, configurationDescriptor={"nodeDefinition":{"details":"Related Entity found using configured relation direction and Relation Type. If multiple Related Entities are found, only first Entity is used for attributes enrichment, other entities are discarded. If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.","description":"Add Originators Related Entity Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"attrMapping":{"temperature":"tempo"},"relationsQuery":{"direction":"FROM","maxLevel":1,"filters":[{"relationType":"Contains","entityTypes":[]}]},"telemetry":false},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbEnrichmentNodeRelatedAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=synchronization start, clazz=org.thingsboard.rule.engine.transaction.TbSynchronizationBeginNode, configurationDescriptor={"nodeDefinition":{"details":"This node should be used together with \"synchronization end\" node. \n This node will put messages into queue based on message originator id. \nSubsequent messages will not be processed until the previous message processing is completed or timeout event occurs.\nSize of the queue per originator and timeout values are configurable on a system level","description":"Starts synchronization of message processing based on message originator","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=mqtt, clazz=org.thingsboard.rule.engine.mqtt.TbMqttNode, configurationDescriptor={"nodeDefinition":{"details":"Will publish message payload to the MQTT broker with QoS <b>AT_LEAST_ONCE</b>.","description":"Publish messages to the MQTT broker","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"topicPattern":"my-topic","host":"localhost","port":1883,"connectTimeoutSec":10,"clientId":null,"cleanSession":true,"ssl":false,"credentials":{"type":"anonymous"}},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeMqttConfig","icon":"call_split","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=rpc call reply, clazz=org.thingsboard.rule.engine.rpc.TbSendRPCReplyNode, configurationDescriptor={"nodeDefinition":{"details":"Expects messages with any message type. Will forward message body to the device.","description":"Sends reply to RPC call from device","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"requestIdMetaDataAttribute":"requestId"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRpcReplyConfig","icon":"call_merge","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=FILTER, scope=TENANT, name=script, clazz=org.thingsboard.rule.engine.filter.TbJsFilterNode, configurationDescriptor={"nodeDefinition":{"details":"Evaluate incoming Message with configured JS condition. If <b>True</b> - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.Message payload can be accessed via <code>msg</code> property. For example <code>msg.temperature < 10;</code><br/>Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>Message type can be accessed via <code>msgType</code> property.","description":"Filter incoming messages using JS script","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"jsScript":"return msg.temperature > 20;"},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeScriptConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=EXTERNAL, scope=TENANT, name=rest api call, clazz=org.thingsboard.rule.engine.rest.TbRestApiCallNode, configurationDescriptor={"nodeDefinition":{"details":"Will invoke REST API call <code>GET | POST | PUT | DELETE</code> to external REST server. Message payload added into Request body. Configured attributes can be added into Headers from Message Metadata. Outbound message will contain response fields (<code>status</code>, <code>statusCode</code>, <code>statusReason</code> and response <code>headers</code>) in the Message Metadata. Response body saved in outbound Message payload. For example <b>statusCode</b> field can be accessed with <code>metadata.statusCode</code>.","description":"Invoke REST API calls to external REST server","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"restEndpointUrlPattern":"http://localhost/api","requestMethod":"POST","headers":{},"useSimpleClientHttpFactory":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRestApiCallConfig","icon":"","iconUrl":"data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB2ZXJzaW9uPSIxLjEiIHk9IjBweCIgeD0iMHB4Ij48ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTQ5NzUgMCAwIC45NDk3NSAxNy4xMiAyNi40OTIpIj48cGF0aCBkPSJtMTY5LjExIDEwOC41NGMtOS45MDY2IDAuMDczNC0xOS4wMTQgNi41NzI0LTIyLjAxNCAxNi40NjlsLTY5Ljk5MyAyMzEuMDhjLTMuNjkwNCAxMi4xODEgMy4yODkyIDI1LjIyIDE1LjQ2OSAyOC45MSAyLjIyNTkgMC42NzQ4MSA0LjQ5NjkgMSA2LjcyODUgMSA5Ljk3MjEgMCAxOS4xNjUtNi41MTUzIDIyLjE4Mi0xNi40NjdhNi41MjI0IDYuNTIyNCAwIDAgMCAwLjAwMiAtMC4wMDJsNjkuOTktMjMxLjA3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMCAtMC4wMDJjMy42ODU1LTEyLjE4MS0zLjI4Ny0yNS4yMjUtMTUuNDcxLTI4LjkxMi0yLjI4MjUtMC42OTE0NS00LjYxMTYtMS4wMTY5LTYuODk4NC0xem04NC45ODggMGMtOS45MDQ4IDAuMDczNC0xOS4wMTggNi41Njc1LTIyLjAxOCAxNi40NjlsLTY5Ljk4NiAyMzEuMDhjLTMuNjg5OCAxMi4xNzkgMy4yODUzIDI1LjIxNyAxNS40NjUgMjguOTA4IDIuMjI5NyAwLjY3NjQ3IDQuNTAwOCAxLjAwMiA2LjczMjQgMS4wMDIgOS45NzIxIDAgMTkuMTY1LTYuNTE1MyAyMi4xODItMTYuNDY3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMC4wMDIgLTAuMDAybDY5Ljk4OC0yMzEuMDdjMy42OTA4LTEyLjE4MS0zLjI4NTItMjUuMjIzLTE1LjQ2Ny0yOC45MTItMi4yODE0LTAuNjkyMzEtNC42MTA4LTEuMDE4OS02Ljg5ODQtMS4wMDJ6bS0yMTcuMjkgNDIuMjNjLTEyLjcyOS0wLjAwMDg3LTIzLjE4OCAxMC40NTYtMjMuMTg4IDIzLjE4NiAwLjAwMSAxMi43MjggMTAuNDU5IDIzLjE4NiAyMy4xODggMjMuMTg2IDEyLjcyNy0wLjAwMSAyMy4xODMtMTAuNDU5IDIzLjE4NC0yMy4xODYgMC4wMDA4NzYtMTIuNzI4LTEwLjQ1Ni0yMy4xODUtMjMuMTg0LTIzLjE4NnptMCAxNDYuNjRjLTEyLjcyNy0wLjAwMDg3LTIzLjE4NiAxMC40NTUtMjMuMTg4IDIzLjE4NC0wLjAwMDg3MyAxMi43MjkgMTAuNDU4IDIzLjE4OCAyMy4xODggMjMuMTg4IDEyLjcyOC0wLjAwMSAyMy4xODQtMTAuNDYgMjMuMTg0LTIzLjE4OC0wLjAwMS0xMi43MjYtMTAuNDU3LTIzLjE4My0yMy4xODQtMjMuMTg0em0yNzAuNzkgNDIuMjExYy0xMi43MjcgMC0yMy4xODQgMTAuNDU3LTIzLjE4NCAyMy4xODRzMTAuNDU1IDIzLjE4OCAyMy4xODQgMjMuMTg4aDE1NC45OGMxMi43MjkgMCAyMy4xODYtMTAuNDYgMjMuMTg2LTIzLjE4OCAwLjAwMS0xMi43MjgtMTAuNDU4LTIzLjE4NC0yMy4xODYtMjMuMTg0eiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMzc2IDAgMCAxLjAzNzYgLTcuNTY3NiAtMTQuOTI1KSIgc3Ryb2tlLXdpZHRoPSIxLjI2OTMiLz48L2c+PC9zdmc+","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=rpc call request, clazz=org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode, configurationDescriptor={"nodeDefinition":{"details":"Expects messages with \"method\" and \"params\". Will forward response from device to next nodes.If the RPC call request is originated by REST API call from user, will forward the response to user immediately.","description":"Sends RPC call to device","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"timeoutInSeconds":60},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeRpcRequestConfig","icon":"call_made","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=customer attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.","description":"Add Originators Customer Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"attrMapping":{"temperature":"tempo"},"telemetry":false},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbEnrichmentNodeCustomerAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=originator fields, clazz=org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode, configurationDescriptor={"nodeDefinition":{"details":"Will fetch fields values specified in mapping. If specified field is not part of originator fields it will be ignored.","description":"Add Message Originator fields values into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"fieldsMapping":{"name":"originatorName","type":"originatorType"}},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbEnrichmentNodeOriginatorFieldsConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=TRANSFORMATION, scope=TENANT, name=script, clazz=org.thingsboard.rule.engine.transform.TbTransformMsgNode, configurationDescriptor={"nodeDefinition":{"details":"JavaScript function receive 3 input parameters <br/> <code>metadata</code> - is a Message metadata.<br/><code>msg</code> - is a Message payload.<br/><code>msgType</code> - is a Message type.<br/>Should return the following structure:<br/><code>{ msg: <i style=\"color: #666;\">new payload</i>,<br/>   metadata: <i style=\"color: #666;\">new metadata</i>,<br/>   msgType: <i style=\"color: #666;\">new msgType</i> }</code><br/>All fields in resulting object are optional and will be taken from original message if not specified.","description":"Change Message payload, Metadata or Message type using JavaScript","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"jsScript":"return {msg: msg, metadata: metadata, msgType: msgType};"},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbTransformationNodeScriptConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=FILTER, scope=TENANT, name=check existence fields, clazz=org.thingsboard.rule.engine.filter.TbCheckMessageNode, configurationDescriptor={"nodeDefinition":{"details":"If selected checkbox 'Check that all selected keys are present'\" and all keys in message data and metadata are exist - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.\nElse if the checkbox is not selected, and at least one of the keys from data or metadata of the message exists - send Message via <b>True</b> chain, otherwise, <b>False</b> chain is used. ","description":"Checks the existence of the selected keys from message data and metadata.","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"messageNames":[],"metadataNames":[],"checkAllKeys":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeCheckMessageConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=FILTER, scope=TENANT, name=message type switch, clazz=org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode, configurationDescriptor={"nodeDefinition":{"details":"Sends messages with message types <b>\"Post attributes\", \"Post telemetry\", \"RPC Request\"</b> etc. via corresponding chain, otherwise <b>Other</b> chain is used.","description":"Route incoming messages by Message Type","inEnabled":true,"outEnabled":true,"relationTypes":["Post attributes","Post telemetry","RPC Request from Device","RPC Request to Device","Activity Event","Inactivity Event","Connect Event","Disconnect Event","Entity Created","Entity Updated","Entity Deleted","Entity Assigned","Entity Unassigned","Attributes Updated","Attributes Deleted","Alarm Acknowledged","Alarm Cleared","Other","Failure"],"customRelations":false,"defaultConfiguration":{"version":0},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbNodeEmptyConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=generator, clazz=org.thingsboard.rule.engine.debug.TbMsgGeneratorNode, configurationDescriptor={"nodeDefinition":{"details":"Generates messages with configurable period. Javascript function used for message generation.","description":"Periodically generates messages","inEnabled":false,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"msgCount":0,"periodInSeconds":1,"originatorId":null,"originatorType":null,"jsScript":"var msg = { temp: 42, humidity: 77 };\nvar metadata = { data: 40 };\nvar msgType = \"POST_TELEMETRY_REQUEST\";\n\nreturn { msg: msg, metadata: metadata, msgType: msgType };"},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbActionNodeGeneratorConfig","icon":"repeat","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ENRICHMENT, scope=TENANT, name=tenant attributes, clazz=org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode, configurationDescriptor={"nodeDefinition":{"details":"If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.","description":"Add Originators Tenant Attributes or Latest Telemetry into Message Metadata","inEnabled":true,"outEnabled":true,"relationTypes":["Success","Failure"],"customRelations":false,"defaultConfiguration":{"attrMapping":{"temperature":"tempo"},"telemetry":false},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbEnrichmentNodeTenantAttributesConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=FILTER, scope=TENANT, name=check relation, clazz=org.thingsboard.rule.engine.filter.TbCheckRelationNode, configurationDescriptor={"nodeDefinition":{"details":"If at least one relation exists - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.","description":"Checks the relation from the selected entity to the originator of the message by type and direction if 'Check for single entity' is set to true, otherwise rule node will check if exist any relation to the originator of the message by type and direction.","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"direction":"FROM","entityId":null,"entityType":null,"relationType":"Contains","checkForSingleEntity":true},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbFilterNodeCheckRelationConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=ACTION, scope=TENANT, name=create alarm, clazz=org.thingsboard.rule.engine.action.TbCreateAlarmNode, configurationDescriptor={"nodeDefinition":{"details":"Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\nNode output:\nIf alarm was not created, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains one of those properties 'isNewAlarm/isExistingAlarm'. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.","description":"Create or Update Alarm","inEnabled":true,"outEnabled":true,"relationTypes":["Created","Updated","False","Failure"],"customRelations":false,"defaultConfiguration":{"alarmType":"General Alarm","alarmDetailsBuildJs":"var details = {};\nif (metadata.prevAlarmDetails) {\n details = JSON.parse(metadata.prevAlarmDetails);\n}\nreturn details;","severity":"CRITICAL","propagate":false,"useMessageAlarmData":false},"uiResources":["static/rulenode/rulenode-core-config.js"],"configDirective":"tbActionNodeCreateAlarmConfig","icon":"notifications_active","iconUrl":"","docUrl":""}}, actions=null), ComponentDescriptor(type=FILTER, scope=TENANT, name=originator type, clazz=org.thingsboard.rule.engine.filter.TbOriginatorTypeFilterNode, configurationDescriptor={"nodeDefinition":{"details":"If Originator Type of incoming message is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.","description":"Filter incoming messages by message Originator Type","inEnabled":true,"outEnabled":true,"relationTypes":["True","False","Failure"],"customRelations":false,"defaultConfiguration":{"originatorTypes":["DEVICE"]},"uiResources":["static/rulenode/rulenode-core-config.js","static/rulenode/rulenode-core-config.css"],"configDirective":"tbFilterNodeOriginatorTypeConfig","icon":"","iconUrl":"","docUrl":""}}, actions=null)]
- 2019-03-12 09:41:00,451 [main] INFO o.s.w.s.v.v.VelocityConfigurer - ClasspathResourceLoader with name 'springMacro' added to configured VelocityEngine
- 2019-03-12 09:41:01,933 [main] INFO o.t.server.kafka.TbNodeIdProvider - Current NodeId: raspberrypi
- 2019-03-12 09:41:01,969 [main] INFO o.t.s.a.service.DefaultActorService - Initializing Actor system.
- 2019-03-12 09:41:06,155 [Akka-akka.actor.default-dispatcher-2] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started
- 2019-03-12 09:41:06,293 [main] INFO o.t.s.s.c.rpc.ClusterGrpcService - Initializing RPC service!
- 2019-03-12 09:41:07,669 [main] INFO o.t.s.s.c.rpc.ClusterGrpcService - Going to start RPC server using port: 9001
- 2019-03-12 09:41:08,896 [main] INFO o.t.s.s.c.rpc.ClusterGrpcService - RPC service initialized!
- 2019-03-12 09:41:08,897 [main] INFO o.t.s.a.service.DefaultActorService - Actor system initialized.
- 2019-03-12 09:41:14,525 [main] INFO o.t.s.t.mqtt.MqttTransportService - Setting resource leak detector level to DISABLED
- 2019-03-12 09:41:14,526 [main] INFO o.t.s.t.mqtt.MqttTransportService - Starting MQTT transport...
- 2019-03-12 09:41:14,544 [main] WARN o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MqttTransportService': Invocation of init method failed; nested exception is java.net.BindException: Address already in use
- 2019-03-12 09:41:14,753 [main] INFO o.t.s.a.service.DefaultActorService - Actor system terminated: Terminated(Actor[akka://Akka/])
- 2019-03-12 09:41:14,801 [main] INFO o.t.s.s.c.rpc.ClusterGrpcService - Going to onStop RPC server
- 2019-03-12 09:41:14,873 [main] INFO o.t.s.s.c.rpc.ClusterGrpcService - RPC server stopped!
- 2019-03-12 09:41:14,894 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
- 2019-03-12 09:41:14,940 [main] INFO o.a.catalina.core.StandardService - Stopping service Tomcat
- 2019-03-12 09:41:15,025 [main] WARN o.s.boot.SpringApplication - Error handling failed (Error creating bean with name 'delegatingApplicationListener' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'metaDataSourceAdvisor': Cannot resolve reference to bean 'methodSecurityMetadataSource' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available)
- 2019-03-12 09:41:15,073 [main] ERROR o.s.boot.SpringApplication - Application startup failed
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MqttTransportService': Invocation of init method failed; nested exception is java.net.BindException: Address already in use
- at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1575)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
- at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
- at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
- at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
- at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
- at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:754)
- at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
- at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
- at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
- at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
- at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
- at org.thingsboard.server.ThingsboardServerApplication.main(ThingsboardServerApplication.java:38)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- at java.lang.reflect.Method.invoke(Method.java:497)
- at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
- at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
- at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
- at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:521)
- Caused by: java.net.BindException: Address already in use
- at sun.nio.ch.Net.bind0(Native Method)
- at sun.nio.ch.Net.bind(Net.java:433)
- at sun.nio.ch.Net.bind(Net.java:425)
- at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
- at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128)
- at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:558)
- at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1338)
- at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501)
- at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486)
- at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:999)
- at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:254)
- at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:366)
- at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
- at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
- at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
- at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
- at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
- at java.lang.Thread.run(Thread.java:745)
Add Comment
Please, Sign In to add comment