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.
    • ElevenJuneundefined
      ElevenJune
      last edited by

      Thanks a lot for your answer !

      1 Reply Last reply Reply Quote 0
      • ElevenJuneundefined
        ElevenJune @droftarts
        last edited by

        @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 ?

        wilrikerundefined T3P3Tonyundefined 2 Replies Last reply Reply Quote 0
        • wilrikerundefined
          wilriker @ElevenJune
          last edited by

          @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
          • T3P3Tonyundefined
            T3P3Tony administrators @ElevenJune
            last edited by

            @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

            ElevenJuneundefined 1 Reply Last reply Reply Quote 0
            • ElevenJuneundefined
              ElevenJune @T3P3Tony
              last edited by

              @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 ?

              T3P3Tonyundefined 1 Reply Last reply Reply Quote 0
              • T3P3Tonyundefined
                T3P3Tony administrators @ElevenJune
                last edited by

                @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

                ElevenJuneundefined 2 Replies Last reply Reply Quote 0
                • ElevenJuneundefined
                  ElevenJune @T3P3Tony
                  last edited by

                  @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
                  • ElevenJuneundefined
                    ElevenJune @T3P3Tony
                    last edited by ElevenJune

                    @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 !

                    T3P3Tonyundefined 1 Reply Last reply Reply Quote 0
                    • T3P3Tonyundefined
                      T3P3Tony administrators @ElevenJune
                      last edited by

                      @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

                      ElevenJuneundefined 2 Replies Last reply Reply Quote 0
                      • ElevenJuneundefined
                        ElevenJune @T3P3Tony
                        last edited by

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

                        1 Reply Last reply Reply Quote 0
                        • ElevenJuneundefined
                          ElevenJune @T3P3Tony
                          last edited by

                          @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
                          • ElevenJuneundefined
                            ElevenJune
                            last edited by

                            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
                            • dc42undefined
                              dc42 administrators
                              last edited by dc42

                              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

                              ElevenJuneundefined 1 Reply Last reply Reply Quote 0
                              • ElevenJuneundefined
                                ElevenJune @dc42
                                last edited by

                                @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
                                • MintyTreborundefined
                                  MintyTrebor
                                  last edited by MintyTrebor

                                  @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

                                  ElevenJuneundefined 1 Reply Last reply Reply Quote 0
                                  • ElevenJuneundefined
                                    ElevenJune @MintyTrebor
                                    last edited by

                                    @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 ?

                                    MintyTreborundefined 1 Reply Last reply Reply Quote 0
                                    • MintyTreborundefined
                                      MintyTrebor @ElevenJune
                                      last edited by

                                      @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

                                      ElevenJuneundefined 1 Reply Last reply Reply Quote 0
                                      • ElevenJuneundefined
                                        ElevenJune @MintyTrebor
                                        last edited by

                                        @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
                                        • MintyTreborundefined
                                          MintyTrebor
                                          last edited by

                                          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

                                          ElevenJuneundefined 1 Reply Last reply Reply Quote 0
                                          • ElevenJuneundefined
                                            ElevenJune @MintyTrebor
                                            last edited by

                                            @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
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA