Logging

De zonneboiler

Onze SR1168C controller is via een kabel en een RS485 converter aangesloten op de server. Het uitlezen van de zonneboiler is ontzettend eenvoudig. Door een goede set met tekst richting de controller te sturen krijg je antwoord waaruit je alle informatie van de zonneboiler kan halen. De software lijkt heel erg op die van het uitlezen van de Arduino, echter wordt er niet alleen geluisterd maar ook informatie verzonden.

Het verzenden

initcommand

Wanneer bovenstaande string wordt verstuurd naar de controller dan antwoord de controller met een hele rits aan data. Het verzenden gaat als volgt:

sendcommand

Eerst, voor de zekerheid, zorgen dat er nergens meer informatie in een buffer zit. En daarna door middel van een outputStream de string versturen naar de controller

Het ontvangen en verwerken

Het ontvangen van de data is ook een event, vergelijkbaar met dat van de Arduino. Sterker nog, de code is nagenoeg identiek. Daarom laat ik hier ook alleen het verwerken van de data zien.

receiveData

Alle data komt in een joekel van een string binnen. Elke deel van die string heeft een betekenis. Dankzij een Excelsheet van iemand weet ik exact wat wat is. Vanuit die lijst kan ik dus alle belangrijke data halen zoals T0 tot en met T6, hoe hard de pomp draait, hoeveel er is opgewekt etc.

Het bepalen van die waarden is een ding. Die data ergens opslaan is een andere zaak. Alle data wordt opgeslagen in een database. Door middel van een standaard HTTP aanroep wordt de data verzonden naar mijn database. De database heeft een aparte ingang zodat ik via HTTP de database kan benaderen. Het versturen naar de database gaat zo:

http_save

Maak een URL aan, maak een HTTP connectie, en lees in wat de response is. Alle informatie staat al in de URL vermeld die ik in de database weer uit elkaar kan halen en kan opslaan.

3. De database

Ik maak gebruik van een Oracle 11G XE database.Dit is een gratis database versie van Oracle maar bevat wel alles wat ik nodig heb. Ik heb een Oracle achtergrond en dat maakt dus ook een groot deel uit bij de beslissing om ook hier voor Oracle te kiezen.

dedatabase

Dit zijn alle tabellen die ik op dit moment in gebruik heb.

  • DTS_LOGGING, hier komt alle logging in te staan, vooral wanneer er wat fout gaat. Geeft mij meer inzicht in wat er fout gaat en waarom.
  • DTS_SENSORBASE, elke sensor heeft een bepaalde locatie, of PI waar die op aangesloten zit. Deze zitten allemaal in deze tabel opgeslagen
  • DTS_SENSORCACHE, de meest recente waarde van elke sensor zit in deze tabel opgeslagen, dit geeft een behoorlijke performancewinst
  • DTS_SENSORDATA, dit is de grootste tabel, hier staan alle sensorwaarden in van alle sensoren in de tijd
  • DTS_SENSORS, dit zijn de aangesloten sensoren in het systeem
  • DTS_UNKNOWNSENSORS, alle data die binnenkomt maar die ik nog niet herken wordt hierin opgeslagen. Ik kan dan op een later stadium deze data alsnog inlezen

Ik kan nu door middel van queries live de database bevragen.

query

Dit geeft een overzicht wanneer welke sensor voor het laatst data heeft ontvangen.

Zonneboiler

Het verwerken van de zonneboiler URL die ik eerder noemde gaat als volgt:

verwerken_zonneboiler_plsql

Voor welke losse sensor wordt een aparte procedure gestart die de data verwerkt.