Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 13:25
    n-deliyski commented #3448
  • 07:57
    BanDianMan opened #3448
  • 06:50
    sophokles73 demilestoned #3084
  • Nov 25 10:02
    sophokles73 labeled #3447
  • Nov 25 10:02
    sophokles73 demilestoned #3447
  • Nov 25 10:02
    sophokles73 demilestoned #3447
  • Nov 25 10:02
    sophokles73 labeled #3446
  • Nov 25 10:02
    sophokles73 unlabeled #3446
  • Nov 25 10:01
    sophokles73 labeled #3446
  • Nov 25 10:01
    sophokles73 demilestoned #3446
  • Nov 25 08:53
    BobClaerhout closed #3446
  • Nov 25 08:53
    BobClaerhout commented #3446
  • Nov 25 08:53
    BobClaerhout closed #3447
  • Nov 25 08:53
    BobClaerhout commented #3447
  • Nov 25 07:32

    sophokles73 on master

    Add instructions for building t… Update HonoBuilder container im… (compare)

  • Nov 24 08:17
    n-deliyski commented #3445
  • Nov 23 12:06
    sophokles73 milestoned #3447
  • Nov 23 12:06
    sophokles73 milestoned #3447
  • Nov 23 12:06
    sophokles73 labeled #3447
  • Nov 23 12:06
    sophokles73 labeled #3447
Anoop Kumar
@anoopk30
I have solved this problem.
Anoop Kumar
@anoopk30
How can I subscribe to topic other than telemetry?? When I tried mosquitto_sub command, it's showing "All Subscription Access Were Denied".
Kai Hudalla
@sophokles73
A device cannot subscribe to any other topic than the command topic which it uses to receive command messages from back end applications. The MQTT adapter is not an MQTT broker but simply supports the MQTT 3.1.1 protocol to exchange messages with devices. Please also refer to the MQTT adapter user guide (https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/) for information regarding subscribing to the command topic.
Anoop Kumar
@anoopk30
Ok, thanks.
Julian
@JulianFeinauer
Good Morning people : )
Julian
@JulianFeinauer
I observed a strange behavior when using eclipse hono via eclipse ditto (through the cloud2edge kubernetes package). I subscribed with a „device“ to receive commands via MQTT but the topic I got the command at was missing a „/„, so it was ${request-id}replies… instead of ${request-id}/replies (so the slash was missing)
Kai Hudalla
@sophokles73
@JulianFeinauer Hi Julian, hope you're doing well :-) Can you post the topic that you used to subscribe to commands? Where did the commands originate from? Is there a north bound application which sends the command or is that a command that originates from Ditto?
Julian
@JulianFeinauer
@sophokles73 thanks, I’m well, yes, I hope you are too!
I was following the guide from here https://www.eclipse.org/packages/packages/cloud2edge/tour/ ("Sending a command to the device via its digital twin“)
I was subscribing command///req/#
And the command was sent via ditto
curl -i -X POST -u ditto:ditto -H 'Content-Type: application/json' -w '\n' --data '{
  "water-amount": "3liters"
}' http://xxx:8080/api/2/things/org.acme:my-device-1/inbox/messages/start-watering?timeout=60
image.png
Julian
@JulianFeinauer
Here is the response I get
(you could also try it out yourself as my test cluster is public…)
Kai Hudalla
@sophokles73
I see. Which version of the chart are you using? In particular, which version of Hono and Ditto is being installed?
Kai Hudalla
@sophokles73
I am not 100% sure but it looks like ....replies is actually the reply-id being used by Ditto. It may look strange but the Hono MQTT adapter user guide does not specify a separate replies segment in the command topic. Are you able to actually PUBLISH a response to the command using the reply-id ending in ...replies?
Julian
@JulianFeinauer
no.. I am unable to reply no matter what kind of topic I sue
let me check
The Helm Chart is 0.2.1
Kai Hudalla
@sophokles73
The response would need to be published to command///res/${req-id}/${status} with ${req-id} being the string ending in ...replies and ${status} being an HTTP status code ...
9 replies
Julian
@JulianFeinauer
Ditto is 2.0.1 and Hono is 1.8.0
Julian
@JulianFeinauer
Slightly related question… If I want to try out command & control without Ditto but with „plain hono“, how can I create credentials for an „application“ (the north bound site)? Did I miss that in the documentation?
I am able to write code that works with the sandbox (where the credentials are known) but with my cloud2edge setup I am missing that
This has to be configured in the dispatch router (qpid?), or?
Julian
@JulianFeinauer
ah, nvm… found it
Kai Hudalla
@sophokles73
@/all I would like to do 1.9.1 and 1.8.3 service releases today. Anything else you need to have in there?
Julian
@JulianFeinauer
I only have another question (regarding 1.8.0): I am now able to get the „north“ side running via AMQP but I do not yet get a command message sent to a client (client via HTTP adapter). I try to do the whole thing without ditto, so HONO only. Just to ensure that I got everything right:
  • Application creates a connection and a sender link to target command/{self.tenant}/{self.deviceId}
  • Application creates a receiver link to target telemetry/{self.tenant}
  • Client sends a telemetry with header hono-ttd and wait time in seconds
  • When my application receives the message it can send the command as message witth properties properties={"to": f"command/{self.tenant}/{self.deviceId}", "subject": "work“} via above sender link
Julian
@JulianFeinauer
The message does neither get rejected, released nor accepted (amqp side) nor does the client receive it (answer is 202) and I dont see errors in the logs
08:18:03.873 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - sent request [target address: registration/d7338cdc-6c72-4e3c-a329-54ab939221d7, subject: assert, correlation ID: registration-client-d813ceee-4adc-4fe7-9dea-c9843f37b0e1, device ID: 7a3f6a37-db90-4671-9a29-ac0f69e717cf] to service
08:18:03.880 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - received response [reply-to: registration/d7338cdc-6c72-4e3c-a329-54ab939221d7/a750eeca-997c-4e4d-957d-b0491f3c3772, subject: null, correlation ID: registration-client-d813ceee-4adc-4fe7-9dea-c9843f37b0e1, status: 200, cache-directive: max-age = 300]
08:18:03.880 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.impl.CachingClientFactory - creating new client for [cmd_router-d7338cdc-6c72-4e3c-a329-54ab939221d7]
08:18:03.881 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - client provided response handler did not settle message, auto-accepting ...
08:18:03.882 [vert.x-eventloop-thread-0] DEBUG o.e.h.client.impl.HonoConnectionImpl - receiver open [source: cmd_router/d7338cdc-6c72-4e3c-a329-54ab939221d7/fd10a6dc-c3fb-4d07-9c60-4ec794282c33]
08:18:03.882 [vert.x-eventloop-thread-0] DEBUG o.e.h.client.impl.HonoConnectionImpl - sender open [target: cmd_router/d7338cdc-6c72-4e3c-a329-54ab939221d7, sendQueueFull: false, remote max-message-size: null]
08:18:03.882 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - request-response client for peer [c2e-test-service-command-router] created
08:18:03.882 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.impl.CachingClientFactory - successfully created new client for [cmd_router-d7338cdc-6c72-4e3c-a329-54ab939221d7]
08:18:03.883 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - sent request [target address: cmd_router/d7338cdc-6c72-4e3c-a329-54ab939221d7, subject: register-command-consumer, correlation ID: cmd_router-client-d87de6e0-fdad-4f6b-9d80-f6f565524de6, device ID: 7a3f6a37-db90-4671-9a29-ac0f69e717cf] to service
08:18:03.893 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - received response [reply-to: cmd_router/d7338cdc-6c72-4e3c-a329-54ab939221d7/fd10a6dc-c3fb-4d07-9c60-4ec794282c33, subject: null, correlation ID: cmd_router-client-d87de6e0-fdad-4f6b-9d80-f6f565524de6, status: 204, cache-directive: null]
08:18:03.893 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.impl.CachingClientFactory - creating new client for [telemetry/d7338cdc-6c72-4e3c-a329-54ab939221d7]
08:18:03.893 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - client provided response handler did not settle message, auto-accepting ...
08:18:03.895 [vert.x-eventloop-thread-0] DEBUG o.e.h.client.impl.HonoConnectionImpl - sender open [target: telemetry/d7338cdc-6c72-4e3c-a329-54ab939221d7, sendQueueFull: false, remote max-message-size: 131072]
08:18:03.895 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.impl.CachingClientFactory - successfully created new client for [telemetry/d7338cdc-6c72-4e3c-a329-54ab939221d7]
08:18:08.894 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.impl.CachingClientFactory - reusing cached client [cmd_router-d7338cdc-6c72-4e3c-a329-54ab939221d7]
08:18:08.894 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - sent request [target address: cmd_router/d7338cdc-6c72-4e3c-a329-54ab939221d7, subject: unregister-command-consumer, correlation ID: cmd_router-client-c0cd1a7e-dd8b-40d0-ab8b-08f7de9ca5a8, device ID: 7a3f6a37-db90-4671-9a29-ac0f69e717cf] to service
08:18:08.897 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - received response [reply-to: cmd_router/d7338cdc-6c72-4e3c-a329-54ab939221d7/fd10a6dc-c3fb-4d07-9c60-4ec794282c33, subject: null, correlation ID: cmd_router-client-c0cd1a7e-dd8b-40d0-ab8b-08f7de9ca5a8, status: 412, cache-directive: null]
08:18:08.898 [vert.x-eventloop-thread-0] DEBUG o.e.h.c.amqp.RequestResponseClient - client provided response handler did not settle message, auto-accepting ...
Kai Hudalla
@sophokles73
Have you tried following the steps described in Hono's Getting Started guide (section Advanced: Sending Commands to a Device)?
Once you have successfully run it using the MQTT adapter, it should be only a small change to use the HTTP adapter instead ...
Julian
@JulianFeinauer
Yes i followed the guide the main difference is that I do the „north side“ myself and not via the java client
Kai Hudalla
@sophokles73
Does it work with the java client using the HTTP adapter?
Julian
@JulianFeinauer
Yes it works if I use the Java Client as stated in the documentation… thus I wanted to ensure that I do the things right in my python impl : )
(and a quick glance on the client didnt help me to exactly see the program flow)
Julian
@JulianFeinauer
I think I do everything similar but my message gets rejected and I have no idea why
Julian
@JulianFeinauer
From the log of the command router I see: command message has no valid address but the to property of my message seems to be correct and the sender link also...
Kai Hudalla
@sophokles73
Maybe you want to share your Python code?
Julian
@JulianFeinauer
Sure
This is my testing script (attention, its rather „Holzhacker“-Programming)
But its based on the python code I did for the hono quickstart Demo I did back then
I guess the crucial part is here
    def on_start(self, event):
        event.container: Container
        conn = event.container.connect(url=self.server, user="consumer@HONO", password="verysecret")

        event.container.create_receiver(conn, f"telemetry/{self.tenant}")
        self.sender = event.container.create_sender(conn, target=f"command/{self.tenant}", options=[HelloWorld.SessionEnd()])

    def on_message(self, event):
        print(f"I got a telemetry message, sending command...")
        self.accept(event.delivery)
        message = Message(properties={
            "to": f"command/{self.tenant}/{self.deviceId}",
            "subject": "work",
            # "content-type": "application/json",
            # "messageId": "0",
            # "userId": "null",
            # "replyTo": "null",
            # "correlationId": "0",
            # "contentEncoding": "null",
            # "absoluteExpiryTime": "null",
            # "creationTime": "null",
            # "groupId": 'null',
            # "groupSequence": "null",
            # "replyToGroupId": 'null',
        })
        print(f"Sending Command: {message}")
        self.sender.send(message)
Kai Hudalla
@sophokles73
it should probably be "to:" f"command/{self.tenantId}/{self.deviceId}", shouldn't it?
Kai Hudalla
@sophokles73
ah no, I see, tenant is initialized to the value of tenantId ...
Kai Hudalla
@sophokles73
@JulianFeinauer I am using this code to (successfully) send a command to a device via the HTTP adapter. Maybe you can adapt your code accordingly?
from __future__ import print_function, unicode_literals
from proton import Message
from proton.handlers import MessagingHandler
from proton.reactor import Container

class HelloWorld(MessagingHandler):
    def __init__(self, server, address):
        super(HelloWorld, self).__init__()
        self.server = server
        self.address = address

    def on_start(self, event):
        print("connecting ...")
        conn = event.container.connect(self.server, sasl_enabled=True, allowed_mechs="PLAIN", allow_insecure_mechs=True, user="consumer@HONO", password="verysecret")
        event.container.create_sender(conn, self.address)

    def on_sendable(self, event):
        print("sending command")
        event.sender.send(Message(body="Hello World!", address="command/DEFAULT_TENANT/4711", content_type="text/plain", subject="call"))
        event.sender.close()
        event.connection.close()

Container(HelloWorld("amqp://hono.eclipseprojects.io:15672", "command/DEFAULT_TENANT")).run()
maybe you need to use "address" instead of "to"?
Julian
@JulianFeinauer
Yeah, thanks @sophokles73 , I got it working with your example
Indeed I guess it was me using the lib incorrectly. with your handling of properties it works with mine it doesnt
Kai Hudalla
@sophokles73
Nice :-)