Gauge für Regenwasserspeicher auf Dashboard erstellen?

Hallo zusammen :smiley:

Ich fange mit dem Wichtigsten an: Ich bin ein absoluter Anfänger und ein reiner Autodidakt in der Informatik, aber mit Ausdauer mache ich Fortschritte. :trophy:

Ich habe es geschafft, mit einem Arduino Nano + Ultraschallsensor HRC-04 und einem 433-MHz-Sender :satellite: einen Code zu erstellen, um die Entfernung vom oberen Rand meines Tanks zum Boden zu ermitteln.

Anschließend habe ich über den Code des Empfängers :mailbox_with_mail: auf dem Arduino Uno den Wert im JSON-Format geändert und zum Schluss habe ich Node-Red verwendet, um eine Anzeige zu erstellen. (wie das Modul rpi-info von @piznel).

Könnte mir jemand helfen, ein Modul für Gladys zu erstellen, um es im Dashboard zu integrieren?

Vielen Dank im Voraus an alle, die mir helfen werden.

Hallo @jerome!

Ich nehme an, du bist auf Gladys 3? Ich weiß nicht, ob du dem aktuellen Projektverlauf folgst, aber momentan arbeiten wir an Gladys 4 und eine erste Alpha-Version ist bereits veröffentlicht.

In Gladys 3 ist es nicht möglich, ein Dashboard für ein Modul zu erstellen. In Gladys 4 funktioniert das Modul ein bisschen anders, aber es ist möglich!

Hallo @pierre-gilles.

Ja, ich bin derzeit bei Gladys 3. Ich verfolge das Projekt tatsächlich, ich schaue jeden Tag im Forum vorbei.

Bevor ich mich auf die Alpha-Version stürze, versuche ich, dass alles auf Gladys 3 funktioniert.

Tatsächlich würde ich gerne etwas Ähnliches wie rpi-info haben.

Hier ist, was ich mit Node-RED geschafft habe

Ich beantworte nicht deine Frage, aber könntest du dein Projekt teilen? Ich habe ein Haus mit einem Tank gekauft und das interessiert mich sehr :grin:

Kein Problem, willst du Fotos oder ein Schema?

Ich mag die Idee der „Regenwasserzisterne“ :smirking_face:
Ich wäre auch für ein zukünftiges Projekt dabei.

Beides, mein Kapitän :grin:

Hallo,

du wirst zwei glückliche Menschen machen, ich wäre auch an deiner Montage/Fotos interessiert :smile:. Ich habe auch vor, die verbleibende Wassermenge in meiner Regenwasseranlage zu überwachen, damit ich die automatische Bewässerung nicht starte, wenn sie leer ist ^^

Hallo
noch einer :grin:, ich habe vor, dasselbe zu machen, aber nicht so bald…
Ich muss Zeit finden :wink:
Also bin ich dabei, Danke!!

Ich kann den 433-MHz-Sender und Empfänger nicht in Fritzing integrieren.

Weiß jemand Rat?

/* 
 * Beispielcode für einen Ultraschallsensor HC-SR04.
 * Übertragung des Wertes bei 433MHz
 */

#include <VirtualWire.h>

/* Konstanten für die Pins */
const byte TRIGGER_PIN = 2; // TRIGGER-Pin
const byte ECHO_PIN = 3;    // ECHO-Pin
const byte VW_SET_TX_PIN = 12;
 
/* Konstanten für den Timeout */
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m bei 340m/s

/* Schallgeschwindigkeit in der Luft in mm/µs */
const float SOUND_SPEED = 340.0 / 1000;

/** Funktion setup() */
void setup() {

/** Initialisierung der VirtualWire-Bibliothek */
vw_setup(2000);

  /* Initialisiert den seriellen Port */
  Serial.begin(115200);
   
  /* Initialisiert die Pins */
  pinMode(TRIGGER_PIN, OUTPUT);
  digitalWrite(TRIGGER_PIN, LOW); // Der TRIGGER-Pin muss im Ruhezustand auf LOW sein
  pinMode(ECHO_PIN, INPUT);
}
 
/** Funktion loop() */
void loop() {
  
  /* 1. Startet eine Entfernungsmessung, indem ein HIGH-Impuls von 10µs an den TRIGGER-Pin gesendet wird */
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  
  /* 2. Misst die Zeit zwischen dem Senden des Ultraschallimpulses und seinem Echo (falls vorhanden) */
  long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
   
  /* 3. Berechnet die Entfernung aus der gemessenen Zeit */
  int distance_mm = measure / 2.0 * SOUND_SPEED;
   
  /* Gibt die Ergebnisse in mm aus */
 
  Serial.print(distance_mm);
  Serial.println();

  /* Senden der Nachricht */
  vw_send((byte *) & distance_mm, sizeof(distance_mm));

  /* Warten auf das Ende des Sendens */
  vw_wait_tx();
  
  /* Wartezeit, um zu viele Ergebnisse pro Sekunde zu vermeiden */
  delay(1000);
}

Für die Verwendung mit dem seriellen Monitor:

// Bibliotheken laden
#include <VirtualWire.h>

const byte VW_SET_RX_PIN = 11;

void setup() {
  Serial.begin(115200);

  // Initialisierung der VirtualWire-Bibliothek
  // Sie können die RX/TX/PTT-Pins vor vw_setup() ändern, falls nötig
  vw_setup(2000);
  vw_rx_start(); // Jetzt können Nachrichten empfangen werden

}

void loop() {
  float distance_mm;
  byte message_size = sizeof(float);

  /* 
   Die Variable "message_size" muss unbedingt auf die Größe der
   Variable zurückgesetzt werden, bevor eine Nachricht empfangen werden kann.
   Am einfachsten ist es, eine lokale Variable zu verwenden, um den Wert
   nicht bei jedem Aufruf von loop() neu zuweisen zu müssen.
   */

  // Warten auf den Empfang einer Nachricht
  vw_wait_rx();

  if (vw_get_message((byte *) &distance_mm, &message_size)) {
    // Die Nachricht wird kopiert, ob sie korrumpiert ist oder nicht

   if (distance_mm >= 0 && distance_mm <= 400)
   { Serial.print("Tank gefüllt zu: 100%"); }
   else if (distance_mm >= 401 && distance_mm <= 540)
   { Serial.print("Tank gefüllt zu: 90%"); }
   else if (distance_mm >= 541 && distance_mm <= 680)
   { Serial.print ("Tank gefüllt zu: 80%"); }
   else if (distance_mm >= 681 && distance_mm <= 820)
   { Serial.print ("Tank gefüllt zu: 70%"); }
   else if(distance_mm >= 821 && distance_mm <= 960)
   { Serial.print ("Tank gefüllt zu: 60%"); }
   else if (distance_mm >= 961 && distance_mm <= 1100)
   { Serial.print ("Tank gefüllt zu: 50%"); }
   else if (distance_mm >= 1101 && distance_mm <= 1290)
   { Serial.print ("Tank gefüllt zu: 40%"); }
   else if (distance_mm >= 1291 && distance_mm <= 1400)
   { Serial.print ("Tank gefüllt zu: 30%"); }
   else if (distance_mm >= 1401 && distance_mm <= 1550)
   { Serial.print ("Tank gefüllt zu: 20%"); }
   else if (distance_mm >= 1551 && distance_mm <= 1700)
   { Serial.print ("Tank fast leer: 10%"); }
   else if (distance_mm >= 1701 && distance_mm <= 2000)
   { Serial.print ("Tank fast leer: 5%"); }
   Serial.println();   
  }
}

Zur Verwendung mit Node-red (Json-Format):

// Bibliotheken laden
#include <VirtualWire.h>

const byte VW_SET_RX_PIN = 11;

void setup() {
  Serial.begin(115200);

  // Initialisierung der VirtualWire-Bibliothek
  // Sie können die RX/TX/PTT-Pins vor vw_setup() ändern, falls erforderlich
  vw_setup(2000);
  vw_rx_start(); // Jetzt können Nachrichten empfangen werden

}

void loop() {
  int distance_mm;
  byte taille_message = sizeof(int);

  /* 
   Die Variable "taille_message" muss unbedingt auf die Größe der Variable zurückgesetzt werden,
   bevor eine Nachricht empfangen werden kann.
   Am einfachsten ist es, eine lokale Variable zu verwenden, um den Wert nicht bei jedem
   Beginn von loop() neu zuzuweisen.
   */

  // Warten auf den Empfang einer Nachricht
  vw_wait_rx();

  if (vw_get_message((byte *) &distance_mm, &taille_message)) 
    // Die Nachricht wird kopiert, ob sie korrumpiert ist oder nicht

  Serial.print("{\"HRC_04\":");
  Serial.print(distance_mm);
  Serial.println("}");

  delay(5000);
  
}

Für diejenigen, die anschließend node-red mit der oberen Anzeige verwenden möchten:

Ich habe mich von diesem Tutorial inspirieren lassen für diejenigen, die ein kleines Video möchten

https://projetsdiy.fr/debuter-arduino-node-red-enregistrer-afficher-mesures-json-port-serie/

Ich beschäftige mich wieder mit dem Thema für die v4 @link39 hast du damals etwas versucht?

Ich hätte Lust, das mit einem esp12 und mqtt zu machen

Letzten Sommer habe ich einen Fibaro-Doppel-Schalter hinter einen Doppel-Lichtschalter installiert.

  • Schalter 1: Einschalten der Pumpe, die Wasser in den Garten pumpt
  • Schalter 2: Einschalten des Magnetventils, das das Wasser für die automatische Bewässerung durchlässt

Jetzt müsste ich ein System hinzufügen, das verhindert, dass die Pumpe eingeschaltet wird, wenn kein Wasser mehr da ist. So weit bin ich. Ich denke, ich werde mich im Frühjahr wieder daran machen, dann kann ich es testen. Jetzt ist es zu kalt :cold_face:

Statt eines Arduino scheint mir ein ESP perfekt ausreichend, aber ich bin nicht weiter gekommen als bis hierher.

Die ersten Tests sind erfolgreich, es ist präzise.

Ich muss mein Node MCU für den WiFi- und MQTT-Teil (Gladys) wiederfinden.

Echt cool @VonOx

Ich bin diese Woche Ski fahren, aber das macht Lust, sich wieder an das Projekt zu machen. Halt mich auf dem Laufenden, wenn du weitergekommen bist.

Bis bald