Yeah, I'll continue experimenting tonight: I was reluctant to set the Max too high in case it overcorrects but maybe it is still loo low (I have memories of PID controllers going "mad"!)


Cheers Max. I'm currently using aggr=0.7; intergral=0; min error=0.1 and Max response I increased to 100 - getting 0.51" RMS as I type this in fact....


Thanks a lot Max, great. Last night I tweaked a few settings and also tried out a longer FL guider, and got much improved results (screenshots below for folks interested). It might be that the seeing was just better, or my polar alignment is not great (this is a rooftop location too, and so not on solid ground). However, the longer FL made a huge difference - down to below 1" now - and I ended up after experimentation with aggr=0.8 and intr=0.2 but will try your settings tonight as well. Initially I went with 1s exposures binned 2x2 but then went back to non-binned, as you do. The exposure length seems to make a difference with 0.5s being a bit noisier but guides better, although not completely obvious (the first screendshot, where the yellow SNR line drops/steps down marking the switch between 1s and 0.5s):


Hi All,

I making steady, but very slow, progress getting a ZWO AM5 mount to work nicely with my INDI/stellarmate setup. Just wonderingif anyone has recomended settings for the RA/Dec agressiveness and other parameters (integral gain etc.) that they find to work? I did not get below around 2" RMS last night -albeit this is using a very short FL guidescope (120mm/F4).

I also note a few oddities to get it to connect/slew/GoTo. First of alll the mount needs to be breifly attached to the ZWO app to get date/time (I think) info then the slew/goto works in Indi (and at this point the handset can be disconnected. But it'll still "park" without that step. Also unparkong does not seem to work - I have to "start tracking", then "unpark" the it wakes up and actually unparks. and then getting the guiding calibration to complete seems to have a bug - it calibrated in RA forward, but the revenserse never competees (it seem to go forward not actaully reverses). I fixed it (thanks to a comment from kd6awa via Der Pit on the cloundy night forum) by breifly stopping pulse guiding, then re-starting (enabling) it. and then sending a few 0ms pulses manually though the INDI control panel. then the guide prep completes. But, what a palaver!

Once guiding got going it never really got below 2" (which is fine for my widefield needs) let alone the published 0.5-0.8" - but maybe the Asi air driver is "better" than thre INDI one?

Any other AM5/INDI users out there with thoughts/ideas?

Cheers, Phil



Yes, those were my thought's entirely - looks like my first error (I'm more electronics/mechanics rather than software!) is with the arduino library, which was not set to port 50000 and TCP/IP (now fixed), but still no luck so far. I rather suspect it's how I send the data to the server from the serial that's the issue here: as INDI seems to 'connect' but cannot parse the data, I get the ekos error "[ERROR] Error getting device readings: Connection refused".

Tinkering continues ... at least for today!



Hello all,

I've been playing around with a few spare 'bits and bobs' and sucessfully made a little GPS receiver using a NEO-8M chip and a spare Arduino I had (plus an ethernet shield). I was just going to use it to set the time on my astroberry / stellarmate when not connected to the network, but then I came across this very interesting driver in the INDI library:

This seems to do a lot of the hard work for me.... but I cannot fathom how to actually send the data from the GPS chip (using the serial connection, as it were) to generate a web server for the INDI to connect to as client.

So, this is just a shout out to the collective to see if anyone has already tried and come up with a solution, before I spend another day googling! I suspect I have simply miss-understood the syntax/formatting... but so far the detail of how to fix this has eluded me....

Any words of wisdom would be great! (arduno sketch below for those interested...)


#include <TinyGPS++.h>
#include <SPI.h>
#include <Ethernet.h>

// The TinyGPS++ object
TinyGPSPlus gps;

// set up the simple web server
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
IPAddress ip(192, 168, 1, 128);
EthernetServer server(80);

void setup() {
  // Open serial communications and wait for port to open:
  while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only
  Serial.println("Ethernet WebServer");

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
  if (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
  // Now, start the server
  Serial.print("server is at ");
} //end of setup loop

void loop() {

  //Get the GPS data and interpret...
  while (Serial1.available() > 0)
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c =;
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 2");  // refresh the page automatically every 2 sec
          client.println("<!DOCTYPE HTML>");

// Below is the raw output of the GPS chip (NMEA format)... But it doesn't work when added directly to the web server code.
// Formatting/syntax issues? But I wonder what format the GPS NMEA server needs anyway?
            client.print(F(" Hour=")); // but this is fine... but just goes to the web browser... not the INDI client.
            client.print(F(" Minute="));
            client.print(F(" Second="));
          client.println("<br />");
            client.print(F(" Lat="));
            client.print(, 6);
            client.print(F(" Long="));
            client.println(gps.location.lng(), 6);

          client.println("<br />");

            client.print(F("#SATS= "));
            client.print(F(" Meters="));
          client.println("<br />");

        if (Serial1.available() > 0){
          client.println(; //this works in the serial monotir but in the server only posts two characters...
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
    // give the web browser time to receive the data
    // close the connection:
    Serial.println("client disconnected");

// This is the raw output of NMEA ... client wont work when it runs... due to the loop... 
//if (Serial1.available() > 0){

// This is the parsed data, using TinyGPS++ to see if it's working - it's fine, in the arduino serial monitor...
/*  if (gps.location.isUpdated())
    Serial.print(F("LOCATION   Fix Age="));
    Serial.print(F(" Lat="));
    Serial.print(, 6);
    Serial.print(F(" Long="));
    Serial.println(gps.location.lng(), 6);
  else if (
    Serial.print(F("DATE       Fix Age="));
    Serial.print(F("ms Raw="));
    Serial.print(F(" Year="));
    Serial.print(F(" Month="));
    Serial.print(F(" Day="));
  else if (gps.time.isUpdated())
    Serial.print(F("TIME       Fix Age="));
    Serial.print(F("ms Raw="));
    Serial.print(F(" Hour="));
    Serial.print(F(" Minute="));
    Serial.print(F(" Second="));
  else if (gps.altitude.isUpdated())
    Serial.print(F("ALTITUDE   Fix Age="));
    Serial.print(F("ms Raw="));
    Serial.print(F(" Meters="));
  else if (gps.satellites.isUpdated())
    Serial.print(F("SATELLITES Fix Age="));
    Serial.print(F("ms Value="));

// the final loop void loop close