Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Temperaturwert per GSM an Webseite senden?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Temperaturwert per GSM an Webseite senden?

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      Beowolf last edited by

      Hallo zusammen,

      ich suche eine kleine Lösung um Temperatur und Luftdruck per Mobilfunk an eine Webseite zu senden. Es reicht vollkommen aus, wenn nur die Werte gesendet werden.

      Hat jemand soetwas schon mal gebaut?

      Grüße
      Manfred

      Feuersturm 1 Reply Last reply Reply Quote 0
      • Feuersturm
        Feuersturm @Beowolf last edited by Feuersturm

        @beowolf Eine Möglichkeit ist, dass du bei deinem Anbieter, wo die Webseite gehostet ist auch eine Datenbank (z.B. mysql) einrichtest. Deine gewünschten Werte schreibst du mittels mysql Adapter in die Datenbank und die Homepage holt sich den Wert aus der Datenbank und zeigt ihn an.

        Ansonsten wäre ein paar mehr Details hilfreich welche Infrastruktur zur Verfügung steht.

        1 Reply Last reply Reply Quote 0
        • B
          Beowolf last edited by

          Mir geht es nicht darum wie ich die Werte verarbeite. Mir geht es darum wie ich die Werte dort hin bekomme.

          Ich meine so etwas z.B.:

          https://www.exp-tech.de/module/wireless/gsmgprs/5809/adafruit-fona-mini-cellular-gsm-breakout-sma-version?c=1061

          Es gibt ja noch andere Module. Ich habe nur keine Ahnung wie ich die gemessene Temperatur zu dem Modul bekomme und sie dann versende.

          1 Reply Last reply Reply Quote 0
          • Feuersturm
            Feuersturm last edited by

            @beowolf Ich hab gerade mal etwas gesucht und bin auf dieses Projekt gestoßen https://randomnerdtutorials.com/esp32-sim800l-publish-data-to-cloud/
            Das klingt nachdem was du suchst. Das ganze läuft dann unabhängig von ioBroker.

            Den Temperatur / Luftfeuchtesensor schließt du direkt am Mikrocontroller an und die Daten werden dort verarbeitet und dann zum "Cloud Server" übertragen.

            333c8a83-066c-4ac9-b379-66a302f13ac7-grafik.png
            Quelle: https://randomnerdtutorials.com/esp32-sim800l-publish-data-to-cloud/

            B 1 Reply Last reply Reply Quote 0
            • B
              Beowolf @Feuersturm last edited by

              @feuersturm

              Hey, vielen Dank.

              Ich hatte jetzt schon ein paar Videos über das Sim900A GSM Modul mir angeschaut. Dort ging es aber immer um den SMS Versand.

              Das was Du gefunden hast, ist glaube ich schon das was ich suche.

              Ich liebe dieses Forum. 👍 👍 👍 👍 😳 😳 😳

              Feuersturm 1 Reply Last reply Reply Quote 0
              • Feuersturm
                Feuersturm @Beowolf last edited by

                @beowolf Dann viel Erfolg mit dem Projekt 😀

                B 1 Reply Last reply Reply Quote 0
                • B
                  Beowolf @Feuersturm last edited by

                  @feuersturm

                  So, alles funktioniert so wie es soll.

                  Jetzt habe ich aber noch ein Frage. Das Modul schreibt ja die Werte in eine Datenbank auf meiner Webseite. Wie bekomme ich die Daten von da nach ioBroker?
                  Ich habe schon den SQL-Adapter ausprobiert.

                  https://www.iobroker.net/docu/index-254.htm?page_id=3772&lang=de

                  Dort bekomme ich aber immer ein Timeout wenn ich auf die Datenbank der Webseite zugreifen möchte.

                  Grüße
                  Manfred

                  Homoran Feuersturm 2 Replies Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @Beowolf last edited by

                    @beowolf sagte in Temperaturwert per GSM an Webseite senden?:

                    ch habe schon den SQL-Adapter ausprobiert.

                    Ganz abgesehen davon, dass du da eine uralte Doku hast, die schon seit Jahren vom Netz genommen wurde, ist der SQL-Adapter nur für Daten, die über ioBroker gesammelt wurden zu gebrauchen.

                    Du musst also deine Daten zuerst irgendwie in ioBroker bekommen und dann in Datenpunkte speichern
                    Diese kannst du anschließend historisieren

                    1 Reply Last reply Reply Quote 0
                    • Feuersturm
                      Feuersturm @Beowolf last edited by

                      @beowolf du könntest mal auf die Suche gehen, wie du über ein Javascript Skript auf die MySQL Datenbank zugreifen kannst, um dort die Werte auszulesen und um sie danach in iobroker weiter zu verarbeiten. Eine erste Suche findet z.b. das https://forum.iobroker.net/topic/4014/zugriff-auf-eigene-mysql-datenbank

                      Homoran B 2 Replies Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @Feuersturm last edited by

                        @feuersturm ich hatte @Beowolf so verstanden, dass er in die ioBroker SQL-Datenbank schreiben will

                        Feuersturm B 2 Replies Last reply Reply Quote 0
                        • Feuersturm
                          Feuersturm @Homoran last edited by

                          @homoran @Beowolf Für weitere Ratschläge bräuchte man ein paar mehr Details welche Daten von wo nach wo gehen und wo sie weiter verarbeitet werden sollen.

                          1 Reply Last reply Reply Quote 1
                          • B
                            Beowolf @Homoran last edited by

                            @homoran sagte in Temperaturwert per GSM an Webseite senden?:

                            @feuersturm ich hatte @Beowolf so verstanden, dass er in die ioBroker SQL-Datenbank schreiben will

                            Nein, das ist wohl falsch rüber gekommen.

                            Also: Der Temperatursensor sendet seine Daten zu dieser Webseite in eine mysql Datenbank

                            https://www.glanemanns.de/public_html/esp-chart.php

                            mit diesem Arduino Programm.

                            /*
                              Rui Santos
                              Complete project details at https://RandomNerdTutorials.com/esp32-sim800l-publish-data-to-cloud/
                              
                              Permission is hereby granted, free of charge, to any person obtaining a copy
                              of this software and associated documentation files.
                              
                              The above copyright notice and this permission notice shall be included in all
                              copies or substantial portions of the Software.
                            */
                            
                            // Your GPRS credentials (leave empty, if not needed)
                            const char apn[]      = ""; // APN (example: internet.vodafone.pt) use https://wiki.apnchanger.org
                            const char gprsUser[] = ""; // GPRS User
                            const char gprsPass[] = ""; // GPRS Password
                            
                            // SIM card PIN (leave empty, if not defined)
                            const char simPIN[]   = ""; 
                            
                            // Server details
                            // The server variable can be just a domain name or it can have a subdomain. It depends on the service you are using
                            const char server[] = "example.com"; // domain name: example.com, maker.ifttt.com, etc
                            const char resource[] = "/post-data.php";         // resource path, for example: /post-data.php
                            const int  port = 80;                             // server port number
                            
                            // Keep this API Key value to be compatible with the PHP code provided in the project page. 
                            // If you change the apiKeyValue value, the PHP file /post-data.php also needs to have the same key 
                            String apiKeyValue = "tPmAT5Ab3j7F9";
                            
                            // TTGO T-Call pins
                            #define MODEM_RST            5
                            #define MODEM_PWKEY          4
                            #define MODEM_POWER_ON       23
                            #define MODEM_TX             27
                            #define MODEM_RX             26
                            #define I2C_SDA              21
                            #define I2C_SCL              22
                            // BME280 pins
                            #define I2C_SDA_2            18
                            #define I2C_SCL_2            19
                            
                            // Set serial for debug console (to Serial Monitor, default speed 115200)
                            #define SerialMon Serial
                            // Set serial for AT commands (to SIM800 module)
                            #define SerialAT Serial1
                            
                            // Configure TinyGSM library
                            #define TINY_GSM_MODEM_SIM800      // Modem is SIM800
                            #define TINY_GSM_RX_BUFFER   1024  // Set RX buffer to 1Kb
                            
                            // Define the serial console for debug prints, if needed
                            //#define DUMP_AT_COMMANDS
                            
                            #include <Wire.h>
                            #include <TinyGsmClient.h>
                            
                            #ifdef DUMP_AT_COMMANDS
                              #include <StreamDebugger.h>
                              StreamDebugger debugger(SerialAT, SerialMon);
                              TinyGsm modem(debugger);
                            #else
                              TinyGsm modem(SerialAT);
                            #endif
                            
                            #include <Adafruit_Sensor.h>
                            #include <Adafruit_BME280.h>
                            
                            // I2C for SIM800 (to keep it running when powered from battery)
                            TwoWire I2CPower = TwoWire(0);
                            
                            // I2C for BME280 sensor
                            TwoWire I2CBME = TwoWire(1);
                            Adafruit_BME280 bme; 
                            
                            // TinyGSM Client for Internet connection
                            TinyGsmClient client(modem);
                            
                            #define uS_TO_S_FACTOR 1000000UL   /* Conversion factor for micro seconds to seconds */
                            #define TIME_TO_SLEEP  3600        /* Time ESP32 will go to sleep (in seconds) 3600 seconds = 1 hour */
                            
                            #define IP5306_ADDR          0x75
                            #define IP5306_REG_SYS_CTL0  0x00
                            
                            bool setPowerBoostKeepOn(int en){
                              I2CPower.beginTransmission(IP5306_ADDR);
                              I2CPower.write(IP5306_REG_SYS_CTL0);
                              if (en) {
                                I2CPower.write(0x37); // Set bit1: 1 enable 0 disable boost keep on
                              } else {
                                I2CPower.write(0x35); // 0x37 is default reg value
                              }
                              return I2CPower.endTransmission() == 0;
                            }
                            
                            void setup() {
                              // Set serial monitor debugging window baud rate to 115200
                              SerialMon.begin(115200);
                            
                              // Start I2C communication
                              I2CPower.begin(I2C_SDA, I2C_SCL, 400000);
                              I2CBME.begin(I2C_SDA_2, I2C_SCL_2, 400000);
                            
                              // Keep power when running from battery
                              bool isOk = setPowerBoostKeepOn(1);
                              SerialMon.println(String("IP5306 KeepOn ") + (isOk ? "OK" : "FAIL"));
                            
                              // Set modem reset, enable, power pins
                              pinMode(MODEM_PWKEY, OUTPUT);
                              pinMode(MODEM_RST, OUTPUT);
                              pinMode(MODEM_POWER_ON, OUTPUT);
                              digitalWrite(MODEM_PWKEY, LOW);
                              digitalWrite(MODEM_RST, HIGH);
                              digitalWrite(MODEM_POWER_ON, HIGH);
                            
                              // Set GSM module baud rate and UART pins
                              SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
                              delay(3000);
                            
                              // Restart SIM800 module, it takes quite some time
                              // To skip it, call init() instead of restart()
                              SerialMon.println("Initializing modem...");
                              modem.restart();
                              // use modem.init() if you don't need the complete restart
                            
                              // Unlock your SIM card with a PIN if needed
                              if (strlen(simPIN) && modem.getSimStatus() != 3 ) {
                                modem.simUnlock(simPIN);
                              }
                              
                              // You might need to change the BME280 I2C address, in our case it's 0x76
                              if (!bme.begin(0x76, &I2CBME)) {
                                Serial.println("Could not find a valid BME280 sensor, check wiring!");
                                while (1);
                              }
                            
                              // Configure the wake up source as timer wake up  
                              esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
                            }
                            
                            void loop() {
                              SerialMon.print("Connecting to APN: ");
                              SerialMon.print(apn);
                              if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
                                SerialMon.println(" fail");
                              }
                              else {
                                SerialMon.println(" OK");
                                
                                SerialMon.print("Connecting to ");
                                SerialMon.print(server);
                                if (!client.connect(server, port)) {
                                  SerialMon.println(" fail");
                                }
                                else {
                                  SerialMon.println(" OK");
                                
                                  // Making an HTTP POST request
                                  SerialMon.println("Performing HTTP POST request...");
                                  // Prepare your HTTP POST request data (Temperature in Celsius degrees)
                                  String httpRequestData = "api_key=" + apiKeyValue + "&value1=" + String(bme.readTemperature())
                                                         + "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + "";
                                  // Prepare your HTTP POST request data (Temperature in Fahrenheit degrees)
                                  //String httpRequestData = "api_key=" + apiKeyValue + "&value1=" + String(1.8 * bme.readTemperature() + 32)
                                  //                       + "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + "";
                                      
                                  // You can comment the httpRequestData variable above
                                  // then, use the httpRequestData variable below (for testing purposes without the BME280 sensor)
                                  //String httpRequestData = "api_key=tPmAT5Ab3j7F9&value1=24.75&value2=49.54&value3=1005.14";
                                
                                  client.print(String("POST ") + resource + " HTTP/1.1\r\n");
                                  client.print(String("Host: ") + server + "\r\n");
                                  client.println("Connection: close");
                                  client.println("Content-Type: application/x-www-form-urlencoded");
                                  client.print("Content-Length: ");
                                  client.println(httpRequestData.length());
                                  client.println();
                                  client.println(httpRequestData);
                            
                                  unsigned long timeout = millis();
                                  while (client.connected() && millis() - timeout < 10000L) {
                                    // Print available data (HTTP response from server)
                                    while (client.available()) {
                                      char c = client.read();
                                      SerialMon.print(c);
                                      timeout = millis();
                                    }
                                  }
                                  SerialMon.println();
                                
                                  // Close client and disconnect
                                  client.stop();
                                  SerialMon.println(F("Server disconnected"));
                                  modem.gprsDisconnect();
                                  SerialMon.println(F("GPRS disconnected"));
                                }
                              }
                              // Put ESP32 into deep sleep mode (with timer wake up)
                              esp_deep_sleep_start();
                            }
                            
                            

                            das ich von dieser Webseite

                            https://randomnerdtutorials.com/esp32-sim800l-publish-data-to-cloud/

                            habe. Dort wird eigentlich alles erklärt (ist nicht ganz so wichtig).

                            Jetzt möchte ich die Daten eben von der Webseite auch in ioBroker haben bzw. ioBroker soll die Daten von dort abholen und dann als Datenpunkt für die weitere Verarbeitung darstellen.

                            Ist das so verständlich erklärt? 😊

                            Grüße
                            Manfred

                            1 Reply Last reply Reply Quote 0
                            • B
                              Beowolf @Feuersturm last edited by

                              @feuersturm

                              Bin gerade dabei mir das Skript anzuschauen.

                              Danbke für die Hilfe

                              B 1 Reply Last reply Reply Quote 0
                              • B
                                bommel_030 @Beowolf last edited by

                                @beowolf
                                Wenn ich dich richtig verstehe willst du die Daten aus der Webseite im iobroker?
                                Klingt nach Parser und dann Webseite auslesen.
                                Oder du kannst dein Ardunio Programm so umbauen, dass es zusätzlich über die simple API direkt in den iobroker schreibt.

                                B 1 Reply Last reply Reply Quote 0
                                • B
                                  Beowolf @bommel_030 last edited by Beowolf

                                  @bommel_030 sagte in Temperaturwert per GSM an Webseite senden?:

                                  @beowolf
                                  Wenn ich dich richtig verstehe willst du die Daten aus der Webseite im iobroker?
                                  Klingt nach Parser und dann Webseite auslesen.
                                  Oder du kannst dein Ardunio Programm so umbauen, dass es zusätzlich über die simple API direkt in den iobroker schreibt.

                                  Direkt nach ioBroker wäre natürlich der beste Weg.

                                  Aber

                                  Man kann das bestimmt - Ich leider nicht. Ich will ja auch nicht die ioBroker Datenbank zerschießen.

                                  Ach ja. Auf der Empfänger Webseite ist dieses Skript.

                                  <?php
                                  /*
                                    Rui Santos
                                    Complete project details at https://RandomNerdTutorials.com
                                    
                                    Permission is hereby granted, free of charge, to any person obtaining a copy
                                    of this software and associated documentation files.
                                    
                                    The above copyright notice and this permission notice shall be included in all
                                    copies or substantial portions of the Software.
                                  */
                                  
                                  $servername = "localhost";
                                  
                                  // REPLACE with your Database name
                                  $dbname = "REPLACE_WITH_YOUR_DATABASE_NAME";
                                  // REPLACE with Database user
                                  $username = "REPLACE_WITH_YOUR_USERNAME";
                                  // REPLACE with Database user password
                                  $password = "REPLACE_WITH_YOUR_PASSWORD";
                                  
                                  // Keep this API Key value to be compatible with the ESP32 code provided in the project page. If you change this value, the ESP32 sketch needs to match
                                  $api_key_value = "tPmAT5Ab3j7F9";
                                  
                                  $api_key = $value1 = $value2 = $value3 = "";
                                  
                                  if ($_SERVER["REQUEST_METHOD"] == "POST") {
                                      $api_key = test_input($_POST["api_key"]);
                                      if($api_key == $api_key_value) {
                                          $value1 = test_input($_POST["value1"]);
                                          $value2 = test_input($_POST["value2"]);
                                          $value3 = test_input($_POST["value3"]);
                                          
                                          // Create connection
                                          $conn = new mysqli($servername, $username, $password, $dbname);
                                          // Check connection
                                          if ($conn->connect_error) {
                                              die("Connection failed: " . $conn->connect_error);
                                          } 
                                          
                                          $sql = "INSERT INTO Sensor (value1, value2, value3)
                                          VALUES ('" . $value1 . "', '" . $value2 . "', '" . $value3 . "')";
                                          
                                          if ($conn->query($sql) === TRUE) {
                                              echo "New record created successfully";
                                          } 
                                          else {
                                              echo "Error: " . $sql . "<br>" . $conn->error;
                                          }
                                      
                                          $conn->close();
                                      }
                                      else {
                                          echo "Wrong API Key provided.";
                                      }
                                  
                                  }
                                  else {
                                      echo "No data posted with HTTP POST.";
                                  }
                                  
                                  function test_input($data) {
                                      $data = trim($data);
                                      $data = stripslashes($data);
                                      $data = htmlspecialchars($data);
                                      return $data;
                                  }
                                  
                                  
                                  B 1 Reply Last reply Reply Quote 0
                                  • B
                                    bommel_030 @Beowolf last edited by

                                    @beowolf
                                    Bin wahrlich kein IT-Fachmann, aber die simple API ist tatsächlich so simpel wie sie klingt...
                                    Einzige "Hürde" ob bzw. wie dein iobroker von außen erreichbar ist. Hab es bei mir mit nem Reverse Proxy gelöst, klappt problemlos.

                                    B 1 Reply Last reply Reply Quote 0
                                    • B
                                      Beowolf @bommel_030 last edited by

                                      @bommel_030

                                      Das mit dem "von außen erreichbar" möchte ich eigentlich nicht. Sicherer wäre es, wenn ioBroker es sich holt.

                                      Reverse Proxy? Muß ich mir anschauen.

                                      B 1 Reply Last reply Reply Quote 0
                                      • B
                                        bommel_030 @Beowolf last edited by

                                        @beowolf
                                        Wenn du deinen iobroker "nur" lokal nutzt dann schau dir den Parser Adapter an, damit Holst sich der iobroker die Daten ohne das irgendwas von außen geöffnet ist. Auf jeden Fall kein Portforwading, das ist böse 😉

                                        B 1 Reply Last reply Reply Quote 0
                                        • B
                                          Beowolf @bommel_030 last edited by

                                          @bommel_030

                                          Den Parser Adapter hatte ich mir schon angeschaut. Das ist im Moment noch ein Ding mit sieben Siegeln.

                                          W 1 Reply Last reply Reply Quote 0
                                          • W
                                            watcherkb @Beowolf last edited by

                                            @beowolf hi, hast du hier schon eine Lösung gefunden? Stehe vor der selben Frage, wie ich remote an mein iobroker Daten senden kann.

                                            B BananaJoe 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            704
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            25
                                            1433
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo