What is this?

This knowledgebase contains questions and answers about PRTG Network Monitor and network monitoring in general.

Learn more

PRTG Network Monitor

Intuitive to Use. Easy to manage.
More than 500,000 users rely on Paessler PRTG every day. Find out how you can reduce cost, increase QoS and ease planning, as well.

Free Download

Top Tags

View all Tags

Powershell sensor script to gather to gather data from SAJ solar inverter



hello, I decided to write and share with you a script for downloading data from the SAJ inverter and presenting the data in PRTG. The original inverter tracking software is very limited and as I have PRTG instance at home on my ESX, I decided to use it for these purposes. Technically this is a advanced server which generates xml. It generates 35 channels. All data came from csv which is loaded from device interface. All you need to change ip to your.

function Get-Data {
	[int]$LocalDevicePort = "80"
    $url = "http://"+ $deviceIP +"/status/status.php"
    $test = test-netconnection -ComputerName $deviceIP -Port $LocalDevicePort
    if ($test) {
        $method = "GET"
        $WebResponse = Invoke-WebRequest -Uri $url -Method $method
        $Content = $WebResponse.Content
        Return $content
        } else {
        Write-Output "host not responding"
        }#end if

function Get-Table {

$statusfieldnames = @('Statistics', 'Total_Generated', 'Total_Running Time', 'Today_Generated', 'Today_Running_Time', 'PV1_Voltage', 'PV1_Current', 'PV2_Voltage', 'PV2_Current', 'PV3_Voltage', 'PV3_Current', 'PV1_StrCurr1', 'PV1_StrCurr2', 'PV1_StrCurr3', 'PV1_StrCurr4', 'PV2_StrCurr1', 'PV2_StrCurr2', 'PV2_StrCurr3', 'PV2_StrCurr4', 'PV3_StrCurr1', 'PV3_StrCurr2', 'PV3_StrCurr3', 'PV3_StrCurr4', 'Grid-connected_Power', 'Grid-connected_Frequency', 'Line1_Voltage', 'Line1_Current', 'Line2_Voltage', 'Line2_Current', 'Line3_Voltage', 'Line3_Current', 'Bus_Voltage', 'Device_Temperature', 'CO2emission_Reduction', 'Other_Status')
$unitsfieldnames  = @(        'na',             'kWh',                  'h',             'kWh',                  'h',           'V',           'A',           'V',           'A',           'V',           'A',            'V',            'A',            'A',            'A',            'A',            'A',            'A',            'A',            'A',            'A',            'A',            'A',                    'W',                       'Hz',             'V',             'A',             'V',             'A',             'V',             'A',           'V',                  'C',                    'Kg',           'na')
$divisorfields    = @(         '1',             '100',                 '10',             '100',                 '10',          '10',         '100',          '10',         '100',           '1',           '1',            '1',            '1',            '1',            '1',            '1',            '1',            '1',            '1',            '1',            '1',            '1',            '1',                    '1',                      '100',            '10',           '100',            '10',           '100',            '10',           '100',          '10',                 '10',                    '10',            '1')

$ValueArray = $DataString.split(',')

if (($statusfieldnames.count) -eq ($ValueArray.count)) {$max = $statusfieldnames.count}
$result = for ($i = 0; $i -lt $max; $i++) {
        channel = $statusfieldnames[$i]
        value   = ([string]([double]($ValueArray[$i]) / [int]($divisorfields[$i]) )).replace(',','.')       
        unit    = $unitsfieldnames[$i]
Return $result

function Get-XML {

$prtg = '<?xml version="1.0" encoding="Windows-1252" ?> 

#$prtg = '<prtg>'

foreach ($row in $Table) { 
    $channel = $row.channel
    $value = $row.value
    $unit = $row.unit
    if ($value.Contains('.')) {$float = 1} else {$float = 0}
    if ($channel) {
        $prtg +="

$prtg +="</prtg>" 
return $prtg 

$data  = Get-Data  -DeviceIP   $IP
$table = Get-Table -DataString $data 
[xml]$xml = New-Object System.Xml.XmlDocument
[xml]$xml = Get-XML -Table $table


custom-sensor inverter powershell prtg saj

Created on Oct 26, 2020 8:55:45 PM

Last change on Oct 27, 2020 6:07:31 AM by  Marijan Horsky [Paessler Support]

1 Reply




Thank you very much for sharing your script with the community. We greatly appreciate your initiative which contributes to make PRTG better.

Kind regards.

Created on Oct 27, 2020 7:03:03 AM by  Florian Lesage [Paessler Support]

Last change on Oct 27, 2020 7:03:19 AM by  Florian Lesage [Paessler Support]

Disclaimer: The information in the Paessler Knowledge Base comes without warranty of any kind. Use at your own risk. Before applying any instructions please exercise proper system administrator housekeeping. You must make sure that a proper backup of all your data is available.