für ein komplexeres Projekt muss ich die wechselnde Externe Adresse eines Miniservers abgreifen, da die Weiterleitung über https://User:PW@dns.loxonecloud.com/...o/Schalter/Ein nicht funktioniert.
Wenn ich die Werte der URL aus dem Browser nach dem aufrufen über https://dns.loxonecloud.com/MAC verwende (https://User:PW@<(IPMAC)>.dyndns.loxonecloud.com:PORT/jdev/sps/io/Schalter/Ein) geht es. Allerdings Ändern sich Port /IP Regelmäßig
Um Abhilfe zu Schaffen, habe ich versucht mittels PicoC einen Programcode zu entwickeln. Dieser Code sollte eigentlich nach einem Wechsel von 0 auf 1 am Eingang I1 die "Standard Adresse" (https://<(IPMAC)>dyndns.loxonecloud.com:PORT) liefern. Der Code Startet jedoch nicht.(Etxt bleibt in der LiveView bei Start)
int last_input_i1 = 0;
void main() {
// Aktuellen Zustand des Eingangs I1 abrufen
int current_input_i1 = GetInput("I1");
// Prüfen, ob ein Wechsel von 0 auf 1 stattgefunden hat
if (current_input_i1 == 1 && last_input_i1 == 0) {
// Seriennummer des Ziel-Miniservers
char serial_number[20];
strcpy(serial_number, "504FMAC");
// DNS-Server und Port
char host[50];
strcpy(host, "dns.loxonecloud.com");
int port = 80;
// HTTP-Request manuell aufbauen
char request[256] = "GET /";
strcat(request, serial_number);
strcat(request, " HTTP/1.1\r\nHost: ");
strcat(request, host);
strcat(request, "\r\nConnection: close\r\n\r\n");
// Puffer für die Antwort
char response[1024] = {0};
// Verbindung herstellen
int socket = TcpConnect(host, port);
if (socket < 0) {
Log("Fehler: Verbindung zu %s:%d fehlgeschlagen", host, port);
last_input_i1 = current_input_i1; // Zustand aktualisieren
return;
}
// Anfrage senden
if (TcpSend(socket, request, strlen(request)) < 0) {
Log("Fehler: Senden der Anfrage fehlgeschlagen");
TcpClose(socket);
last_input_i1 = current_input_i1; // Zustand aktualisieren
return;
}
// Antwort empfangen
int received = TcpReceive(socket, response, sizeof(response) - 1);
if (received <= 0) {
Log("Fehler: Keine Antwort vom Server erhalten");
TcpClose(socket);
last_input_i1 = current_input_i1; // Zustand aktualisieren
return;
}
response[received] = '\0'; // Null-terminierte Zeichenkette
// Verbindung schließen
TcpClose(socket);
// Antwort anzeigen
Log("Antwort vom Server: %s", response);
// Header von der Antwort trennen (suchen nach "\r\n\r\n")
char *body = strstr(response, "\r\n\r\n");
if (body != NULL) {
body += 4; // Überspringe die Header-Trennung
} else {
Log("Fehler: Ungültige Antwort erhalten");
last_input_i1 = current_input_i1; // Zustand aktualisieren
return;
}
// Überprüfen, ob der Body nicht leer ist
if (strlen(body) > 0) {
// RemoteConnect-URL auf Ausgang TXT1 ausgeben
SetOutput("TXT1", body);
Log("RemoteConnect-URL: %s", body); // Debug Log
} else {
Log("Fehler: Leerer Antwortbody");
}
}
// Letzten Zustand des Eingangs I1 speichern
last_input_i1 = current_input_i1;
}
Alternative Wege über Loxberry oder ähnliches gehen leider nicht, da ich nur einen MiniserverV2 zur Verfügung habe
Vielen Dank
mlutz
Kommentar