Code Monkey home page Code Monkey logo

iloveicedgreentea / gowatchit Goto Github PK

View Code? Open in Web Editor NEW
12.0 4.0 0.0 6.04 MB

Focus on watching your content, not babysitting it. Automate your entire theater: Plex, Home Assistant, ezBEQ, light control, etc

Home Page: https://www.avsforum.com/threads/gowatchit-beq-ezbeq-plex-webhook-automation-tool-official-thread.3264800/#replies

License: Other

Makefile 0.20% Go 83.37% Dockerfile 0.19% Shell 0.38% Python 0.36% JavaScript 4.69% HTML 9.71% CSS 1.11%
homeassistant plex hometheater

gowatchit's Introduction

Project Logo

GoWatchIt

Version License MIT CI Status Website

Focus on watching your content, not babysitting it.
Automate Your Theater


Table of Contents

Features

Players Supported:

  • Plex
  • Jellyfin (no support given, but tested)
  • Emby (may work due to jellyfin support, no support given and not tested)

Main features:

  • Load/unload BEQ profiles automatically, without user action and the correct codec detected
  • Set volume based on media type (Movie, Show, etc)
  • Trigger lights when playing, pausing, or stopping automatically (e.g turn off lights on play, turn on when paused)
  • HDMI Sync detection and automation (pause while HDMI is syncing so you don't sit embarrassed with a audio playing to a black screen)
  • Web based UI for configuration

Other cool stuff:

  • Mute/Unmute Minidsp automation for things like turning off subs at night
  • Various MQTT sensors for playing status, volume control, lights, mute status, and current BEQ profile
  • Mobile notifications to notify for events like loading/unloading BEQ was successful or failed
  • Dry run and notification modes to verify BEQ profiles without actually loading them
  • Built in support for Home Assistant and Minidsp

Setup

⚠️ ⚠️ Warning: You should really set a compressor on your minidsp for safety as outlined in the BEQ forum post. I am not responsible for any damage ⚠️ ⚠️

Prerequisites

ℹ It is assumed you have the following tools working. Refer to their respective guides for installation help.

  • MQTT Broker (Optional)
  • Home Assistant (Optional)
  • Plex or Jellyfin
  • ezBEQ
  • Minidsp (other DSPs may work but I have not tested them. If ezBEQ supports it, it should be work)

You can configure this to only load BEQ profiles, or do everything else besides BEQ. It is up to you.

Docker Setup

ℹ If you need help deploying with Docker, refer to the Docker documentation. ℹ If you are using Jellyfin, read the Jellyfin specific instructions below

  1. Deploy the latest version ghcr.io/iloveicedgreentea/gowatchit:latest to your preferred Docker environment
    • a docker-compose example is provided in the repo
  2. You must mount a volume to /data
  3. Configure the application via web ui -> http://(your-server-ip):9999
  4. Set up your player with the instructions below

Plex Specifics

  1. get your player UUID(s) from https://plex.tv/devices.xml while logged in
  2. Set up Plex to send webhooks to your server IP, port 9999, and the handler endpoint of /plexwebhook
    • e.g (your-server-ip):9999/plexwebhook
  3. Whitelist your server IP in Plex so it can call the API without authentication. Docs
  4. Add UUID(s) and user filters to the application config
  5. Play a movie and check server logs. It should say what it loaded and you should see whatever options you enabled work

Jellyfin Specifics

You must use the official Jellyfin Webhooks plugin to send webhooks to this application.

  1. Create a Generic webhook (NOT GenericForm)
  2. Add http://(your-server-ip):9999/jellyfinwebhook as the url
  3. Types:
  • PlaybackStart
  • PlaybackStopped
  1. You can optionally add a user filter
  2. Item types: Movies, Episodes

note: playbackProgress is not supported because it is way too buggy and unreliable

Configure the webhook in whatever way you want but it must include the following and in this order:

{
  "DeviceId": "{{DeviceId}}",
  "DeviceName": "{{DeviceName}}",
  "ClientName": "{{ClientName}}",
  "UserId": "{{UserId}}",
  "ItemId": "{{ItemId}}",
  "ItemType": "{{ItemType}}",
  "NotificationType": "{{NotificationType}}",
{{#if_equals NotificationType 'PlaybackStop'}}
    "PlayedToCompletion": "{{PlayedToCompletion}}",
{{/if_equals}}
{{#if_equals NotificationType 'PlaybackProgress'}}
    "IsPaused": "{{IsPaused}}",
{{/if_equals}}
  "Year": "{{Year}}"
}

Generate API Key

  1. Navigate to the dashboard
  2. Click on“API Keys” under “Advanced”
  3. Click “Create”
  4. Add API Key to the application config

Emby

Emby support is added by coincidence due to Jellyfin support (its the same API codebase). I have not tested it and do not plan to. Configure it the same way as Jellyfin and it might work but I cannot guarantee it.

Non-Docker Setup

I don't recommend this as it is more work and you will need to set up systemd or something to keep it running. I don't provide support for this method but if you know what you are doing, it is very easy to build the binary and run it.

TLDR: make build

Usage

Web UI

The web UI is the primary way to configure this application. It is available at http://(your-server-ip):9999

It will automatically restart the application when you save.

Each section has an enable/disable toggle. If you disable a section, it will not be used. For example, if you disable BEQ, it will not load BEQ profiles. If you disable MQTT, it will not send MQTT messages.

General Usage

This application will load BEQ profiles automatically when you play something in Plex. It will also set volume, lights, and mute/unmute minidsp if you enable those options. The application itself is not controlling things like lights but relies on Home Assistant to perform the action via MQTT. In theory, you could use any home automation system but Home Assistant is the only one officially supported but anything that can receive MQTT messages should work.

Home Assistant Quickstart

MQTT

MQTT is used so this application could theoretically be used with any home automation system. Only Home Assistant is officially supported. You will need to set MQTT up first. Detailed instructions here https://www.home-assistant.io/integrations/mqtt/

  1. Install mosquito mqtt add on
  2. Install mqtt integration
  3. Set up your topics in HA and the application's config
  4. Set up Automations in HA based on the payloads of MQTT

Features that will write to Topics of your choosing:

  • Current BEQ Profile
  • Lights
  • Minidsp mute status
  • Item type (Movie, Show, etc)
  • Playing status

These Topics allow you to trigger automations in HA based on sensor values such as:

  • Triggering HVAC when playing status is true for X minutes (e.g circulate stale air)
  • Toggling lights when playing status changes
  • Displaying current BEQ profile on a dashboard
  • Modulating volume based on item type (e.g a lower volume for shows, higher for movies)
  • Muting/unmuting minidsp(s) and showing the status

Here are some sensor examples

mqtt:
  binary_sensor:
    - name: "subs_muted"
      state_topic: "theater/subs/status"
      payload_on: "false"
      payload_off: "true"
    - name: "plex_playing"
      state_topic: "theater/plex/playing"
      payload_on: "true"
      payload_off: "false"
  sensor:
    - name: "lights"
      state_topic: "theater/lights/front"
      value_template: "{{ value_json.state }}"
    - name: "volume"
      state_topic: "theater/denon/volume"
      value_template: "{{ value_json.type }}"
    - name: "beq_current_profile"
      state_topic: "theater/beq/currentprofile"

Automation Example

Here is an example of an automation to change lights based on MQTT.

Assuming you have the following sensor:

mqtt:
  sensor:
    - name: "lights"
      state_topic: "theater/lights/front"
      value_template: "{{ value_json.state }}"

This will turn the light(s) on/off depending on the state of the sensor, state is changed by a message sent to the topic

alias: MQTT - Theater Lights
description: Trigger lights when mqtt received, depending on state
trigger:
  - platform: mqtt
    topic: theater/lights/front
condition: []
action:
  - if:
      - condition: state
        entity_id: sensor.lights
        state: "on"
    then:
      - service: light.turn_on
        data: {}
        target:
          entity_id: light.caseta_r_wireless_in_wall_dimmer
  - if:
      - condition: state
        entity_id: sensor.lights
        state: "off"
    then:
      - service: light.turn_off
        data: {}
        target:
          entity_id: light.caseta_r_wireless_in_wall_dimmer
mode: queued
max: 10

Handlers

/plexwebhook

/jellyfin

/minidspwebhook This endpoint accepts commands used by minidsp-rs which are performed by EZbeq. Here is how to trigger it with Home Assistant

rest_command:
  minidsp:
    url: "http://192.168.88.56:9999/minidspwebhook"
    method: POST
    payload: '{"command": "{{ command }}" }'
    content_type:  'application/json'
    verify_ssl: false

And then inside an automation, you make an action

  # unmute subs
  - service: rest_command.minidsp
    data:
      command: "off" (or "on")

Using the above you can automate the mute and unmute of your minidsp with any automation source.

One use case is to mute the subs at night. You can use the time integration to trigger this at a certain time or with a button press.

Config

The only supported way to configure this is via the web UI. You can dump the current config via the /config endpoint.

Plex Authentication

You must whitelist your server IP in "List of IP addresses and networks that are allowed without auth"

Why? Plex refuses to implement client to server authentication and you must go through their auth servers. I may eventually implement their auth flow but it is not a priority.

Logs

/logs It will return the current logs as of the last request. It will not stream logs. You can use this to get logs for debugging. Refresh the page to get the latest logs.

Debugging

These are environment variables you can set to get more info

LOG_LEVEL=debug to have it print out debug logs while running

SUPER_DEBUG=true for each line to also have a trace to its call site and line number

How BEQ Support Works

On play and resume, it will load the profile. On pause and stop, it will unload it (so you don't forget to). It has some logic to cache the profile so if you pause and unpause, the profile will get loaded much faster as it skips searching the DB and stuff.

If enabled, it will also send a notification to Home Assistant via Notify so you can send an alert to your phone for example.

For safety, the application tries to unload the profile when it loads up each time in case it crashed or was killed previously, and will unload before playing anything so it doesn't start playing something with the wrong profile.

Matching

The application will search the catalog and match based on codec (Atmos, DTS-X, etc), title, year, TMDB, and edition. I have tested with multiple titles and everything matched as expected.

⚠️ If you get an incorrect match, please open a github issue with the full log output and expected codec and title

Jellyfin may have some issues matching as I have found it will sometimes just not return a TMDB. This has nothing to do with me. Jellyfin is generally just quite buggy. There is a configuration option that you should probably enable in the Jellyfin section which lets you skip TMDB matching. It will instead use the title name which could be prone to false negatives.

Editions

This application will do its best to match editions. It will look for one of the following:

  1. Plex edition metadata. Set this from your server in the Plex UI
  2. Looking at the file name if it contains Unrated, Ultimate, Theatrical, Extended, Director, Criterion

There is no other reliable way to get the edition. If an edition is not matched, BEQ will fail to load for safety reasons (different editions have different masterings, etc). If a BEQCatalog entry has a blank edition, then edition will not matter and it will match based on the usual criteria.

If you find repeated match failures because of editions, open a github issue with debug logs of you triggering media.play

HDMI Sync Automation

Coming soon This application supports automatically waiting until HDMI sync is complete.

Have you ever started something in Plex only to hear audio but see a black screen for 10 seconds? Then everyone in your theater makes fun of you and you cry yourself to sleep? This application will prevent that.

It supports four ways to get this info: my JVC integration, my Envy integration, a generic binary_sensor, or you can pass in seconds to wait.

If using the first two methods, you just need to install the integration, then set remoteentityname to the name of the remote entity. Set signal.source to either jvc or envy.

If using a binary_sensor, you need to create an automation which will set the state to off when there is NO SIGNAL and on when there is. Getting that data is up to you. Set the signal config to the name of the binary sensor (e.g signal, if the entity is binary_sensor.signal).

If using seconds, provide the number of seconds to wait as a string such as "13" for 13 seconds. You can time how long your sync time is and add it here. It will pause for that amount of time then continue playing.

You also must set plex.playerMachineIdentifier and plex.playerIP. To get this:

  1. Play something on your desired player (like a shield)
  2. curl "http://(player IP):32500/resources"
    • Note this is NOT THE SERVER IP! and only works while something is actively playing
  3. Copy the machineIdentifier value
  4. Add this to that config field exactly as presented

Audio stuff

Here are some examples of what kind of codec tags Plex will have based on file metadata

TrueHD 7.1 Unknown (TRUEHD 7.1) --- Surround 7.1 (TRUEHD) English (TRUEHD 7.1) --- TrueHD 7.1 (English) English (TRUEHD 7.1) --- Surround 7.1 (English TRUEHD) English (TRUEHD 7.1) --- English (TRUEHD 7.1)

Atmos English (TRUEHD 7.1) --- TrueHD Atmos 7.1 Remixed (English) English (TRUEHD 7.1) --- TrueHD Atmos 7.1 (English) English (TRUEHD 7.1) --- TrueHD 7.1. Atmos (English 7.1) English (TRUEHD 7.1) --- TrueHD 7.1 Atmos (English) English (TRUEHD 7.1) --- Dolby TrueHD/Atmos Audio / 7.1+13 objects / 48 kHz / 4691 kbps / 24-bit (English) English (TRUEHD 7.1) --- Dolby TrueHD/Atmos Audio / 7.1+11 objects / 48 kHz / 4309 kbps / 24-bit (English) English (TRUEHD 7.1) --- Dolby TrueHD/Atmos Audio / 7.1 / 48 kHz / 5026 kbps / 24-bit (English) English (TRUEHD 7.1) --- Dolby TrueHD/Atmos Audio / 7.1 / 48 kHz / 4396 kbps / 24-bit (English) English (TRUEHD 7.1) --- Dolby TrueHD/Atmos Audio / 7.1 / 48 kHz / 4353 kbps / 24-bit (English) English (TRUEHD 7.1) --- Dolby TrueHD/Atmos Audio / 7.1 / 48 kHz / 3258 kbps / 24-bit (English) English (TRUEHD 7.1) --- Dolby TrueHD/Atmos Audio / 7.1 / 48 kHz / 3041 kbps / 16-bit (English) English (TRUEHD 7.1) --- Dolby Atmos/TrueHD Audio / 7.1-Atmos / 48 kHz / 5826 kbps / 24-bit (English) English (TRUEHD 7.1) --- Dolby Atmos/TrueHD Audio / 7.1-Atmos / 48 kHz / 4535 kbps / 24-bit (English)

TrueHD 5.1 English (TRUEHD 5.1) --- English Dolby TrueHD (5.1) English (TRUEHD 5.1) --- English (TRUEHD 5.1) English (TRUEHD 5.1) --- Dolby TrueHD Audio / 5.1 / 48 kHz / 4130 kbps / 24-bit (English) English (TRUEHD 5.1) --- Dolby TrueHD Audio / 5.1 / 48 kHz / 1522 kbps / 16-bit (English) English (TRUEHD 5.1) --- TrueHD 5.1 (English) English (TRUEHD 5.1) --- Dolby TrueHD 5.1 (English)

DTS:X English (DTS-HD MA 7.1) --- DTS:X/DTS-HD Master Audio / 7.1-X / 48 kHz / 4458 kbps / 24-bit (English) English (DTS-HD MA 7.1) --- DTS:X/DTS-HD Master Audio / 7.1-X / 48 kHz / 4255 kbps / 24-bit (English) English (DTS-HD MA 7.1) --- DTS:X 7.1 (English DTS-HD MA)

DTS-HD MA 7.1 English (DTS-HD MA 7.1) --- Surround 7.1 (English DTS-HD MA) English (DTS-HD MA 7.1) --- DTS-HD MA 7.1 (English)

DTS-MA 6.1 中文 (DTS-HD MA 6.1) --- DTS-HD Master Audio / 6.1 / 48 kHz / 4667 kbps / 24-bit (中文)

DTS-HD MA 5.1 中文 (DTS-HD MA 5.1) --- Mandarin DTS-HD MA 5.1 (中文) 中文 (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48 kHz / 2360 kbps / 16-bit (中文) Indonesia (DTS-HD MA 5.1) --- DTS-HD Master Audio / Indonesian / 5.1 / 48 kHz / 3531 kbps / 24-bit (Indonesia) Indonesia (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48 kHz / 3576 kbps / 24-bit (Indonesia) English (DTS-HD MA 5.1) --- Surround 5.1 (English DTS-HD MA) English (DTS-HD MA 5.1) --- English / DTS-HD Master Audio / 5.1 / 48 kHz / 4104 kbps / 24-bit (DTS Core: 5.1 / 48 kHz / 1509 kbps / 24-bit) English (DTS-HD MA 5.1) --- English / DTS-HD Master Audio / 5.1 / 48 kHz / 2688 kbps / 24-bit English (DTS-HD MA 5.1) --- English (DTS-HD MA 5.1) English (DTS-HD MA 5.1) --- DTS-HD Master Audio English 2877 kbps 5.1 / 48 kHz / 2877 kbps / 24-bit English (DTS-HD MA 5.1) --- DTS-HD Master Audio / English / 3336 kbps / 5.1 Channels / 48 kHz / 24-bit (DTS Core: 5.1 Channels / 48 kHz / 1509 kbps / 24-bit) English (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48kHz / 5128 kbps / 24-bit (English) English (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48 kHz / 4189 kbps / 24-bit (English) English (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48 kHz / 4107 kbps / 24-bit (English) English (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48 kHz / 3900 kbps / 24-bit (English) English (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48 kHz / 3746 kbps / 24-bit (English) English (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48 kHz / 3600 kbps / 24-bit (English) English (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48 kHz / 3596 kbps / 24-bit (English) English (DTS-HD MA 5.1) --- DTS-HD Master Audio / 5.1 / 48 kHz / 3233 kbps / 24-bit (English) English (DTS-HD MA 5.1) --- DTS-HD MA 5.1 (English) English (DTS-HD MA 5.1) --- DTS-HD MA @ 1509 kbps (English 5.1) English (DTS-HD MA 5.1) --- DTS HD MA 5.1 (English) English (DTS-HD MA 5.1) --- DTS (MA) / 2181 kbps / 48 KHz / 24-Bit / 5.1 (English)

DTS HD HRA 7.1 English (DTS-HD HRA 7.1) --- Surround 7.1 (English DTS-HD HRA)

DTS 5.1 English (DTS 5.1) --- English (DTS 5.1) English (DTS 5.1) --- DTS 5.1 (English)

Unknown (AAC Stereo) --- Unknown (AAC Stereo)

AC3 stereo English (AC3 Stereo) --- English (AC3 Stereo)

AC3 English (AC3 5.1) --- Surround (English AC3 5.1) English (AC3 5.1) --- English (AC3 5.1) English (AC3 5.1) --- AC3 5.1 @ 640 Kbps (English)

Misc English (PCM Mono) --- Mono (English PCM) English (FLAC Stereo) --- Original Dolby Stereo (Laserdisc USA LD68993) (English FLAC) English (FLAC Stereo) --- FLAC Audio / 1266 kbps / 2.0 / 48 kHz / 24-bit (English)

English (FLAC 5.1) --- Main Audio (English FLAC 5.1) English (FLAC 5.1) --- FLAC 5.1 @ 2954 kbps / 24-bit (English) English (FLAC 5.1) --- English (FLAC 5.1)

English (EAC3 Stereo) --- English (EAC3 Stereo) English (EAC3 5.1) --- Main Audio (English EAC3 5.1) English (EAC3 5.1) --- English (EAC3 5.1)

Help

First check your logs to see whats happening via the /logs endpoint.

If you need help or support due to an error or bug, you must file an issue. If you have a general question, you can ask in the Discussions tab or the AVS Forum post (linked as website above)

gowatchit's People

Contributors

dependabot[bot] avatar iloveicedgreentea avatar volschin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

gowatchit's Issues

Feature Request - Configure what slot is used in ezbeq in config?

Is it possible to be able to configure what preset slot is used when setting ezbeq filters? I have slot 1/2 with my two different house curves that I use for general music/content when there's no PEQ filter available. I normally use slot 3 or slot 4 to load up for stuff that is found in ezbeq.

Wont Load BEQ Filter - no ezbeq devices provided. Can't load

This is the first time I am setting up plexwebautomation so not sure if this is a new issue or not but I am running latest 2.0.7 pre-release. When I run your app, I see that it says it successfully unloads the BEQ filter via api call to ezbeq. However, when I play a movie, it throws an error saying "no ezbeq devices provided. Can't load". BEQ filters dont seem to unload either. I am not using HA or MQTT either as I just want to use this for the plex/EZBEQ automation.

To Reproduce
Steps to reproduce the behavior:

  1. Run automation app
  2. Play movie
  3. No BEQ filter is loaded, BEQ filters also dont seem to be unloaded (tried manually loading filter in EZBEQ and filter still seems to be applied after automation says "unloading BEQ filters". I am using slot 3 for EzBEQ so I tested slot 1 and slot 3 just to see if there is a bug with the new slot config option.

Expected behavior
BEQ filter should load and unload when media is played/unplayed

Debug logs
pi@htpcpi:~/plex-webhook-automation $ go run .
DEBU[07-05-2023 10:42:18] Started in debug mode...
INFO[07-05-2023 10:42:18] Starting server
INFO[07-05-2023 10:42:18] PlexWorker started
INFO[07-05-2023 10:42:18] Started with ezbeq enabled
DEBU[07-05-2023 10:42:18] Using method GET
DEBU[07-05-2023 10:42:18] Header is set to false
DEBU[07-05-2023 10:42:18] Using url http://192.168.50.170:8080/api/2/devices
DEBU[07-05-2023 10:42:18] Headers from req map[]
INFO[07-05-2023 10:42:18] Minidsp worker started
DEBU[07-05-2023 10:42:18] Started minidsp worker with ezbeq
DEBU[07-05-2023 10:42:18] Using method GET
DEBU[07-05-2023 10:42:18] Header is set to false
DEBU[07-05-2023 10:42:18] Using url http://192.168.50.170:8080/api/2/devices
DEBU[07-05-2023 10:42:18] Headers from req map[]
DEBU[07-05-2023 10:42:18] BEQ payload: map[string]models.BeqDevices{"master":models.BeqDevices{Name:"master", MasterVolume:-0, Mute:false, Slots:[]models.BeqSlots{models.BeqSlots{ID:"1", Last:"Empty", Active:false, Gain1:0, Gain2:0, Mute1:false, Mute2:false}, models.BeqSlots{ID:"2", Last:"Empty", Active:false, Gain1:0, Gain2:0, Mute1:false, Mute2:false}, models.BeqSlots{ID:"3", Last:"Empty", Active:true, Gain1:0, Gain2:0, Mute1:false, Mute2:false}, models.BeqSlots{ID:"4", Last:"Ready Player One", Active:false, Gain1:0, Gain2:0, Mute1:false, Mute2:false}}}}
DEBU[07-05-2023 10:42:18] BEQ payload: map[string]models.BeqDevices{"master":models.BeqDevices{Name:"master", MasterVolume:-0, Mute:false, Slots:[]models.BeqSlots{models.BeqSlots{ID:"1", Last:"Empty", Active:false, Gain1:0, Gain2:0, Mute1:false, Mute2:false}, models.BeqSlots{ID:"2", Last:"Empty", Active:false, Gain1:0, Gain2:0, Mute1:false, Mute2:false}, models.BeqSlots{ID:"3", Last:"Empty", Active:true, Gain1:0, Gain2:0, Mute1:false, Mute2:false}, models.BeqSlots{ID:"4", Last:"Ready Player One", Active:false, Gain1:0, Gain2:0, Mute1:false, Mute2:false}}}}
DEBU[07-05-2023 10:42:18] Unloading ezBEQ profiles
DEBU[07-05-2023 10:42:18] using endpoint /api/1/devices/master/filter/3
DEBU[07-05-2023 10:42:18] Using method DELETE
DEBU[07-05-2023 10:42:18] Header is set to false
DEBU[07-05-2023 10:42:18] Using url http://192.168.50.170:8080/api/1/devices/master/filter/3
DEBU[07-05-2023 10:42:18] Headers from req map[]
DEBU[07-05-2023 10:42:22] decodeWebhook: Received event: media.resume
DEBU[07-05-2023 10:42:22] !!! Your Player UUID is jz85n1sp8tuwzffn8e6nergr !!!!!
DEBU[07-05-2023 10:42:22] ProcessWebhook: Media type is: movie
DEBU[07-05-2023 10:42:22] ProcessWebhook: Media title is: Moana
INFO[07-05-2023 10:42:22] Processing media type: movie
DEBU[07-05-2023 10:42:22] Event Router: Found edition:
DEBU[07-05-2023 10:42:22] Codecs from plex received: English (DTS 5.1), English (DTS 5.1)
DEBU[07-05-2023 10:42:22] Atmos: false - DD+: false
DEBU[07-05-2023 10:42:22] Event Router: Found codec: DTS 5.1
DEBU[07-05-2023 10:42:22] Event Router: Received codec: DTS 5.1
DEBU[07-05-2023 10:42:22] Event Router: Got media type of: movie
DEBU[07-05-2023 10:42:22] Event Router: Using search model: { 2016 DTS 5.1 false 0 false [] []}
DEBU[07-05-2023 10:42:22] Event Router: media.resume received
DEBU[07-05-2023 10:42:22] Unloading ezBEQ profiles
DEBU[07-05-2023 10:42:22] getPlexMovieDb: Got tmdb ID from plex - tmdb://277834
ERRO[07-05-2023 10:42:22] no ezbeq devices provided. Can't load
DEBU[07-05-2023 10:42:31] decodeWebhook: Received event: media.pause
DEBU[07-05-2023 10:42:31] !!! Your Player UUID is jz85n1sp8tuwzffn8e6nergr !!!!!
DEBU[07-05-2023 10:42:31] ProcessWebhook: Media type is: movie
DEBU[07-05-2023 10:42:31] ProcessWebhook: Media title is: Moana
INFO[07-05-2023 10:42:31] Processing media type: movie
DEBU[07-05-2023 10:42:31] Event Router: Found edition:
DEBU[07-05-2023 10:42:31] Codecs from plex received: English (DTS 5.1), English (DTS 5.1)
DEBU[07-05-2023 10:42:31] Atmos: false - DD+: false
DEBU[07-05-2023 10:42:31] Event Router: Found codec: DTS 5.1
DEBU[07-05-2023 10:42:31] Event Router: Received codec: DTS 5.1
DEBU[07-05-2023 10:42:31] Event Router: Got media type of: movie
DEBU[07-05-2023 10:42:31] Event Router: Using search model: { 2016 DTS 5.1 false 0 false [] []}
DEBU[07-05-2023 10:42:31] Event Router: media.pause received
DEBU[07-05-2023 10:42:31] Unloading ezBEQ profiles
no ezbeq devices provided. Can't loadDEBU[07-05-2023 10:44:20] decodeWebhook: Received event: media.stop
DEBU[07-05-2023 10:44:20] !!! Your Player UUID is jz85n1sp8tuwzffn8e6nergr !!!!!
DEBU[07-05-2023 10:44:20] ProcessWebhook: Media type is: movie
DEBU[07-05-2023 10:44:20] ProcessWebhook: Media title is: Moana
INFO[07-05-2023 10:44:20] Processing media type: movie
DEBU[07-05-2023 10:44:20] Event Router: Found edition:
DEBU[07-05-2023 10:44:40] decodeWebhook: Received event: media.play
DEBU[07-05-2023 10:44:40] !!! Your Player UUID is jz85n1sp8tuwzffn8e6nergr !!!!!
DEBU[07-05-2023 10:44:40] ProcessWebhook: Media type is: episode
DEBU[07-05-2023 10:44:40] ProcessWebhook: Media title is: Canvassing
ERRO[07-05-2023 10:44:50] Event Router: error getting codec from plex, can't continue: error getting codec. no session found with uuid jz85n1sp8tuwzffn8e6nergr
INFO[07-05-2023 10:44:50] Processing media type: episode
DEBU[07-05-2023 10:44:50] Event Router: Found edition:
DEBU[07-05-2023 10:44:50] Codecs from plex received: English (DTS-HD MA 5.1), DTS-HD MA 5.1 (English)
DEBU[07-05-2023 10:44:50] Atmos: false - DD+: false
DEBU[07-05-2023 10:44:50] Event Router: Found codec: DTS-HD MA 5.1
DEBU[07-05-2023 10:44:50] Event Router: Received codec: DTS-HD MA 5.1
DEBU[07-05-2023 10:44:50] Event Router: Got media type of: episode
DEBU[07-05-2023 10:44:50] Event Router: Using search model: { 2009 DTS-HD MA 5.1 false 0 false [] []}
DEBU[07-05-2023 10:44:50] Event Router: media.play received
DEBU[07-05-2023 10:44:50] Unloading ezBEQ profiles
DEBU[07-05-2023 10:44:50] getPlexMovieDb: Got tmdb ID from plex - tmdb://397622
ERRO[07-05-2023 10:44:50] no ezbeq devices provided. Can't load
DEBU[07-05-2023 10:45:02] decodeWebhook: Received event: media.stop
DEBU[07-05-2023 10:45:02] !!! Your Player UUID is jz85n1sp8tuwzffn8e6nergr !!!!!
DEBU[07-05-2023 10:45:02] ProcessWebhook: Media type is: episode
DEBU[07-05-2023 10:45:02] ProcessWebhook: Media title is: Canvassing
INFO[07-05-2023 10:45:02] Processing media type: episode
DEBU[07-05-2023 10:45:02] Event Router: Found edition:

Desktop (please complete the following information):

  • OS: Raspbian GNU/Linux 11 (bullseye)
  • Version [e.g. 22]: Linux 5.15.73-v7l+
  • Deployment method: binary
  • EZBEQ version: v1.0.4

Additional context
Add any other context about the problem here.

GoWatchIt does not appear to query metadata after receiving and decoding Plex webhook

Describe the bug
GoWatchIt does not complete querying of audio information, and consequently does not locate or set any ezBEQ filter.

After receiving a Plex webhook, nothing happens (either in logs or elsewise).

To Reproduce
Steps to reproduce the behavior:

  1. Play or pause movie in Plex.
  2. Webhook is received by GoWatchIt, but no further action is taken or errors shown.

Expected behavior
Metadata decoded and filter selected and loaded.

Configuration
Attached. I have cleared the player/user filters during debug.

Debug logs
EXCERPT:
time="03-11-2024 04:12:15" level=info msg="Starting server on port 9999"
time="03-11-2024 04:13:40" level=debug msg="decoding payload"
time="03-11-2024 04:13:40" level=debug msg="decodeWebhook: Received event: media.play"
time="03-11-2024 04:13:40" level=info msg="Got a request from UUID: redacted"
time="03-11-2024 04:13:40" level=debug msg="ProcessWebhook: Media type is: movie"
time="03-11-2024 04:13:40" level=debug msg="ProcessWebhook: Media title is: Arrival"

...then nothing until the next webhook event. No additional lines appear in the SUPER_DEBUG log.

Info (please complete the following information):

  • OS: Unraid
  • Version: 2.3.2, but also on latest pr-58
  • Deployment method: docker

Additional context
The GoWatchIt container does have access (and pings successfully) the Plex server. The IPs are whitelisted in the Plex server. ezBEQ devices and status appear to be recognized, and GoWatchIt does clear the ezBEQ filters properly when it restarts.

Just odd that I'm not seeing any meaningful (to me) log output as to what could be going on.

Thank you!!

Whitelist for BEQ Authors

Is your feature request related to a problem? Please describe.
Going a step further than the existing BEQ Preferred Author option, a Whitelist would be a great way to ensure users can limit profiles to only those from a select group. Since there is no real screening process for BEQ submissions, having the option to only load BEQ files from authors that a user trusts would be fantastic.

Describe the solution you'd like
Just like the BEQ Preferred Author field, a BEQ Author Whitelist field would accept author names and then only load BEQ files from those authors. This could be used in conjunction with BEQ Preferred Author -- assuming preferred author works in order of preference -- so that a user could limit their authors via Whitelist and then set a hierarchy of authors from most preferred to least preferred.

Describe alternatives you've considered

Additional context

Please enable TZ to work in docker

Currently, the docker instance uses UTC time and totally ignores the docker TZ setting. Even if I go into the shell and set TZ, it's ignored. Apparently the tzdata package needs to be installed to make it use TZ.

The impact right now is that the log files show a different date and time which makes it a pain to correlate to local activities.

match profile close to source

Would it be possible to add a feature to allow for near match profiles to sync - I have had a couple of no match with for example DD+ atmos in the profile and my source having DDP 5.1 Atmos (Engelsk EAC3).
I assume that this is not the same codec?

Allow UUID filter to be an array

Is your feature request related to a problem? Please describe.
I have two separate Plex players connected to my AVR and BEQ setup. A Shield and a Zidoo Z9X Pro. I would like to load ezbeq profiles only when one of these two players is playing something.

Describe the solution you'd like
Allow the UUID field in config.json to be an array. Example:

"plex": { "ownerNameFilter": "myOwnerName", "deviceUUIDFilter": ["2879a23a97e0bcbe-com-plexapp-android", "a2a2ef8a7cacff5a-com-plexapp-android"], "url": "http://myurl", "port": "32400", "token": "PLACEHOLDER for future use" },

I also tried the following format (using || operators like for authors):

"plex": { "ownerNameFilter": "myOwnerName", "deviceUUIDFilter": "2879a23a97e0bcbe-com-plexapp-android" || "a2a2ef8a7cacff5a-com-plexapp-android", "url": "http://myurl", "port": "32400", "token": "PLACEHOLDER for future use" },

As of 2.1.1, neither format to specify multiple UUIDs seem to work. It doesn't seem to recognize my second UUID as a valid client so that it can send a payload to ezbeq:

time="09-30-2023 20:27:08" level=info msg="Got a request from UUID: a2a2ef8a7cacff5a-com-plexapp-android"
time="09-30-2023 20:27:08" level=debug msg="ProcessWebhook: Media type is: movie"
time="09-30-2023 20:27:08" level=debug msg="ProcessWebhook: Media title is: The Last Voyage of the Demeter"
time="09-30-2023 20:27:08" level=debug msg="Current length of plexChan: 0"
time="09-30-2023 20:27:08" level=debug msg="Added length of plexChan: 0"
time="09-30-2023 20:27:08" level=debug msg="Current length of plexChan in PlexWorker: 0"
time="09-30-2023 20:27:08" level=debug msg="Sending new payload to eventRouter"
[GIN] 2023/09/30 - 20:27:08 | 200 | 891.476µs | 192.168.0.99 | POST "/plexwebhook"
time="09-30-2023 20:27:08" level=debug msg="Client UUID does not match enabled filter"
time="09-30-2023 20:27:08" level=debug msg="eventRouter done processing payload"

Describe alternatives you've considered
Leaving the UUID field blank, which would allow all players to send a payload to ezbeq, but this doesn't work for my household as I have Plex players in other rooms of the house that are not connected to my minidsp/ezbeq.

Additional context
Add any other context or screenshots about the feature request here.

How to inspect log?

Hi,
I finally got the program to run on my PI zero, but I'm having trouble getting ezbeq to load the movie that's being played on plex - is it possible to see a log of what's happening?

v2.0.5

Hello I set up the next v2.0 series with my Denon AVR and appletv. The problem is the apple can't play lossless content and the Denon reports "Multi-In". Therefore I get "ezBEQ profile not found".

The automation works great with 0.07

How to make pull on raspberry pi.

Hi, i am trying to set it up on a raspberry pi and I am having some problems at step 1 where i should make the pull - what is the command in ssh to do this? I did try to search google for an answer with no luck...

"beq profile was not found in catalog" in v2.1.9, but works in v0.0.7

Playing "Pirates of the Carribean: Curse of the Black Pearl" in Atmos (TRUEHD 7.1) with v2.1.9. Confirmed that a beq profile exists in the repository, but getting "beq profile was not found in catalog" error.

time="01-02-2024 21:00:03" level=debug msg="Event Router: media.resume received"
time="01-02-2024 21:00:03" level=error msg="error connecting to topic - network Error : dial tcp: missing address"
time="01-02-2024 21:00:03" level=debug msg="Unloading ezBEQ profiles"
time="01-02-2024 21:00:03" level=debug msg="using endpoint /api/1/devices/master/filter/1"
time="01-02-2024 21:00:03" level=debug msg="Using method DELETE"
time="01-02-2024 21:00:03" level=debug msg="Header is set to false"
time="01-02-2024 21:00:03" level=debug msg="Using url http://192.168.0.148:8080/api/1/devices/master/filter/1"
time="01-02-2024 21:00:03" level=debug msg="Headers from req map[]"
time="01-02-2024 21:00:05" level=error msg="Error on startup - unloading beq error connecting to topic - network Error : dial tcp: missing address"
time="01-02-2024 21:00:05" level=debug msg="getPlexMovieDb: Got tmdb ID from plex - tmdb://22"
time="01-02-2024 21:00:05" level=debug msg="beq payload is &models.SearchRequest{TMDB:"22", Year:2003, Codec:"", PreferredAuthor:"", Edition:"", SkipSearch:true, EntryID:"", MVAdjust:0, DryrunMode:false, MediaType:"movie", Devices:[]string{"master"}, Slots:[]int{1}}"
time="01-02-2024 21:00:05" level=debug msg="sending ezbeq search request to /api/1/search?audiotypes=&years=2003"
time="01-02-2024 21:00:05" level=debug msg="Using method GET"
time="01-02-2024 21:00:05" level=debug msg="Header is set to false"
time="01-02-2024 21:00:05" level=debug msg="Using url http://192.168.0.148:8080/api/1/search?audiotypes=&years=2003"
time="01-02-2024 21:00:05" level=debug msg="Headers from req map[]"
time="01-02-2024 21:00:05" level=error msg="beq profile was not found in catalog"
time="01-02-2024 21:00:05" level=debug msg="eventRouter done processing payload"

Downgrade to v0.0.7 (with the same config.json file) and it works:

time="01-02-2024 16:05:21" level=debug msg="Started in debug mode..."
time="01-02-2024 16:05:21" level=info msg="Starting server"
time="01-02-2024 16:05:21" level=info msg="PlexWorker started"
time="01-02-2024 16:05:21" level=info msg="Minidsp worker started"
time="01-02-2024 16:05:21" level=info msg="Started with ezbeq enabled"
time="01-02-2024 16:05:21" level=debug msg="Started minidsp worker with ezbeq"
time="01-02-2024 16:05:22" level=debug msg="Unloading ezBEQ profile"
time="01-02-2024 16:06:16" level=debug msg="decodeWebhook: Received event: media.pause"
time="01-02-2024 16:06:16" level=debug msg="!!! Your Player UUID is 0d3b37f7-6ee8-42dd-933f-7432e19763e1 !!!!!"
time="01-02-2024 16:06:16" level=debug msg="ProcessWebhook: Media type is: movie"
time="01-02-2024 16:06:16" level=debug msg="ProcessWebhook: Media title is: Pirates of the Caribbean: The Curse of the Black Pearl"
time="01-02-2024 16:06:16" level=info msg="Processing media type: movie"
time="01-02-2024 16:06:16" level=debug msg="Event Router: Found edition: "
time="01-02-2024 16:06:16" level=debug msg="Event Router: Getting codec from data"
time="01-02-2024 16:06:16" level=debug msg="Codecs from plex received: English (TRUEHD 7.1), TrueHD Atmos 7.1 (English)"
time="01-02-2024 16:06:16" level=debug msg="Atmos: true - DD+: false"
time="01-02-2024 16:06:16" level=debug msg="Event Router: Received codec: Atmos"
time="01-02-2024 16:06:16" level=debug msg="Event Router: Got media type of: movie "
time="01-02-2024 16:06:16" level=debug msg="Event Router: media.pause received"
time="01-02-2024 16:06:16" level=debug msg="Unloading ezBEQ profile"
time="01-02-2024 16:06:18" level=debug msg="decodeWebhook: Received event: media.resume"
time="01-02-2024 16:06:18" level=debug msg="!!! Your Player UUID is 0d3b37f7-6ee8-42dd-933f-7432e19763e1 !!!!!"
time="01-02-2024 16:06:18" level=debug msg="ProcessWebhook: Media type is: movie"
time="01-02-2024 16:06:18" level=debug msg="ProcessWebhook: Media title is: Pirates of the Caribbean: The Curse of the Black Pearl"
time="01-02-2024 16:06:18" level=info msg="Processing media type: movie"
time="01-02-2024 16:06:18" level=debug msg="Event Router: Found edition: "
time="01-02-2024 16:06:18" level=debug msg="Event Router: Getting codec from data"
time="01-02-2024 16:06:18" level=debug msg="Codecs from plex received: English (TRUEHD 7.1), TrueHD Atmos 7.1 (English)"
time="01-02-2024 16:06:18" level=debug msg="Atmos: true - DD+: false"
time="01-02-2024 16:06:18" level=debug msg="Event Router: Received codec: Atmos"
time="01-02-2024 16:06:18" level=debug msg="Event Router: Got media type of: movie "
time="01-02-2024 16:06:18" level=debug msg="Event Router: media.resume received"
time="01-02-2024 16:06:18" level=debug msg="Unloading ezBEQ profile"
time="01-02-2024 16:06:20" level=debug msg="getPlexMovieDb: Got tmdb ID from plex - tmdb://22"
time="01-02-2024 16:06:20" level=debug msg="sending ezbeq search request to /api/1/search?audiotypes=Atmos&years=2003"
time="01-02-2024 16:06:20" level=debug msg="Beq results: {4653973ba94bbafb0625c7b8a2990231264f9473_142 bad boys ii 2003 [Atmos] 1a83bc66fd9b5a18c3751a72e47265e7ea52dfd412c84a0eea30d71156aeea9d -0.5 8961}"

[... snip ...]

time="01-02-2024 16:06:20" level=debug msg="Beq results: {4653973ba94bbafb0625c7b8a2990231264f9473_6838 pirates of the caribbean the curse of the black pearl 2003 [Atmos] 3575ee10e459d883a0fe4b49cd909326ec4e563cb41064202c062cdc4ed544c2 0 22}"
time="01-02-2024 16:06:20" level=debug msg="sending BEQ payload: models.BeqPatchV2{Mute:false, MasterVolume:0, Slots:[]models.SlotsV2{models.SlotsV2{ID:"1", Active:true, Gains:[]float64{0, 0}, Mutes:[]bool{false, false}, Entry:"4653973ba94bbafb0625c7b8a2990231264f9473_6838"}}}"
time="01-02-2024 16:06:20" level=debug msg="json payload {"mute":false,"masterVolume":0,"slots":[{"id":"1","active":true,"gains":[0,0],"mutes":[false,false],"entry":"4653973ba94bbafb0625c7b8a2990231264f9473_6838"}]}"
time="01-02-2024 16:06:20" level=debug msg="using endpoint /api/2/devices/master"

My config.json:

{
  "ezbeq": {
    "adjustmastervolumewithprofile": true,
    "denonip": "",
    "denonport": "",
    "dryrun": false,
    "enabled": true,
    "enabletvbeq": true,
    "notifyendpointname": "",
    "notifyonload": true,
    "port": "8080",
    "preferredauthor": "",
    "slots": [
      1
    ],
    "stopplexifmismatch": false,
    "url": "http://192.168.0.148",
    "useavrcodecsearch": false
  },
  "homeassistant": {
    "enabled": false,
    "pausescriptname": "",
    "playscriptname": "",
    "port": "",
    "remoteentityname": "",
    "stopscriptname": "",
    "token": "",
    "triggeraspectratiochangeonevent": false,
    "triggeravrmastervolumechangeonevent": false,
    "triggerlightsonevent": false,
    "url": ""
  },
  "main": {
    "listenport": "9999"
  },
  "mqtt": {
    "password": "",
    "topicaspectratio": "",
    "topicbeqcurrentprofile": "",
    "topiclights": "",
    "topicminidspmutestatus": "",
    "topicplayingstatus": "",
    "topicvolume": "",
    "url": "",
    "username": ""
  },
  "plex": {
    "deviceuuidfilter": "0d3b37f7-6ee8-42dd-933f-7432e19763e1",
    "enabled": true,
    "enabletrailersupport": false,
    "ownernamefilter": "myownername",
    "playerip": "",
    "playermachineidentifier": "",
    "port": "32400",
    "token": "PLACEHOLDER for future use",
    "url": "http://192.168.0.99"
  },
  "signal": {
    "enabled": false,
    "source": ""
  }
}

3rd party jellyfin plugin as mentioned on avs

Log below, it includes a "play", "pause" and "stop" action.

?time="12-20-2023 23:43:57" level=debug msg="ProcessWebhook: Received valid multipart form" func=main.main.ProcessWebhook.func1 file="/go/src/app/handlers/plex_handler.go:57"

time="12-20-2023 23:43:57" level=debug msg="decoding payload" func=main.main.ProcessWebhook.func1 file="/go/src/app/handlers/plex_handler.go:60"

time="12-20-2023 23:43:57" level=error msg="Request has an invalid value in "Account.id" field at position 97" func=main.main.ProcessWebhook.func1 file="/go/src/app/handlers/plex_handler.go:63"

?time="12-20-2023 23:44:05" level=debug msg="ProcessWebhook: Received valid multipart form" func=main.main.ProcessWebhook.func1 file="/go/src/app/handlers/plex_handler.go:57"

time="12-20-2023 23:44:05" level=debug msg="decoding payload" func=main.main.ProcessWebhook.func1 file="/go/src/app/handlers/plex_handler.go:60"

time="12-20-2023 23:44:05" level=error msg="Request has an invalid value in "Account.id" field at position 98" func=main.main.ProcessWebhook.func1 file="/go/src/app/handlers/plex_handler.go:63"

?time="12-20-2023 23:44:09" level=debug msg="ProcessWebhook: Received valid multipart form" func=main.main.ProcessWebhook.func1 file="/go/src/app/handlers/plex_handler.go:57"

time="12-20-2023 23:44:09" level=debug msg="decoding payload" func=main.main.ProcessWebhook.func1 file="/go/src/app/handlers/plex_handler.go:60"

time="12-20-2023 23:44:09" level=error msg="Request has an invalid value in "Account.id" field at position 97" func=main.main.ProcessWebhook.func1 file="/go/src/app/handlers/plex_handler.go:63"

Below is the same "play", "pause" and "stop" sent to request bin for payload viewing.

--55e75408-66b2-4847-9388-b99ae2db6145
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=payload

{"event":"media.play","user":true,"owner":true,"Account":{"id":"b700811125044bb5bbd2d9060e821870","title":"Fattykidd"},"Server":{"title":"Fatty\u0027s Jellyfin","uuid":"1d98a031c5154d30ad65e2fce3b20586"},"Player":{"local":true,"publicAddress":"192.168.50.53","title":"Chrome","uuid":"c443317b061d689735c11124eb9fc2d9"},"Metadata":{"librarySectionType":"movie","guid":"com.plexapp.agents.imdb://tt11858890?lang=en","title":"The Creator","type":"movie","parentTitle":"C","grandparentTitle":"Movies7","addedAt":1702078224,"updatedAt":1702078224,"year":2023,"duration":80090562}}
--55e75408-66b2-4847-9388-b99ae2db6145--

--3d105626-098e-4976-b926-fbf22d0948e6
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=payload

{"event":"media.pause","user":true,"owner":true,"Account":{"id":"b700811125044bb5bbd2d9060e821870","title":"Fattykidd"},"Server":{"title":"Fatty\u0027s Jellyfin","uuid":"1d98a031c5154d30ad65e2fce3b20586"},"Player":{"local":true,"publicAddress":"192.168.50.53","title":"Chrome","uuid":"c443317b061d689735c11124eb9fc2d9"},"Metadata":{"librarySectionType":"movie","guid":"com.plexapp.agents.imdb://tt11858890?lang=en","title":"The Creator","type":"movie","parentTitle":"C","grandparentTitle":"Movies7","addedAt":1702078224,"updatedAt":1702078224,"year":2023,"duration":80090562}}
--3d105626-098e-4976-b926-fbf22d0948e6--

--e335c11d-2bbc-40b1-8c50-9ee8e822cad0
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=payload

{"event":"media.stop","user":true,"owner":true,"Account":{"id":"b700811125044bb5bbd2d9060e821870","title":"Fattykidd"},"Server":{"title":"Fatty\u0027s Jellyfin","uuid":"1d98a031c5154d30ad65e2fce3b20586"},"Player":{"local":true,"publicAddress":"192.168.50.53","title":"Chrome","uuid":"c443317b061d689735c11124eb9fc2d9"},"Metadata":{"librarySectionType":"movie","guid":"com.plexapp.agents.imdb://tt11858890?lang=en","title":"The Creator","type":"movie","parentTitle":"C","grandparentTitle":"Movies7","addedAt":1702078224,"updatedAt":1702078224,"year":2023,"duration":80090562}}
--e335c11d-2bbc-40b1-8c50-9ee8e822cad0--

Error when playing movie

Hi,

What is causing this error and how do I correct it?
It worked before, but after I got a new internet provider and router, my IP has changed, I have corrected all IP in the config file and in webhooks in Plex.

ime="06-23-2023 10:36:30" level=debug msg="decodeWebhook: Received event: media.play"
time="06-23-2023 10:36:30" level=debug msg="!!! Your Player UUID is c39f564b427565dc-com-plexapp-android !!!!!"
time="06-23-2023 10:36:30" level=debug msg="ProcessWebhook: Media type is: movie"
time="06-23-2023 10:36:30" level=debug msg="ProcessWebhook: Media title is: DELETED"
time="06-23-2023 10:36:30" level=info msg="Processing media type: movie"
time="06-23-2023 10:36:30" level=error msg="expected element type MediaContainer> but have HTML>"
There is a < before mediacontainer and HTML, but the full line would not show so I deleted the <

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.