SONOS_Remote_v1.0.1

Glaube ich sofort.
Du hast Du ja auch zwei Dinge vermixt und auf alten Gegebenheiten aufgebaut.
Die HC-API hat sich zudem weiterentwickelt…

Das Remote-VD nutze ich schon länger nicht mehr, mit der NODS-Lösung spielt die Musik/Radio nach dem TTS weiter.
Das hat das Remote VD aber auch gemacht.

Ja, das war glaube ich das Problem :slight_smile:

Jetzt läuft das zumindest :slight_smile: Trotzdem vielen Dank für deine Hilfe und Gedulde :slight_smile:

Du nutzt es nicht mehr, weil du etwas anderes nutzt, oder wie machst du das, wenn du es überhaupt noch machst?!

Kannst du mir kurz erläutern was du mit NODS-Lösung meinst?!

Gruß

Wetter hole ich mir von Netatmo,
TTS geht über RPI mittels
https://forum.fibaro.com/index.php?/topic/21797-tutorial-sonos-remote-vd-using-node-sonos-api/

Moin, moin allerseits,

bei mir lief das original VD v1.0.1 seit einigen Wochen einwandfrei.
Vor ein paar Tagen hat sich die HC2 wohl irgendwie ‘aufgehangen’.
(Lichtsteuerung und Variablen nach Sonnenstand stimmten nicht mehr)
Alle Buttons des VDs ohne Funktion, Statusinformation werden aber weiterhin
aktualisiert angezeigt wenn ich über die Sonos App bzw. über das Sonos Plug-In
Änderungen wie Next Track oder Volumen vornehme.
Daraufhin habe ich sie über den Power-Taster aus und wieder eingeschaltet.
Nachdem das erfolglos blieb hab ich sie über den Browser neu gestartet, aber
auch das blieb ohne Erfolg.

Die IP zur Sonos ist korrekt (hat ja bisher auch funktioniert)

Hat jemand eine Idee woran das liegen könnte?

Gruß,
ATARI

Hallo Hoggle,

habe gesehen du nutzt auch die Node-Sonos-HTTP-API. Gibt es da eine Möglichkeit eine .mp3 von einer NAS (Synology) abzuspielen? Es gibt ja den Befehl Clip für MP3, aber der bezieht sich ja nur auf den Ordner auf dem PI. Vielleicht hast du ja eine Lösung parat :slight_smile:

Lg. Beijonig

Hi,

leider nein. Ich nutze als NAS auch nur eine Fitzbox.
Hast Du mal in den Thread geschaut:
https://forum.fibaro.com/index.php?/topic/21797-tutorial-sonos-remote-vd-using-node-sonos-api/

Von denen nutzen einige eine Synology.

VG Hoggle

Hallo Hoogle,

Danke für den Tipp habe dort mal nachgefragt! Ist leider momentan nicht möglich.

it is possible to play an MP3 file from a NAS (Synology)

@Beijonig

Unfortunately not, for now the mp3 needs to be in the clips folder

Aber eine andere Frage! Hast du eine Guten Morgen Begrüßung mit Wetter usw. für Sonos-HTTP-API?

LG. Beijonig

ja.

Der Aufruf erfolgt über den “Smart Massage Hub” und AWS Polly.

--[[
%% properties
%% globals
--]]

 
-- 263 is the Virtual Device ID
-- 28 is the Process button ID
 
local sid, bid = 263, 28
local SMH = 295 --Szenen ID vom Smart Hoem Hub 1.1

local temp = tostring(fibaro:getValue(144, "value"))

tempcurr=string.gsub(temp, "%.", ",", 1);
--fibaro:debug(tempcurr);

-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-- Funktion zur Ermittlung des Datums.
-- Version 1.0
-- Copyright (c) 2015 Nicolas Dörig
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------

function germanDate( _type ) -- l=longDate("Montag, 12.September"), s=shortDate("Mo, 12.Sep 2011"), N=numericLong("12.09.2011"), n=numericShort("12.09.11")
	local longWochentag  = {'Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'}
	local shortWochentag = {'So','Mo','Di','Mi','Do','Fr','Sa'}
	local longMon        = {'Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'}
	local shortMon       = {'Jan','Feb','Mrz','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'}
	local indexTag       = os.date( "%w" ) +1
	local indexMon       = math.abs( os.date( "%m" ) )
	if _type == 's' then
		return os.date( shortWochentag[indexTag]..", %d."..shortMon[indexMon].." %Y" )
	elseif _type == 'l' then
		return os.date( longWochentag[indexTag]..", %d."..longMon[indexMon] )
	elseif _type == 'N' then
		return os.date( "%d.%m.%Y" )
	elseif _type == 'n' then
		return os.date( "%d.%m.%y" )
	end
end
--print ( 'Kurzdatum mit Wochentag\t' .. germanDate('s') )
--print ( 'Langdatum mit Wochentag\t' .. germanDate('l') )
--print ( 'Datum numerisch lang\t' .. germanDate('N') )
--print ( 'Datum numerisch kurz\t' .. germanDate('n') )

-------------------------------------------------------------------------------------------

--local weather = fibaro:getValue(3, "WeatherConditionConverted")
local weather = fibaro:getGlobal("OW_Weather")
local weather_de
fibaro:debug(weather) 

  if weather == "overcast clouds" then 
      weather_de = "und es ist bewoelkt."
	elseif weather == "few clouds" then 
      weather_de = "mit ein paar Wolken."
	elseif weather == "scattered clouds" then 
      weather_de = "bei aufgelockerter Bewoelkung."
	elseif weather == "broken clouds" then 
      weather_de = "bei durchbrochener Bewoelkung."
	elseif weather == "light rain" then 
      weather_de = "es regnet leicht, vergiss den Schirm nicht!"
	elseif weather == "moderate rain" then 
      weather_de = "es regnet, vergiss den Schirm nicht!"
  	elseif weather == "heavy intensity rain" then 
      weather_de = "es regnet stark, vergiss den Schirm nicht!"
    elseif weather == "clear sky" then 
      weather_de = "und der Himmel ist klar."
    elseif weather == "snow" then 
      weather_de = ". Es schenit."
    elseif weather == "sleet" then 
      weather_de = ". Schneeregen."
    elseif weather == "drizzle" then 
      weather_de = ". Nieselregen."
  	elseif weather ==  "light intensity drizzle rain" then
  	  weather_de = ". Leichter Nieselregen."
  	elseif weather == "light snow" then 
      weather_de = ". Es schneit leicht."
  	elseif weather == "fog" then 
      weather_de = ". Es ist nebelig."
  	elseif weather == "thunderstorm" then 
      weather_de = ". Achtung Gewitter."
  
    else
      --weather_de = "."
  	  weather_de = weather
    end

fibaro:debug(weather_de) 
---------------------------------------------------------------------------

------Aufruf über Smart Massage hub und AWS Polly

local message = "Es ist ".. germanDate('l') .." und draussen sind "..tempcurr.." Grad "..weather_de..".";
fibaro:startScene(SMH, {message, "Kueche"}) 


Hallo Hoggle,

das mit dem Smart Massage Hub ist interessant. Habe ich mir mal aus dem Forum installiert. Bin das grade am testen. Muss ich für AWS Polly einen Account haben? Und was ist die ID 263 bei dir? Klingt nach SONOS_Remote_v1.0.1 wegen dem Process button. Muss ich das weiter laufen lassen? Nutze ja aktuell Sonos-HTTP-API

LG. Beijonig

Hi,

Ja, für AWS benötigst du einen eigenen Account.
Die ID resultiert noch aus einer alten Konstelation. Brauchst du nicht.

Viele Grüße Hoggle

Hallo Hoggle,

irgendwie bekomme ich das nicht ans Laufen. Habe es mit dem Demo VD mal versucht. Der Debug sieht eigentlich ganz gut aus:

[DEBUG] 16:35:34: main function triggered
[DEBUG] 16:35:34: Info: Demo mode active
[DEBUG] 16:35:34: == VARIABLES ==
[DEBUG] 16:35:34: Message: Hello there.
[DEBUG] 16:35:34: Title:
[DEBUG] 16:35:34: Subtitle:
[DEBUG] 16:35:34: Target: Bad
[DEBUG] 16:35:34: Message Type: TTS
[DEBUG] 16:35:34: Message Service: sonosAPI
[DEBUG] 16:35:34: TTS Volume: 25
[DEBUG] 16:35:34: Internet State: 1
[DEBUG] 16:35:34: Sonos API State: 1
[DEBUG] 16:35:34: Occupancy State: Home
[DEBUG] 16:35:34: Sleep State: Awake
[DEBUG] 16:35:34: Unload Notify Q: false
[DEBUG] 16:35:34: Unload TTS Q: false
[DEBUG] 16:35:34: …end of variables
[DEBUG] 16:35:34: Info: TTS message sent by Sonos API

Liegt es daran das ich keinen Account von AWS habe? Habe aber auch nichts gefunden wo ich die Daten hinterlegen kann. Push Nachrichten etc funktioniert auch nicht. Hast du ne idee woran es liegen könnte?

Bei REMplayers muss ich doch nichts eintragen oder?

lg. Beijonig

Du kannst AWS oder VoiceRSS nutzen, aber da musst du dich registrieren.
Wenn Push und Mail nicht geht, ist etwas nicht richtig eingerichtet.
Das Demo-VD ist Ggf für den Syntax hilfreich, sondre eher nicht

Hi Hoggle,

VoiceRSS habe ich einen Account, muss ich den Irgendwo eintragen? Die normale TTS Funktion funktioniert mit der Sonos-HTTP-API über den Say Befehl.

Lg. Beijonig

Hallo zusammen,
kann das einer nochmals für mich erklären?
Ich habe jetzt beide Varianten ausprobiert.
Das Original-Plugin funktioniert.
Sprich dort die IP hinterlegt und gut…
Bei der VD SONOS_Remote hab ich nun auch die IP hinterlegt, den Port 1400 eingetragen…
Aber bei beiden Versionen der VD wird bei mir in der Variablensteuerung keine x_sonos Variable angelegt.
Ich hab das nun sogar von Hand gemacht, aber mit welchem Wert will das befüllt werden?

Meine VD bekommt keine Verbindung zur Sonos…

Meine Herren…, die Versionen hier funktionieren nicht. Auch die aus dem Fibaro-Forum.
Erst die Sonos Remote hat dann die Variante x_sonos_object angelegt…
Heureka, jetzt kann die eigentliche Arbeit beginnen…

Hallo zusammen, Bin gerade betriebsblind, kann mir jemand mal einen Tipp geben, warum ich in Zeile 100 den Fehler bekomme;
[DEBUG] 15:59:03: nil
[DEBUG] 15:59:03: nil
[DEBUG] 15:59:03: nil
[DEBUG] 15:59:03: nil
[DEBUG] 15:59:03: line 100: attempt to concatenate local ‘weather_de’ (a nil value)?
(Ich hoffe nur das ich den Code jetzt richtig eingefügt habe…)

--[[
%% properties

%% globals
--]]

 
-- 263 is the Virtual Device ID
-- 28 is the Process button ID
 
local sid, bid = 54, 28
--local temp = tostring(fibaro:getValue(144, "value"))

local temp=tostring(fibaro:getGlobalValue("OWM_Temp"));
fibaro:debug(temp);
tempcurr=string.gsub(temp, "%.", ",", 1);
fibaro:debug(tempcurr);

-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-- Funktion zur Ermittlung des Datums.
-- Version 1.0
-- Copyright (c) 2015 Nicolas Dörig
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------

function germanDate( _type ) -- l=longDate("Montag, 12.September"), s=shortDate("Mo, 12.Sep 2011"), N=numericLong("12.09.2011"), n=numericShort("12.09.11")
	local longWochentag  = {'Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'}
	local shortWochentag = {'So','Mo','Di','Mi','Do','Fr','Sa'}
	local longMon        = {'Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'}
	local shortMon       = {'Jan','Feb','Mrz','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'}
	local indexTag       = os.date( "%w" ) +1
	local indexMon       = math.abs( os.date( "%m" ) )
	if _type == 's' then
		return os.date( shortWochentag[indexTag]..", %d."..shortMon[indexMon].." %Y" )
	elseif _type == 'l' then
		return os.date( longWochentag[indexTag]..", %d."..longMon[indexMon] )
	elseif _type == 'N' then
		return os.date( "%d.%m.%Y" )
	elseif _type == 'n' then
		return os.date( "%d.%m.%y" )
	end
end
--print ( 'Kurzdatum mit Wochentag\t' .. germanDate('s') )
--print ( 'Langdatum mit Wochentag\t' .. germanDate('l') )
--print ( 'Datum numerisch lang\t' .. germanDate('N') )
--print ( 'Datum numerisch kurz\t' .. germanDate('n') )

-------------------------------------------------------------------------------------------

--playTTS("de", "Guten Morgen. Es ist ".. germanDate('l') .." und draussen sind es " .. getWeather( 't' ) .." Grad " .. getWeather( 'c' ) ..". Ich starte das Radio fuer dich.", 13000, 15);

local weather = fibaro:getValue(3, "WeatherConditionConverted")
local weather = fibaro:getGlobal("OW_Weather")
local weather_de
fibaro:debug(weather) 

  if weather == "overcast clouds" then 
      weather_de = "und es ist bewoelkt."
	elseif weather == "few clouds" then 
      weather_de = "mit ein paar Wolken."
	elseif weather == "scattered clouds" then 
      weather_de = "bei aufgelockerter Bewölkung."
	elseif weather == "broken clouds" then 
      weather_de = "bei durchbrochener Bewölkung."
	elseif weather == "light rain" then 
      weather_de = "es regnet leicht, vergiss den Schirm nicht!"
	elseif weather == "moderate rain" then 
      weather_de = "es regnet, vergiss den Schirm nicht!"
  	elseif weather == "heavy intensity rain" then 
      weather_de = "es regnet stark, vergiss den Schirm nicht!"
    elseif weather == "clear sky" then 
      weather_de = "und der Himmel ist klar."
    elseif weather == "snow" then 
      weather_de = ". Es schenit."
    elseif weather == "sleet" then 
      weather_de = ". Schneeregen."
    elseif weather == "drizzle" then 
      weather_de = ". Nieselregen."
  	elseif weather == "light snow" then 
      weather_de = ". Es schneit leicht."
  	elseif weather == "fog" then 
      weather_de = ". Es ist nebelig."
  	
    else
      --weather_de = "."
  	  weather_de = weather
    end

fibaro:debug(weather_de) 
---------------------------------------------------------------------------
-- Create TTS params object
 
--message = "Die aktuelle Temperatur draußen beträgt "..tempcurr.."°Celsius.",  
 
local params = {

--TTS Message

message = "Es ist ".. germanDate('l') .." und draussen sind "..tempcurr.." Grad "..weather_de..".";

--message = "Es ist ".. germanDate('l') .." und draussen sind "..tempcurr.."°Celsius.".. getWeather( 'c' ) ..". Ich starte das Radio fuer dich.";

duration = 'auto';  -- Duration: "auto", xx seconds
language = "de-DE"; -- Language: see http://www.voicerss.org/api/documentation.aspx to get your language code
volume = 18;         -- Volume
}
 
local _f = fibaro
local _x ={root="x_sonos_object",load=function(b)local c=_f:getGlobalValue(b.root)if string.len(c)>0 then local d=json.decode(c)if d and type(d)=="table"then return d else _f:debug("Unable to process data, check variable")end else _f:debug("No data found!")end end,set=function(b,e,d)local f=b:load()if f[e]then for g,h in pairs(d)do f[e][g]=h end else f[e]=d end;_f:setGlobal(b.root,json.encode(f))end,get=function(b,e)local f=b:load()if f and type(f)=="table"then for g,h in pairs(f)do if tostring(g)==tostring(e or"")then return h end end end;return nil end}
-- Make a request to the remote to process params object instantly
_x:set(tostring(sid), { tts = params })
_f:call(sid, "pressButton", bid)

Nicht verwirren lassen, beim Einfügen ist mir Zeile 3 die ja leer ist, verloren gegangen…

Hi,

Ohne auf das Original zu sehen - in Zeile 52 und 53 wird die selbe Variable anders definiert. Hast Du die GV OW_Weather?
War die Var in Zeile 54 im Original auch undefiniert ?

Viele Grüße Hoggle

Hi Hoggle,
Ah, OK…
Wie müsste die globale Variante OW_Weather denn angelegt werden?
Ja, die 54 war so gewesen…

Im Var-Panel…
Und wird durch das Open Weather VD befühlt.