SoftwareAG / cumulocity-lora

LoRa framework including implementations for TTN, Chirpstack, Kerlink Wanesy, Loriot, Actility, Objenious, Live Objects, Orbiwan as well as many codecs and still adding more, and lot of unique features such as user-friendly UI to send device commands, gateway management, codec IDE
Apache License 2.0
10 stars 2 forks source link

Downlink AS ID is static on the code and forbid several C8Y connections on LNS connections #103

Closed Paulo0o closed 4 months ago

Paulo0o commented 5 months ago

https://raw.githubusercontent.com/SoftwareAG/cumulocity-lora/master/java/lora-ns-actility/src/main/java/lora/ns/actility/ActilityConnector.java

@Override public String sendDownlink(DownlinkData operation) { log.info("Will send {} to Thingpark.", operation.toString()); String correlationId = String.valueOf(DateTime.now().getMillis()); DownlinkMessage message = new DownlinkMessage(); message.setPayloadHex(operation.getPayload()); message.setTargetPorts(operation.getFport().toString()); MessageSecurityParams securityParams = new MessageSecurityParams(); securityParams.setAsId("cumulocity"); securityParams.setAsKey(downlinkAsKey); message.setSecurityParams(securityParams); message.setCorrelationID(correlationId); DownlinkMessage response = actilityCoreService.sendDownlink(operation.getDevEui(), message); return response.getCorrelationID(); }

    @Override
    public void provisionDevice(DeviceProvisioning deviceProvisioning) {
           DeviceCreate device = new DeviceCreate();
           device.setEUI(deviceProvisioning.getDevEUI());
           device.setName(deviceProvisioning.getName());
           device.setProcessingStrategyId("ROUTE");
           device.getRouteRefs().add(routeRef);
    device.setDeviceProfileId(deviceProvisioning.getAdditionalProperties().getProperty("deviceProfile"));
           if (deviceProvisioning.getProvisioningMode() == ProvisioningMode.OTAA) {
                   device.setActivationType("OTAA");
                   device.setApplicationEUI(deviceProvisioning.getAppEUI());
                   device.setApplicationKey(deviceProvisioning.getAppKey());
           } else {
                   device.setActivationType("ABP");
           }

           actilityCoreService.createDevice(device);
    }

    @Override
    public void configureRoutings(String url, String tenant, String login, String password) {
           log.info("Configuring routings to: {} with credentials: {}:{}", url, login, password);
           String connectionId = null;

           for (Route route : actilityCoreService.getRoutes()) {
                   if (route.getName().equals(tenant + "-" + getId())) {
                           routeRef = route.getRef();
                   }
           }
           for (Connection c : actilityCoreService.getConnections()) {
                   if (c.getName().equals(tenant + "-" + getId())) {
                           connectionId = c.getId();
                   }
           }
           ConnectionRequest connectionRequest = new ConnectionRequest();
           ConnectionHttpConfig configuration = new ConnectionHttpConfig();
           configuration.setDestinationURL(url + "/uplink");
           configuration.getHeaders().put("Authorization", "Basic "
                                          + Base64.getEncoder().encodeToString((tenant + "/" + login + ":" + password).getBytes()));
           **configuration.setDownlinkAsId("cumulocity");**
           configuration.setDownlinkAsKey(downlinkAsKey);
           connectionRequest.setConfiguration(configuration);
           connectionRequest.setName(tenant + "-" + this.getId());

           if (routeRef == null) {
                   actilityCoreService.createConnection(connectionRequest);
                   for (Route route : actilityCoreService.getRoutes()) {
                           if (route.getName().equals(tenant + "-" + this.getId())) {
                                  routeRef = route.getRef();
                           }
                   }
           } else {
                   actilityCoreService.updateConnection(connectionId, connectionRequest);
           }
           List<DeviceCreate> response = actilityCoreService.getDevices();
           response.forEach(d -> {
                   if (!d.getRouteRefs().contains(routeRef)) {
                           d.getRouteRefs().add(routeRef);
                           try {
                                  actilityCoreService.updateDevice(d.getRef(), d);
                           } catch (Exception e) {
                                  log.error("Couldn't update device", e);
                           }
                   }
           });
    }