Permalänk
Medlem

arduino + pc web server

hej
jag har ett lite problem jag håller på med projektet där en arduino styr som en pellets brännare på den så finns det en webbserver som man kan styra när Brännaren ska gå. Det som händer nu är att när man har surfat för mycket på sidan så stannar arduino då blir det kallt i huset. dessutom ville jag göra saker som jag inte kan göra som att rita upp en graf på hur temperatur ändra sig. så jag fundera på om det går att koppla arduino till en pc så att pc hämtar data från arduino och lagra den och visar den på en webbsida. samt att om när man tycker på webbsidas att brännaren ska starta så ska den göra det. kan också tänka mig att man kan gå in på pc med typ fjär skrivbord och ha ett eller flera program som gör detta, men taken är att arduino styr brännan och leverera till och ta i mot styr information pc. pc tar han om bearbetning av data och har något slags gränssnitt där man ser vad som händer i systemet.
går det att göra? om ja hur? skulle vilja ha tips

Permalänk
Vila i frid
Skrivet av jost1:

Det som händer nu är att när man har surfat för mycket på sidan så stannar arduino då blir det kallt i huset.

Vad menas med "stannar"? Får den kernelpanik eller vad? Att mitigera buggar typ minnesläckor kan man göra mha tex cron-job som startar om den var tredje timme. Ett lämpligare forum än sweclockers för IoT är förmodligen https://elektronikforumet.com/forum/

Permalänk
Medlem

@hasenfrasen: den slutar göra det den ska göra alltså kolla hur varmt det är tanken och slå på brännaren och pump när det behövs webbsidan kommer inte åt heller så den är helt död med andra ord. så att den starta om sig själv faller bord då. tanken är att arduino så enkel behöver inte operativsystem som kan strula efter strömavbrott och den har inga problem med styra pannan det är när man vill ha kolla på vad som händer och kunna på verka vilken temperatur den ska starta brännaren som det verka bli för mycket för den och tvär dör. så jag skulle vilja ha något annan enhet som gör gränssnittet och arduino gör det enkla att styra pannan. tyvärr har man stänkt möjligheten att ha webbsida på en webbserver och skicka frågor till arduino jag tro det skulle underlätta än hel del eller har någon en lösning på det?

Permalänk
Vila i frid

Ett kopplingsur i vägguttaget eller låta en annan arduino pinga det som kan hänga sig och då bryta strömmen till den via ett relä ett par sekunder med en hysteres på typ 5 minuter.

Var aktiv på den sajt som utvecklat/distribuerar koden så kanske man kan bugg-fixa den.

Permalänk
Datavetare

Då det från informationen inte går att veta om kretsen hängt sig eller om det bara är webbservern som slutar svara är det inte säkert att en watchdog kan vara en framkomlig "workaround" för detta (det är en "workaround", inte en fix då det underliggande felet måste vara minnesläcka, minnesöverskrivning eller liknande).

Men du kan ju testa med watchdog, det är väldigt lätt om du kör en mikrokontroller med HW-stöd för detta (vilket de flesta har).
Här är ett exempel för AVR-baserade enheter, det inkluderar Arduino Uno.

Du måste anropa wdt_reset() i huvudloopen. Om den hänger sig kommer kretsen starta om efter den tid du specificerat till watchdog.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Det vore bra med lite mer information om vad du har gjort och vad du har utgått ifrån?
En Arduino Uno, Mega eller någon annan variant?
Ethernet shield, Wifi shield, eller?
Webserver enligt något exempel?
etc

Jag har ett tiotal enheter kopplade hemma för olika sysslor. Min lösning är att köra en TCP/IP/ethernet-klient på enheterna och ha en PC som har en server dessa kan fråga om status från. Dvs arduinosarna (korrekt pluralis?) pollar PC servern. Arduinon startar upp i ett default-läge vid strömbortfall och hämtar ev ny konfig om den får svar...
För allt nytt har jag gått över helt till ESP32 baserade kort, de har inbyggt Wifi och väldigt gott om minne. Dessutom mycket högre prestanda. En enkel webserver kan man ta från exempelkoden och bara lägga in lite nya styr-kommandon.
Om du vill ha en PC som står på bara för att köra arduinons gränssnitt känns det som att en raspberry pi skulle vara bättre från början...

Permalänk
Medlem

Låter som att du vill göra mer än en arduino klarar av, skulle rekommendera dig att kolla på en raspberry pi och ansluta arduinon till den. Då kan raspberryn hantera data och webbserver med mycket bättre prestanda och arduinon fokuserar på vad den är bra på: prata med hårdvara

Skickades från m.sweclockers.com

Permalänk
Medlem

Det stämmer jag har nog kommit i överkant vad den klara av. Jag är inte säker på om den skulle starta om själ för ibland verkar det som om dör hel och hållet det gör inget ibland så dör bara websidan. Det är en arduino mega med original Ethernet shield tråd bundet med minnes kort. På kortet lagra jag websidan och värden som användaren kan ändra. så den har samma värde efter en omstart som innan typ vilken temperatur som bränna starta.
Jag kan tänka mig en raspberry pi men jag hittar bara lösningar där man kan styra en diod om den är tänd eller inte. Men jag skulle vilja få över 8 temperaturer från arduino och sen ska data till den om användaren ändra något typ när brännaren ska gå
Finns det någon som kan tipsa om en länk där visar hur man får dem att utbyta information mellan sig och helst visar det i en grafiskgränssint typ en websida

Permalänk
Medlem
Skrivet av jost1:

Det stämmer jag har nog kommit i överkant vad den klara av. Jag är inte säker på om den skulle starta om själ för ibland verkar det som om dör hel och hållet det gör inget ibland så dör bara websidan. Det är en arduino mega med original Ethernet shield tråd bundet med minnes kort. På kortet lagra jag websidan och värden som användaren kan ändra. så den har samma värde efter en omstart som innan typ vilken temperatur som bränna starta.
Jag kan tänka mig en raspberry pi men jag hittar bara lösningar där man kan styra en diod om den är tänd eller inte. Men jag skulle vilja få över 8 temperaturer från arduino och sen ska data till den om användaren ändra något typ när brännaren ska gå
Finns det någon som kan tipsa om en länk där visar hur man får dem att utbyta information mellan sig och helst visar det i en grafiskgränssint typ en websida

Samma som när du kopplar arduino till en dator och får output kan man göra från en pi (det är ju också en dator), det är ett seriellt interface som är lätt att hantera i linux, till exempel via terminalen

Skickades från m.sweclockers.com

Permalänk
Medlem

Har du någon annan dator med en webserver igång?
Isf kan du ju göra ett supersimpelt interface på megan, och lägga en grafisk hemsida på servern, och köra ajax mot megan för att sätta/läsa värden.
Jag tycker en mega borde klara saken, men själv har jag ingen erfarenhet av minneskort-hantering.
Om du är osäker på stabiliteten så får du väl tyvärr ta bort en sak i taget... Så antingen ta bort servern och köra seriellt mot en pi, eller ta bort minneskortet och ha defaultvärden. Står det upp då, så är det ju något att bygga ifrån. Det är inget roligt att bygga vidare på något som man inte vet om det är stabilt...
Ett annat sätt, med dålig svarstid, är att låta megan polla webservern säg var 5:e s. Då kan du göra ett php skript som läser/skriver i en databas. Eller ännu roligare, skriva en server med en databas på PCn... Så gjorde jag...

Permalänk
Medlem

@HWarc: Jag har varit inne på göra en databas men jag har inte sett någon där arduino läser data från databasen eller hur ska användaren kunna styra arduino? Jag har byggt den fån att den hade bestämda värden och in grafisk visning till nu när jag kan ställa viken temperatur den ska starta och stanna och sen har jag tre olika körlägen beror på vad vill göra ska vi duscha så vill man ha lite mer värme om hela familjen ska göra det. sen normalt och sen om är bortrest så vill man bara hålla varmt i huset. Jag ligger på ver 11 i dag och jag märker att det blir mer ostabilt mer man lägger på den.
Måste inte websidan ligga på samma enhet som värdarna alla webbläsare har väll stoppat möjligheten att hämta data från ett an Anna plats en var sidan ligger eller?
Det är inte alts roligt att bygga på något som håller. Därför försöker jag hitta någon annan lösning typ seriellt mot en pi/pc men hur visar man data från arduino? Kan för lite om hur man får seriellt information till ett gränssnitt och det behöver inte vara en webbsida om det blir onödigt böket det går att ha fjärrskrivbord men bara massa värden i filer är ganska värdelöst eller vad de nu hamnar skulle verkligen få tips om hur man gör det.

Permalänk
Medlem

@medbor: ??? Så du menar att jag ska gå från en sida där jag har gjort en ritning över pannan och tanken där jag har lag tid på att rita in temperaturerna på rätt plats. till en skärm ful med siffror det blir ju att gå tillbaka ver1 och den har jag redan. stället för en bärbara data så är det pi blir inte klok

Permalänk
Medlem

Det går bra att ha websidan på en server och hämta data från en annan. Om du lägger in strängen

Access-Control-Allow-Origin: *\r\n

i headern som megan skickar tillbaks, så accepterar chrome det.
Då kan du som sagt göra att snygg sida på en server, och köra ajax mot arduinon. Förslagsvis skickar du tillbaks svaret som en json-sträng så är det lätt att parsa.

Permalänk
Medlem

@HWarc: kan du skriva ett exempel? Hänger inte rikligt med hur du menar eller en länk till någon som har gjort det

Permalänk
Medlem
Skrivet av jost1:

@medbor: ??? Så du menar att jag ska gå från en sida där jag har gjort en ritning över pannan och tanken där jag har lag tid på att rita in temperaturerna på rätt plats. till en skärm ful med siffror det blir ju att gå tillbaka ver1 och den har jag redan. stället för en bärbara data så är det pi blir inte klok

Webserver och websida ska ligga på pi, ett bash-script eller liknande läser från arduino alla värden arduinon läser från hårdvaran.

Arduino blir av med ethernet-skjölden och allt krävande. Pi tar över allt ’extra’ som du nu har bakat in på arduinon.

Skickades från m.sweclockers.com

Permalänk
Medlem

@medbor: och hur skriver man en bash-script då? det är det som jag inte kan går bra med en länk också till någon som redan har gjort det jag har försökt att söka men inte hitta rätt sök ord för att lösa detta

Permalänk
Medlem

@jost1 om du påminner kan jag kolla på det imorgon

Skickades från m.sweclockers.com

Permalänk
Medlem

@medbor: vill bara påminna om "Webserver och websida ska ligga på pi, ett bash-script eller liknande läser från arduino alla värden arduinon läser från hårdvaran.

Arduino blir av med ethernet-skjölden och allt krävande. Pi tar över allt ’extra’ som du nu har bakat in på arduinon.

Permalänk
Permalänk
Medlem

Har inte testat detta själv men ser att många andra gjort det. Kika på facebook gruppen svenska hemautomatiseringsgruppen. Och sök på pellets. Hittade tex detta som är samankopplat med Home Assistant som körs på en Rpi.

https://github.com/rosangen/arduinoESP/tree/master/power-pell...

Visa signatur

Freddan

Permalänk
Medlem

@medbor: tackar för hjälpen ska fundera jag är lite mer. Men jag är nyfiken på den lösningen där sidan ligger på en webserver ska testa den först

Permalänk
Medlem

Varför ska du ha en Pi och en Arduino?
En Pi har ju tillräckligt IO's för din application skulle jag tro, ett par givare och något att driftsätta brännaren med.
Att hantera GPIO på en Pi är enkelt med t.ex Python. Gör ett script som kollar värden från givare etc.. som körs var 5:e minut eller så. När skriptet körs så är det ju bara att lagra infon du vill I en databas typ SQLite.
Ur denna databas kan din "hemsida" sen läsa värden och presentera grafer m.m.
Givetvis gör du så att allt går att styra via ditt webgränssnitt också.
Nått sådant hade jag gjort iaf

Mycket att lära sig om du startar på "noll" men finns guider för allt som jag skrivit om ovan.
Svårt att ge mer konkreta råd då du inte sagt exakt vilka komponenter som ingår I ditt system.

Visa signatur

Bara gammalt skräp...

Permalänk
Medlem

Var i ska jag lägga in "Access-Control-Allow-Origin: *\r\n" i korden i mega

Så här ser koden för mega ut:

EthernetClient client = server.available(); // try to get client if (client) { // got client? boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { // client data available to read char c = client.read(); // read 1 byte (character) from client // buffer first part of HTTP request in HTTP_req array (string) // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1) if (req_index < (REQ_BUF_SZ - 1)) { HTTP_req[req_index] = c; // save HTTP request character req_index++; } // last line of client request is blank and ends with \n // respond to client only after last line received if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); // remainder of header follows below, depending on if // web page or XML page is requested // Ajax request - send XML file Serial.println(HTTP_req); if (StrContains(HTTP_req, "ajax_inputs")) { // send rest of HTTP header client.println("Content-Type: text/xml"); client.println("Connection: keep-alive"); client.println(); // send XML file containing input states XML_response(client); } else if (StrContains(HTTP_req, "minehemta")) { // send rest of HTTP header client.println("Content-Type: text/xml"); client.println("Connection: keep-alive"); client.println(); Setknap(); // send XML file containing input states XML_mine(client); }

Permalänk
Medlem

@bardbard: inte för att jag har riktigt koll. men GPIO på en Pi är baserad på 3,3v medans mina tempgivare och reläer är bygg på 5v allt går att att lösa men att bygga om hårdvaran och lära sig ett nytt programmering språk och se till att värme i huset finns blir lite för mycket. för sig bör jag lära mig Python verkar var ett språk som kommer att vara ett tag men det skulle jag vilja gör i lunga och ro inte på detta projektet. resten av familjen blir inte så glad om hon inte kan duscha på morgonen tyvärr har det hänt några gånger. var hittar man grunderna i Python och går det att använda på en optativ system Windows eller är det Linux baserad?

Permalänk
Medlem

@jost1: Byt till
client.println("HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *");
så borde det fungera bra!

Permalänk
Medlem
Skrivet av jost1:

@bardbard: inte för att jag har riktigt koll. men GPIO på en Pi är baserad på 3,3v medans mina tempgivare och reläer är bygg på 5v allt går att att lösa men att bygga om hårdvaran och lära sig ett nytt programmering språk och se till att värme i huset finns blir lite för mycket. för sig bör jag lära mig Python verkar var ett språk som kommer att vara ett tag men det skulle jag vilja gör i lunga och ro inte på detta projektet. resten av familjen blir inte så glad om hon inte kan duscha på morgonen tyvärr har det hänt några gånger. var hittar man grunderna i Python och går det att använda på en optativ system Windows eller är det Linux baserad?

Ett problem med PI:n är att den skriver sönder sitt minneskort efter nåt år eller så, har fått formatera om en gång, nästa gång hade kortet gått till r/o så fick fixa ett nytt, så det måste man åtgärda om man ska ha den till lite viktigare saker.

F.ö så har jag en arduino med ethernet shield som styr min varmvattenberedare, finns ett web-interface för att kolla temperaturer men styrningen sker genom via ett telnet-interface vilket är lite enklare att jobba med. En linux-pc pollar o loggar temperaturer och status samt talar om för arduinon aktuell strömförbrukning för huset. Då jag har solceller på huset så kan det vara intressant att optimera användningen av solenergin. Sitter tre temperaturgivare på olika nivåer i tanken. En telnet session kan se ut enligt:

boinc@hero:~$ telnet vvb Trying 192.168.12.200... Connected to vvb. Escape character is '^]'. ?Unknown command, type h for help help Commands: h Help p nnn Main power is nnn Watts, neg means exporting d Display temperatures (for logging) s Display status r nn nn=17: relay on, nn=42: relay off e [aa,vv] Set/display parameters q Quit s Top: 68.46, Mid: 66.86, Bot: 25.77, Mains: 4810W, Curr: 0, Heater: 0 e e Par [0] Mintemp : 60 Par [1] Maxtemp : 72 Par [2] Use mid : 1 Par [3] Currtrsh : 255 Par [4] Strategy : 1 Par [5] Webupdate: 20 q Connection closed by foreign host. boinc@hero:~$

Dold text

Tappar man kommunikationen så går arduinon över i ett default-läge så man inte blir utan varmvatten. Har ännu inte haft nån hängning på den. Har kört den sen 2012 utan andra omstarter än normala strömavbrott.

Permalänk
Medlem

Fick du någon ordning på det?

Permalänk
Medlem

@HWarc: hum det finns något som heter familj. de uppskattar inte om man sitter för mycket med datorn dessutom är det ungar som ska till träning jag hoppas att jag får sitta ett tag i helgen kolla på deta. åter kommer när tid finns jag tackar för hjälpen vart fall jag tro det ska gå bra tiden räcker till

Permalänk
Medlem

@HWarc: Hur skriver man get raden?
Jag trodde
request.open("GET", " http://192.168.1.252/ajax_inputs"+ nocache, true);
men det vrakar vara fel

Permalänk
Medlem

Jämför med exemplet på
https://www.w3schools.com/xml/tryit.asp?filename=tryajax_firs...

Jag tycker din kod borde fungera. Dags för console/serial loggar.

En tanke - har du något icke-URL-kompatibelt i din "nocache" sträng?