• Tags
  • Documentation
  • Order
  • Register
  • Login
Duet3D Logo Duet3D
  • Tags
  • Documentation
  • Order
  • Register
  • Login

C++ API for Duet 3 Mainboard 6HC

Scheduled Pinned Locked Moved
DSF Development
6
24
1.3k
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • undefined
    ElevenJune @droftarts
    last edited by 16 Feb 2021, 12:57

    @droftarts Hello,
    I have a new question regarding the communication between a third-party software (that I will be programming) and the Duet 3 M6HC
    I will be connecting a Raspberry Pi 4 to the Duet 3 through SPI and then the Raspberry Pi will run the Duet Web Server.
    With this configuration, will I be able to use the HTTP Requests handle by RepRapFirmware please ?

    undefined undefined 2 Replies Last reply 17 Feb 2021, 20:49 Reply Quote 0
    • undefined
      wilriker @ElevenJune
      last edited by 17 Feb 2021, 20:49

      @ElevenJune You could but if you are using the SBC there are multiple client libraries to interact with DuetControlServer that are much more efficient than using HTTP requests. Currently there are implementations in C#.NET (native language of DuetSoftwareFramework), Python and GoLang.

      Manuel
      Duet 3 6HC (v0.6) with RPi 4B on a custom Cartesian
      with probably always latest firmware/DWC (incl. betas or self-compiled)
      My Tool Collection

      1 Reply Last reply Reply Quote 0
      • undefined
        T3P3Tony administrators @ElevenJune
        last edited by 17 Feb 2021, 23:43

        @ElevenJune see here:

        https://github.com/Duet3D/DSF-APIs

        If you have to use C++ you can adapt one of the other APIs. alternatively maybe you can use the C# API directly.

        www.duet3d.com

        undefined 1 Reply Last reply 22 Feb 2021, 22:21 Reply Quote 0
        • undefined
          ElevenJune @T3P3Tony
          last edited by 22 Feb 2021, 22:21

          @T3P3Tony and @wilriker Thanks a lot for your answers !
          How more efficient would using a client library you mentioned be compared to using HTTP requests please ? Are we talking about speed or something else ?

          I guess that if I use the SBC without the HTTP requests then the app i'll be developing can only be deployed on the Raspberry Pi connected by SBC to the Duet ?

          undefined 1 Reply Last reply 22 Feb 2021, 22:33 Reply Quote 0
          • undefined
            T3P3Tony administrators @ElevenJune
            last edited by 22 Feb 2021, 22:33

            @ElevenJune how much more efficient it is depends on how much information you need to query, network performance etc. if you need very frequently updates the it will be a lot faster than the network interface. OTOH if you don't need frequent updates but you need to do loads of calculations then maybe using the network interface and running your application on a more powerful machine will be faster...

            @ElevenJune said in C++ API for Duet 3 Mainboard 6HC:

            I guess that if I use the SBC without the HTTP requests then the app i'll be developing can only be deployed on the Raspberry Pi connected by SBC to the Duet ?

            Yes

            www.duet3d.com

            undefined 2 Replies Last reply 23 Feb 2021, 10:05 Reply Quote 0
            • undefined
              ElevenJune @T3P3Tony
              last edited by 23 Feb 2021, 10:05

              @T3P3Tony Thank you for your clear answer ! I'll choose accordingly to the needs I will have. But I guess that not being restricted to the Raspberry Pi can be interesting on the long run.

              1 Reply Last reply Reply Quote 0
              • undefined
                ElevenJune @T3P3Tony
                last edited by ElevenJune 23 Feb 2021, 17:34

                @T3P3Tony I have a question just to be sure I understood well. I will soon start the development of a control App and want to be sure before beginning to code.

                I will develop a C++ software, can it communicate with the Duet 3 in these configurations :

                • Duet 3 6HC In Standalone mode. I plug a RJ45 cable between the Duet and a PC (no Raspberry Pi or other SBC is involved) and can use the HTTP Requests to communicate with the card (https://github.com/Duet3D/RepRapFirmware/wiki/HTTP-requests). My software exchanges directly with RepRapFirmware

                • Duet 3 6HC connected to an Raspberry Pi 4 (a SBC) through SPI. I run the Duet Web Server on the Raspberry and can there use the RESTful API (https://github.com/Duet3D/DuetSoftwareFramework#rest-api) to communicate with the card. I can deploy my software on the Raspeberry Pi or on a more powerful PC (not a SBC) that I will connect to the Raspberry with RJ45. My software exchanges with Duet Web Server , like Duet Web Control exchanges with Duet Web Server

                Is this right please ?

                There is the third option where I can develop my own C++ API communicating with the card through SBC and use it as part of my C++ software. I do not plan on choosing this one.

                I really thank you in advance !

                undefined 1 Reply Last reply 23 Feb 2021, 18:18 Reply Quote 0
                • undefined
                  T3P3Tony administrators @ElevenJune
                  last edited by 23 Feb 2021, 18:18

                  @ElevenJune said in C++ API for Duet 3 Mainboard 6HC:

                  @T3P3Tony I have a question just to be sure I understood well. I will soon start the development of a control App and want to be sure before beginning to code.

                  I will develop a C++ software, can it communicate with the Duet 3 in these configurations :

                  • Duet 3 6HC In Standalone mode. I plug a RJ45 cable between the Duet and a PC (no Raspberry Pi or other SBC is involved) and can use the HTTP Requests to communicate with the card (https://github.com/Duet3D/RepRapFirmware/wiki/HTTP-requests). My software exchanges directly with RepRapFirmware

                  Yes, configure a fixed IP on the Duet and your laptop within the same range

                  • Duet 3 6HC connected to an Raspberry Pi 4 (a SBC) through SPI. I run the Duet Web Server on the Raspberry and can there use the RESTful API (https://github.com/Duet3D/DuetSoftwareFramework#rest-api) to communicate with the card. I can deploy my software on the Raspeberry Pi or on a more powerful PC (not a SBC) that I will connect to the Raspberry with RJ45. My software exchanges with Duet Web Server , like Duet Web Control exchanges with Duet Web Server

                  That is also possible. If you are deploying to the Same raspberry pi then I have not tested connection to the Webserver restful API using 127.0.0.1, you might need to use the external facing IP.

                  Is this right please ?

                  There is the third option where I can develop my own C++ API communicating with the card through SBC and use it as part of my C++ software. I do not plan on choosing this one.

                  I really thank you in advance !

                  www.duet3d.com

                  undefined 2 Replies Last reply 25 Feb 2021, 08:34 Reply Quote 0
                  • undefined
                    ElevenJune @T3P3Tony
                    last edited by 25 Feb 2021, 08:34

                    @T3P3Tony Thanks a lot ! This is clear for me !

                    1 Reply Last reply Reply Quote 0
                    • undefined
                      ElevenJune @T3P3Tony
                      last edited by 25 Feb 2021, 08:50

                      @T3P3Tony I have a new question regarding a command
                      How does the M291 command (to display a message) works ?
                      If this command is in a G-Code being executed, how can I retrieve the message ? How will the REST API will notify me of this please ?

                      1 Reply Last reply Reply Quote 0
                      • undefined
                        ElevenJune
                        last edited by 25 Feb 2021, 11:12

                        Concerning the REST API, can I access a statut Response like the one proposed by RepRapFirmware please ? https://github.com/Duet3D/RepRapFirmware/wiki/JSON-responses
                        I can't find any info on this.

                        1 Reply Last reply Reply Quote 0
                        • undefined
                          dc42 administrators
                          last edited by dc42 25 Feb 2021, 13:51

                          That's one for @chrishamm, however there is some documentation here https://github.com/Duet3D/DuetSoftwareFramework/blob/master/README.md.

                          Duet WiFi hardware designer and firmware engineer
                          Please do not ask me for Duet support via PM or email, use the forum
                          http://www.escher3d.com, https://miscsolutions.wordpress.com

                          undefined 1 Reply Last reply 25 Feb 2021, 14:49 Reply Quote 0
                          • undefined
                            ElevenJune @dc42
                            last edited by 25 Feb 2021, 14:49

                            @dc42 Thank you for your answer ! My question is regarding this request : https://github.com/Duet3D/DuetSoftwareFramework/blob/master/README.md#get-machinestatus
                            Do you know where I can find the status response that I will receive when using this request please ?

                            1 Reply Last reply Reply Quote 0
                            • undefined
                              MintyTrebor
                              last edited by MintyTrebor 25 Feb 2021, 15:37

                              @ElevenJune: When getting status information I think you may benefit from understanding the JSON Machine Model, as most of the information returned via status requests will be either the full Machine Model, a subset, or a patch - depending on the api and commands you use. There is a Machine Model plugin for DWC which is a great way of navigating the model to find where keys/values are.

                              For example you mentioned a M291 msg: When triggered, an M291 command will populate the Machine Model keys:

                              state.messageBox.title
                              
                              state.messageBox.message
                              

                              So the command : M291 P"This Is A Test Msg" R"My Msg"
                              Would result in:

                              state.messageBox.title : "My Msg"
                              
                              state.messageBox.message : "This Is A Test Msg"
                              

                              The values will auto clear once the msg has been acknowledged or timed-out.
                              (Note: There are other keys set by M291 but I have excluded them for brevity)

                              (I actually use these keys specifically in my NodeDSF project to trigger events. I would normally point you at my code to give you an idea, but its node.js/javascript so I'm not sure it would be much help.)

                              Hope this helps!

                              NodeDSF - Native Node-Red integration with Duet boards.
                              BtnCmd - Customise DWC with user defined buttons/layouts/panels (DWC Plugin)
                              ReleaseMgr - Duet update info inside DWC.
                              Repo

                              undefined 1 Reply Last reply 25 Feb 2021, 15:53 Reply Quote 0
                              • undefined
                                ElevenJune @MintyTrebor
                                last edited by 25 Feb 2021, 15:53

                                @MintyTrebor Thanks for your reply ! Unfortunately I will be programming in C++ so I cannot use this Machine Model. Do you know how I can access this type of information with the REST API to later use it in C++ please ?

                                undefined 1 Reply Last reply 25 Feb 2021, 16:02 Reply Quote 0
                                • undefined
                                  MintyTrebor @ElevenJune
                                  last edited by 25 Feb 2021, 16:02

                                  @ElevenJune If your using the rest api to query the status then you will have to use the machine model. The HTTP GET /machine/status request you can send returns a JSON object which is the Machine Model. If you go the websocket route, it will still be JSON and the machine model. I don't think there is any way around it with the rest api.

                                  NodeDSF - Native Node-Red integration with Duet boards.
                                  BtnCmd - Customise DWC with user defined buttons/layouts/panels (DWC Plugin)
                                  ReleaseMgr - Duet update info inside DWC.
                                  Repo

                                  undefined 1 Reply Last reply 25 Feb 2021, 16:44 Reply Quote 0
                                  • undefined
                                    ElevenJune @MintyTrebor
                                    last edited by 25 Feb 2021, 16:44

                                    @MintyTrebor Thanks for your reply.
                                    Is MachineModel a Json structure that will be returned with the request ? Or is it a something like a JavaScript class ? I don't understand.

                                    1 Reply Last reply Reply Quote 0
                                    • undefined
                                      MintyTrebor
                                      last edited by 25 Feb 2021, 16:58

                                      Is MachineModel a Json structure that will be returned with the request ?
                                      Yes.
                                      The easiest way of seeing it is by entering:

                                      http://[your sbc/dsf ip address]/machine/status
                                      

                                      into your browser.

                                      It should just return the full JSON Machine Model as text (if using firefox it will automatically parse for you).

                                      For the avoidance of confusion - the returned data is just text with an enforced structural pattern (JSON)

                                      NodeDSF - Native Node-Red integration with Duet boards.
                                      BtnCmd - Customise DWC with user defined buttons/layouts/panels (DWC Plugin)
                                      ReleaseMgr - Duet update info inside DWC.
                                      Repo

                                      undefined 1 Reply Last reply 25 Feb 2021, 17:18 Reply Quote 0
                                      • undefined
                                        ElevenJune @MintyTrebor
                                        last edited by 25 Feb 2021, 17:18

                                        @MintyTrebor Thanks for your reply and your patience, I got a bit confused while reading the last messages !
                                        This is what I am looking for. I don't have received my Duet card yet so I can't try the request, would you have a link showing the content of the Machine Model or an example of it please ?

                                        1 Reply Last reply Reply Quote 0
                                        • undefined
                                          MintyTrebor
                                          last edited by 25 Feb 2021, 17:21

                                          https://duet3d.dozuki.com/Wiki/Object_Model_of_RepRapFirmware

                                          will get you started.

                                          NodeDSF - Native Node-Red integration with Duet boards.
                                          BtnCmd - Customise DWC with user defined buttons/layouts/panels (DWC Plugin)
                                          ReleaseMgr - Duet update info inside DWC.
                                          Repo

                                          undefined 1 Reply Last reply 25 Feb 2021, 17:47 Reply Quote 0
                                          13 out of 24
                                          • First post
                                            13/24
                                            Last post
                                          Unless otherwise noted, all forum content is licensed under CC-BY-SA