Lichtsensor -> Status auf Twitter

Moin Moin!

Hab nen kleines Problem!

Und zwar habe ich diesen Code, der auch wunderbar funktioniert:

/* Post a simple message to Twitter  */
#if defined(ARDUINO) && ARDUINO > 18
#include <SPI.h>
#endif
#include <Ethernet.h>
#include <EthernetDNS.h>
#include <Twitter.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 22 };
byte gateway[] = { 192, 168, 2, 1 };
byte subnet[] = { 255, 255, 255, 0 };

Twitter twitter("TOKEN");
char msg[] = "Ich bin ein kleiner Mikrocontroller der verschiedene Zustände twittern kann, mein Programmierer brachte mich am 15.04 um 20:15 zum twittern";

void setup()
{
  Ethernet.begin(mac, ip, gateway, subnet);
  Serial.begin(9600);

  delay(1000);

  Serial.println("connecting ...");
  if (twitter.post(msg)) {
    int status = twitter.wait(&Serial);
    if (status == 200) {
      Serial.println("OK.");
    } else {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  } else {
    Serial.println("connection failed.");
  }
}

void loop()
{
}

Ich wollte mal einen "Lichtstatus" twittern und habe das Programm so umgeschrieben

/* Post a simple message to Twitter  */
#if defined(ARDUINO) && ARDUINO > 18
#include <SPI.h>
#endif
#include <Ethernet.h>
#include <EthernetDNS.h>
#include <Twitter.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 22 };
byte gateway[] = { 192, 168, 2, 1 };
byte subnet[] = { 255, 255, 255, 0 };



void setup()
{
  Ethernet.begin(mac, ip, gateway, subnet);
  Serial.begin(9600);

  delay(1000);
}
int licht = 1;
int old_licht = 1;
int val;

void loop()
{
  Serial.println();
  Serial.println("start");
  delay(10000);
  val = analogRead(0);
  if (val > 800) { licht = 1; }
  
  if (val < 800) { licht = 0; }
  if (old_licht != licht) {
    old_licht = licht;
    if (licht == 1) {
      Serial.println();
      Serial.println("hell.");
      Twitter twitter("TOKEN");
      char msg[] = "Es ist hell!";
      
    }
    else {
      Serial.println();
      Serial.println("dunkel.");
      Twitter twitter("TOKEN");
      char msg[] = "Es ist dunkel!";
      
      
    }
  }
  
}

Ich bekomme auch Super den Lichtstatus (Nur nach Änderung) im Serial Monitor dargestellt, nur leider macht er keinen Tweet!

Sieht da einer den Fehler? :frowning:

Danke schonmal! MfG equi!

Fehler, nein .. !

Aber wo sind denn die client Anweisungen, die die Sachen ins Netz schicken ?

Computer sind unerbittlich, die machen das was man denen sagt. Und wenn da nur serial.print steht, dann lässt er die Bytes von der Ethernet Schnittstelle.

Ich habe nirgends gelesen ob es auch das dazugehörige Ethernetshield gibt ?!

Aaalso, Danke erstmal für die Antwort :slight_smile:

Das Ethernet-Shield steckt natürlich drauf, der obere Code funkioniert auch einwandfrei!

Im oberen Code sendet er doch mit diesem Befehl an Twitter oder?:

Twitter twitter("TOKEN");
char msg[] = "Ich bin ein kleiner Mikrocontroller der verschiedene Zustände twittern kann, mein Programmierer brachte mich am 15.04 um 20:15 zum twittern";

MfG equi

Er belegt ein Array mit diesem Wortlaut. Wenn das Ding nirgends im Zusammenghang mit den Befehlen aus der Ethernet Libray verwandt wird, speichert er es solange das Silizium mit Strom versorgt wird g

Die Libray unterscheidet zwischen Server udn client Befehlen, einfach mal Beispiele dazu ansehen. Das ist denkbar einfach.

Der eigentliche tweet kommt hier
twitter.post(msg)
der rest in der if zeigt nur obs geklappt hat.
das hast du aber in deinem code nicht drinne.
Versuche nach deinem msg es ist hell
diesen if bereich rein zu bringen
heißt er twittert die nachricht msg und macht ein Serial.print mit dem hinweiß obs geklappt hat

so denke ich
gruß
Thorsten

Du meinst diesen block hier, richtig?

 if (twitter.post(msg)) {
    int status = twitter.wait(&Serial);
    if (status == 200) {
      Serial.println("OK.");
    } else {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  } else {
    Serial.println("connection failed.");

Da steht doch nur

Wenn twitter die nachricht bekommen hat, dann soll er auf serial ok schreiben, sonst failed mit dem fehlercode!

Ich weiß nicht, wie ich das mit dem twitter.post(msg) nach meinem text einfügen soll, das macht für mich keinen sinn.

So, es war dann wohl doch so wie du sagtest!

Dieser Code funktioniert nun:

/* Post a simple message to Twitter  */
#if defined(ARDUINO) && ARDUINO > 18
#include <SPI.h>
#endif
#include <Ethernet.h>
#include <EthernetDNS.h>
#include <Twitter.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 22 };
byte gateway[] = { 192, 168, 2, 1 };
byte subnet[] = { 255, 255, 255, 0 };

//Twitter twitter("token");

void setup()
{
  Ethernet.begin(mac, ip, gateway, subnet);
  Serial.begin(9600);

  delay(1000);
}
int licht = 1;
int old_licht = 1;
int val;

void loop()
{
  Serial.println();
  Serial.println("start");
  delay(60000);
  val = analogRead(0);
  if (val > 400) { licht = 1; }
  
  if (val < 200) { licht = 0; }
  if (old_licht != licht) {
    old_licht = licht;
    if (licht == 1) {
      Twitter twitter("token");
      char msg[] = "Licht ist an!";
      Serial.println();
      Serial.println("hell.");
      twitter.post(msg);
      
    }
    else {
      Twitter twitter("token");
      char msg[] = "Licht ist aus!";
      Serial.println();
      Serial.println("dunkel.");
      twitter.post(msg);
      
      
    }
  }
  
}

Leider geht das ganze nur 1x, also es wird 1x hell und 1x dunkel getwittert, aber Seriell geht immer! Kann es sein, das Twitter es nicht erlaubt, 2x das gleiche in einem bestimmten Zeitfenster zu posten?

Twitter.post ist eine funktion die die nachricht an twitter schickt und eine antwort zurück gibt.
deshalb kann man die funktion auch direkt in der if auswerten.

Und soweit ich weiß verhindert die Twitter-API das posten von gleichen tweets nacheinander.
Versuch mal testweise einen Zeitstempel oder ne zufallszahl oder so mit rein zu bringen.

Gruß
Thorsten

Dankesehr!

Da ich leider noch nicht so wirklich ahnung davon habe, wüsste ich nicht wie ich das anstellen soll! Das war ja bisher eher ein zusammenstellen von codeschnipseln... Kriegt man das irgendwie hin, das er immer beim twittern die aktuelle Uhrzeit mit"tweedet" ?

MfG

Aus dem Kopf weiß ich jetzt nicht wie man eine Zeit rein bekommt ohne die Time-Library.
Aber du könntest es mit nernzufallszahl erstmal testen.
long randNumber = random(1000, 9999);

Einfach mal Probieren.

wo soll ich denn

long randNumber = random(1000, 9999);

rein schreiben? ins void setup?

und wie binde ich das in meinen tweet ein?!

mfg equi!

so in etwa
if (licht == 1) {
Twitter twitter("token");
char msg[] = "Licht ist an!";
Serial.println();
Serial.println("hell.");
long randNumber = random(1000, 9999);
*
twitter.post(msg);

  • ich weiß nicht wie man die nummer an den text hängt.
    das muß mal jemand anderes sagen oder du probierst mal rum.

Sonst bin ich mit meinem kleinen Wissen am ende!