# MQTT2PRTG-simple.ps1 # # Simple Script to subscribe to all MQTT-Channels and forward them to PRTG via HTTPPush # # 2018102 Initial version # param ( [string]$prtghost = "http://prtg:5050", [string]$mqtthost = "192.168.178.10" ) Set-PSDebug -Strict; set-strictmode -version latest write-host "PRTG-MQTT-Simple: Start"; $computerfqdn=([System.Net.Dns]::GetHostByName(($env:computerName))).hostname try { write-host " Loading M2MQTT Library 4.3.0.0" Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\M2Mqtt.4.3.0.0\lib\net45\M2Mqtt.Net.dll" } catch{ write-host " Please install Module M2MQTT with Install-Package M2Mqtt" write-Error "Missing Module M2MQTT" exit } write-host " Creating MQTTClient" $MqttClient = [uPLibrary.Networking.M2Mqtt.MqttClient]($mqtthost) write-host " Connect to MQTT-Server" $mqttclient.Connect("PRTG-MQTT on $($computerfqdn) $([guid]::NewGuid())") | out-null #Write-host " Sending a I am up Information to Broker" #$MqttClient.Publish("PRTG2MQTT/$($computerfqdn)",[System.Text.Encoding]::UTF8.GetBytes("Im up at $($computerfqdn)")) | out-null Write-host " MQTT Library initalized" write-host "remove existing Get-EventSubscriber" Get-EventSubscriber | Unregister-Event write-host "Register Eventhandler for MQTTClient: MqttMsgPublishReceived" Register-ObjectEvent ` -inputObject $MqttClient ` -EventName MqttMsgPublishReceived $MqttClient.Subscribe("#",0) | out-null write-host "Start Processing Loop" [console]::TreatControlCAsInput = $true while ($true){ write-host "$(get-date -Format yyyy.MM.dd.HH:mm:ss) Waiting 1 Second for Events Press any key to terminate." -nonewline $event = wait-event -Timeout 1 if ([console]::KeyAvailable) { write-host "KEypress detected - Terminating" Break } if ($event) { write-host " New Event Found." $topic = $event.SourceArgs[1].Topic $message = $([System.Text.Encoding]::UTF8.GetString($event.SourceArgs[1].message)) Write-host "Topic: $($topic) Message: $($message)" if ($prtghost -ne ""){ #GET http://:/?value= &text= [string]$prtgurl = "$($prtghost)/$($topic.replace("/","-"))?value=$($message)" write-host "Sending Data to PRTG $($prtgurl)" try { $Answer=Invoke-Webrequest ` -method "GET" ` -URI $prtgurl ` -usebasicparsing if ($answer.Statuscode -ne 200) { write-warning " Request to PRTG failed" } else{ $answer.content } } catch { write-host "Unable to POST to PRTG. No Connections" } } remove-event -EventIdentifier $event.EventIdentifier } else { Write-host " No Event found" } } [console]::TreatControlCAsInput = $false write-host "Disconnecting MQTT" $MqttClient.Disconnect() write-host "Removing EventSubscriber" Get-EventSubscriber | Unregister-Event write-host "PRTG-MQTT-Simple: End"