DynDNS Verbindung zu einer Fritz!Box 7490

In diesem Tutorial möchte ich einen Fernzugriff auf einen Apache Server einrichten der sich in meinem Heimnetzwerk befindet.

Da sich die IP meines Routers (Fritz!Box) immer wieder ändert, benötigt man einen Dienst der bei einer Anfrage aus dem www auf die aktuelle IP des Routers weiterleitet.

Im Prinzip gibt meine Fritz!Box jede Änderung der Provider IP an diesen Dienst weiter. Dieser stellt eine www Adresse zur Verfügung die nun immer auf die aktuelle Router IP weiterleitet. 

Aktuell verwende ich für diesen Dienst den kostenlosen Service von www.noip.com.

www.noip.com

Einfach auf Sign Up klicken und einen kostenlosen Account anlegen. Das dauert nicht länger als 3 Minuten.


Gib nun im Eingabefeld deine E Mail Adresse und ein Passwort ein. Bei Hostname kannst du dir eine Domain überlegen, von der in Zukunft der Dienst auf deinen Router weiterleiten soll.

Nun kommt die Fritzbox an die Reihe. 

Stelle als erstes die erweiterte Ansicht der Fritzbox an. Bei meinem Modell der 7490 findet man diese Funktion rechts oben bei den drei (Blinden- ) Punkten.


Geh nun in den Bereich Internet / Freigaben.


Nun müssen wir ein Gerät im Netzwerk aussuchen das in Zukunft „Ferngewartet“ werden soll. Klicke dafür auf „Gerät für Freigabe hinzufügen


Nun das entsprechende Netzwerkgerät auswählen.


Nun fehlt nur noch die Portfreigabe.Klick dazu auf „Neue Freigabe„.


In meinem Fall benötige ich nur die Portfreigabe für HTTP. Hier musst du die Freigaben an dein Projekt anpassen.




Nachdem nun alle Eingaben abgespeichert sind ist das entsprechende Netzwerkgerät uber das www zu erreichen.

Ein Arduino sendet PUSH Nachrichten

Wenn man einem Arduino ein Ethernet Shield spendiert ist dieser im Netzwerk ansprechbar. Aber außer ein par Sensoren zu betreiben und LEDs an und aus zu schalten kann er auch PUSH Meldungen senden.



Als erstes benötigt man einen Account bei einem PUSH Dienst. In meinem Beispiel verwende ich den Dienst pushingbox.com.

Weil es den Rahmen hier sprengen würde die vielen Möglichkeiten des Dienstes zu erklären hier ein kleines Video für den „Erstkontakt“.

Nun kann man im Bereich API sich den Sketch für einen Arduino ansehen.

https://www.pushingbox.com/api.php

Hier nun mal der Sketch von pushingbox.com (Stand 2018)

////
//
// General code from http://www.pushingbox.com for Arduino + Ethernet Shield (official) v1.2
//
////

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

  /////////////////
 // MODIFY HERE //
/////////////////
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x19 };   // Be sure this address is unique in your network

//Your secret DevID from PushingBox.com. You can use multiple DevID  on multiple Pin if you want
char DEVID1[] = "Your_DevID_Here";        //Scenario : "The mailbox is open"

//Numeric Pin where you connect your switch
uint8_t pinDevid1 = 3; // Example : the mailbox switch is connect to the Pin 3

// Debug mode
boolean DEBUG = true;
  //////////////
 //   End    //
//////////////


char serverName[] = "api.pushingbox.com";
boolean pinDevid1State = false;                // Save the last state of the Pin for DEVID1
boolean lastConnected = false;                 // State of the connection last time through the main loop


// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
  Serial.begin(9600);
  pinMode(pinDevid1, INPUT);
  
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    while(true);
  }
  else{
    Serial.println("Ethernet ready");
    // print the Ethernet board/shield's IP address:
    Serial.print("My IP address: ");
    Serial.println(Ethernet.localIP());
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
}

void loop()
{
      ////
      // Listening for the pinDevid1 state
      ////
      if (digitalRead(pinDevid1) == HIGH && pinDevid1State == false) // switch on pinDevid1 is ON 
      {
        if(DEBUG){Serial.println("pinDevid1 is HIGH");}
        pinDevid1State = true;
        //Sending request to PushingBox when the pin is HIGH
        sendToPushingBox(DEVID1);
      }
       if (digitalRead(pinDevid1) == LOW && pinDevid1State == true) // switch on pinDevid1 is OFF
      {
        if(DEBUG){Serial.println("pinDevid1 is LOW");}
        pinDevid1State = false;
        //Sending request to PushingBox when the pin is LOW
        //sendToPushingBox(DEVID1);    //Here you can run an other scenario by creating a DEVID2 variable
      }
      
      
      //DEBUG part
      // this write the respons from PushingBox Server.
      // You should see a "200 OK"
      if (client.available()) {
        char c = client.read();
        if(DEBUG){Serial.print(c);}
      }
      
      // if there's no net connection, but there was one last time
      // through the loop, then stop the client:
      if (!client.connected() && lastConnected) {
        if(DEBUG){Serial.println();}
        if(DEBUG){Serial.println("disconnecting.");}
        client.stop();
      }
      lastConnected = client.connected();
}


//Function for sending the request to PushingBox
void sendToPushingBox(char devid[]){
  client.stop();
  if(DEBUG){Serial.println("connecting...");}

  if (client.connect(serverName, 80)) {
    if(DEBUG){Serial.println("connected");}

    if(DEBUG){Serial.println("sendind request");}
    client.print("GET /pushingbox?devid=");
    client.print(devid);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(serverName);
    client.println("User-Agent: Arduino");
    client.println();
  } 
  else {
    if(DEBUG){Serial.println("connection failed");}
  }
}

So, nun nur noch deine „Your_DevID_Here“ ändern. Diese kannst du unter „My Service“ neu anlegen.

In meinem Beispiel twittert nun der Arduino bei einem Ereigniss am PIN3.
Natürlich kann man auch einen entsprechenden Dienst aussuchen um eine PUSH Nachricht auf dein Handy zu bekommen.

So einfach ….