Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Heimmonitor

Komponenten und Verbrauchsmaterialien

Arduino Mega 2560
× 1
Arduino-Ethernet-Platine
× 1
4x20 LCD mit I2C-Schnittstelle
× 1
DHT22-Temperatursensor
× 1
DS3231 RTC
× 1
HC-SR04 Ultraschallabstand
× 1
OSH Park Kundenspezifische Leiterplatten
× 1

Über dieses Projekt

Ich begann mit der Heimüberwachung, indem ich einen Ecobee Smart Thermostat im Haus meiner Tochter installierte. Sie wurden von Ecobee eingestellt, daher wollte ich eine Alternative, die es ermöglicht, Dinge wie Sumpfniveau, Hochwasseralarm, Stromausfall sowie andere Elemente zu überwachen. Ich habe viel aus anderen Projekten auf verschiedenen Sites gezogen, insbesondere für die Codierung sowohl des Arduino als auch der Website. Die Verwendung von Pushingbox für Benachrichtigungen war der Schlüsselteil des Systems, um eine Möglichkeit der Fernbenachrichtigung zu ermöglichen. Ich schätze die offene Design-Community für die Veröffentlichung ihres Wissens und ihrer Projekte.

Ich begann mit einem Arduino Mega 2560, fügte eine Ethernet-Karte hinzu. Mit Eagle cad habe ich ein paar Boards für Eingaben sowie eine visuelle Anzeige entworfen. Ich habe diese von OSH Park machen lassen. Die Schnittstellenplatine verbindet die sieben verfügbaren Trockenkontakte, den Temperatur- und Feuchtigkeitssensor, die Echtzeituhr und den Ultraschall-Sumpfsensor mit dem Arduino.

Für die lokale Anzeige habe ich ein 4x20-LCD-Display verwendet. Außerdem gibt es 8 LEDs, die den Status jedes Alarmeingangs anzeigen, gelb, wenn er aktiviert ist, grün, wenn er gelöscht wird und aus, wenn er zurückgesetzt wird.
Die Reset-Taste löscht alle grünen LEDs, während die Nachricht PB aktivieren die Benachrichtigungen mit Pushingbox ein- und ausschaltet.

Die Website wird nur im LAN angezeigt. Ich wollte meinen Router aus möglichen Sicherheitsgründen nicht portieren. Es gab mehrere Arduino-Beispiele, von denen ich sowohl Teile von als auch jqplot verwendet habe, da ich auf meinem Laborsystem alleine stehen wollte.

Vollständige Anzeige der Website.

Es sind noch keine Etiketten vorhanden, jedoch ist die Software so eingestellt, dass der Alarm weniger als 10 Zoll vom Sensor entfernt ist und die gelbe LED leuchtet, um anzuzeigen, dass dieser Alarm aktiv ist. Der grüne Alarm zeigt an, dass er einmal in Betrieb war, aber seitdem geöffnet hat. Durch Drücken der Reset-Taste erlischt die grüne LED, die gelbe LED bleibt jedoch erleuchtet, bis der Pegel mehr als 10 Zoll beträgt.

Code

  • Arduino-Code
  • Website
Arduino-CodeC/C++
 // Home Monitor code/* AUFGABEN arduino grn led rote led schnittstelle annunciator annunciator sensor# variabler eingangspin ausgangspin ausgangspin variable Platine Pinnwand rote Pinnwand grn Pinsump level 1 6,8 18 19 Zoll x15-2 bis 6 , x15-3 bis 8 20-1 20-2Überflutungsalarm 2 28 23 25 x15-4 20-3 20-4 Stromausfall 3 30 27 29 x15-5 20-5 20-6 Temperatur 4 ftemp 5 (ftemp,1 ) x15-1 Feuchte 5 fhumi 5 (fhumi,1) x15-1aux 1 6 Aux1 32 31 33 x15-6 20-7 20-8Aux 2 7 Aux2 34 35 37 x15-11 21-1 21-2 Aux 3 8 Aux3 36 39 41 x15-7 21-3 21-4Aux 4 9 Aux4 38 43 45 x15-8 21-5 21-6Aux 5 10 Aux5 40 47 49 x15-9 21-7 21-8Reset Reset 42 x15-10Meldungssperre msginhbt 44 x15-12message led 17* muss sich für WLAN-Schild ändern WIRINGVCC zu 5VLCD:SDA-Pin zu Pin 21LCD:SCL-Pin zu Pin 20DHT:DHT-Pin 1 zu VCCDHT:DHT-Pin 2 zu Pin 5 und 10K zu VCCDHT:DHT-Pin 3 spareDHT:DHT Pin 4 an GNDSR04:SR04 Pin Trig an Pin 8SR04:SR04 Pin Echo an Pin 6RTC:SDA Pin an Pin 21RTC:SCL Pin an Pin 20 STROMAUSFALL Pin 30FLOOD ALARM Pin 28MESSAGE LED-Pin 17 kann die Pins 4, 7, 10, 11, 12, 13 50, 51, 52 und 53 nicht verwenden */// LIBRARIES#include #include #include # include  #include #include #include #include #include // Größe des Puffers, der zum Erfassen von HTTP verwendet wird Requests#define REQ_BUF_SZ 50// MAC-Adresse vom Ethernet-Shield-Aufkleber unter Boardbyte mac[] ={ 0xzz, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz };IPAddress ip(192, 168, 1, 100);//(10, 9, 9, 12); oder (192,168,1,100); IP-Adresse, muss möglicherweise je nach NetzwerkIPAddress-Gateway(192,168,1,1) geändert werden; //(10,9,9,1):oder (192,168,1,1); zuvor nicht in anderen Skizzen verwendet MÜSSEN MÖGLICHERWEISE ENTFERNENIPAddress subnet(255,255,255,0); // (255,255,255,0); zuvor nicht in anderen Skizzen verwendet MÜSSEN MÖGLICHERWEISE ENTFERNT WERDEN ThehernetServer server(1000); // einen Server am Port 1000File erstellen webFile; // die Webseitendatei auf der SD-Karte HTTP_req[REQ_BUF_SZ] ={0}; // gepufferte HTTP-Anfrage gespeichert als nullterminierte stringchar req_index =0; // in den HTTP_req-Puffer indexieren // Ihre geheime DevID von PushingBox.com. Sie können mehrere DevIDs auf mehreren Pins verwenden, wenn Sie möchtenchar DEVID1[] ="xxxxxxxxxxxxxxxxxx"; //Szenario:"Dies ist das erste Alert-Szenario" setzen Sie Ihre DevID hier in Anführungszeichen // DEVICE SETUP//setup LCDLiquidCrystal_I2C lcd(0x27,20,4); // setze die LCD-Adresse auf 0x27 für eine 16-Zeichen- und 2-zeilige Anzeige // DHT22dht DHT einrichten; #define DHT22_PIN 5 // Sonar einrichten #define TRIGGER_PIN 8 // Arduino-Pin mit Trigger-Pin am Ultraschallsensor verbunden. #define ECHO_PIN 6 // Arduino-Pin an Echo-Pin des Ultraschallsensors gebunden. #define MAX_DISTANCE 200 // Maximale Entfernung, die wir anpingen möchten (in Zentimeter). Der maximale Sensorabstand beträgt 400-500 cm. NewPing-Sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing-Setup von Pins und maximalem Abstand. // setup RTCRTC_DS3231 RTC; // Globale Variablen unsigned long mathtime1 =0; unsigned long mathtime2 =0; unsigned long mathtime3 =0; unsigned long mathtime3a =0; unsigned long mathtime4 =0; String-Zeitzeichenfolge; String-Datumszeichenfolge; unsigned int Zoll; Float-ftemp; Fhumi schweben; int aux1; int aux2; int aux3; int aux4; int aux5; int zurücksetzen; int msginhbt =NIEDRIG; int sensor1 =0; Stringsensor2 =0; Stringsensor3 =0; int sensor4 =0; int sensor5 =0; Stringsensor6 =0; Stringsensor7 =0; Stringsensor8 =0; Stringsensor9 =0; Stringsensor10 =0; String messageend;String sensor1msg;String sensor2msg;String sensor3msg;String sensor6msg;String sensor7msg;String sensor8msg;String sensor9msg;String sensor10msg;String msginhbtmsg;String devid ="xxxxxxxxxxx[xxxxxx] =". boolean lastConnected =false;boolean DEBUG =true; // zur Fehlerbehebung pushboxboolean DEBUG1 =true; //zur Fehlerbehebung auf der Websiteboolean DEBUG2 =false; // zur Fehlerbehebung beim Datavoid-Setup () {// SD-KARTENBETRIEB // Ethernet-Chip deaktivieren PinMode (10, OUTPUT); digitalWrite (10, HOCH); // START SERIAL FÜR DEBUGGING Serial.begin (9600); if (DEBUG1){Serial.println("Starting Program..");} Ethernet.begin(mac,ip,gateway,subnet); if (DEBUG1){Serial.println("Aktive Server-IP:");Serial.println(Ethernet.localIP());} server.begin(); // SD-Karte initialisieren if (DEBUG1){Serial.println("Initializing SD card...");} if (!SD.begin(4)) { if (DEBUG1){Serial.println("ERROR - SD card Initialisierung fehlgeschlagen!");} return; // Init fehlgeschlagen} if (DEBUG1){Serial.println("SUCCESS - SD-Karte initialisiert.");} // nach index.htm-Datei suchen if (!SD.exists("index.htm")) { if ( DEBUG1){Serial.println("FEHLER - Kann index.htm-Datei nicht finden!");} return; // kann die Indexdatei nicht finden} Serial.println ( "ERFOLG - Index.htm-Datei gefunden."); // GERÄTE INITIALISIEREN // Webserver initialisieren Ethernet.begin(mac, ip); // Ethernet-Gerät initialisieren server.begin(); // auf Clients warten // lcd initialisieren lcd.init(); // RTC Wire.begin () initialisieren; RTC.begin(); if (! RTC.isrunning()) { if (DEBUG2){Serial.println("RTC is NOT running!");} // folgende Zeile setzt die RTC auf das Datum und die Uhrzeit, zu der diese Skizze kompiliert wurde RTC.adjust(DateTime (__TERMINZEIT__)); } DateTime now =RTC.now(); DateTime kompiliert =DateTime(__DATE__, __TIME__); if (now.unixtime() -1){//überprüfen ob der Befehl kam homefront =homefront+6; // das nächste Zeichen abrufen int endfront =homefront+3; //Ich hoffe, dass dieser Befehl 3 Zeichen lang ist String action =line.substring(homefront,endfront); // den Wert des Befehls abrufen client.print("datas({ sensor1 :"); client.print(sensor1); client. print(", sensor2 :"); client.print(sensor2); client.print(", sensor3:"); client.print(sensor3); client.print(", sensor4 :"); client.print(sensor4 ); client.print(", sensor5 :"); client.print(sensor5); client.print(", sensor6 :"); client.print(sensor6); client.print(", sensor7 :"); client .print(sensor7); client.print(", sensor8 :"); client.print(sensor8); client.print(", sensor9 :"); client.print(sensor9); client.print(", sensor10 :"); client.print(sensor10); client.print(", msgtimer:"); client.print(mathtime3a); client.print(", msgonoff:"); client.print(msginhbtmsg); client.print( "})"); } brechen; } if(c =='\n') { kontinuierlich =wahr; } else if (c !='\r') { kontinuierlich =false; } } } Verzögerung(1); client.stop(); } if (DEBUG1) {Serial.print("datas({sensor1:"); Serial.println(sensor1); Serial.print(", sensor2:"); Serial.println(sensor2); Serial.print(", sensor3 :"); Serial.println(sensor3); Serial.print(", sensor4 :"); Serial.println(sensor4); Serial.print(", sensor5 :"); Serial.println(sensor5); Serial. print(", sensor6:"); Serial.println(sensor6); Serial.print(", sensor7:"); Serial.println(sensor7); Serial.print(", sensor8:"); Serial.println(sensor8 ); Serial.print(", sensor9 :"); Serial.println(sensor9); Serial.print(", sensor10 :"); Serial.println(sensor10); Serial.print(", msgtimer :"); Serial .println (mathtime3a); Serial.print (", msgonoff:"); Serial.print (msginhbtmsg); Serial.println ("})");} if (DEBUG1) {Serial.print ("Meine Website-IP-Adresse:"); Serial.println (Ethernet.localIP ());}} } Zeit und Datum () {//Zeit und Datum DateTime now =RTC.now (); DateTime future (now.unixtime() - 0); // Zeitkorrektur war bei 840 String Stundenfolge; String-Minutenzeichenfolge; String zweiter String; if(future.hour() <10){hourstring ='0' + String(future.hour()) + ':';} else {hourstring =String(future.hour()) + ':';} if (future.minute() <10){ minutestring ='0' + String(future.minute()) + ':';} else { minutestring =String(future.minute()) + ':';} if( future.second() <10){ secondstring ='0' + String(future.second());} else { secondstring =String(future.second());} timestring=hourstring + minutestring + secondstring; String Monatszeichenfolge; String-Tageszeichenfolge; Zeichenfolge Jahreszeichenfolge; if(future.month() <10){ monthstring ='0' + String(future.month()) + '/';} else {monthstring =String(future.month()) + '/';} if (future.day() <10){ daystring ='0' + String(future.day()) + '/';} else {daystring =String(future.day()) + '/';} datestring=Monatszeichenfolge + Tageszeichenfolge + Zukunft.Jahr(); lcd.setCursor(0,0); lcd.print (Zeitzeichenfolge); lcd.setCursor(10,0); lcd.print (Datumszeichenfolge); mathtime1 =(jetzt.unixtime()); Rückkehr; } ungültiger Ultraschallsensor () {// Ultraschallsensor { unsigned int uS =sonar.ping_median (5); // Ping senden, Ping-Zeit in Mikrosekunden (uS) abrufen. lcd.setCursor(9,1); lcd.print(" "); lcd.setCursor(9,1); lcd.print (USA / US_ROUNDTRIP_IN); // Ping-Zeit in Distanz in cm umrechnen und Ergebnis drucken (0 =außerhalb des eingestellten Distanzbereichs) Zoll =(uS / US_ROUNDTRIP_IN); Sensor1 =Zoll; if (DEBUG2){Serial.print("Distanz:");Serial.println(inches);}}return;}void dht22(){//Temperatur- und Feuchtigkeitssensor{ if ((mathtime1 - mathtime4)>2) { int chk =DHT.read22(DHT22_PIN); fhumi=(DHT.Feuchtigkeit); ftemp=((DHT.Temperatur*1.8)+32); lcd.setCursor(9,2); lcd.print (fhumi, 1); lcd.setCursor(12,3); lcd.print (ftemp, 1); Mathezeit4 =Mathezeit1; } // Verzögerung (2000); // Sekunde Verzögerung für Messwerte if (DEBUG2){Serial.println("Temperature and Humidity:");} if (DEBUG2){Serial.println(ftemp,1);} if (DEBUG2){Serial.println(fhumi ,1);} }Return;}void Annunciator () {//Sumpfalarm wenn (Zoll <10) { DigitalWrite (18, HIGH); digitalWrite (19, HOCH); aufrechtzuerhalten. Sonst { DigitalWrite (19, LOW);} // Flutalarm if (digitalRead (28) ==HIGH) { DigitalWrite (23, HIGH); digitalWrite (25, HOCH); } Else { DigitalWrite (25, LOW);} // Stromausfall alarmif (digitalRead (30) ==HIGH) { DigitalWrite (27, HIGH); digitalWrite (29, HOCH); aufrechtzuerhalten. Sonst { DigitalWrite (29, LOW);} // Aux 1 Alarmif (digitalRead (32) ==HIGH) { DigitalWrite (31, HIGH); digitalWrite (33, HOCH); aufrechtzuerhalten. Sonst { DigitalWrite (33, LOW);} // Aux 2 Alarmif (digitalRead (34) ==HIGH) { DigitalWrite (35, HIGH); digitalWrite (37, HOCH); } Else { DigitalWrite (37, LOW);} // Aux 3 Alarmif (digitalRead (36) ==HIGH) { DigitalWrite (39, HIGH); digitalWrite (41, HOCH); aufrechtzuerhalten. Sonst { DigitalWrite (41, LOW);} // Aux 4 Alarmif (digitalRead (38) ==HIGH) { DigitalWrite (43, HIGH); digitalWrite (45, HOCH); aufrechtzuerhalten. Sonst { DigitalWrite (45, LOW);} // Aux 5 Alarmif (digitalRead (40) ==HIGH) { DigitalWrite (47, HIGH); digitalWrite (49, HOCH); } Else { DigitalWrite (49, LOW);} // Reset LEDsif (digitalRead (42) ==HIGH) { int ledPinsout[] ={18, 19, 23, 25, 27, 29, 31, 33, 35, 37 , 37, 39, 41, 43, 45, 47, 49}; int ledPinsoutcnt =17; { for (int q=0; q 99999){mathtime3a =99999;};if (DEBUG2){Serial.print("MATH TIME 1:");Serial.println(mathtime1);Serial.print("MATH TIME 2:");Serial .println(mathtime2);Serial.print("MATHZEIT 3:");Serial.println(mathtime3);Serial.print("ZFLAG:");Serial.println(zflag);}{ if (zflag ==1 &&mathtime3> 300 ) // auf 300 Sekunden ändern sendet die Nachricht nicht mehr als alle 5 Minuten {mathtime2 =mathtime1; if (DEBUG1){Serial.println("NACHRICHT SENDEN!");} EthernetClient-Client; Serial.println ("Ethernet ready"); // Drucken Sie die IP-Adresse des Ethernet-Boards / des Schildes:Serial.print ("Meine SENDMESSAGE IP-Adresse:"); Serial.println (Ethernet.localIP()); // Geben Sie dem Ethernet-Shield eine Sekunde zum Initialisieren:delay(1000);if (DEBUG2){Serial.print("incoming value:");Serial.println(messagesend);}String repel =messagesend;char room[repel. length()+1];repel.toCharArray(room,repel.length()+1); if (DEBUG2){Serial.print("Dies ist der Wert, der eingerahmt wird:");Serial.println(room);} client.stop(); if(DEBUG){Serial.println("connecting...");} if (client.connect(serverName, 80)) { if(DEBUG){Serial.println("connected");} if(DEBUG){ Serial.println("Anfrage senden");} client.print("GET /pushingbox?devid="); client.print(devid); client.print("&room="); if (DEBUG){Serial.print("Dies ist der gesendete Wert:");Serial.println(room);} client.print(room); client.println("HTTP/1.1"); client.print("Host:"); client.println (Servername); client.println("Benutzer-Agent:Arduino"); client.println(); } else { if(DEBUG){Serial.println("Verbindung fehlgeschlagen");} } }} return;}
WebsiteJavaScript
Sie müssen die js- und css-Dateien hinzufügen, um dies auszuführen, sie befinden sich auf dem Computer, den Sie verwenden. I
 Home Monitor          //   // Diagramme und Messobjekte var tempChar, humChar; var tempGauge, humGauge; // Arrays, die Datenpunkte für die beiden Diagramme speichern var tempData =new Array(); var humData =neues Array(); // Erzeuge "Dummy"-Daten in der Vergangenheit für die beiden Diagramme var startTime =(new Date()).getTime() - 270000; for(var i =0; i <10; i++) {tempData.push([startTime, 20]); humData.push([startTime, 50]); Startzeit +=30000; } // Wenn das Dokument fertig ist, erstellen Sie Objekte und füllen Sie Diagramme mit "Dummy"-Daten $(document).ready(function() { showCharts(); showGauges(); }); // Funktion, die die beiden Diagramme anzeigt function showCharts() { tempChar =$.jqplot('tempchartdiv', [tempData], { title:'Sump Level', series:[{showMarker:false, lineWidth:1,color:" blue"}], axis:{ xaxis:{ renderer:$.jqplot.DateAxisRenderer, tickOptions:{ formatString:'%M:%S', }, tickInterval:15 }, yaxis:{ min:0, max:30, tickInterval:5, } } }); humChar =$.jqplot('humchartdiv', [humData], { title:'Temperature', series:[{showMarker:false, lineWidth:1,color:"red"}], axis:{ xaxis:{ renderer:$ .jqplot.DateAxisRenderer, tickOptions:{ formatString:'%M:%S'}, tickInterval:10}, yaxis:{ min:0, max:100, tickInterval:10 } } }); } // Funktion, die die beiden Gauges anzeigt function showGauges() { tempGauge =new Gauge({ renderTo :'tempgauge', width :250, height :250, glow :true, units :'in', title :'Sump Level' , minValue :0, maxValue :50, majorTicks :['0','10','20','30','40','50'], minorTicks :5, StrokeTicks :false, Highlights :[ { from :0, bis :12, Farbe :'rgba(50, 255, 61, .70)' }, { von :12, bis :20, Farbe :'rgba(205, 216, 0, .70)' }, { from :20, to :50, color :'rgba(255, 00, 0, .70)' }, ], colors :{ plate :'#824E00', majorTicks :'#f5f5f5', minorTicks :'#ddd ', title :'#fff', units :'#000', numbers :'#eee', Needle :{ start :'rgba(240, 128, 128, 1)', end :'rgba(255, 160, 122, .9)' } } }); humGauge =new Gauge({ renderTo :'humgauge', width :250, height :250, glow :true, units :'Grad F', title :'Temperature', minValue :0, maxValue :100, majorTicks :['0 ','10','20','30','40','50','60','70','80','90','100'], minorTicks :5, StrokeTicks :false , Hervorhebungen :[ { von :0, bis :50, Farbe :'rgba(255, 0, 0, .70)' }, { von :50, bis :65, Farbe :'rgba(205, 216, 0, .70)' }, { von :65, bis :80, Farbe :'rgba(50, 255, 61, .70)' }, { von :80, bis :100, Farbe :'rgba(255, 0, 0, .70)' }, ], colors :{ plate :'#824E00', majorTicks :'#f5f5f5', minorTicks :'#ddd', title :'#fff', units :'#000', numbers :'#eee', Nadel:{ start :'rgba(240, 128, 128, 1)', end :'rgba(255, 160, 122, .9)' } } }); tempGauge.draw(); humGauge.draw(); }; // Aufruf der Update-Funktion alle 3 Sekunden setInterval(updateValues, 3000); // Funktion, die aktualisierte Daten von Arduino abruft und Diagramme und Messgeräte aktualisiert Funktion updateValues ​​() { var currentTemp; var IstHum; var gotData =false; // Daten von Arduino im JSON-Format abrufen und mit JSONP einen domänenübergreifenden Aufruf ausführen $('#status').css({"color":"yellow"}); $('#status').text("Anfrage wird gesendet..."); var jqxhr =$.ajax({ url:'http://10.9.9.12:1000/?callback=?', dataType:'jsonp', jsonpCallback:'datas'}) // wenn die Anfrage erfolgreich war... .done(function(data) { $('#status').css({"color":"green"}); $('#status').text("Request erhalten!"); // Abgerufen speichern data in zwei Variablen und zeige sie auf der JS-Konsole an. currentTemp =50 - data.sensor1; currentHum =data.sensor4; console.log("--------- Got new data -------- --"); console.log("Temperatur:\t" + currentTemp); console.log("Humidity:\t" + currentHum); console.log("Sump Level:\t" + data.sensor1); console.log("Flood Alarm:\t" + data.sensor2); console.log("Loss of Power:\t" + data.sensor3); console.log("Temperature:\t" + data.sensor4); console.log("Feuchtigkeit:\t" + data.sensor5); console.log("Aux 1:\t" + data.sensor6); console.log("Aux 2:\t" + data.sensor7); console.log("Aux 3:\t" + data.sensor8); console.log("Aux 4:\t" + data.sensor9); console.log("Aux 5:\t" + data.sensor10 ); console.log(""); console.log("Werte werden aktualisiert..."); // c . aktualisieren harts, den ältesten Wert entfernen var x =(new Date()).getTime(); if(tempData.length ==100) tempData.shift(); tempData.push([x, aktuelleTemp]); tempChar.series[0].data =tempData; tempChar.resetAxesScale(); tempChar.axes.xaxis.tickInterval =15; tempChar.Achsen.yaxis.min =0; tempChar.Achsen.yaxis.max =50; tempChar.replot(); if(humData.length ==100) humData.shift(); humData.push([x, aktuellerHum]); humChar.series[0].data =humData; humChar.resetAxesScale(); humChar.axes.xaxis.tickInterval =15; humChar.Achsen.yaxis.min =0; humChar.Achsen.yaxis.max =100; humChar.replot(); // Messgeräte aktualisieren tempGauge.setValue (actualTemp); humGauge.setValue(actualHum); console.log("...erledigt!"); console.log(""); //erlaubt die Übergabe von Variablen an die Webseite var elArduino1 =document.getElementById('sensor1'); elArduino1.textContent =data.sensor1; var elArduino2 =document.getElementById('sensor2'); elArduino2.textContent =data.sensor2; var elArduino3 =document.getElementById('sensor3'); elArduino3.textContent =data.sensor3; var elArduino4 =document.getElementById('sensor4'); elArduino4.textContent =data.sensor4; var elArduino5 =document.getElementById('sensor5'); elArduino5.textContent =data.sensor5; var elArduino6 =document.getElementById('sensor6'); elArduino6.textContent =data.sensor6; var elArduino7 =document.getElementById('sensor7'); elArduino7.textContent =data.sensor7; var elArduino8 =document.getElementById('sensor8'); elArduino8.textContent =data.sensor8; var elArduino9 =document.getElementById('sensor9'); elArduino9.textContent =data.sensor9; var elArduino10 =document.getElementById('sensor10'); elArduino10.textContent =data.sensor10; var elArduino10 =document.getElementById('msgtimer'); elArduino10.textContent =data.msgtimer; }) // bei Fehler auf JS-Konsole drucken .fail(function() { console.log( "Keine neuen Daten abrufen :("); }); }   

Home Monitor Entwickelt von Kevin Strain

Datum und Uhrzeit:

MUDSHARK INDUSTRIES
Die Welt für eine bessere Zukunft verändern.

Status:

Sumpfniveau Wert: Zoll von oben

Hochwasseralarm Status:

Power Status:

Temperatur Wert: ° F

Luftfeuchtigkeit Wert: %

Aux Input 1 Status:

Aux Input 2 Status:

Aux-Eingang 3 Status:

Aux Input 4 Status:

Aux Input 5 Status:

E-Mail-Nachricht gesendet vor Minuten

Schaltpläne

Schnittstelle und Anzeige LED%20BAR%202.sch

Herstellungsprozess

  1. Blutdruckmessgerät
  2. Aufbau eines drahtlosen Sensornetzwerks in Ihrem Zuhause
  3. Überwachen Sie Ihre Haustemperatur mit Ihrem Raspberry Pi
  4. RASPBERRY PI HOME AUTOMATION
  5. Machen Sie eine DIY-Hausaufgaben-Schreibmaschine zu Hause
  6. Erstellen von Monitor-Ambilight mit Arduino
  7. Herzfrequenzmesser mit IoT
  8. Thermoelement-Spannungswächter für Warmwasserbereiter
  9. Autonomer Heimassistent-Roboter
  10. Arduino Home Controller aktiviert von Alexa