Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Bruke HS til å logge/telle en mengde av noe over tid


Gjelsvik

Anbefalte innlegg

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?

 

 

  • Like 1
Lenke til kommentar
Del på andre sider

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.

Lenke til kommentar
Del på andre sider

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;
}

 

Lenke til kommentar
Del på andre sider

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);");

Lenke til kommentar
Del på andre sider

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?

Lenke til kommentar
Del på andre sider

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.

Lenke til kommentar
Del på andre sider

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.

Lenke til kommentar
Del på andre sider

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.

  • Like 1
Lenke til kommentar
Del på andre sider

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 av Gjelsvik
Lenke til kommentar
Del på andre sider

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.

Lenke til kommentar
Del på andre sider

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.

Lenke til kommentar
Del på andre sider

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.

 

 

Lenke til kommentar
Del på andre sider

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.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.