Ankündigung

Einklappen
Keine Ankündigung bisher.

Arduino Wasserstandsmessung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    Der SRF02 ist ein Ultraschall-Sensor mit Sender und Empfänger in einem Gehäuse. Das macht es beim Einbau einfacher. Ich habe den Sensor bündig in ein Kunststoffgehäuse eingebaut. Ein ca. 1 m langes Kabel geht dann zum "Hauptgerät". Zur Messung des Ölstandes schraube ich den mechanischen Füllstandsmesser ab und lege meinen Sensor auf. Eine permanente Messung ist für mich nicht nötig. Die Dämpfe würden den SRF vermutlich irgendwann kaputt machen. Da mein Öltank ein Quader ist, ist die Berechnung relativ simpel. Bei anderen Formen muss man mehr rechnen

    20181205_113211.jpg
    STP84070.JPG

    Kommentar


      #47
      Hiermit möchte ich mich noch herzlich bei LynnBayer für die tolle Idee und Projektvorstellung sowie bei Masifi für die Platinen bedanken.

      Der Sensor läuft bei mir seit ca. 2 Monaten und das absolut problemlos und störungsfrei.

      Da der Messwert bei mir häufig um einen cm hoch- und runter gesprungen ist, habe ich mit meinen notdürftigen Fähigkeiten den Arduino-Sketch erweitert um das Signal zu stabilisieren und damit ins besonders unnötige Loggings zu vermeiden.

      Mit dem folgenden Code konnte ich ein absolut stabiles Signal realisieren das dennoch schnell auf Änderungen der Füllhöhe reagiert:
      Code:
      // Library from: https://bitbucket.org/thorstengehrig/arduino-tpuart-knx-user-forum
      
      //Initialize the KNX TP-UART library on the Serial1 port of Arduino Mega
      // 1,1,3 ist die Source-Adresse
      #include <KnxTpUart.h>
      KnxTpUart knx(&Serial1, "1.1.77");
      
      int trigPin = 8;
      int echoPin = 9;
      
      unsigned int duration, cm, cmsent, cmo=200, cmoo, cmooo, cmoooo, cmooooo, cmoooooo, cmooooooo, cmoooooooo, cmooooooooo, cmoooooooooo; //int 100cm, float 100.09cm, unsigned int 100cm
      
      
      void setup() {
          pinMode(trigPin, OUTPUT);
          pinMode(echoPin, INPUT);
      
          // Set KNX Serial to Even parity
      
          Serial1.begin(19200);
          UCSR1C = UCSR1C | B00100000; // Even Parity
      
          knx.uartReset();
      }
       
      void loop() {
          digitalWrite(trigPin, LOW);
              delayMicroseconds(5);
          digitalWrite(trigPin, HIGH);
              delayMicroseconds(10);
          digitalWrite(trigPin, LOW);
       
          pinMode(echoPin, INPUT);
          duration = pulseIn(echoPin, HIGH);
       
          cm = (duration/2) / 29.1;
       
         // Wert nur verwenden wenn er kleiner (Vergleich wird durH ! invertiert) ist als die Höhendifferenz die durch das Hauswasserwerk max. abgepumpt werden kann (Gardena 3000/4 eco: 2800 l/h --> 11 l / 15 s --> max. 1 cm / 15 s)
         if (!(cm > (cmo + 2))) {
            // Prüfen ob die letzten 10 gemessenen Werte alle größer oder kleiner sind wie der zuletzt auf den Bus geschickte
            if ((cm > cmsent) && (cmo > cmsent) && (cmoo > cmsent) && (cmooo > cmsent) && (cmoooo > cmsent) && (cmooooo > cmsent) && (cmoooooo > cmsent) && (cmooooooo > cmsent) && (cmoooooooo > cmsent) && (cmooooooooo > cmsent)) {
              knx.groupWrite2ByteInt("4/7/0",cm);  // Wert auf Bus schicken
              cmsent = cm; // Gesendeten Wert merken
            }
            if ((cm < cmsent) && (cmo < cmsent) && (cmoo < cmsent) && (cmooo < cmsent) && (cmoooo < cmsent) && (cmooooo < cmsent) && (cmoooooo < cmsent) && (cmooooooo < cmsent) && (cmoooooooo < cmsent) && (cmooooooooo < cmsent)) {
              knx.groupWrite2ByteInt("4/7/0",cm);
              cmsent = cm;
            }
        
            // Die älteren Werte jeweils in den nächstälteren Merker schreiben
            cmoooooooooo = cmooooooooo;
            cmooooooooo = cmoooooooo;
            cmoooooooo = cmooooooo;
            cmooooooo = cmoooooo;
            cmoooooo = cmooooo;
            cmooooo = cmoooo;
            cmoooo = cmooo;
            cmooo = cmoo;
            cmoo = cmo;
            cmo = cm;
          }
          delay(15000);   //ms (60000 = 1 Minute)
      }
      Aufgrund der Form der Zisterne war es eine Herausforderung die Füllhöhe in das Füllvolumen umzurechnen. Glücklicherweise hat mir Garantia nach mehrmaligem Nachfragen dann das Füllvolumen bei verschiedenen Wasserständen zukommen lassen, wodurch der Rest nur noch eine Fleißarbeit war.

      In OpenHAB schaut die Berechnung bei mir folgendermaßen aus:
      Code:
      /* Berechnung der Füllhöhe der Zisterne in % */
      rule "Zisterne Füllhöhe"
      when
      Item A2_S2_Tiefe changed
      then
      val Number Hoehe_Boden_Sensor = 176 // erster Wert war 175 // val=Konstante
      val Number Hoehe_Boden_Ueberlauf = 129
      // Prozentuale Füllhöhe berechnen und ausgeben
      // A2_S2_Fuellhoehe.postUpdate((Hoehe_Boden_Sensor - (A2_S2_Tiefe.state as Number)) / Hoehe_Boden_Ueberlauf * 100)
      var Fuellhoehe = ((Hoehe_Boden_Sensor - (A2_S2_Tiefe.state as Number)) / Hoehe_Boden_Ueberlauf * 100)
      A2_S2_Fuellhoehe.sendCommand(Math::round(Fuellhoehe.floatValue()))
      // Füllvolumen in Liter berechnen und ausgeben
      var Fuellvolumen_l = (-0.0032764 * Math.pow(Fuellhoehe.floatValue(), 3) + 0.5534975 * Math.pow(Fuellhoehe.floatValue(), 2) + 8.7946810 * Fuellhoehe.floatValue())
      A2_S2_Fuellvolumen_l.sendCommand(Math::round(Fuellvolumen_l.floatValue()))
      // Füllvolumen in Prozent berechnen und ausgeben
      var Fuellvolumen_P = (-0.0001044 * Math.pow(Fuellhoehe.floatValue(), 3) + 0.0176329 * Math.pow(Fuellhoehe.floatValue(), 2) + 0.2801746 * Fuellhoehe.floatValue())
      A2_S2_Fuellvolumen_P.sendCommand(Math::round(Fuellvolumen_P.floatValue()))
      end

      Ultraschallsensor.jpg Sensor in Zisterne.jpg Diagramm.jpg

      Angehängte Dateien

      Kommentar


        #48
        Ich versuche mit dem Baustein einen Drainageschacht überwachen. Ziel soll es sein über den Ultraschallsensor den Füllstand zu erfassen und darüber die Pumpe zu steuern. Die Werte für den Füllstand und den Pumpenstatus möchte ich auf den KNX-Bus gesendet haben. Ausserdem sollen vom Bus Minimal- und Maximal-Wert, sowie eine Pumpen-Zwangsschaltung gesetzt werden können.
        Dafür habe ich mir 2 Programme geschrieben (1. Setzen der Sollwerte, 2. Füllstandsmessung und Pumpensteuerung), die unabhangig voneinander auch funktionieren. Nur wenn ich sie in einen Sketch zusammen bringen möchte ist das Verhalten nichtmehr das erwartete.

        Hier mal der Sketch zum Setzen der Sollwerte:
        Code:
        #include <KnxTpUart.h>
        KnxTpUart knx(&Serial, "1.1.160");
        
        int pumpe = 10;
        
        void setup() {
          pinMode(pumpe, OUTPUT);
          digitalWrite(pumpe, LOW);
        
          Serial.begin(19200, SERIAL_8E1);
          Serial.println(UCSR0C, BIN);
          knx.uartReset();
          knx.addListenGroupAddress("7/0/2");
          knx.addListenGroupAddress("7/0/3");
          knx.addListenGroupAddress("7/0/4");
        }
        
        void loop() {
          KnxTpUartSerialEventType eType = knx.serialEvent();
          if (eType == TPUART_RESET_INDICATION) {
          } 
          else if (eType == UNKNOWN) {
          } 
          else if (eType == KNX_TELEGRAM) {
            KnxTelegram* telegram = knx.getReceivedTelegram();
        
            String target =
              String(0 + telegram->getTargetMainGroup())   + "/" +
              String(0 + telegram->getTargetMiddleGroup()) + "/" +
              String(0 + telegram->getTargetSubGroup());
        
            if (telegram->getCommand() == KNX_COMMAND_WRITE) {
              if (target == "7/0/2") {
                int received_7_0_2 = telegram->get2ByteIntValue();
                if (received_7_0_2) {
                knx.groupWrite2ByteInt("7/0/7",received_7_0_2);
                }
              }
              if (target == "7/0/3") {
                int received_7_0_3 = telegram->get2ByteIntValue();
                if (received_7_0_3) {
                knx.groupWrite2ByteInt("7/0/6",received_7_0_3);
                }
              }
              if (target == "7/0/4") {
                int received_7_0_4 = telegram->getBool();
                knx.groupWriteBool("7/0/5",received_7_0_4);
                if (received_7_0_4) {
                  digitalWrite(pumpe, HIGH);
                  knx.groupWriteBool("7/0/5",1);
                }
                else {
                  digitalWrite(pumpe, LOW);
                  knx.groupWriteBool("7/0/5",0);
                }
              }
            }
          }
        }
        Bedeutung der KNX-GAs:
        7/0/0 - Pumpe (ein / aus)
        7/0/1 - Füllstand (Abstand vom Ultraschallsensor zur Wasseroberfläche)
        7/0/2 - Sollwert für "Pumpe aus"
        7/0/3 - Sollwert für "Pumpe ein"
        7/0/4 - Zwangsschaltung Pumpe
        7/0/5 - Rückmeldeadresse Zwangsschaltung
        7/0/6 - Rückmeldung für "Pumpe ein"
        7/0/7 - Rückmeldung für "Pumpe aus"

        Der Sketch zum messen des Füllstandes und steuern der Pumpe:

        Code:
        #include <KnxTpUart.h>
        KnxTpUart knx(&Serial, "1.1.160"); // 1.1.160 ist die KNX-Source-Adresse
        
        int trigPin = 8;
        int echoPin = 9;
        int pumpe = 10; // zum Schalten des Pumpen-Relais
        
        unsigned int dauer, abstand;
        unsigned int voll = 20;
        unsigned int leer = 40;
        
        void setup() {
          pinMode(trigPin, OUTPUT);
          pinMode(echoPin, INPUT);
          pinMode(pumpe, OUTPUT);
        
          // Set KNX Serial to Even parity
          Serial.begin(19200, SERIAL_8E1);
          Serial.println(UCSR0C, BIN);
          knx.uartReset();
        }
         
        void loop() {
          Steuerung();
        }
        
        void Steuerung() {
          digitalWrite(trigPin, LOW);
            delayMicroseconds(5);
          digitalWrite(trigPin, HIGH);
            delayMicroseconds(10);
          digitalWrite(trigPin, LOW);
         
          pinMode(echoPin, INPUT);
          dauer = pulseIn(echoPin, HIGH);
         
          abstand = (dauer/2) / 29.1;
         
          if (abstand != 0) bool success = knx.groupWrite2ByteInt("7/0/1",abstand);
            
          if (abstand < voll)
          {
            knx.groupWriteBool("7/0/0",1);
            digitalWrite(pumpe, HIGH); // Pumpe ein
          }
          if (abstand > leer)
          {
            knx.groupWriteBool("7/0/0",0);
            digitalWrite(pumpe, LOW); // Pumpe aus
          }
         
          delay(2000);   //ms
        }
        Wie gesagt, diese beiden Sketches funktionieren für sich alleine fehlerfrei.

        Hier habe ich versucht beide zusammenzuführen:

        Code:
        #include <KnxTpUart.h>
        KnxTpUart knx(&Serial, "1.1.160"); // 1.1.160 ist die KNX-Source-Adresse
        
        int trigPin = 8;
        int echoPin = 9;
        int pumpe = 10; // zum Schalten des Pumpen-Relais
        
        unsigned int dauer, abstand;
        unsigned int voll = 20;
        unsigned int leer = 40;
        
        void setup() {
          pinMode(trigPin, OUTPUT);
          pinMode(echoPin, INPUT);
          pinMode(pumpe, OUTPUT);
          digitalWrite(pumpe, LOW);
        
          Serial.begin(19200, SERIAL_8E1);
          Serial.println(UCSR0C, BIN);
          knx.uartReset();
          knx.addListenGroupAddress("7/0/2");
          knx.addListenGroupAddress("7/0/3");
          knx.addListenGroupAddress("7/0/4");
        }
         
        void loop() {
          sollwerte();
          digitalWrite(trigPin, LOW);
            delayMicroseconds(5);
          digitalWrite(trigPin, HIGH);
            delayMicroseconds(10);
          digitalWrite(trigPin, LOW);
         
          pinMode(echoPin, INPUT);
          dauer = pulseIn(echoPin, HIGH);
         
          abstand = (dauer/2) / 29.1;
        
          if (abstand != 0) bool success = knx.groupWrite2ByteInt("7/0/1",abstand);
            
          if (abstand < voll)
          {
            knx.groupWriteBool("7/0/0",1);
            digitalWrite(pumpe, HIGH); // Pumpe ein
          }
          if (abstand > leer)
          {
            knx.groupWriteBool("7/0/0",0);
            digitalWrite(pumpe, LOW); // Pumpe aus
          }
         
          delay(2000);   //ms
        }
        
        void sollwerte() {
          KnxTpUartSerialEventType eType = knx.serialEvent();
          if (eType == TPUART_RESET_INDICATION) {
          } 
          else if (eType == UNKNOWN) {
          } 
          else if (eType == KNX_TELEGRAM) {
            KnxTelegram* telegram = knx.getReceivedTelegram();
        
            String target =
              String(0 + telegram->getTargetMainGroup())   + "/" +
              String(0 + telegram->getTargetMiddleGroup()) + "/" +
              String(0 + telegram->getTargetSubGroup());
        
            if (telegram->getCommand() == KNX_COMMAND_WRITE) {
              if (target == "7/0/2") {
                int received_7_0_2 = telegram->get2ByteIntValue();
                if (received_7_0_2) {
                  voll = received_7_0_2;
                  knx.groupWrite2ByteInt("7/0/7",voll);
                }
              }
        
              if (target == "7/0/3") {
                int received_7_0_3 = telegram->get2ByteIntValue();
                if (received_7_0_3) {
                  leer = received_7_0_3;
                  knx.groupWrite2ByteInt("7/0/6",leer);
                }
              }
              if (target == "7/0/4") {
                int received_7_0_4 = telegram->getBool();
                knx.groupWriteBool("7/0/5",received_7_0_4);
                if (received_7_0_4) {
                  digitalWrite(pumpe, HIGH);
                  knx.groupWriteBool("7/0/5",1);
                }
                else {
                  digitalWrite(pumpe, LOW);
                  knx.groupWriteBool("7/0/5",0);
                }
              }
            }
          }
        }
        Hier werden keine Änderungen der Sollwerte mehr übernommen (laut Rückmelde-GAs).
        Da ich nur einen Pro Mini habe kann ich kein seriellen Monitor beobachten um zu sehen wo es klemmt

        Kommentar


          #49
          Ersetze mal das delay(2000) durch eine millis()-Timer-Abfrage. Ansonsten macht der Mini ewige 2s lang gar nix außer warten, sobald er an die Stelle kommt...
          Viele Grüße,
          Stefan

          DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

          Kommentar


            #50
            Ich habe den Code jetzt nochmal überarbeitet und auch delay() durch eine millis() Schleife ersetzt.
            Das funktioniert jetzt:

            Code:
            /* Library from: https://bitbucket.org/thorstengehrig/arduino-tpuart-knx-user-forum
             *  
             *  KNX-GA's:
             *  7/0/0 Bool Pumpe ein/aus
             *  7/0/1 2Byte Füllstand (Messwert in cm)
             *  7/0/2 Bool Pumpe Zwangsschaltung ein/aus
             *  7/0/3 Bool Rückmeldung Zwangsschaltung
             *  7/0/4 2Byte Sollwert voll (Pumpe soll hier einschalten)
             *  7/0/5 2Byte Rückmeldung voll
             *  7/0/6 2Byte Sollwert leer (Pumpe soll hier ausschalten)
             *  7/0/7 2Byte Rückmeldung leer
             */
            
            #include <KnxTpUart.h>
            KnxTpUart knx(&Serial, "1.1.160"); // 1.1.160 ist die KNX-Source-Adresse
            
            int trigPin = 8; // Trigger-Pin Ultraschallsensor
            int echoPin = 9; // Echo-Pin Ultraschallsensor
            int pumpe = 10; // zum Schalten des Pumpen-Relais
            int received_7_0_2;
            
            unsigned long intervall = 2000; // Abstand zwische 2 Messungen
            unsigned long zeit_alt = 0;
            
            unsigned int dauer, abstand;
            unsigned int voll = 60;
            unsigned int leer = 140;
            bool zwangsschaltung = false;
            
            void setup() {
              pinMode(trigPin, OUTPUT);
              pinMode(echoPin, INPUT);
              pinMode(pumpe, OUTPUT);
            
              Serial.begin(19200, SERIAL_8E1);
              knx.uartReset();
              knx.addListenGroupAddress("7/0/2"); // GA für Pumpe Zwangsschaltung
              knx.addListenGroupAddress("7/0/4"); // GA für Sollwert voll
              knx.addListenGroupAddress("7/0/6"); // GA für Sollwert leer
            
              delay(1000);
            }
             
            void loop() {
              sollwerte();
              steuerung();
            }
            
            void steuerung() {
              if (millis() - zeit_alt > intervall) {
                zeit_alt = millis(); // im intervall vorgegebene Zeit abwarten
            
              digitalWrite(trigPin, LOW);
                delayMicroseconds(5);
              digitalWrite(trigPin, HIGH);
                delayMicroseconds(10);
              digitalWrite(trigPin, LOW);
             
              dauer = pulseIn(echoPin, HIGH);
             
              abstand = (dauer/2) / 29.1; // Umrechnung Zeit in cm
            
              if (abstand != 0) bool success = knx.groupWrite2ByteInt("7/0/1",abstand);
            
              knx.groupRead("7/0/2");
              
              while (zwangsschaltung == true) {
                digitalWrite(pumpe, HIGH);
                knx.groupWriteBool("7/0/0",1);
                return;
              }
              
              if (abstand < voll)
              {
                knx.groupWriteBool("7/0/0",1);
                digitalWrite(pumpe, HIGH);
              }
              else if (abstand > leer)
              {
                knx.groupWriteBool("7/0/0",0);
                digitalWrite(pumpe, LOW);
              }
              }
            }
            
            void sollwerte() {
                KnxTpUartSerialEventType eType = knx.serialEvent();
              if (eType == TPUART_RESET_INDICATION) {
              } 
              else if (eType == UNKNOWN) {
              } 
              else if (eType == KNX_TELEGRAM) {
                KnxTelegram* telegram = knx.getReceivedTelegram();
            
                String target =
                  String(0 + telegram->getTargetMainGroup())   + "/" +
                  String(0 + telegram->getTargetMiddleGroup()) + "/" +
                  String(0 + telegram->getTargetSubGroup());
            
                if (telegram->getCommand() == KNX_COMMAND_WRITE) {
                  if (target == "7/0/4") {
                    int received_7_0_4 = telegram->get2ByteIntValue();
                    if (received_7_0_4) {
                      voll = received_7_0_4;
                      knx.groupWrite2ByteInt("7/0/5",voll); // Rückmelde GA
                    }
                  }
            
                  if (target == "7/0/6") {
                    int received_7_0_6 = telegram->get2ByteIntValue();
                    if (received_7_0_6) {
                      leer = received_7_0_6;
                      knx.groupWrite2ByteInt("7/0/7",leer); // Rückmelde GA
                    }
                  }
                }
            
                if (telegram->getCommand() == KNX_COMMAND_ANSWER) {
                  if (target == "7/0/2") {
                    received_7_0_2 = telegram->getBool();
                    if (received_7_0_2) {
                      zwangsschaltung = true;
                      knx.groupWriteBool("7/0/3",1); // Rückmelde GA
                    }
                    else {
                      zwangsschaltung = false;
                      knx.groupWriteBool("7/0/3",0); // Rückmelde GA
                    }
                  }
                }
              }
            }
            Eine Frage habe ich aber noch, ich nutze für dieses Projekt einen Pro Mini, damit läuft es.
            Jetzt habe ich testhalber mal einen Nano mit diesem Sketch betankt, damit scheint die Bus-Kommunikation nur noch in eine Richtung (Arduino schreibt Richtung Bus) zu funktionieren. Vom Bus zum Nano bekomme ich nichts.
            Hat dafür jemand eine Erklärung?

            Kommentar


              #51
              TX und RX pins richtig konfiguriert?

              Kommentar


                #52
                Zitat von Sonnengruesser Beitrag anzeigen
                TX und RX pins richtig konfiguriert?
                Es sind exakt die gleichen Pins und der gleiche Sketch, absolut unverändert...
                Beim Uno ist es übrigens das gleiche Fehlverhalten wie beim Nano...

                Kommentar


                  #53
                  Uno und Nano verdrahten den einen UART sowohl auf Pins 0 und 1 als auch auf die USB Seriell Schnittstelle. Dabei scheint die FTDI weniger zu stören als die CH340 Implementierung.
                  Der pro mini hat den potentiellen Störchip gar nicht erst drauf.

                  Kommentar


                    #54
                    Ah, ok.
                    Danke für die Aufklärung

                    Kommentar


                      #55
                      Ich habe nochmal eine Frage zum verwendeten Sensor.
                      Ich verwende in meinem Drainageschacht zur Zeit diesen "wasserdichten" Sensor:
                      https://www.amazon.de/gp/product/B07...?ie=UTF8&psc=1
                      Allerdings muss ich den alle paar Wochen austauschen, da die Messwerte nicht mehr stimmen.

                      Screenshot 2022-02-20 175135.png
                      In dem angehängten Bild sieht man die gemessenen Werte nach dem Abpumpen bis zum Erreichen des "voll"-Signals, welches dann die Pumpe wieder einschaltet.
                      Grün sind die gemessenen Werte, rot ist die Kurve, wie sie eigentlich aussehen müsste.
                      Setze ich einen neuen Sensor ein, funktioniert das auch erstmal ein paar Wochen.

                      Hat jemand einen Tipp?

                      Kommentar


                        #56
                        Zitat von NorbertB Beitrag anzeigen
                        Ich habe nochmal eine Frage zum verwendeten Sensor.
                        Ich verwende in meinem Drainageschacht zur Zeit diesen "wasserdichten" Sensor:
                        https://www.amazon.de/gp/product/B07...?ie=UTF8&psc=1
                        Allerdings muss ich den alle paar Wochen austauschen, da die Messwerte nicht mehr stimmen.
                        Das ist natürlich nicht all zu zufrieden stellend. Wobei es so ausschaut, dass der Sensor ja nicht komplett defekt ist sondern evtl. "nur" der Messwert durch Feuchtigkeit, Wassertropfen oder ähnliches temporär beeinflusst wird.

                        Der von mir in der Zisterne verwendete, nicht wasserdichte Sensor HC-SR04, ist bei mir jetzt zwei mal ziemlich nach genau 2 Jahren ausgefallen. Wobei da der Messwert dann kontinuierlich fernab von jedem sinnvollen Wert war. Bis dahin haben die Sensoren äußerst zuverlässig Ihren Dienst verrichtet.

                        Bei den wenigen Euro die dieser Sensor kostet und der viertel Stunde Arbeit, ist der Ausfall nach zwei Jahren noch zu verschmerzen. Obwohl es natürlich dennoch schöner wäre wenn er länger halten würde . Das nächste Mal würde ich probieren die Platine auf der Rückseite mit einer dünnen Silikonschicht zu überziehen. Denn neben einer kleinen Korrossionsstelle auf dem Sensor selbst, war die Platine selbst auch etwas angeschlagen durch die Feuchtigkeit die in das Gehäuse (Abzweigdose) eingedrungen ist.

                        Kommentar


                          #57
                          Kann weg
                          Mit Heimautomatisierung lassen sich alle Probleme lösen die wir sonst gar nicht hätten...
                          KNX + HUE + SONOS + SIMATIC-S7 + Fritzbox + RasPi mit NodeRed + Telegramm

                          Kommentar


                            #58
                            Ich versuche es jetzt auch mal mit einem HC-SR04. Die Platine habe ich komplett in Heißkleber eingegossen.

                            Kommentar

                            Lädt...
                            X