Im Zuge der voranschreitenden Digitalisierung von Produktions- und Verwaltungsprozessen häufen sich bei uns Anfragen zum Thema automatisierte Datenabfrage in Verbindung mit zielgerichteter Benachrichtigung von verantwortlichen in Produktion und Verwaltung.
Das Problem
Oft ist der erste Schritt im Digitalisierungsprozess diese Daten überhaupt erst einmal zu erfassen. Dazu wird in vielen Fällen eines zentralen Repository in Form einer Datenbank realisiert. Der nächste Schritt dann ist es diesen zur Verfügung stehenden Datenschatz zu heben und auch zur Effizienzsteigerung einzusetzen. Wir erweitern an dieser Stelle ihre Möglichkeiten durch Enterprise Alerts ausgereiftes Alarmierungs- und Filterungssystem. In dem wir die zur Verfügung stehenden Datensätze auf bestimmte Schwellwerte und Schlüsselinformationen hin überprüfen und zielgerichtet an verantwortliche User eskalieren.
Unsere Lösung
In den Anwendungsfall der zu diesen Blog Post geführt hat geht es darum in regelmäßigen Intervallen Temperaturdaten verschiedener Sensoren aus einer SQL Tabelle abzurufen und, sollte ein bestimmter Wert überschritten werden, eine entsprechende Benachrichtigung an ein Wartungsteam zu senden.
Kern des Lösungsvorschlags ist ein simples PowerShell Skript das Daten aus einer Tabelle abfragt und die Resultate als REST Requests an Enterprise Alert weiterleitet. Dieses Skript wird über den Task Scheduler in regelmäßigen Abständen ausgeführt.
- Legen Sie ein neues Powershellscript mit dem unterstehenden Script Code an. Beachten sie dabei die Parameter für DB, REST Endpunkt und SQL query entsprechend anzupassen. Speichern sie es an einer für sie passenden Location in diesem Fall habe ich einfach C:/Scripts gewählt.
$sql = "select sensor, location, temp from Datatable_furnace"; $sqlConnection = new-object System.Data.SqlClient.SqlConnection("Server=sqlserver;User ID=dbread;Password=pw2020;Database=EnterpriseAlert;Integrated Security=true") $sqlConnection.open() $sqlCommand = $sqlConnection.CreateCommand() $sqlCommand.CommandText = $sql $DataSet = new-object System.Data.DataTable $Adapter = new-object System.Data.SqlClient.SqlDataAdapter($sqlCommand) $DataSet = New-Object System.Data.DataSet; $Adapter.Fill($DataSet) $dbConn.Close(); $dbConn.Dispose(); $MyResults = $DataSet.Tables[0]; $MyResults | foreach-object { $sensor = $_.sensor; $location = $_.location; $temp = $_.temp; $request = Invoke-RestMethod "<REST_Endpunkt+APIKey>" -Method POST -ContentType "application/json" -Body "{'Sensor':'$sensor','Location':'$location','Temp':'$temp'}" if ($request.response_type -eq 'error') { $request.error.extended_error_text; } }
- Nun legen Sie im Windows Taskscheduler einen neuen Task, konfigurieren sie ihn sodass er in dem von ihnen gewünschten Intervall triggert und legen sie eine Action an in der sie Powershell wie untenstehend ansteuern und setzen sie die Argumente wie ebenfalls untenstehend beschrieben.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-ExecutionPolicy Bypass -File "C:\Scripts\sql_request.ps1"
- Sollte alles richtig konfiguriert sein werden sie nun in ihrer Enterprise Alert Installation neue REST Requests passend zu ihren Datenbankanfragen erhalten und können, basierend auf diesen Events nun Alarmierungsrichtlinien Konfigurieren.
Zusammenfassung
In diesem Blog beschreiben wir nur einen sehr einfachen Use Case. Es wäre auch denkbar hier über einen Trigger in der SQL Datenbank eine Email mit bestimmt Informationen an Enterprise Alert zu senden um dort ähnlich wie in unseren Teams und Slack Blogs eine Remote Action zu triggern die reaktiv wesentlich gezielter in der DB Informationen abfragt und in Enterprise Alert bereitstellt.
Haben Sie schon einen Idee wie sie so etwas implementieren können? Sollten Sie Fragen haben, stehen wir Ihnen gern unter support@derdack.com zur Verfügung.