Jump to content
shaupti

Media Server weckt Media Server

Recommended Posts

shaupti

Hallo,

 

Ist es möglich das ein Media Server einen anderen weckt ein wake on lan sendet, der per RTSP eingebunden ist?

Share this post


Link to post
Griga

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.

 

Share this post


Link to post
shaupti

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?

Share this post


Link to post
shaupti

Sieht vielversprechend aus.

Hab nur absolut keine Ahnung wie man das script zur Auswertung schreiben muss.

Share this post


Link to post
shaupti

Kann mir bitte einer das Script schreiben?

 

Share this post


Link to post
nuts

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.

Share this post


Link to post
shaupti
Posted (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 by shaupti

Share this post


Link to post
nuts
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

 

 

Share this post


Link to post
shaupti
Posted (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 by shaupti

Share this post


Link to post
nuts

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!)

 

Share this post


Link to post
shaupti

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?

 

Share this post


Link to post
nuts

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"

Share this post


Link to post
shaupti

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.

Share this post


Link to post
nuts

_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. 

Share this post


Link to post
shaupti

So, Also Anfrage und wake funktioniert, Perfekt.

 

Dafür Danke!!!!

 

 

Share this post


Link to post
shaupti

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?

Share this post


Link to post
Griga
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.

 

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...