Beiträge von swisssat
-
-
Halli hallo,
die beispiel.php kommt in /var/www/home, sehe ich das richtig?
Gruss Thomas
-
Halli hallo Gauweiler,
sind Ferientage nicht was schönes.
Ich habe alles bis hierhin installiert und bin für
die nächsten "Schandtaten" bereit.
War für mich als Noob ein ganz schöner Akt. Aber funktioniert jetzt alles.
Freue mich auf weitere Inputs uns versuche mich bis dahin auch mal selber.
Gruss Thomas
-
Hallo Nick,
danke für die Antwort, also kurz gesagt läuft es auf DAS hinaus:
Datenbankserver zur zentralen Verwaltung von Daten
Dachte es würde evtl. mit NodeRed eigenen Boardmitteln gehen.
Ja man ist eben nie fertig. Da steht noch viel Arbeit vor mir. Aber erst meine Hausklingel fertig machen.
(Das war ja eine Story) Aber ich schreibe da mal einen Artikel.
Gruss Thomas
-
Hallo zusammen,
ich habe mir einen Ölstandsmesser für das Heizöl mit einem WEMOS gebaut. Ein Ultraschallsensor
misst den Abstand und ich rechne dann den gemessenen Wert (cm) auf Liter um. Funktioniert wunderbar.
Nun habe ich mir in NodeRed einen Flow gebastelt der mir den Stand in Liter und den Verlauf anzeigt.
Auch das funktioniert wunderbar.
So nun zum eigentlichen Anliegen:
Sobald ich den MQTT Server (Respektive NodeRed, sind beide auf dem gleichen Raspi) neu starte, aus welchen Gründen auch immer, beginnt der Verlauf
beim Jetzigen Zeitpunkt und die Daten von gestern (oder eben alle die vor dem Reboot „gesammelt“) wurden sind
verloren.
Dies ist natürlich für meine Geschichte schade, da ich ja den ganzen Verlauf des Standes, über den gesamten Tankinhalt von
2000 Litern sehen möchte.
Gibt es da eine Möglichkeit in NodeRed Daten zu speichern und den Verlauf bei einem Neustart von Begin der Aufzeichnung
neu zu generieren??
F2F7040C-F573-460F-A75D-BBDBD6A05CFF.jpeg3AF1C85C-B1C9-47F8-8356-535DE4828944.jpeg
Gruss Thomas
-
gemacht. Allerdings bekomme ich die WiringPi-Bibliothek ("git clone git://git.drogon.net/wiringPi") nicht auf meinen Pi.
> fatal: unable to connect to git.drogon.net
Scheint wohl offline würde ich meinen...
Am liebsten würde ich das später mit dem Plugin Homebridge Remote Outlet einbinden in Homebridge. Aber das Plugin bekomme ich ebenfalls nicht geladen. Da spuckt es mir nur lauter gyp/npm Error aus. Vielleicht auch zu alt?
Hallo Kravis,
ich habe mit den 433Mhz noch kein Projekt erstellt und kenne sie nicht.
Aber zu deinem 1. Problem denke ich, dass diese so NICHT mehr gehen wird.
https://github.com/brocaar/chirpstack-gateway-os/issues/18
Evtl Alternativen suchen.
Gruss Thomas
-
Das ist kein Schleim.
Nur ein Dankeschön für die Hilfe.
Gruss Thomas
-
Hey Thomas,
da war aber eine ungeduldig. Dabei hab ich vor 30 Minuten den Artikel über MQTT zu Ende geschrieben. Pascal und ich arbeiten noch etwas am Feintuining, dann wird der Artikel auch online kommen.
Den Code den du benutzt hast kenne ich Gutes Tutorial, auf der Website eigentlichHey danke, ja Geduld ist nur bedingt meine Tugend.
Ja der Artikel ist echt gut, nur habe ich trotz allem etwas mühe um es nachvollziehen zu können.
Aber ist ja bekanntlich noch kein Meister vom Himmel gefallen.
Gruss und ich werde es testen.
Thomas
Aha da tut sich was.
So langsam komme ich auf die Schliche.
Gruss Thomas
OK,
also in den void loop kommt ja nicht gerade viel.
Da spielt sich so ziemlich viel vorher ab.
So schaltet mein Relais perfekto.
Codemsg = message
das heisst ja, dass ich auch anstelle von 0 und 1 ON und OFF schreiben kann.
TOOOOLLLLL ich bin sooooo stolz auf dich Thomas. Du hast es mehr oder weniger geraffelt.
Gruss Thomas
-
Hallo zusammen,
ich komme nicht so wirklich weiter mit dieser MQTT Einbindung in den ESP.
Was ich hinbekomme ist, dass ich von einem ESP ein Topic senden kann und im
MQTT Broker (Mosquitto) auch das Empfangene sehe. ( hier eine 0 oder 1)
Siehe hier den Sender ESP / Angeschlossen ist ein Endschalter an d1
C- #include <ESP8266WiFi.h> /* Biblothek für WiFi Verbindung */
- #include <ESP8266WebServer.h> /* Biblothek für WebServer */
- #include <ESP8266mDNS.h> /* Biblothek für DNS Server */
- #include <PubSubClient.h>
- #define endschalter_topic "schenk/schalfzimmer/endschalter"
- ESP8266WebServer server(80);
- const char* ssid = "xxxxx";
- const char* password = "xxxxx";
- const char* MQTT_BROKER = "192.168.1.161";
- WiFiClient schenk; /* MQTT */
- PubSubClient client(schenk); /* MQTT */
- long lastMsg = 0; /* MQTT */
- char msg[50]; /* MQTT */
- int value = 0; /* MQTT */
- char zustand[50];
- // following for the name of: http://schalter.local/
- const char* dns_name = "schalter";
- int d1 = 5; /* Variable PIN definition */
- int d1_status = 0; /* Variable für den PIN Status */
- boolean lastButtonState1 = 1; /* StatusMerker, merkt sich den Schaltzustand des PIN*/
- /* Start Setup */
- void setup()
- {
- Serial.begin(115200);
- Serial.println("ESP Gestartet");
- client.setServer(MQTT_BROKER, 1883); /* MQTT */
- client.setClient(schenk); /* MQTT */
- pinMode(d1, INPUT); /* Es wird definert ob der PIN INPUT od. OUTPUT ist */
- WiFi.begin(ssid, password);
- Serial.print("Verbindung wird hergestellt ...");
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(500);
- Serial.print(".");
- }
- Serial.println();
- Serial.print("Verbunden! IP-Adresse: ");
- Serial.println(WiFi.localIP());
- if (MDNS.begin(dns_name)) {
- Serial.println("DNS gestartet, erreichbar unter: ");
- Serial.println("http://" + String(dns_name) + ".local/");
- }
- server.onNotFound([]() {
- server.send(404, "text/plain", "Link wurde nicht gefunden!");
- });
- server.on("/", []() {
- server.send(200, "text/plain", "ESP-Startseite!");
- });
- server.begin();
- Serial.println("Webserver gestartet.");
- }
- /* ENDE Setup */
- /* Sart Loop */
- void loop() {
- if (!client.connected()) {
- reconnect();
- }
- client.loop();
- int d1_status = digitalRead(d1);
- if (d1_status != lastButtonState1) {
- Serial.println(String(int(d1_status)));
- client.publish(endschalter_topic, String(d1_status).c_str(), true); //hier sendet der ESP den Status 0 oder 1
- }
- lastButtonState1 = d1_status;
- }
- /* ENDE Loop */
- void reconnect() {
- while (!client.connected()) {
- Serial.print("Reconnecting...");
- if (!client.connect("ESP8266Client")) {
- Serial.print("failed, rc=");
- Serial.print(client.state());
- Serial.println(" retrying in 5 seconds");
- delay(5000);
- }
- }
- }
Hier noch ein Foto des MQTT Broker, respektive des MQTTfx Tool
Nun bis dahin alles paletti
ABER jetzt:
Wie kann ich auf einem anderen ESP diese Daten (0 und 1) empfangen und für den weiteren
Programmablauf verwenden???
Hier mal ein kläglicher versuch, aber wo ist den jetzt meine 0 oder 1 ???
C- #include <ESP8266WebServer.h> /* Biblothek für WebServer */
- #include <ESP8266WiFi.h> /* Biblothek für WiFi Verbindung */
- #include <ESP8266mDNS.h> /* Biblothek für DNS Server */
- #include <PubSubClient.h>
- #define endschalter_topic "schenk/schalfzimmer/endschalter"
- ESP8266WebServer server(80);
- const char* ssid = "xxxxx";
- const char* password = "xxxxxx;
- const char* MQTT_BROKER = "192.168.1.161";
- WiFiClient espClient; /* MQTT */
- PubSubClient client(espClient); /* MQTT */
- long lastMsg = 0; /* MQTT */
- char msg[50]; /* MQTT */
- int value = 0; /* MQTT */
- // following for the name of: http://relais.local/
- const char* dns_name = "relais";
- int d1 = 5; /* Variable PIN definition */
- int d1_status = 0; /* Variable für den PIN Status */
- boolean lastButtonState = 1; /* StatusMerker, merkt sich den Schaltzustand des PIN*/
- unsigned long previousMillis = 0; /* gehört zur Verweilzeit ohne delay(): */
- const long interval = 1000; /* gehört zur Verweilzeit 1000 = 1sek. (Interval) */
- /* Start Setup */
- void setup()
- {
- Serial.begin(115200);
- Serial.println("ESP Gestartet");
- client.setServer(MQTT_BROKER, 1883); /* MQTT */
- client.setCallback(callback); /* MQTT */
- pinMode(d1, OUTPUT); /* Es wird definert ob der PIN INPUT od. OUTPUT ist */
- WiFi.begin(ssid, password);
- Serial.print("Verbindung wird hergestellt ...");
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(500);
- Serial.print(".");
- }
- Serial.println();
- Serial.print("Verbunden! IP-Adresse: ");
- Serial.println(WiFi.localIP());
- if (MDNS.begin(dns_name)) {
- Serial.println("DNS gestartet, erreichbar unter: ");
- Serial.println("http://" + String(dns_name) + ".local/");
- }
- while (!client.connected()) {
- Serial.println("Connecting to MQTT...");
- if (client.connect("ESP8266Client")) {
- Serial.println("connected");
- } else {
- Serial.print("failed with state ");
- Serial.print(client.state());
- delay(2000);
- }
- }
- }
- /* ENDE Setup */
- /* Sart Loop */
- void loop() {
- if ( !client.connected() ) {
- reconnect();
- client.subscribe("schenk/schalfzimmer/endschalter");
- }
- }
- /* ENDE Loop */
- /* Start Unterprogramme */
- void reconnect() {
- while (!client.connected()) {
- Serial.print("Reconnecting...");
- if (!client.connect("ESP8266Client")) {
- Serial.print("failed, rc=");
- Serial.print(client.state());
- Serial.println(" retrying in 5 seconds");
- delay(5000);
- }
- }
- }
- void callback(char* topic, byte* payload, unsigned int length) {
- Serial.print("Message arrived [");
- Serial.print(topic);
- Serial.print("] ");
- for (int i = 0; i < length; i++) {
- Serial.print((char)payload[i]);
- }
- Serial.println();
- if ((char)payload[0] == '1') {
- digitalWrite(d1, LOW);
- } else {
- digitalWrite(d1, HIGH);
- }
- }
An diesem ESP hängt ein Relais an d1 und soll schalten je nach topic Input 0 oder 1.
Ich glaube ich habe das was kpl. nicht mitgeschnitten.
Kann da evtl wer helfen??
Und klein Zusatzfrage, wo liegt den jetzt der Vorteil zum
HTTP senden/empfangen
sender.begin("http://192.168.1.148/sensor_state");
sender.GET();
Ich raff das nicht so ganz.
Gruss Thomas
-
Der Nächste Schritt war, dass ich alle verschieden möglichen Verbindungen zwischen 5v, GND, D4 getestet habe (selbes Problem).
Please send help!
Es sollte sichergestellt sein, dass der Sensor trotz 5V Anschluss ein 3.3 V Signal sendet. Da gibt es verschiedene Möglichkeiten, je nach Sensor.
Der ESP8266, egal ob mini, pro oder sonst was mögen keine 5V an den DatenPins. D0 - D8
Nimm anstelle des D4, mal den D5 oder D6.
Der D4 ist ein PulledUp Pin und muss beim Booten/programmieren HIGH sein. Nun ist es aber möglich, dass dein Bewegunssensor beim programmieren aus igendwelchen Gründen LOW sendet oder zwischen HIGH und LOW je nach Bewegung irgendwas sendet. Somit ist ein programmieren nicht möglich.
Gruss Thomas
-
Ha was soll man da sagen.....
ich habs, einfach
Saugeil
Gruss Thomas -
Wenn man den D1 eh schon auf eine Lochrasterplatine auflötet, dann kann man auch noch einen HiLink (230v zu 5v oder 3,3v) auflöten. Dann kann ich ganz normal an die beiden Eingangspinne meine 230v Leitung löten und an den Ausgangspinnen kommt 5v bzw. 3,3 Volt je nach Model raus
Ich arbeite ziemlich viel mit diesen HiLink Dingern und kann nur sagen die sind super.
Aber es gibt für mich auch noch eine andere Lösung zu diesem Thema, nämlich einen PoE Splitter.
Hat man in einem Raum z.B. ein Netzwerkkabel in der nähe, oder es ist einfach geeigneter weil einfacher oder von der Einteilung her besser.
Ist das auch eine gangbare Variante. Ich habe nur PoE Switches bei mir zu Hause, deswegen benötige ich nur einen Splitter (c.a. 12 Euronen). Sollte das nicht der Fall sein, kann mittels Injektor und Splitter gearbeitet werden.
Gruss Thomas
-
Halli hallo zusammen,
ich habe mich auch mit diesem Thema beschäftigt.
Gruss Thomas
-
Der ESP und die Batterie.
Da ja momentan die Stromversorgung ein Thema ist, will ich
euch mal an meinem Projekt/Versuch mit Batteriebetrieb teilhaben lassen.
Ausgangslage:
- Es gibt verschiedenste Orte wo eine Stromzuführung nicht so einfach bewerkstelligt werden kann.
- Lösungen mittels Solar oder aufwändigem Leitungen verlegen nicht machbar, oder nicht erwünscht ist.
- Temporäre Einsätze eines z.B. Bewegungsmelders. Für Testzwecke oder ähnliches.
Möglichkeiten sind da sehr schnell ausgeschöpft und es bleibt fast nur noch ein Batteriebetrieb als Lösung.
Der ESP ist aber ein ziemlicher Stromfresser, ohne ihn schlafen zu lassen sind auch 4 AA Batterien schnell leer. Je nach
Anwendung 2-7 Tage. Das kommt natürlich auch schwer darauf an, welche Sensoren den noch Strom benötigen.
Ich behandle hier NICHT das Thema mit einem Temp/Humidi Sensor, der mittels definierter Aufwachzeit zum schlafen geschickt wird und der D0 PIN mit dem RST PIN verbunden ist, sonder die Variante für ein "unendliches" schlaffen und ein Sensor erweckt den ESP aus dem Dornröschen-Schlaff.
Hier erst mal meine "Hürden"
1. Meine Sensoren (Radar Sensor) geben bei einem Ereignis ein HIGH Signal ab
2. Dieses Signal dauert c.a. 2 sek. bis es wieder auf LOW geht.
3. Bei jeder erneuten Bewegung sendet er wieder ein HIGH Signal
Lösung zu 1:
Da der ESP ein LOW Signal zum aufwachen benötigt, habe ich einen NPN Transistor verbaut. Der bekommt durch den "Base" PIN ein HIGH Signal und schaltet mittels Collector und Emitter PIN das LOW Signal zum RST PIN des ESP.
der ESP wacht auf und gut ist.
NPN HIGH Signal als Eingang/Schaltspannung
PNP LOW Signal als Eingang/Schaltspannung
Das wars wir sind FERTIG !!!
Neeeeeee, macht er eben nicht. Weil er braucht nur einen ganz kurzen Impuls LOW und kein Signal das 2 sek. dauert.
Sonst geht der in einen Dauerreset.
Nun sind wir bei Pkt. 2:
Das Signal muss also nur von kurzer Dauer sein. Hmmmm was machen wir da???
Wir nehmen einen Kondensator mit 1uF. Der ist so schnell voll (erinnert mich an mich , da ich kein Alk trinke) und sperrt den weiteren Durchgang, dass beim ESP nur ein kurzes LOW Signal ankommt.
Dies ist auch gleich die Lösung für Pkt. 3. Den auch wenn jetzt gerade wieder eine Bewegung gemeldet wird, sperrt der bis er voll ist. Zeitlich kann das mit der Grösse des Kondensators bestimmt/abgestimmt werden.
Nun noch einen Schaltplan:
Hier noch mein Versuch auf dem Breadboard oder wie das Ding auch heissen mag.
Und hier Fertig und bereit zum aufstellen.
Nun noch zum Schluss, dass sind nicht meine Erfindungen oder Lorbeeren. Ich habe es auch nur mit Hilfe von Google und Co.
Herausgefunden wie es geht, oder besser wie es gehen kann. Aber es hat mich ziemlich viel Zeit gekostet alles zusammen zu tragen und wenn es sonst noch jemanden gibt dem es Hilft ist es hier ja richtig aufgehoben. Muss ja nicht jeder Tage verbringen um sowas zu erstellen.
Mein Bewegungssensor so wie auf dem letzten Bild aufgebaut läuft jetzt c.a. seit 2 Wochen. Der errechnete Endtermin, da die Batterien schlapp machen ist c.a. in 6 Wochen. Dies hat den Grund, dass der RadarSensor für das erkenne einer Bewegung auch seine mAh benötigt und das kann man eben nicht einfach abschalten oder zum schlafen schicken.
Einer muss ja aufpassen.
Mir stellt sich zum Schluss die alles entscheidende Frage:
Wie machen das z.B. Philips HUE mit ihren Bewegungsmeldern, die halten c.a. 2 Jahre mit 2 AA Batterien. Vielleicht komm ich ja mal noch darauf.
Gruss Thomas
-
Hallo Gauweiler42,
voll Cooles Projekt, aber ich raffe zwei Dinge nicht so richtig.
a) Welche Sensoren werden verwendet? (Fenster einschlagen)
b) Hat es bei jeder Tür und Fenster einen Sensor? Oder werden Räume mittels Bewegunssensoren "abgetastet"?
Oder habe ich komplett was falsch verstanden über die Funktion.
Gruss und ich werde das Projekt mit grossem Interesse verfolgen.
Thomas
-
Der Rückgabewert im Monitor zeigt immer den richtigen Staus an, entweder 0 oder 1,
da dies ein String ist, werden die 0 oder 1 in " geschrieben. ODER?
Au man, ich Doofheini.
Jetzt habe ich meinen Post gelesen und merke, dass ich ja beim ESP mit dem Sensor den Statustext angepasst hatte auf
server.send(200, "text/plain", "Status Sensor > "+String(int(d8_status)));
demzufolge ist da nicht nur ne 0 oder 1 sondern
"Status Sensor > 1" oder "Status Sensor > 0"
SUPER THÖMI, habe ich gemacht weil es im Monitor schöner aussieht.
Man merke ==> schöner ist nicht gleich besser.
Sorry Jungs
Gruss Thomas
-
Hallo zusammen,
also manchmal bin ich mir nicht sicher, ob meine Mutter vielleicht doch einen Deep aufgezogen hat.
Ich möchte eigentlich nur, dass wenn der ESP mit dem Türsensor offen ist, auf einem anderen ESP
eine simple LED zum leuchten bringen.
Den ESP mit dem Sensor nach dem Status abfragen:
sender.begin("http://192.168.1.148/sensor_state");
sender.GET();
in Variable den String speichern:
String returned_data = sender.getString();
und auf dem ESP die LED an schalten:
if (returned_data == "0") {
digitalWrite(d1, HIGH);
}
AAAABBBBERRR neeeeeee, es will einfach nicht.
Der Rückgabewert im Monitor zeigt immer den richtigen Staus an, entweder 0 oder 1,
da dies ein String ist, werden die 0 oder 1 in " geschrieben. ODER?
Hat da jemand eine Idee?
Code- void loop() {
- server.handleClient();
- if (WiFi.status() == WL_CONNECTED) {
- sender.begin("http://192.168.1.148/sensor_state");
- sender.GET();
- String returned_data = sender.getString();
- //Ausgabe nur zu debuggin-Zwecke im seriellen Monitor
- Serial.println(returned_data);
- //Wenn Status = 1 ist, = Tür geschlossen, LED AUS
- if (returned_data == "1") {
- digitalWrite(d1, LOW);
- }
- //Wenn Status = 0 ist, = Tür offen , LED EIN
- if (returned_data == "0") {
- digitalWrite(d1, HIGH);
- }
- }
- delay(2000);
- sender.end();
- }
Gruss Thomas
-
Ich glaube du hast dich beim Anpassen meines ersten Sketches vertippt und
Klammern stehen gelassen/oder gelöscht, wo sie nicht hin gehören.
Wenn du den ersten Sketch kopierst und nicht veränderst geht der auch.
Ich weiss ist eine kleine Unterstellung.
Gruss Thomas
-
C
- #include <ESP8266WiFi.h>
- #include <ESP8266WebServer.h>
- #include <ESP8266mDNS.h>
- ESP8266WebServer server(80);
- const char* ssid = "WLAN";
- const char* password = "PASS";
- const char* dns_name = "ESP8266";
- int d1 = 5;
- int d1_status = 0;
- unsigned long previousMillis = 0;
- const long interval = 5000; // hier die Zeit eingeben.
- void setup()
- {
- Serial.begin(115200);
- Serial.println("ESP Gestartet");
- pinMode(d1, OUTPUT);
- WiFi.begin(ssid, password);
- Serial.print("Verbindung wird hergestellt ...");
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(500);
- Serial.print(".");
- }
- Serial.println();
- Serial.print("Verbunden! IP-Adresse: ");
- Serial.println(WiFi.localIP());
- if (MDNS.begin(dns_name)) {
- Serial.println("DNS gestartet, erreichbar unter: WebServer ");
- Serial.println("http://" + String(dns_name) + ".local/");
- delay(500);
- Serial.print(".");
- }
- server.onNotFound([](){
- server.send(404, "text/plain", "esp8266 test");
- });
- server.on("/", []() {
- server.send(200, "text/plain", "ESP-Startseite!");
- });
- server.on("/relais_on",[]() {
- server.send(200, "text/plain", "Relais an");
- relais_on();
- });
- server.on("/relais_off", []() {
- server.send(200, "text/plain", "Relais aus");
- relais_off();
- });
- server.on("/relais_state", []() {
- server.send(200, "text/plain", "Status Relais > " +String(int(d1_status)));
- int d1_status = digitalRead(d1);
- });
- server.begin();
- Serial.println("Webserver gestartet.");
- }
- void loop() {
- server.handleClient();
- int d1_status = digitalRead(d1);
- unsigned long currentMillis = millis();
- if (currentMillis - previousMillis >= interval)
- {
- previousMillis = currentMillis;
- if (d1_status == HIGH) {
- digitalWrite(d1, LOW);
- }
- }
- }
- void relais_on(){
- digitalWrite(d1, HIGH);
- }
- void relais_off(){
- digitalWrite(d1, LOW);
- }
- void relais_state(){
- digitalRead(d1);
- }
und jetzt
-