zusammengesetzte URL

Hallo Gemeinde,

bin anscheinend zu blöd zum suchen bzw. finde alles, nur nicht das was ich brauche.

Würde gerne bestimmte Messwerte per URL an thingspeak übergeben, da ich irgendwie Probleme mit der Nutzung der Thingspeak-library habe (nur 2 Messwerte werden übergeben, danach Stille).

Die URL müsste dann so aufgebaut sein:

https://api.thingspeak.com/update?api_key=APIKEY&field1=XXXXXXXX&field2=YYYYYYYY&field3=ZZZZZZZ

X, Y und Z sind die Messwerte. Wie bastele ich mir die URL passend zusammen und rufe diese dann auf? Müsste doch mit einem WebClient funktionieren, aber wie?

Danke für Eure Hilfe!

Michael

sprintf()

?

Hallo nochmal und Danke für die Antworten.

Mit einer Ein-Wort-Antwort kann ich als Newbie leider recht wenig anfangen, sorry.

Ich glaube der Weg von noiasca ist zielführend, aber ich stoße irgendwie ständig an ein Problem mit Thingspeak.

Mein aktuelles Zwischenziel ist es, eine so einfach wie möglich gestrickte http-Anfrage zur Übermittlung der Sensorwerte an Thingspeak zusammen zu bauen. Basis hierfür ist der Beispiel-sketch “WifiWebClientRepeating” aus der wifi101-library.

Zur Übertragung von exakt 2 Updates funktioniert der Sketch, dann wirft der Serielle Monitor aber folgendes aus:

Attempting to connect to SSID: WLAN-SSID
SSID: WLAN-SSID
IP Address: 192.168.178.51
signal strength (RSSI):-53 dBm
connecting...
25connecting...
26connection failed
connection failed
connection failed
connection failed
connection failed
connection failed

25 und 26 waren die von Thingspeak zurückgegebenen Werte (laufende Nummer im Channel). Was aber passiert ab dem 3. Durchlauf??? Warum nimmt Thingspeak keine Werte mehr an. Die Zeit zwischen den Updates habe ich schon auf 30 Sekunden hochgeschraubt.

Hier der gesamte Sketch, wie gesagt, im Wesentlichen ist es das Beispiel ergänzt um ein paar winzige Änderungen, damit Thingspeak angesprochen wird. Ach ja, Ich nutze das MKR1000-board.

#include <SPI.h>
#include <WiFi101.h>

#include "arduino_secrets.h" 
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = SECRET_SSID;        // your network SSID (name)
char pass[] = SECRET_PASS;    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

// Initialize the WiFi client library
WiFiClient client;

// server address:
char server[] = "api.thingspeak.com";
//IPAddress server(64,131,82,241);

unsigned long lastConnectionTime = 0;            // last time you connected to the server, in milliseconds
const unsigned long postingInterval = 30L * 1000L; // delay between updates, in milliseconds

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }

  // attempt to connect to WiFi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }
  // you're connected now, so print out the status:
  printWiFiStatus();
}

void loop() {
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }

  // if ten seconds have passed since your last connection,
  // then connect again and send data:
  if (millis() - lastConnectionTime > postingInterval) {
    httpRequest();
  }

}

// this method makes a HTTP connection to the server:
void httpRequest() {
  // close any connection before send a new request.
  // This will free the socket on the WiFi shield
  client.stop();

  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    // send the HTTP PUT request:
    client.println("GET /update?api_key=***API-WRITEKEY***&field1=1&field2=2&field3=3");
    client.println("Host: api.thingspeak.com");
    client.println("User-Agent: ArduinoWiFi/1.1");
    client.println("Connection: close");
    client.println();

    // note the time that the connection was made:
    lastConnectionTime = millis();
  }
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
  }
}


void printWiFiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

Ich danke Euch für Eure aussagekräftigen Antworten.

Michael

Mit einer Ein-Wort-Antwort kann ich als Newbie leider recht wenig anfangen, sorry.

Du könntest das Wort in Google rein hacken und dich kundig machen.

Die Alternative, dass ich dir das Internet vorlese besteht nicht! Denn, ich nenne mich nicht ohne Grund "DokuVorLeseVerweigerer"

:smiling_imp: :smiling_imp: :smiling_imp:

Ah, ein ganz Schlauer unter den Wissenden…

Ich freue mich sehr über ernst gemeinte Unterstützung.

Immer schön, wenn ich helfen konnte!

Deiner PM entnehme ich, dass dir meine Antworten nicht schmecken.

Leitsatz:

Ich bin verantwortlich, für das was ich sage! Nicht für das, was du daraus machst.

Vielleicht versucht mal http://bfy.tw/3527 und kommst dann zurück um Fragen über Punkte zu stellen, die Du nicht verstehst, anstatt Leute anzupfeifen.

@Combie: Wieviele Leitsätze hast Du eigentlich? Schreibst Du immer die Weisheiten in den Glückskeksen? Habe mich schon immer gefragt wer sich den ganzen Blödsinn wohl ausdenkt - Danke für die Erhellung!

@ElCaron: Schon erledigt - hilft aber auch nicht weiter

Jungs, es ist nicht schlimm wenn Ihr nichts Sinnvolles zur Lösung eines Problems beitragen könnt (ich merke hier an, keiner von Euch ist mal auf #3 dieses Threads eingegangen - sprintf() ist schon lange kein Thema mehr, es haben ja 2 Updates nach Thingspeak funktioniert), aber dann haltet Euch doch einfach zurück.

Weitere Reaktionen meinerseits zu Euren Posts werden nicht folgen.

Alle anderen Forum-Teilnehmer bitte ich sich nicht abschrecken zu lassen, ich bin weiterhin an lösungsorientierten Antworten interessiert.

Danke

3 deutet am Anfang nicht darauf hin, dass Du Dich sinnvoll mit #1 und #2 beschäftigtb hast. Da vergeht die Lust, sich durch fremden Code zu wühlen.

PS: Kontrolliere, ob Dein Wifi noch verbunden ist,bevor Du Dich zu verbinden versuchst.

Luessem: @Combie: Wieviele Leitsätze hast Du eigentlich? Schreibst Du immer die Weisheiten in den Glückskeksen? Habe mich schon immer gefragt wer sich den ganzen Blödsinn wohl ausdenkt - Danke für die Erhellung!

Das steht aktuell unter Seinem Nick - bei Dir steht Da 'Newbe'

@ElCaron: Schon erledigt - hilft aber auch nicht weiter

Uff - ich kann icht Mal zehn Finger schreiben, Du aber wohl zehn Augen lesen - Respekt!!

Jungs, es ist nicht schlimm wenn Ihr nichts Sinnvolles zur Lösung eines Problems beitragen könnt (ich merke hier an, keiner von Euch ist mal auf #3 dieses Threads eingegangen - sprintf() ist schon lange kein Thema mehr, es haben ja 2 Updates nach Thingspeak funktioniert), aber dann haltet Euch doch einfach zurück.

Es macht auch nicht sonderlich Lust, Dir zu helfen - wasch mich, aber mach mich nicht nass.

Weitere Reaktionen meinerseits zu Euren Posts werden nicht folgen.

Na wenigstens eine Gemeinsamkeit :) Ändere Dich und wir können vll. zwar keine Freunde werden, aber vll. auf einander reagieren.

Alle anderen Forum-Teilnehmer bitte ich sich nicht abschrecken zu lassen, ich bin weiterhin an lösungsorientierten Antworten interessiert.

Bisher wurde schon versucht, Dir eine Lösung schmackhaft zu machen - wenn Das nicht 'lösungsorientiert' ist, was dann??

Danke

Bitte bitte, keine Ursache :)

MfG

Das steht aktuell unter Seinem Nick - bei Dir steht Da 'Newbe'

Nein, tut es nicht, da steht Newbie

Uff - ich kann icht Mal zehn Finger schreiben, Du aber wohl zehn Augen lesen - Respekt!!

Wenn Du mit zwei Augen lesen würdest, würde das schon reichen. Eine Google-Suche nach sprintf() wird mir nicht helfen, wenn das Problem ein ganz anderes ist. Hierzu muss ich gar nicht wissen, welche Ergebnisse bei der Suche herauskommen. Auch Dir gebe ich gerne erneut den Hinweis, dass 2 Updates nach Thingspeak erfolgreich waren.

Es macht auch nicht sonderlich Lust, Dir zu helfen - wasch mich, aber mach mich nicht nass.

Dann lass es halt, aber auch Dein Post trägt nicht zur Behebung des Problems bei. Übrigens ist bislang die einzige Kritik die ich an Euren Post hier angebracht habe die, dass diese nicht auf die Problemstellung eingehen. Wer ernsthaft meint hiermit bislang auch nur einen einzigen hilfreichen Beitrag geleistet zu haben, der irrt. Es darf mich jeder gerne "nass machen", wenn ich danach auch "sauber bin" - das Problem also gelöst ist oder zumindest konstruktiv an einer Lösung gearbeitet wurde. Das was ihr macht ist nur wildes rumgepose ohne echten Inhalt.

OK, ich stelle fest:

  1. Hilfesuchende müssen immer schön kuschen und dankbar sein, dann ist die Welt in Ordnung
  2. Sachliche Kritik an Antworten, mit denen man nichts anfangen kann, ist gänzlich unerwünscht.

Ich werde hier wohl nicht fündig werden, glücklicherweise gibt es eine Menge anderer Foren

Leitsatz:

Schreie nach Besserem, bis du es auch erhältst.
Das noch Bessere verabschiedet sich rechtzeitig vor deinem Lärm.

Quelle: Martin Gerhard Reisenberg

Was - außer den beiden vorgeschlagenen Wegen - erwartest du denn zu finden?

Soll dir jemand deinen Kode schreiben?

Soll er dir häppchenweise eingelöffelt werden?

Für beides wird sich - speziell bei deinem Auftreten - wohl kaum jemand finden.

Viel Erfog bei deinem Projekt.

Nein, tut es nicht, da steht Newbie

-->Du verstehst es wirklich, Dich unbeliebt zu machen...

Eine Antwort wurde bereits gegeben, auf die Du noch nicht eingegangen bist:

Kontrolliere, ob Dein Wifi noch verbunden ist,bevor Du Dich zu verbinden versuchst.

Eine reconnect()-Routine wäre ebenso hilfreich. Kannst ja auch mal versuchen, das Board von einem Computer im Netzwerk aus anzupingen...