Snygga grafer från bergvärmepumpen

Användarvisningsbild
ecenier
Inlägg: 1104
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Snygga grafer från bergvärmepumpen

Inlägg av ecenier »

Ett bidrag till Arduino-tävligen 2019

Jag börjar med resultatet,
Screenshot 2019-03-16 at 23.36.19.png
IMG_0321.jpg
Levande data, http://213.65.212.32:8080/dashboard/sna ... tYKepw43mj


Mitt projekt möjliggör alltså loggning av alla parametrar i en Nibe Fighter 1235 och troligen alla andra modeller som Nibes tillbehör RCU passar till.
Incitamentet för projektet kan man läsa här, https://elektronikforumet.com/forum/vie ... hp?t=94118

Principen är att en Arduino agerar RCU och skickar vidare insamlade parametrar till en MQTT-broker.
Screenshot 2019-03-24 at 18.10.25.png
Hårdvara
RJ45 Nätverkskabel
RS485 till RS232-modul (https://www.sparkfun.com/products/10124) som även finns att hitta på eBay.
Screenshot 2019-03-11 at 20.32.02.png
ESP-01 (Går lika bra andra ESP8266-moduler)
esp8266-esp-01-remote-serial-port-wifi-transceiver-500x500.jpg
Raspberry Pi Zero W (eller någon annan passande linuxplattform)

Mjukvara
MQTT-server (jag använder mosquitto, https://mosquitto.org/)
InfluxDB (databasen där jag sparar all data, https://www.influxdata.com/)
Grafana (Läser data från InfluxDB och presenterar fina grafer, https://grafana.com/)

Koden jag skrivit är implementerad i C i Arduino IDE. Jag har även lite kod skriven i python (glue_script/mqttToInfluxdb.py) för att få in mqtt-topics till influxdb. All kod finns här, https://bitbucket.org/foogadgets/bvptograf

ESP-01 agerar alltså som om den vore en Nibe RCU, och ACKar så fort RCUn adresseras. För att Styrkortet ska adressera RCUn behöver man aktivera detta i menyn 9.2.15. När ESPn ACKat skickar Styrkortet några få antal parametrar. ACKar man igen så skickar den fler parametrar osv. tills alla 97 parametrar är skickade. Sedan växlar styrkortet och “pratar” med andra adressater en stund, för att sedan återkomma till RCU:n igen.
Parameterlistan skickas väldigt ofta, och för att minska Wifi-trafiken skriver jag ner alla parametrar i en array, och skickar det som finns i arrayen med lite längre mellanrum. Just nu ungefär en gång var 30:e sekund.

Parametrarna skickas till en MQTT-broker. Det är första gången jag använder MQTT, och det är en mycket lättviktig och smidig lösning för att dirigera data.
En mqtt-broker har ingen databas utan är bara en förmedlare av data. För att kontinuerligt lagra data så har jag skrivit ett python-script där jag prenumererar på de parametrar jag är intresserad av att logga, och som skickas vidare till en Influx-databas. Att jag valde InfluxDB var för att jag gillade Grafana som i sin tur var lätt att integrera med InfluxDB.

Arduino-koden implementerar en öppen UDP-port (9898) där jag lyssnar efter inkommande paket med parametrar som ska sättas. Detta har jag än så länge inte fått att fungera. Tycker mig ha gjort enligt det som finns beskrivet på nätet och i SEF-tråden här i forumet, men jag får inte det svar jag förväntar mig från Styrkortet. Detta skulle kunna vara så enkelt som att 3,3V-nivån på modulkortet inte räcker till för att kommunicera med Styrkortet. Dock verkar det ju fungera att skicka ACK:ar så jag behöver titta lite närmare på detta.

Elektrisk beskrivning
Busenkelt. RJ45-porten på Nibe innehåller förutom RS485-signaler, även GND, 5V och 12V.
För att kunna koppla signalerna från Niben till ESPn behöver den differentiella signalen omvandlas till RS232 (0V-3,3V) då ESP-01 bara klarar 3,3V på GPIO-portar.
Eftersom Arduino-klonen ESP-01 inte har en spänningsstabilisator som omvandlar 5V till 3,3V så har jag använt en LM1117-3.3.
För att omvandla utsignalen från RS485-modulen använder jag en resistor och en Zenerdiod. På så sätt blir spänningsnivån in till ESP-01 aldrig över 3,3V.
Screenshot 2019-03-24 at 18.09.59.png
Det man behöver se upp med är så klart att man inte kortsluter någon av de ingående stiften i RJ45-kontakten och att polariteten på RS485 är rätt.

Konfigurering och installation
Konfigurera först rätt ip-adress, SSID, lösenord etc i Arduino-koden. Kompilera och ladda ner på ESPn-kortet.

Kod: Markera allt

const char* mqttServer = "192.168.1.3";	// Insert MQTT server IP
const int mqttPort = 1883;
const char* mqtt_user = "mqtt";		      // MQTT user
const char* mqtt_pass = "mqtt";		      // MQTT password
const char* mqtt_client_name = "Nibe1235";
const char* wifi_SSID = "SSID";
const char* wifi_PASSWD = "PASS";
Installera Raspbian på din Raspberry Pi Zero W om du tänker använda en sån som server. Det är en sån jag kör och den klarar enkelt att köra Mosquitto, InfluxDB samt Grafana.
Installera sedan MQTT, InfluxDB samt Grafana enligt någon guide på nätet. Det går att använda standardinställningar nästan rakt igenom.

Referenser
Min kod finns på Github, https://bitbucket.org/foogadgets/bvptograf
Inspirationstråd, https://elektronikforumet.com/forum/vie ... hp?t=13714
Parameterlista, https://www.nibe.hu/Pages/98176/RCU_Par ... 5_1235.pdf
Nibe RCU, http://www.nibeonline.com/pdf/031194-3.pdf
Raspbian, https://www.raspberrypi.org/downloads/raspbian/
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
jah
Inlägg: 659
Blev medlem: 16 januari 2009, 13:00:08
Ort: Eslöv

Re: Snygga grafer från bergvärmepumpen

Inlägg av jah »

Hej!
Jag har byggt en sån här pryl och försöker få den att lira med min VP, men har inte nån tur.
Kollar jag debugutskrift med nc så får jag bara:
Started
Connecting to CloudMQTT..
Connected

Sen dröjer det lite och samma sak igen. Verkar som om ESP:n startar om.
I mqtt-brokern publiceras också Connected, men inget mer.

Har LED:ar på Rx/Tx så ser det blinka lite sporadiskt på Rx, medan Tx ser jag bara tändas upp en ganska lång stund vid omstart (det sprutar ut något).
Har kollat med skåpet också, och signalerna är helt ok.

Någon idé om vad som händer, eller känns igen?
Exakt vilka bibliotek har använts förresten? Fick leta runt och prova diverse innan kompileringen gick igenom, så det är kanske något fel där.

Har det gjorts någon mer utveckling i övrigt?

/J
espNibe.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
ecenier
Inlägg: 1104
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Re: Snygga grafer från bergvärmepumpen

Inlägg av ecenier »

Tänkte se om jag kunde lägga till skrivning till bvp. Tog en ny ESP-01 och flashade.
Fungerade inte...
Backade till flera olika tidigare versioner. Fungerade inte heller.
Det blir allt från stopp efter Connected till att jag faktiskt tar emot ett antal paket som adresserats till RCUn. Men sen blir det stopp igen.

Verkar som det är byggmiljön som är problemet, eftersom den incheckade koden fungerade. Har testat med olika parametrar till ESP-01 men utan framgång.

Har backat till versioner av Arduino-moduler som jag tror mig ha använt när jag byggde sist men inget blev bättre.




.
jah
Inlägg: 659
Blev medlem: 16 januari 2009, 13:00:08
Ort: Eslöv

Re: Snygga grafer från bergvärmepumpen

Inlägg av jah »

Problemet är snarare att ESPn inte klarar 9bit data. Som det är nu så skickas alltid MSB som "1" (stoppbiten blir msb).
Det går alltså inte att skicka en nolla som msb, utan allt som skickas tolkas som adress/kommando. ACK skall om jag förstått rätt också skickas med hög msb, så det funkar så långt.
För att få det att funka med data måste man initiera om UARTen per byte, så jag har inte gett mig på det. Alternativt kan man använda en 'softwareserial', men då har man en del timerinterrupt o annat som kan spöka, så det är inte 'bara att fixa.
/J

[edit]
Såg att jag läste för snabbt, och svarade inte på problemställningen.
Hade hur som helst liknande problem med din kod i början. Kommer inte ihåg exakt vad som nitade, men fungerade rakt av gjorde det inte. Tycker mig minnas att det var något problem med timingen (delayerna) vid till/från av DE.
Ska kolla när jag är hemma.
Användarvisningsbild
ecenier
Inlägg: 1104
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Re: Snygga grafer från bergvärmepumpen

Inlägg av ecenier »

Jag har alltså en ESP-01 som kör min kod sedan februari som fungerar.
Är det det du menar inte ska fungera?
Eller är det sändning du menar? Där kan jag hålla med.


.
jah
Inlägg: 659
Blev medlem: 16 januari 2009, 13:00:08
Ort: Eslöv

Re: Snygga grafer från bergvärmepumpen

Inlägg av jah »

Att du har en redan fungerande betvivlar jag inte, men när jag flashade din original-kod så funkade mina ESP ungefär så som din nya nu verkar göra. Jag mätte upp timingen med oscilloskop och justerade något, men minnet är kort så måste kolla exakt vad.

/J
jah
Inlägg: 659
Blev medlem: 16 januari 2009, 13:00:08
Ort: Eslöv

Re: Snygga grafer från bergvärmepumpen

Inlägg av jah »

Ok, den viktigaste justeringen var nog att ändra "0" till "1" i den första if:en här:

Kod: Markera allt

    case STATE_WAIT_START:  // ================= STATE_WAIT_START =================
      if (Serial.available() > 1) {    // was "> 0"
        byte b = Serial.read();
        if (b == 0x00) {
          buffer[0] = b;
          bufferIndex = 1;
          if (Serial.available() > 0) {    // #2
Det är osäkert om det kommer finnas ett andra tecken i bufferten för uppfylla if #2, och om det inte finns så kommer protokollet ur fas, därav den hackiga mottagningen.
I min kod har jag istället delat upp i två states.

Sedan ändrade jag delayerna i transmit-rutinen så att den första är 50us, och andra tog jag bort.
1ms verkar onödigt långt. Hur länge väntar egentligen Nibe:n innan den gör timeout?
Jag har lagt till bias på linorna också, så om man inte har det är det nog inte fel med 50us efter också - minns inte riktigt hur timingen såg ut efter flush.

Tiden för en byte är ~57us (5.2us/bit), så egentligen är det väl ett mer exakt värde att använda. 50 funkar dock.

/J
Användarvisningsbild
ecenier
Inlägg: 1104
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Re: Snygga grafer från bergvärmepumpen

Inlägg av ecenier »

Har du koden och kan skicka den? Vet inte om jag orkar dra fram oscilloskopet till värmepumpen igen.
jah
Inlägg: 659
Blev medlem: 16 januari 2009, 13:00:08
Ort: Eslöv

Re: Snygga grafer från bergvärmepumpen

Inlägg av jah »

Min kod är inte längre kompatibel med din, så den skulle inte göra dig lyckligare.
Har ändrat och lagt till ganska mycket, och har fortfarande en hel del kvar att fixa innan jag anser den värd att dela.

Testade du att ändra det jag skrev om?

Debugutskrifterna över nätverket är något jag också har problem med. Ibland funkar det, men ofta missas t.ex anslutningsmeddeandena.

Sen kan jag rekommendera en lååång nätverkskabel som räcker från VP till hobbyrummet, så slipper man massor med motion

Ang ESP8266:orna så tror jag det finns en del inbygg kod för wifi/ip-stacken, och den kan säkert ha uppdaterats vilket medför förändringar i beteende mellan olika revisioner. Har haft ett liknande problem med dessa nyligen när jag skulle prova ESP-link och hade köpt ett par nya moduler. Var totalt omöjligt att få igång tills jag prova med en äldre modul. Har dock inte orkat analysera det mer.

/J
Användarvisningsbild
ecenier
Inlägg: 1104
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Re: Snygga grafer från bergvärmepumpen

Inlägg av ecenier »

Nu har jag uppdaterat koden så att den fungerar. Tack för tipsen om problem med den seriella läsningen.

Koden är inte vacker nu, men det var än fulare innan. Orkar inte putsa så mycket på övergripande strukturen just nu.

Eftersom jag använder InfluxDB för att spara data så är jag begränsad av att använda existerande parametrar för att beräkna nya. Därför beräknar jag VB-delta och KB-delta på ESP:n och skickar det som ett separat mqtt-publicering.
Skriv svar