shaupti Posted July 12, 2020 Share Posted July 12, 2020 Hallo, Ist es möglich das ein Media Server einen anderen weckt ein wake on lan sendet, der per RTSP eingebunden ist? Quote Link to comment
Griga Posted July 12, 2020 Share Posted July 12, 2020 Nein, das ist nicht vorgesehen. Man könnte es höchstens als externe Aufgabe (z.B. mittels Skript bzw. Start eines bereits vorhandenen WOL-Tools) einbinden, um Wake on LAN über das Webinterface manuell zu senden. Quote Link to comment
shaupti Posted July 12, 2020 Author Share Posted July 12, 2020 Hm, ok Das ist doof. Bräuchte das aufwecken, nur wenn die Tuner Anzahl nicht mehr langt. Kann man das Script anhand der Timer anzahl oder sonst wie automatisieren? Quote Link to comment
nuts Posted July 12, 2020 Share Posted July 12, 2020 Kann man indem das Script per API die Tuner Anzahl auswertet. http://en.dvbviewer.tv/wiki/Recording_Service_web_API#Status2 Quote Link to comment
shaupti Posted July 12, 2020 Author Share Posted July 12, 2020 Sieht vielversprechend aus. Hab nur absolut keine Ahnung wie man das script zur Auswertung schreiben muss. Quote Link to comment
shaupti Posted July 15, 2020 Author Share Posted July 15, 2020 Kann mir bitte einer das Script schreiben? Quote Link to comment
nuts Posted July 16, 2020 Share Posted July 16, 2020 Kannst du ein bisschen programmieren? Dann könnte ich ein paar Codebespiele (Skriptsprache autoit) raussuchen die dir vielleicht dabei helfen. Für das komplette Skript fehlt mir im Moment die Zeit sorry. Quote Link to comment
shaupti Posted July 16, 2020 Author Share Posted July 16, 2020 (edited) Nicht direkt, bin aber lernfähig. Und code anpassen, hat bis jetzt mehr oder weniger immer funktioniert. Weiß nicht nach was ich suchen soll, Hatte mal gesehen, das du vor einiger zeit mal was zum anzeigen der api gemacht hattest, Mir fehlt jetzt doch theoretisch noch das Auswerten und das if then Also bitte her damit. Edited July 16, 2020 by shaupti Quote Link to comment
nuts Posted July 17, 2020 Share Posted July 17, 2020 Spoiler #include <WinHTTP.au3> #include <File.au3> #include <Array.au3> #include <date.au3> #include <String.au3> Global $ip="192.168.1.100" Global $port=8089 Global $user="admin" Global $pass="" Global $request="/api/status2.html" Global $s_output Global $s_wol_broadcastip Global $i_wol_port $s_output=_Sendrequest($ip, $port, $user, $pass, $request) if @error then MsgBox(0, "Error", @error) MsgBox(0, "XML", $s_output) Global $tunercount=_StringBetween($s_output, "<tunercount>","</tunercount>") if IsArray($tunercount) then MsgBox(0, "Tunercount", $tunercount[0]) else MsgBox(0, "Error", "_StringBetween") endif ; hier gehts dann weiter mit if ... > ... then wake on lan etc. Func _WOL($s_MAC) ;The MAC-Address of the Network Adapter in the format "XXXXXXXXXXXX" UDPStartup() Local $Broadcast = UDPOpen($s_wol_broadcastip, $i_wol_port, 1) UDPSend($Broadcast, _MagicPacket($s_MAC)) if @error then UDPCloseSocket($Broadcast) Return SetError(1,0,0) endif UDPCloseSocket($Broadcast) UDPShutdown() EndFunc ;==>_WOL Func _MagicPacket($sMac) ;Author: Prog@ndy ;The MAC-Address of the Network Adapter in the format "XXXXXXXXXXXX" If Not IsBinary($sMac) Then $sMac = Binary('0x' & StringRegExpReplace($sMac, '(0x)|[^A-Za-z0-9]', '')) Local $binPacket = Binary('0xFFFFFFFFFFFF') For $i = 1 To 16 $binPacket &= $sMac Next Return $binPacket EndFunc ;==>_MagicPacket Func _Sendrequest($s_ip, $i_port, $s_user, $s_password, $s_request) ;bsp: http://192.168.1.100/tasks.html?task=CI_Reset&aktion=tasks ; http://192.168.1.100/tasks.html?task=CleanupRefreshDB&aktion=tasks Local $sHeader, $authorization = _Base64Encode($s_user & ':' & $s_password) Local $hOpen = _WinHttpOpen("Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 GTB7.1") Local $hConnect = _WinHttpConnect($hOpen, $s_ip, $i_port) If @error Then $reterror = "_Sendrequest - Fehler beim Verbinden mit dem Webserver INI überprüfen!" _WinHttpCloseHandle($hConnect) _WinHttpCloseHandle($hOpen) SetError(1, 0, 0) EndIf Local $hRequest = _WinHttpOpenRequest($hConnect, 'GET', $s_request) _WinHttpSendRequest($hRequest, 'Authorization: Basic ' & $authorization) _WinHttpReceiveResponse($hRequest) If _WinHttpQueryDataAvailable($hRequest) Then $sHeader = _WinHttpQueryHeaders($hRequest) Local $data = '' Do $data &= _WinHttpReadData($hRequest) Until @error _WinHttpCloseHandle($hRequest) _WinHttpCloseHandle($hConnect) _WinHttpCloseHandle($hOpen) Return $data EndFunc ;==>_Sendrequest Func _Base64Encode($sData) ; keine Ahnung von wem die Funktion is (nicht von mir) Local $oXml = ObjCreate("Msxml2.DOMDocument") If Not IsObj($oXml) Then SetError(1, 1, 0) EndIf Local $oElement = $oXml.createElement("b64") If Not IsObj($oElement) Then SetError(2, 2, 0) EndIf $oElement.dataType = "bin.base64" $oElement.nodeTypedValue = Binary($sData) Local $sReturn = $oElement.Text If StringLen($sReturn) = 0 Then SetError(3, 3, 0) EndIf Return $sReturn EndFunc ;==>_Base64Encode Quote Link to comment
nuts Posted July 17, 2020 Share Posted July 17, 2020 Ein Beispiel in der Skriptsprache autoit. Musst du noch "compilieren" etc. vielleicht hilft dir hier auch jemand weiter: https://autoit.de/index.php/BoardList/?s=a6386f7c15da61e814d04051c5653941a3b0da8c Quote Link to comment
shaupti Posted July 22, 2020 Author Share Posted July 22, 2020 (edited) So hab mal bissle rum probiert. Spoiler #include <WinHTTP.au3> #include <File.au3> #include <Array.au3> #include <date.au3> #include <String.au3> Global $ip="xxxxxxxxxxxxxxxxxxx" Global $port=8089 Global $user="xxxxx" Global $pass="xxxxx" Global $request="/api/status2.html" Global $between global $tum ;~ $string nur zum auswerten $string = "<tunercount>8</tunercount>" $abda = "<tunercount>" $bisda = "</tunercount>" $between = _StringBetween($string, $abda, $bisda) _ArrayDisplay($between, "Tuner") $tum = _ArrayToString ($between) if $tum = 8 Then Run ("C:\Windows\System32\notepad.exe") EndIf MsgBox(0, "String", $tum) ip user pass ist natürlich richtig eingetragen. Also vom Prinzip funktioniert die Auswertung, wenn ich einen Wert bekomme. Sende das Wakeonlan über ein anderes Tool. (Notepad ist nur zum testen da) Ich brauch ja nur den Wert zwischen <tunercount> 2 </tunercount> also hier zb die 2. Bekomme es aber nicht hin von der api den Status abzurufen. Edited July 22, 2020 by shaupti Quote Link to comment
nuts Posted July 22, 2020 Share Posted July 22, 2020 Deinen Versuch den API Status abzurufen sehe ich leider nicht, daher schwer zu sagen was da falsch läuft. Ansonsten: _ArrayDisplay($between, "Tuner") $tum = _ArrayToString ($between) ; das ist nix, besser so (ungefähr aus dem Kopf) $Global $tum ;erst die Variablen deklarieren (z.B. am Anfang des Skript wie bei $ip usw.) if isarray($between) then ; damit fängst du einen Fehler in _Stringbetween ab bevor auf das Array zugegriffen wird (ansonsten crasht das Skript) _ArrayDisplay($between, "Tuner") $tum = $between[0] ; direkter Zugriff auf den ersten Treffer else ;hier kann noch was rein um den abgefangenen Fehler zu dokumentieren wie z.B. _Filewritelog Exit ; beendet das Skript da ohne Array keine Auswertung endif if $tum = 8 then Run("....") endif msgbox(0, "", $tum) ; die Zeile nur für debug Zwecke, da ansonsten eine Benutzereingabe nötig wird (aus dem Systemkonto des DMS nicht möglich!) Quote Link to comment
shaupti Posted July 22, 2020 Author Share Posted July 22, 2020 hatte gedacht das wird mit dem hier gemacht un der request gibt es mir aus. Spoiler Global $ip="xxxxxxxxxxxxxxxxxxx" Global $port=8089 Global $user="xxxxx" Global $pass="xxxxx" Global $request="/api/status2.html" hatte dann noch sowas probiert Spoiler #include <IE.au3> #include <Array.au3> #include <String.au3> $test="http://x.x.x.x:8089/api/status2.html $oIE = _IECreate($test) $sHTML = _IEBodyReadText($oIE) der öffner mir auch die seite usw. , nur wie hole ich mir da was raus? Und wie funktioniert das mit dem user zusammen mit der adress zeile? Quote Link to comment
nuts Posted July 22, 2020 Share Posted July 22, 2020 Habs mal zusammengebaut: Spoiler #include <WinHTTP.au3> #include <File.au3> #include <Array.au3> #include <date.au3> #include <String.au3> Global $ip="192.168.1.100" Global $port=8089 Global $user="admin" Global $pass="" Global $request="/api/status2.html" Global $s_output Global $s_wol_broadcastip Global $i_wol_port Global $abda = "<tunercount>" Global $bisda = "</tunercount>" Global $tum ;bis hier hin werden nur Variablen deklariert $s_output=_Sendrequest($ip, $port, $user, $pass, $request) ; hier wird die Funktion aufgerufen um den request abzusetzen if @error then MsgBox(0, "Error", @error) ; debug - auskommentieren für Einsatz mit dem DMS wegen benötigter Benutzereingabe (sonst hängt das Skript hier) Exit ; Skript beenden wegen Error endif MsgBox(0, "XML", $s_output) ; debug - auskommentieren für Einsatz mit dem DMS wegen benötigter Benutzereingabe (sonst hängt das Skript hier) Global $a_tunercount=_StringBetween($s_output, $abda, $bisda) if IsArray($a_tunercount) then $tum=$a_tunercount[0] _ArrayDisplay($a_tunercount, "Tuner") ; debug - auskommentieren für Einsatz mit dem DMS wegen benötigter Benutzereingabe (sonst hängt das Skript hier) MsgBox(0, "Tunercount", $a_tunercount[0]) ; debug - auskommentieren für Einsatz mit dem DMS wegen benötigter Benutzereingabe (sonst hängt das Skript hier) else MsgBox(0, "Error", "_StringBetween") ; debug - auskommentieren für Einsatz mit dem DMS wegen benötigter Benutzereingabe (sonst hängt das Skript hier) Exit ; Skript beenden wegen Error endif if $tum = 8 Then ; hier muss dann dein WOL rein Run ("C:\Windows\System32\notepad.exe") EndIf Exit ; Skript zuende Func _WOL($s_MAC) ;The MAC-Address of the Network Adapter in the format "XXXXXXXXXXXX" UDPStartup() Local $Broadcast = UDPOpen($s_wol_broadcastip, $i_wol_port, 1) UDPSend($Broadcast, _MagicPacket($s_MAC)) if @error then UDPCloseSocket($Broadcast) Return SetError(1,0,0) endif UDPCloseSocket($Broadcast) UDPShutdown() EndFunc ;==>_WOL Func _MagicPacket($sMac) ;Author: Prog@ndy ;The MAC-Address of the Network Adapter in the format "XXXXXXXXXXXX" If Not IsBinary($sMac) Then $sMac = Binary('0x' & StringRegExpReplace($sMac, '(0x)|[^A-Za-z0-9]', '')) Local $binPacket = Binary('0xFFFFFFFFFFFF') For $i = 1 To 16 $binPacket &= $sMac Next Return $binPacket EndFunc ;==>_MagicPacket Func _Sendrequest($s_ip, $i_port, $s_user, $s_password, $s_request) ;bsp: http://192.168.1.100/tasks.html?task=CI_Reset&aktion=tasks ; http://192.168.1.100/tasks.html?task=CleanupRefreshDB&aktion=tasks Local $sHeader, $authorization = _Base64Encode($s_user & ':' & $s_password) Local $hOpen = _WinHttpOpen("Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 GTB7.1") Local $hConnect = _WinHttpConnect($hOpen, $s_ip, $i_port) If @error Then $reterror = "_Sendrequest - Fehler beim Verbinden mit dem Webserver INI überprüfen!" _WinHttpCloseHandle($hConnect) _WinHttpCloseHandle($hOpen) SetError(1, 0, 0) EndIf Local $hRequest = _WinHttpOpenRequest($hConnect, 'GET', $s_request) _WinHttpSendRequest($hRequest, 'Authorization: Basic ' & $authorization) _WinHttpReceiveResponse($hRequest) If _WinHttpQueryDataAvailable($hRequest) Then $sHeader = _WinHttpQueryHeaders($hRequest) Local $data = '' Do $data &= _WinHttpReadData($hRequest) Until @error _WinHttpCloseHandle($hRequest) _WinHttpCloseHandle($hConnect) _WinHttpCloseHandle($hOpen) Return $data EndFunc ;==>_Sendrequest Func _Base64Encode($sData) ; keine Ahnung von wem die Funktion is (nicht von mir) Local $oXml = ObjCreate("Msxml2.DOMDocument") If Not IsObj($oXml) Then SetError(1, 1, 0) EndIf Local $oElement = $oXml.createElement("b64") If Not IsObj($oElement) Then SetError(2, 2, 0) EndIf $oElement.dataType = "bin.base64" $oElement.nodeTypedValue = Binary($sData) Local $sReturn = $oElement.Text If StringLen($sReturn) = 0 Then SetError(3, 3, 0) EndIf Return $sReturn EndFunc ;==>_Base64Encode Möglicherweise fehlt bei dir die WinHTTP.au3 Datei? Die gibt es hier: https://github.com/dragana-r/autoit-winhttp Und muss ins hier (Datenpfad ggf. anpassen) rein kopiert werden: "C:\Program Files\AutoIt3\Include" Quote Link to comment
shaupti Posted July 22, 2020 Author Share Posted July 22, 2020 So vom Prinzip geht es jetzt. hab die funktion _MagicPacket und _WOl raus geschmissen, das brauch ich ja nicht. Die Funktion _Sendrequest und _Base64Encode wird ja benötigt, damit das winhttp funktioniert? Könnte man das $s_output nicht auch anders hinbekommen? Jetzt hab ich noch das Problem wo setzte ich das Script, bzw die exe nachher ein, weil ein "Aufgabe vor Aufnahme" gibt es ja nicht. Quote Link to comment
nuts Posted July 22, 2020 Share Posted July 22, 2020 _Base64Encode wird benötigt für den Login, _Sendrequest macht die Abfrage an den DMS, ohne die geht nix. Wie man man das jetzt für deinen Einsatz jetzt ausführen kann ist eine gute Frage. Hab mich nur mit der Abfrage beschäftigt. Quote Link to comment
shaupti Posted July 22, 2020 Author Share Posted July 22, 2020 So, Also Anfrage und wake funktioniert, Perfekt. Dafür Danke!!!! Quote Link to comment
shaupti Posted July 24, 2020 Author Share Posted July 24, 2020 in der Timer Liste werden Timer Rot angezeigt, wenn die Anzahl der Tuner nicht langt. Kann man das mit der API abrufen? BZW ob die nächste startende Aufnahme einen Neuen/ZUsätzlichen Tuner braucht? Quote Link to comment
Griga Posted July 25, 2020 Share Posted July 25, 2020 vor 12 Stunden schrieb shaupti: Kann man das mit der API abrufen? Nein, geht nicht. Das Executable-Flag wird nirgendwo exportiert und auch nicht in der svctimers.xml gespeichert, da es sich eventuell nur um einen temporären Zustand handelt, der sich durch verschiedene Umstände jederzeit ändern kann und im DMS bei jeder die Timerliste betreffenden Änderung neu ermittelt wird. Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.