Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for exporting data via API #230

Closed
dajappie opened this issue Jan 12, 2017 · 25 comments
Closed

Support for exporting data via API #230

dajappie opened this issue Jan 12, 2017 · 25 comments
Assignees
Milestone

Comments

@dajappie
Copy link

Hi Dennis,

Recent hebben we hier een slimme meter en een Nest v3, en de meter lees ik naar grote tevredenheid uit met de DSMR-reader via m'n RPi. Top! Nu heeft de Nest een relatief eenvoudige API om binnentemperatuur e.d. uit te lezen. De API loopt via de Firebase-client waarvoor ook een standaard Python versie is. Evt. kan zelfs via eenvoudige HTTP POST data als JSON worden opgehaald als de API niet mogelijk is. Nu gaat dit qua opzet wat verder dan alleen het doel van DSMR uitlezen natuurlijk, maar het lijkt me een mooie toevoeging om m.n. gerelateerd aan het gasverbruik en de buitentemperatuur de huidige en ingestelde binnentemperatuur, de CV aan/uit en huidige luchtvochtigheid te kunnen uitlezen in een paar extra grafieken. Helaas ben ik zelf niet thuis in Python anders zou ik zelf een proof of concept doen.... Zou voor mij een mooie feature zijn!

Gr Jasper

@dennissiemensma dennissiemensma added this to the Backlog / Other milestone Jan 12, 2017
@dennissiemensma
Copy link
Member

Bedankt voor je verzoek en goed om te horen dat je zo tevreden bent!

Wat betreft een koppeling met Nest, ik begrijp de toepassing en opzich snap ik ook wel het nut ervan. Alleen beperkt dit project zich, sowieso de komende tijd, op alleen het uitlezen van de slimme meter en de gegevens daaruit.
Achteraf gezien had ik de huidige temperatuurmetingen (via Buienradar) er ook niet in moeten bouwen. Ze geven immers een te beperkt beeld.
Ik kan je wel aanraden om bijvoorbeeld de koppeling met MinderGas te gebruiken, omdat zij goede ondersteuning voor graaddagen lijken te hebben.

Zie ook soortgelijke tickets zoals #145. De DSMR-gegevens exporteren naar een andere dienst is een ander verhaal, mocht je daar ook mee geholpen zijn.

@dajappie
Copy link
Author

Logisch, pakket moet doen waar het voor gemaakt is. Home Assist en Domoticz kunnen evt. ook maar zijn behoorlijk zwaar/overkill voor alleen monitoring/enkele grafieken. Denk dat ik dan misschien via een nog te maken export de DSMR-gegevens exporteer naar bv. een InfluxDB en dan met Grafana de gecombineerde grafieken in elkaar ga zetten. Misschien dat een export-API daarvoor dan wel handig is om van een periode alle telegrammen uit te kunnen lezen.

@dennissiemensma
Copy link
Member

Wellicht ben je dan nu nog het meeste geholpen met een combinatie van dit API-push-script en (bijvoorbeeld) ndokter/dsmr_parser.
Je zou dan de ruwe telegrammen kunnen doorpushen naar dsmr-reader en daarnaast, in dat script, zelf nog die andere parser gebruiken. Vervolgens kun je dan ook de gegevens uit de parser pushen naar bijvoorbeeld InfluxDB.

Een export-API is zeker mogelijk en lijkt me ook wel iets voor een latere release.

@dennissiemensma dennissiemensma modified the milestones: 1.8, Backlog / Other Jan 13, 2017
@dennissiemensma dennissiemensma changed the title Nest support Support for exporting data via API Jan 13, 2017
@dajappie
Copy link
Author

Cool! Overigens kan Grafana ook dashboards samenstellen uit diverse bronnen, naast InfluxDB ook vanuit Postgres. Als ik vanuit de DSMRreader database de ruwe meterstanden lees (dsmr_consumption_electricityconsumption/dsmr_consumption_gasconsumption) en separaat de Nest-data schrijf naar een InfluxDB (of ook Postgres, maar andere db dan dsmr) dan zijn we er al. Is ook geen export-API nodig want anders blijf je data dupliceren.

@dajappie dajappie reopened this Jan 13, 2017
@dajappie
Copy link
Author

Hi Dennis, heb nog even wat verder zitten kijken, maar Grafana ondersteunt geen Postgres alleen als config-opslag. Als je toch de export mogelijk gaat heroverwegen dan is misschien een generieke export van data naar bv. StatsD een optie. Als je na het parsen van het P1-telegram en/of op het moment van een db-insert van de gecalculeerde gas/elektra de waardes naar StatsD kan sturen, kan je vanuit StatsD met alle z'n eigen exports zelf bepalen wat er verder mee gebeurt (bv. Telegraf --> InfluxDB --> Grafana). StatsD is ook lekker licht en eenvoudig aan te roepen op een UDP-poortje. Het voordeel van een export van bv. een telegram vanuit DSMRreader is dat er maar 1 lock op serial device /dev/ttyUSB0 kan zijn, dus meerdere loggers/parsers naast elkaar kan al niet. En DSMRreader heeft al een goede parser in huis, en aggregeert ook al wat van de ruwe data. Just my 2 cents.

@dennissiemensma
Copy link
Member

Ik begrijp dat het makkelijk is om support voor een specifieke tool te krijgen, alleen probeer ik juist een zo generiek mogelijke groep te ondersteunen.

Je zult daarom het uitlezen van je meter en de parser van dit project los moeten zien. Juist met de eerder aangegeven tip trek je dat los en heb je ook geen last van de serial locking. Het mooie aan de parser van ndokter is ook dat je zelf bepaalt welke velden je nodig hebt.

Vandaar dat ik denk dat je eerlijk gezegd het meeste geholpen bent met het apart uitlezen van de kabel en vervolgens die data zowel naar dsmrreader stuurt als door de parser van ndokter, zodat je die vervolgens naar elke backend kan duwen die je maar wil.

@dajappie
Copy link
Author

dajappie commented Feb 2, 2017

Bedankt voor alle input. Heb inmiddels de datalogger vervangen door je example clientscript met de API-call, nog beetje aanpassen met de code van Nigel Dokter voor het parsen. Voor zover ok. Echter de CPU-load is enorm omhoog geschoten op het dsmr_datalogger proces. De supervisor-logs van dsmr_datalogger worden nu niet meer gevuld met de ruwe telegram data, maar met "Starting INFINITE command loop...". Kan het datalogger proces volledig uit nadat deze vervangen is door een remote datalogger? Zoja, in de supervisor configuratie kan ik deze niet vinden.

@dennissiemensma
Copy link
Member

Ja dat proces kan uit als je zeker weet dat datalogging via de API goed werkt. Je kunt hem in de eerste instantie uitzetten in Supervisor met:

  • sudo supervisorctl
    Als het goed is zie je ergens dsmr_datalogger met RUNNING
  • stop dsmr_datalogger
  • Wanneer je hierna nog steeds telegrammen ziet binnenkomen in de applicatie, werkt het naar behoren.

Vermoedelijk komt de hoge load doordat ze constant lopen te concurreren met elkaar om de seriale poort.

Als je de datalogger permanent uit Supervisor wil halen (hij blijft starten na een rPi restart), dan moet je hem uit de config halen. Die ziet er zo uit en staat in /etc/supervisor/conf.d/dsmr-reader.conf. Je kunt daar regel 1 tot en met 18 weghalen of uitcommenten.

Vervolgens doe je: sudo supervisorctl reread en sudo supervisorctl update. Als je dan sudo supervisorctl status doet zou je hem niet meer moeten zien.

@dajappie
Copy link
Author

dajappie commented Feb 2, 2017

Opgelost, zoals verwacht idd de datalogger. Had in de DSMRreader config de P1 check al uitgezet, maar die zet niet zoals ik dacht de datalogger uit. Misschien ideetje om die paar regels voor het handmatig uitzetten nog in de documentatie op te nemen? Enorm bedankt voor de hulp!

@dennissiemensma
Copy link
Member

Goed om te horen, ik ga nog wat instellingen documenteren in #232, dus wellicht dat ik daar nog iets over neerzet.

@FutureCow
Copy link

FutureCow commented Feb 6, 2017

Ik dacht toen ik API zag staan in de documentatie, dat dit al ging om gegevens te exporteren. Helaas kan de API alleen gebruikt worden om gegevens te importeren. Dus ook hier behoefte aan het exporteren van de gegevens.

Wellicht gewoon een simpel xml met:
<consumption>
<electricity>
<electricity_delivered_1>153.90</electricity_delivered_1>
<electricity_delivered_2>138.70</electricity_delivered_2>
<electricity_delivered_today_1>4.90</electricity_delivered_today_1>
<electricity_delivered_today_2>1.70</electricity_delivered_today_2>
<electricity_currently_delivered>0.789</electricity_currently_delivered>
</electricity>
<gas>
<gas_delivered>53.78</gas_delivered>
<gas_delivered_today>1.79</gas_delivered_today>
<gas_currently_delivered>0.023</gas_currently_delivered>
</gas>
</consumption>
<returned>
<electricity_returned_1>23.90</electricity_returned_1>
<electricity_returned_2>4.70</electricity_returned_2>
<electricity_returned_today_1>0.90</electricity_returned_today_1>
<electricity_returned_today_2>0.00</electricity_returned_today_2>
<electricity_currently_returned>0.245</electricity_currently_returned>
</returned>

Dit lijkte natuurlijk al veel op http://ip/admin/dsmr_datalogger/dsmrreading/

@Jeltel
Copy link

Jeltel commented Feb 10, 2017

Ik ben ook geïnteresseerd in het ophalen van data via een API. Dat mag een eenvoudige api zijn die via xml output levert.
Zoiets als hierboven, maar dan voor een te kiezen tijdstip.
Een beetje zoals via de admin console kan. maar daar kun je ze alleen inzien en verwijderen. En ook alleen per 10seconden.
Ik stel me zo voor dat je kunt kiezen uit 15 minuten, uur en dag ofzo.

Zie ook de api's van de professionele ODA's.
https://www.ealyze.nl/api/

@jwveldhuis
Copy link

Same here, ik gebruik OpenHAB als domotica systeem en zou graag daar in die interface wat statistieken willen tonen, zoals actueel gebruik en dagtotalen voor gas en elektriciteit. Een simpele GET REST XML/JSON API is wat mij betreft OK.

@dennissiemensma dennissiemensma modified the milestones: 1.7, 1.8 Feb 15, 2017
@dennissiemensma
Copy link
Member

Bedankt voor alle suggesties. Ik zal in dat geval in een release zorgen voor (JSON) API functionaliteit. Dat is waarschijnlijk niet de aankomende (1.6) maar de release erna.

@pyrocumulus
Copy link
Contributor

Hierbij ook de vraag naar een JSON API voor gegevensexport. Ik begrijp je terughoudendheid wel met het inbouwen van allerlei koppelingen die niet noodzakelijk met de slimme meter zelf te maken hebben. DSMR is juist zo fijn omdat het zich focust op uitsluitend de slimme meter.

Een export API samen met de in #9 genoemde koppeling met PVOutput zou voor mij genoeg analysemogelijkheden bieden. PVOutput voor een goed beeld van mijn zonnepanelen en verbruik, net zoals Mindergas werkt voor een goede analyse met graaddagen.

Ga zo door 👍

@dennissiemensma
Copy link
Member

Bedankt voor je input. Uiteindelijk komt er zeer waarschijnlijk toch een API voor het exporteren van de data. En mogelijk ondersteuning voor MQTT.

@dennissiemensma dennissiemensma added this to the 1.7 milestone May 2, 2017
@dennissiemensma
Copy link
Member

Ik ben eindelijk klaar! Zojuist is ook de laatste documentatie bijgewerkt en vertaald (op dev-versie docs).

De API is momenteel alleen nog beschikbaar in de toekomstige-release-branch. Komende dagen ga ik nog wat dingen uitproberen en nalopen, maar daarna kan ik het eindelijk releasen.

@jwveldhuis
Copy link

Wow! Heb enkel je documentatie bekeken, maar wat een werk moet dat zijn geweest. Erg grondig aangepakt!
Ik wacht even op de officiële release voordat ik het op mn domoticasysteem ga aansluiten.

@dennissiemensma
Copy link
Member

Bedankt voor jullie geduld, eindelijk is het zover, v1.7 is uit met de API. Neem wel de release notes in acht.

Vermoedelijk komen er nog wel kleine dingetjes of wensen voor eventuele uitbreiding voort uit deze release. Ik zie die graag tegemoet via een nieuw ticket. Mogelijk bundel ik die dan later weer met andere wensen voor de API. Hetzelfde geldt wanneer de voorbeelden uit de documentatie niet afdoende zijn, ik hoor het graag. :]

@mkruiver
Copy link

mkruiver commented May 5, 2017

Gaaf, bedankt! Ik kan niet wachten op de PVO koppeling ;)

@pyrocumulus
Copy link
Contributor

pyrocumulus commented May 5, 2017 via email

@dennissiemensma
Copy link
Member

Het lijkt erop dat het onderliggende API-framework eindelijk dit issue heeft opgelost.

Wanneer ik een nieuwe versie van dat framework probeer, falen mijn tests. Er komt nu eindelijk gelokaliseerde tijd mee:

AssertionError: '2017-01-01T01:00:00+01:00' != '2017-01-01T00:00:00Z

Ik controleer of alles klopt en dan neem ik het mee in de volgende v1.9 release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants