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.
Ich habe es geschafft, mit einem Arduino Nano + Ultraschallsensor HRC-04 und einem 433-MHz-Sender 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 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.
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!
du wirst zwei glückliche Menschen machen, ich wäre auch an deiner Montage/Fotos interessiert . Ich habe auch vor, die verbleibende Wassermenge in meiner Regenwasseranlage zu überwachen, damit ich die automatische Bewässerung nicht starte, wenn sie leer ist ^^
/*
* 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);
}
// 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);
}
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
Statt eines Arduino scheint mir ein ESP perfekt ausreichend, aber ich bin nicht weiter gekommen als bis hierher.