Gjelsvik Skrevet 27. september 2019 Skrevet 27. september 2019 Som en liten fork av denne tråden så ønsker jeg å logge hvor mange liter vann en avfukter drar ut av kjeller luften. Jeg ønsker en virtuell device med oppløsning i liter pr dag, og en med liter pr mnd, og en med liter total. (Planlegger å bruke devicehistory til å grafe disse tre) Utstyr er: arduino yun en flottør (av/på signal når en bøtte er full) Solenoid (for å åpne avløpsslangen) Tanken er at jeg måler mengden vann som det er plass til mellom nivået der utløpet sitter og nivået når flottøren varsler full. For enkelthets skyld, si at dette er 10 liter, noe som nok kan stemme bra. Yun har wifi, og jeg tror jeg kan gjenbruke gammel kode (7år gammel) for å pushe data via http GET til f.eks php, og så bruke et script i HS for å hente verdiene igjen fra php. Men det er kanskje penere å bruke REST direkte mot HS? Hvordan kan jeg i homeseer enkelt telle mengden vann som produseres? Kan jeg kalle REST apiet og f.eks kjøre en event hver gang tanken tømmes? Kan jeg bare oppdatere en virtuell device med ( verdi += 10)? Kjøre en event hver dag kl 23:59 for å nulle dagsforbruk og legge dette til månedsforbruk? Noen som har noe lignende oppsett for å logge andre type verdier (Produsert strøm fra solceller etc?) som har noen erfaringer å dele her? 1 Siter
HSv Skrevet 27. september 2019 Skrevet 27. september 2019 Det der var ikke dumt... Det må jeg også ordne meg ? I går drev jeg og monterte en pumpe i den eksterne tanken for avfukteren. Denne skal jeg starte hver gang tanken er full, og la gå i 3 minutter. Så når du kom med denne ideen så er min første oppgave å finne ut hvor mye vann som pumpes ut, og bare logge dato/klokke hver gang pumpen starter - kanske til en CSV-fil. Min tank er på 20-25 liter, men jo mindre tank jo bedre oppløsning. Siter
ZoRaC Skrevet 27. september 2019 Skrevet 27. september 2019 26 minutter siden, Gjelsvik skrev: Yun har wifi, og jeg tror jeg kan gjenbruke gammel kode (7år gammel) for å pushe data via http GET til f.eks php, og så bruke et script i HS for å hente verdiene igjen fra php. Men det er kanskje penere å bruke REST direkte mot HS? Hvordan kan jeg i homeseer enkelt telle mengden vann som produseres? Kan jeg kalle REST apiet og f.eks kjøre en event hver gang tanken tømmes? Jeg kaller HS sitt JSON-API fra NodeMCU. Samme kode virker vel på Yun også? Tror du må ha 2 virtuelle devicer - en for "10 liter" og en for summering. Yun vil da kalle "10-liter-devicen" og det trigger da et event som tar summering+=10. Jeg bruker TLS på HomeSeer, så om du vil kjøre det mot port 80, så må du sikkert endre litt i koden (har ryddet vekk en del kode, men du skjønner nok prinsippet): #include <WiFiClientSecure.h> // Use WiFiClientSecure class to create TLS connection // https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/HTTPSRequest/HTTPSRequest.ino WiFiClientSecure client; // Replace with your network details const char* ssid = "..."; const char* password = "...."; IPAddress ip(192, 168, 1, 100); IPAddress subnet(255, 255, 255, 0); IPAddress gateway(192, 168, 1, 1); IPAddress dns(192, 168, 1, 1); const char* host = "homeseer.local"; const int httpsPort = 443; // only runs once on boot void setup() { // Initializing serial port for debugging purposes Serial.begin(115200); delay(10); // Connecting to WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.config(ip, gateway, subnet, dns); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println(WiFi.macAddress()); // Printing the ESP IP address Serial.println(WiFi.localIP()); configTime(3 * 3600, 3600, "pool.ntp.org", "time.nist.gov"); } // runs over and over again void loop() { sendDataToHS(1234, 10); delay(30000); } bool sendDataToHS(int dvRef, String data) { if (!client.connect(host, httpsPort)) { Serial.println("Connection failed"); return false; } if (isnan(data.toFloat())) { return false; } String url = "/JSON?request=controldevicebyvalue&ref=" + String(dvRef) + "&value=" + String(data); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Authorization: Basic .....\r\n" + "User-Agent: ESP8266\r\n" + "Connection: close\r\n\r\n"); Serial.println("Request sent (device " + String(dvRef) + ", data " + String(data) + ")"); while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { Serial.println("headers received"); return true; break; } } return false; } Siter
havnegata Skrevet 27. september 2019 Skrevet 27. september 2019 56 minutes ago, Gjelsvik said: Utstyr er: arduino yun en flottør (av/på signal når en bøtte er full) Har du noen link til denne flottøren? Siter
Marhil Skrevet 27. september 2019 Skrevet 27. september 2019 Hvis det er avløp til sluk hele tiden, så ville jeg kanskje heller brukt en tipping bucket for å måle avrenning?https://m.aliexpress.com/item/2027467349.html?pid=808_0000_0105Sent fra min BLA-L29 via Tapatalk Siter
Gjelsvik Skrevet 27. september 2019 Forfatter Skrevet 27. september 2019 15 minutes ago, Marhil said: Hvis det er avløp til sluk hele tiden, så ville jeg kanskje heller brukt en tipping bucket for å måle avrenning?https://m.aliexpress.com/item/2027467349.html?pid=808_0000_0105 Sent fra min BLA-L29 via Tapatalk En tipping bucket er på vei. Har fått tak i en industrisak som skal være hakket bedre enn kinavare. Men problemet er montering.. Har en tippingbucket et slangeutløp som jeg kan kjøre i sluket? 7 hours ago, havnegata said: Har du noen link til denne flottøren? Det er denne: https://www.ebay.com/itm/Water-Liquid-Level-Sensor-Liquid-Plastic-Ball-Float-Switch-Fur-Arduino/ 8 hours ago, HSv said: Det der var ikke dumt... Det må jeg også ordne meg ? I går drev jeg og monterte en pumpe i den eksterne tanken for avfukteren. Denne skal jeg starte hver gang tanken er full, og la gå i 3 minutter. Så når du kom med denne ideen så er min første oppgave å finne ut hvor mye vann som pumpes ut, og bare logge dato/klokke hver gang pumpen starter - kanske til en CSV-fil. Min tank er på 20-25 liter, men jo mindre tank jo bedre oppløsning. Hvordan trigger du pumpen? Startid for pumpe og at man kjenner til mengden som det er plass til mellom pumpestart og pumpestopp så har du/jeg de verdiene du trenger. Jeg har også en pumpe i bakhånd, da det antagelig er for lite trykk i beholderen til at solenoid ventilen slipper det igjennom, selv om den er i åpen modus. 8 hours ago, ZoRaC said: Jeg kaller HS sitt JSON-API fra NodeMCU. Samme kode virker vel på Yun også? Tror du må ha 2 virtuelle devicer - en for "10 liter" og en for summering. Yun vil da kalle "10-liter-devicen" og det trigger da et event som tar summering+=10. Jeg bruker TLS på HomeSeer, så om du vil kjøre det mot port 80, så må du sikkert endre litt i koden (har ryddet vekk en del kode, men du skjønner nok prinsippet): #// bla bla Yun har integrert wifi, som man kjører et eget oppsett på, tror derfor ikke jeg kan bruke eksakt det samme biblioteket som du har der til http/webklient. Ser også ut som at syntaksen din er litt annerledes enn den jeg er vant til fra arduino? Men utover det så ser jeg jo der hvordan du kaller json apiet. Det ser ut som at man bruker Http GET og bare legger verdiene inn i url. Kan vel løses slik der. HttpClient client; // Make a HTTP request: client.get("http://hshost//JSON?request=controldevicebyvalue&ref=8" + "&value=" + String(data);"); Siter
Gjelsvik Skrevet 28. september 2019 Forfatter Skrevet 28. september 2019 On 27/09/2019 at 17:27, Gjelsvik said: client.get("http://hshost//JSON?request=controldevicebyvalue&ref=8" + "&value=" + String(data);"); Linjen ovenfor her kjører control device. Det fungerte ikke når jeg bare vil oppdatere en verdi, sette f.eks value til "100" på en virtuell device. Jeg mente at kommandoen skulle være setdevicevaluebyref, men med den får jeg følgende feil: { "Response":"Error, bad request" } Homeseer forumene er nede, så jeg finner ikke dokumentasjonen på hvordan json urlen skal se ut for å kun sette en verdi. Noen som vet? Siter
Moskus Skrevet 29. september 2019 Skrevet 29. september 2019 12 timer siden, Gjelsvik skrev: Linjen ovenfor her kjører control device. Det fungerte ikke når jeg bare vil oppdatere en verdi, sette f.eks value til "100" på en virtuell device. Det er måten å gjøre det med JSON. CAPI-verdiene må være både Status og Control. 12 timer siden, Gjelsvik skrev: setdevicevaluebyref Det er den, men kun for scripting. Så vidt jeg vet. Siter
Moskus Skrevet 29. september 2019 Skrevet 29. september 2019 Men du er på Windows? Du kan bruke ASP-filen min da. https://forums.homeseer.com/forum/homeseer-products-services/system-software-controllers/hs3-hs3pro-software/hs3-hs3pro-discussion/1327309-passing-a-string-to-homeseer-via-http-json-and-then-act-on-it?p=1327829#post1327829 Denne gir deg mulighet til å både sette string og device value, uten å måtte ha CAPI spesifisert. Siter
HSv Skrevet 30. september 2019 Skrevet 30. september 2019 På 27.9.2019 den 17.27, Gjelsvik skrev: Hvordan trigger du pumpen? Nå bruker jeg kun en Fibaro Flood sesor påmontert en ekstern føler (en ledningsstump med strippede ender) som henger ned i tanken. Når vannet når ledningen så sørger en event for at avfukteren stopper, og da skal også pumpa starte. Men nå har jeg en smart implant på vei. Den regner jeg med skal kunne både merke når tanken er full, og starte pumpa og kjøre den så lenge jeg trenger. 1 Siter
Gjelsvik Skrevet 30. september 2019 Forfatter Skrevet 30. september 2019 (endret) On 29/09/2019 at 11:05, Moskus said: Men du er på Windows? Du kan bruke ASP-filen min da. https://forums.homeseer.com/forum/homeseer-products-services/system-software-controllers/hs3-hs3pro-software/hs3-hs3pro-discussion/1327309-passing-a-string-to-homeseer-via-http-json-and-then-act-on-it?p=1327829#post1327829 Denne gir deg mulighet til å både sette string og device value, uten å måtte ha CAPI spesifisert. Er på windows ja. Legger du bare denne filen i rotmappen til HS3? Det ser jo mye enklere ut en å bruke json, for deretter bruke en event til å oppdatere strings etterpå. Jeg fikk controldevicevale til å virke, det var det at jeg hadde satt devicen til status only, ikke til status og control. Og så måtte jeg legge inn value range slik at verdiene jeg postet til json stemte med hva devicen var satt opp til. Er det noen grunn til at du setter devicevalue først til 0, deretter til angitt verdi? hs.SetDeviceValueByRef dev, 0, True hs.SetDeviceValueByRef dev, devvalue, True Endret 30. september 2019 av Gjelsvik Siter
Moskus Skrevet 30. september 2019 Skrevet 30. september 2019 1 time siden, Gjelsvik skrev: Legger du bare denne filen i rotmappen til HS3? Nei, i /html. 1 time siden, Gjelsvik skrev: Er det noen grunn til at du setter devicevalue først til 0, deretter til angitt verdi? Nei, det kan du nok ta bort nå. Jeg så at denne filen var fra 2013, og det var en bug i SetDeviceValueByRef den gangen. Nå skal det ikke være nødvendig lenger. Siter
Gjelsvik Skrevet 1. oktober 2019 Forfatter Skrevet 1. oktober 2019 Mulig du setter den til 0 først for at den skal oppdatere "Last changed" feltet? Om man oppdaterer en device med samme verdi som den allerede har så endres ikke tidspunktet for når den sist ble oppdatert. Siter
Moskus Skrevet 1. oktober 2019 Skrevet 1. oktober 2019 2 timer siden, Gjelsvik skrev: Mulig du setter den til 0 først for at den skal oppdatere "Last changed" feltet? Om man oppdaterer en device med samme verdi som den allerede har så endres ikke tidspunktet for når den sist ble oppdatert. Nå kan man ta bort "Do not update device if the device value is the same", det kunne man ikke før. Og nevnte bug i SetDeviceValue. Siter
Gjelsvik Skrevet 4. oktober 2019 Forfatter Skrevet 4. oktober 2019 Nå har jeg det meste på plass, tippinc bucket sensor, arduino som varsler HS Nå mangler jeg en event eller script i HS som kan logge dette til en eller flere devicer, slik at jeg får historikk og grafene jeg ønsker. Et script kunne se slikt ut (usikker på syntaks, så dette blir litt pseudocode) dim increment as decimal = 10 //antall milliliter ved hver tipp av sensoren dim previous_val as decimal = hs.DeviceValueEx(111) dim new_val as decimal = previous_val + increment hs.SetDeviceValueByRef( 111,new_val, True) Ser greit ut? Så kan jeg i eventet f.eks holde styr på "dagens" "månedens" og "totalt" devicene. Siter
Moskus Skrevet 5. oktober 2019 Skrevet 5. oktober 2019 14 timer siden, Gjelsvik skrev: Ser greit ut? Så kan jeg i eventet f.eks holde styr på "dagens" "månedens" og "totalt" devicene. Det ser ikke galt ut. Du kan jo smugkikke på div. muligheter: Siter
Anbefalte innlegg
Bli med i samtalen
Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.