Longpoll von Raumserver

Begonnen von Klouse, 07 April 2017, 16:22:08

Vorheriges Thema - Nächstes Thema

Klouse

Hallo Leute,

Ich habe einen zusätzlichen Server (Raumserver) über welchen ich per HTTP GET Kommandos an DLNA Renderer übergebe.

z.B. per Funktion:
# play
# With this request you can start or resume playing the current playlist for a zone
sub Raumfeld_play( $ ) {
my ($id) = @_;
{GetHttpFile ("192.168.1.150:8080","/raumserver/controller/play?id=$id")}
}


In Folge kann ich zwar schalten, jedoch ohne einen Status zu kennen.

Der Server verfügt aber über folgende Funktion:
ZitatgetRendererState
This request returns the renderer state for one or all zones (eg. virtual renderers)
Use the listAll (listAll=true) parameter to include renderers without connections to a zone
This request has the ability for long polling by providing the updateId parameter which is returned on the first request in the Response header
http://10.0.0.6:8080/raumserver/data/getRendererState
http://10.0.0.6:8080/raumserver/data/getRendererState?updateId=[updateId]
http://10.0.0.6:8080/raumserver/data/getRendererState?id=Wohnzimmer
http://10.0.0.6:8080/raumserver/data/getRendererState?listAll=true

Welche z.B für einen einzelnen Renderer folgendes ausgibt:
[{"udn":"uuid:00000000-6f39-0a47-0000-00006f390a47","friendlyName":"Schlafzimmer","isZoneRenderer":true,"avTransportUri":"dlna-playsingle://uuid:c21f270c-e804-4ef7-9422-603cca352a75?sid=urn:upnp-org:serviceId:ContentDirectory&iid=0/Favorites/RecentlyPlayed/1","bitrate":128,"volume":30,"numberOfTracks":1,"currentTrack":1,"currentTrackDuration":0,"muteState":"NONE","playMode":"NORMAL","transportState":"STOPPED","mediaItem":{"id":"0/Favorites/RecentlyPlayed/1","parentId":"0/Favorites/RecentlyPlayed","type":"RADIO_RADIOTIME"},"roomStates":[{"roomUdn":"uuid:82e10dbf-62f0-4b18-ba74-578bcca8c5bd","isMute":false,"isOnline":true,"volume":30,"transportState":"STOPPED"}]}]

Mir fehlt nur derzeit völlig der Ansatz, per regxp könnte ich die nötigen Infos zwar bestimmt filtern und in readings schreiben, nur wie kommt es zum Long poll?

Danke!

LG
Klaus

Abercrombie1892

ich versuche einfach mal das thema nochmal hochzuholen.

ich stehe vor dem gleichem problem mit dem longpoll beim node raumserver

der raumserver bietet ja die möglichkeit dazu, aber wie bindet man das bei fhem richtig ein? mir fehlt komplett der ansatz dazu.

das hab ich mal von github kopiert.

Einmal "getRendererState" aufrufen. Dann bekommst du den aktuellen status und im header eine "updateId". Dann macht du gleich nochmal einen "getRendererState" und gibts die updateId mit.
Dieser Request liefert jetzt so lange keine Daten solange sich nichts ändert. Ändern sich Daten so meldet sich auch der request mit dem response zurück und du kannst die neuen daten verwenden und auch gleich wieder mit der neuen updateId den getRendererState aufrufen.

Also so ungefähr.:

    getRendereState()
    --> response
    --> getRendereState(updateId)
    --> response
    --> getRendereState(updateId)
    --> ... usw.


requestUrl   "/raumserver/data/getRendererState?id=wohnzimmer"
action   "getRendererState"
error   false
msg   ""
data   
0   
mute   0
InstanceID   0
CurrentTrackMetaData   ""
CurrentRecordQualityMode   "NOT_IMPLEMENTED"
AbsoluteTimePosition   "01:08:26"
SecondsUntilSleep   "0"
CurrentTrack   "0"
AVTransportURIMetaData   ""
PossiblePlaybackStorageMedia   "NETWORK"
TransportPlaySpeed   "1"
CurrentTrackDuration   "00:00:00"
PossibleRecordQualityModes   "NOT_IMPLEMENTED"
TransportError   ""
PossibleRecordStorageMedia   "NONE"
AVTransportURI   ""
RelativeTimePosition   "01:08:26"
RelativeCounterPosition   "1"
CurrentPlayMode   "NORMAL"
Bitrate   "128"
TransportState   "NO_MEDIA_PRESENT"
AbsoluteCounterPosition   "1"
CurrentTransportActions   ""
RoomStates   "uuid:b013350a-9076-4040-8a36-a8a81b7c8cc6=STOPPED"
ContentType   "MP3"
NumberOfTracks   "0"
SleepTimerActive   "0"
TransportStatus   "OK"
CurrentTrackURI   ""
RoomVolumes   "uuid:b013350a-9076-4040-8a36-a8a81b7c8cc6=73"
Volume   "73"
Mute   "0"
RoomMutes   "uuid:b013350a-9076-4040-8a36-a8a81b7c8cc6=0"
rooms   
0   
roomUDN   "uuid:b013350a-9076-4040-8a36-a8a81b7c8cc6"
transportState   "STOPPED"
online   true
volume   "73"
mute   "0"
name   "Wohnzimmer"
udn   "uuid:b013350a-9076-4040-8a36-a8a81b7c8cc6"
powerState   "AUTOMATIC_STANDBY"
renderer   
0   
udn   "uuid:ab45e746-14ba-4aa6-af3d-ce9244ba7823"
name   "Connector Wohnzimmer"
udn   "uuid:888016AA-7829-4C02-BE19-ED5884625401"
mediaItem   null
friendlyName   "Wohnzimmer"
host   "1xx.xxx.xxx.xx"
manufacturer   "Raumfeld GmbH"
modelNumber   "2"

KölnSolar

Bin mir unsicher, was ihr genau wollt. Da ich mich derzeit aber viel mit DLNA etc auseinandergesetzt habe, könnte Euch vielleicht folgendes helfen:
1. wenn Ihr einen Status des DMS(?) oder DMR(?) permanent bekommen wollt und die Funktion dafür schon habt müsst Ihr sie einfach nur periodisch mit internalTimer(removeInternalTimer nicht vergessen !) aufrufen.
2. Wir haben ein Modul DLNARenderer(siehe commandref), welches das für einen DMR recht gut outoftheBox macht. Sollte das nicht funktionieren(ist bei Samsung TV so), dann kann man noch auf den Vorgänger DLNAClient zurückgreifen(Suche im Forum)
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Abercrombie1892

#3
ich werde mir den dlna renderer mal genauer anschauen..

gruss

danke für den tip, mehr brauche ich nicht.. im zusammenspiel mit dem raumserver optimal