Gpredict and rotator control

Hello,
I am trying to build my own ground station.
Before start building hardware staff, I would like to test gpredict and how communication works.
I setup an ubuntu pc, with gpredict and hamlib.

I create virtual ports using the following command:
socat -d -d pty,rawer,echo=0 pty,rawer,echo=0

which creates the ports /dev/pts/1 and /dev/pts/2

next I give the command:
sudo rotctld -m 202 -r /dev/pts/1 -s 9600 -T 192.168.79.12 -t 4533 -C timeout=5000 -C retry=0 -vvvvvvvv

and seems that something is waiting for and after that I go to gpredict, and track satellite using the antenna rotator. but I cannot see any message in the terminal.

I sure that I setup something wrong, but can anyone give me a hint?

Thanks in advance.

Do you want to emulate a rotator ?
In that case, start rotctld with model 1 (dummy), no ports required.
rotctld -m 1 -t 4533 -vvvvvvvv
and then in another terminal, try it with rotctl -m 2 -r localhost:4533 or with gpredict.

1 Like

Thank you!!!

It works in the terminal, but not with GPredict. I can’t find the problem.
C:\Users\Michel\Desktop\ham\gpredict\hamlib\bin>
C:\Users\Michel\Desktop\ham\gpredict\hamlib\bin>rotctld -m 1 -t 4533 -vvvvvvvv
rotctld, Hamlib 4.5.5 Apr 05 11:43:08Z 2023 SHA=6eecd3
Report bugs to hamlib-developer@lists.sourceforge.net

rot_init called
initrots4_dummy: _init called
rot_register (1)
rot_register (2)
dummy_rot_init called
set_conf: called
rot_open called
dummy_rot_open called
dummy_rot_open: dummy rotator so simulating speed
Opened rot model 1, ‘Dummy’
Backend version: 20220531.0, Status: Stable
Connection opened from ::1:49158
rotctl(d): Å ‘’ ‘’ ‘’ ‘’

icrosoft Windows [Version 10.0.19045.5131]
(c) Microsoft Corporation. All rights reserved.

C:\Users\Michel>cd C:\Users\Michel\Desktop\ham\gpredict\hamlib\bin>
The syntax of the command is incorrect.

C:\Users\Michel>cd C:\Users\Michel\Desktop\ham\gpredict\hamlib\bin

C:\Users\Michel\Desktop\ham\gpredict\hamlib\bin>rotctl -m 2 -r localhost:4533

Rotator command:

What exactly do you mean with “not with gpredict” ?
Does it connect then immediately disconnect ?

Only worry I see there is the IPV6 adress, I dont know what the compatibility is on that. in gpredict you might specify the IPV4 adress instead: 127.0.0.1

Hello
Here we go, I’m making progress! In the meantime, I’ve investigated a bit more.
I’m using the command rotctld -m 1 -t 4533 -vvvvvvvv with Gpredict, and it works fine.

However, I’d like to avoid using Hamlib if possible, as I can already get the virtual rotor’s position up to its destination.
I’d like to directly retrieve the AZ and EL positions from Gpredict and integrate them into my code in the IDE for the ESP8266, which will control my motor (link: Dispositif de EAU de moteur d'inclinaison panoramique extĂ©rieur, tĂ©lĂ©commande, rotation horizontale et verticale, camĂ©ras de vidĂ©osurveillance, budgĂ©taire, entrĂ©e AC 220V - AliExpress 30).

For now, I’m forced to use rotctld.
73’s

my ide code

#include <ESP8266WiFi.h> // Inclure la bibliothÚque Wi-Fi pour ESP8266 (nécessaire pour la connexion au réseau)

// Informations de connexion Wi-Fi
const char* ssid = “-------------”; // Nom de votre rĂ©seau Wi-Fi (remplacez par le SSID de votre rĂ©seau)
const char* password = “------------”; // Mot de passe de votre rĂ©seau Wi-Fi (remplacez par le mot de passe)

// Informations sur le serveur rotctld
const char* host = “192.168.1.176”; // L’adresse IP du serveur rotctld (ici, l’IP de votre PC qui exĂ©cute rotctld)
const int port = 4533; // Le port sur lequel rotctld écoute, par défaut 4533

WiFiClient client; // Créer une instance de client Wi-Fi (utilisé pour établir une connexion réseau)

void setup() {
// Initialiser la communication série pour afficher les informations sur le moniteur série
Serial.begin(115200); // Démarre la communication série à 115200 bauds (pour affichage sur le moniteur série)
delay(10); // Attendre 10 ms (petite pause pour s’assurer que tout est initialisĂ©)

// Connexion au réseau Wi-Fi
Serial.print("Connexion Ă  ");
Serial.println(ssid); // Affiche le nom du réseau Wi-Fi auquel nous essayons de nous connecter
WiFi.begin(ssid, password); // Démarre la connexion Wi-Fi avec le SSID et le mot de passe spécifiés

// Attendre que la connexion Wi-Fi soit Ă©tablie
while (WiFi.status() != WL_CONNECTED) { // Boucle tant que la connexion n’est pas rĂ©ussie
delay(500); // Attendre 500 ms entre chaque tentative
Serial.print(“.”); // Affiche un point pour indiquer que le programme tente toujours de se connecter
}

// Une fois connectĂ© au Wi-Fi, afficher l’adresse IP obtenue
Serial.println(“”); // Ligne vide pour amĂ©liorer la lisibilitĂ©
Serial.println(“Wi-Fi connectĂ©â€); // Affiche un message de confirmation
Serial.print("Adresse IP : ");
Serial.println(WiFi.localIP()); // Affiche l’adresse IP locale de l’ESP8266 (utilisĂ©e dans le rĂ©seau Wi-Fi)

// Connexion au serveur rotctld (via l’IP et le port)
Serial.print("Connexion Ă  ");
Serial.println(host); // Affiche l’adresse IP du serveur rotctld auquel l’ESP8266 essaie de se connecter
if (!client.connect(host, port)) { // Essaye de se connecter au serveur rotctld Ă  l’adresse IP et au port spĂ©cifiĂ©s
Serial.println(“Échec de la connexion”); // Si la connexion Ă©choue, affiche un message d’erreur
while (true); // Bloque le programme si la connexion Ă©choue (infinite loop)
}

// Si la connexion au serveur est réussie, afficher un message
Serial.println(“ConnectĂ© Ă  rotctld”); // Affiche un message pour indiquer que la connexion est rĂ©ussie
}

void loop() {
// Envoyer la commande pour obtenir la position AZ/EL depuis rotctld
client.print(“p”); // Envoie la commande “p” suivie d’un saut de ligne, qui demande la position du rotor

// Lire la réponse du serveur rotctld
if (client.available()) { // Si le serveur a envoyé une réponse
String response = client.readStringUntil(‘\n’); // Lire la rĂ©ponse envoyĂ©e par le serveur jusqu’à la nouvelle ligne (\n)
Serial.print("Position reçue AZ : "); // Affiche le message “Position reçue :”
Serial.println(response); // Affiche la réponse reçue (AZ/EL) dans le moniteur série
}

// Attendre 1 seconde avant de refaire une nouvelle requĂȘte pour obtenir la position
delay(5000); // Attendre 1000 ms (1 seconde) avant de refaire une nouvelle requĂȘte au serveur
}

Hi,
It sounds like you want to implement hamlib on the esp8266 then, so it can take the role of rigctld straight up.
In that case, I suggest implementing one of the simpler protocols like easycomm or gs232a/b. maybe this even exists already.

I had looked into it, but EasyComm allows controlling the motor by receiving manual commands or through software like Gpredict. However, in the library, there is no option to receive the AZ and EL coordinates of the targeted satellite. There must be a way to retrieve the data displayed on the software during its pass, right? I’d rather write my own code based on the requirements and the magnetic sensor I plan to add. Thank you so much for all the information. I’m looking into it
 If you have any ideas, I’m all ears!

I’m not sure what you’re aiming for here. Hamlib is for control, Gpredict/Orbitron etc is for pointing, to Hamlib for example. Gpredict spews out the pointing of the targeted sat live, not sure what more you’re asking for.
If you want something that does TLE straight to pointing on a micro, then it’s another ballgame.
I made a thing some time ago that does this for doppler, should be pretty easy to modify for az/el commands I believe.