Zonnnepanelen Data scrapen van locale webserver

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Valkaniac
  • Registratie: Augustus 2011
  • Laatst online: 07-10 10:25
Hallo medetweakers,

Ik heb via via wat hardware voor zonnepanlen op de kop getikt waar ik wat mee aan het experimenteren ben.
Hardware aanwezig:
Enphase Envoy
Enphase m215 microomvormer
250Wp panneel

Nu heb ik dit werkend en kan ik ook op de envoy inloggen om de huidige opbrengst te zien.
Daar het hardware is wat is afgeschreven is wil ik geen gebruik maken van de officiële kanalen om te loggen.

Via http://[envoy-ip]/api/v1/production in plain text krijgen wat ik wil (dit ziet er dan zo uit)
code:
1
2
3
4
5
6
{
  "wattHoursToday": 518,
  "wattHoursSevenDays": 618,
  "wattHoursLifetime": 12953156,
  "wattsNow": 91
}


Nu zoek ik een stukje software/commando om dit elke 5 minuten te kunnen 'scrapen' en op te slaan.
Uiteindelijk wil ik waarschijnlijk iets in excel oid maken voor een grafiek maar mogelijk nog iets anders (tips welkom)

De data die voor mij belangrijk is (met elke 5 min scrapen) is "wattsNow" en einde v.d. dag "wattHoursToday" maar alles opslaan mag uiteraard ook.

Nu kan ik zelf gaan stoeien maar om heel eerlijk te zijn ben ik niet zo'n programmeur.
Ik zou al enorm geholpen zijn met iets waarmee ik alle info op 1 regel krijg (zonder enters) met een datum/tijd ervoor.
Iets in deze trand:
code:
1
 YYYYMMDD UUMM { "wattHoursToday": 518,  "wattHoursSevenDays": 618,  "wattHoursLifetime": 12953156,  "wattsNow": 91 }

Nu kan ik mij voorstellen dat hier software voor is maar iets wat lokaal werkt en gratis is kon ik niet zo vinden (wel veel professionelere tools betaald maar die doen meer dan wat er voor mij nodig is).

Kan iemand mij hiermee op weg helpen? Of heeft tips voor software?

Beste antwoord (via Valkaniac op 30-06-2018 18:27)


  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

code:
1
2
3
4
5
Invoke-WebRequest -Uri http://dat-ip-adres/file.txt -OutFile test.txt
$rand_date = get-date -UFormat "%Y%m%d %H%M"
$rand_power = Get-Content test.txt -ReadCount 6 | ForEach{$_ -Join " "}
Write-Output "$rand_date   $rand_power" >> output.csv
Remove-Item test.txt -Confirm $false

Of zoiets... Even snel in elkaar gerammeld tijdens FRA - ARG ;)

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof

Alle reacties


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

Zelfs Notepad++ kan dit maar daar zit meer handwerk aan vast. Uiteindelijk is het niets meer/minder dan 1 txt ophalen, inhoud verbouwen met vastgestelde zaken (linebreaks, tabs, etc) en wegschrijven in/naar een andere file (bij voorkeur csv of een lightweight database).

Ook mis ik welk OS je gebruikt op je eigen machine; dat zou helpen met ideeen spuien.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • +1 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 14:45
Kijk eens naar NodeRED voor het scrapen. Opslaan in bijv. InfluxDB en grafieken van maken met Grafana.

Dat alles draai je dan op een Raspberry Pi bijv.

Of je zet een DIN-rail kWh-meter tussen de omvormer en netstroom en zet daar een YouLess op. Kun je het uploaden naar PVOutput.org zonder te hoeven scripten.

Acties:
  • 0 Henk 'm!

  • Valkaniac
  • Registratie: Augustus 2011
  • Laatst online: 07-10 10:25
Ah goed punt, gaat om Windows 10,
Ik weet dat notepad++ dit kan maar als ik het stuk van website naar textfile kan automatiseren zou dat natuurlijk fijn zijn ;)

Wat ik uiteindelijk zou willen is waarschijnlijk windows based (daar ik toch een server draaiende heb en geen Pi heb liggen/intentie om daar mee te gaan programmeren.

Suggestie van kWh meter is wel een goede ;)

[ Voor 40% gewijzigd door Valkaniac op 30-06-2018 17:19 ]


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

Windows 10? Dan kan je met iets als Powershell best ver komen.

Invoke-Webrequest om de file op te halen
Select-String om je file te lezen en je "waarden" te matchen
Pipe | om de "waarden" naar een CSV te gooien
Start-Sleep om een timer tr maken en opnieuw beginnen

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 14:45
Als je aan het scripten gaat kun je nog steeds wel naar PVOutput sturen. Ze hebben een API.

Voordeel is dat je zelf geen DB en grafieken hoeft te maken.

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

code:
1
2
3
4
5
Invoke-WebRequest -Uri http://dat-ip-adres/file.txt -OutFile test.txt
$rand_date = get-date -UFormat "%Y%m%d %H%M"
$rand_power = Get-Content test.txt -ReadCount 6 | ForEach{$_ -Join " "}
Write-Output "$rand_date   $rand_power" >> output.csv
Remove-Item test.txt -Confirm $false

Of zoiets... Even snel in elkaar gerammeld tijdens FRA - ARG ;)

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • +1 Henk 'm!

  • Valkaniac
  • Registratie: Augustus 2011
  • Laatst online: 07-10 10:25
MAX3400 schreef op zaterdag 30 juni 2018 @ 17:52:
code:
1
2
3
4
5
Invoke-WebRequest -Uri http://dat-ip-adres/file.txt -OutFile test.txt
$rand_date = get-date -UFormat "%Y%m%d %H%M"
$rand_power = Get-Content test.txt -ReadCount 6 | ForEach{$_ -Join " "}
Write-Output "$rand_date   $rand_power" >> output.csv
Remove-Item test.txt -Confirm $false

Of zoiets... Even snel in elkaar gerammeld tijdens FRA - ARG ;)
Oh hey cool, nog even wat bijschaven maar dat ziet er goed uit!

Zelf al tot hier gekomen
code:
1
2
3
4
5
6
7
8
9
$url = "http://envoy/api/v1/production"
$output = "$PSScriptRoot\temp.txt"

Invoke-WebRequest -Uri $url -OutFile $output

$text = ((Get-Content -Path "$PSScriptRoot\temp.txt" -Raw) -split "(\r*\n){2,}") -replace '\r*\n', ''
$text | Out-File "$PSScriptRoot\oneline.txt"
del "$PSScriptRoot\temp.txt"
pause


Nu jou scriptje even bijschaven :)

Edit:
Hey wauw hij voegt automatisch toe aan de CSV, neat :*)

Na wat bijschaven hier op uitgekomen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Invoke-WebRequest -Uri http://envoy/api/v1/production -OutFile tmp.txt
Get-Content tmp.txt  |
 Foreach {$_ -replace "wattHoursToday"}  |
 Foreach {$_ -replace "wattHoursSevenDays"}  |
 Foreach {$_ -replace "wattHoursLifetime"}  |
 Foreach {$_ -replace "wattsNow"}  |
 Foreach {$_ -replace '"', ""}  |
 Foreach {$_ -replace '{', ""}  |
 Foreach {$_ -replace '}', ""}  |
 Foreach {$_ -replace ':', ""}  |
 Foreach {$_ -replace ' ', ""}  |
Set-Content "tmp1.txt"
del tmp.txt
ren tmp1.txt tmp.txt

$rand_date = get-date -UFormat "%Y-%m-%d , %H:%M ,"
$rand_power = Get-Content tmp.txt -ReadCount 6 | ForEach{$_ -Join " "}
Write-Output "$rand_date   $rand_power" >> output.csv


Krijg ik een file die er zo uit ziet:
code:
1
2
3
4
590,
690,
12953228,
6


Die extra enters gaan er uit bij de conversie naar csv, ik ben helmaal happy zo _/-\o_
ThinkPadd schreef op zaterdag 30 juni 2018 @ 17:34:
Als je aan het scripten gaat kun je nog steeds wel naar PVOutput sturen. Ze hebben een API.

Voordeel is dat je zelf geen DB en grafieken hoeft te maken.
Hier ga ik naar kijken als ik een wat meer permanente setup heb, nu staat ie tegen de containers op de oprit O-)

[ Voor 44% gewijzigd door Valkaniac op 30-06-2018 18:29 ]

Pagina: 1