Mit google-TTS nicht mehr. Dazu musst du VoiceRSS nutzen.
Gruß
Mit google-TTS nicht mehr. Dazu musst du VoiceRSS nutzen.
Gruß
gibt es dafür auch ein howto?
Viele Grüße Hoggle
Ich habe eine Frage:
Im Post: #50490 steht:
Im Update-Button des VDs habe ich:
Dann kommt der Quelltext, wo muss dieser denn rein?!
Das verstehe ich leider nichtso ganz
Auf welcher Seite ist der Post?
Um welches VD geht es?
Abend.
Auf Seit zwei. Ich weiß leider nicht auf welches VD sich das bezieht.
Könnte das overweather sein oder sonos.
Anke für die Hilfe.
Gruß
Ja,
genau, steht ja auch in den Code-Zeilen drin, OpnenWeather.
Also das heißt ich brauche ein zusätzlichen button in dem VD oder muss ich den Quellcode ergänzen unter dem “i” Button?!
Gruss
da Du das Thema ja auch im Fibaro-Forum diskutierst…
VG Hoggle
Hallo Hoggle,
ich habe mich jetzt für das OpenWeather entschieden. Das VD läuft soweit korrekt. Nun habe ich aber das Problem das die Globale Variable ja 0 ausgibt.Dann hast du geschrieben, das ist soweit korrekt, die muss ja mit Werten gefüllt werden.
jetzt ist meine Frage wo ich die Variable OW_Weather mit Werten fülle?! Laut deinem Post steht dort im Update Button?! Aber wo ist dieser bzw. wo muss der erstellt werden, hoffe das ich mich jetzt etwas besser ausgedrückt habe und danke für deine Geduld
Welche Variable genau meinst Du mit:
“die Globale Variable ja 0 ausgibt”
Viele Grüße Hoggle
So, damit wir nicht noch übe andere “Dinge” reden
Ich habe mir zunächst dieses VD runtergeladen:OpenWeather-VD
Der Code im dem VD lautet wie folgt:
-- Skript übersetzt und Fehlerkorrekturen eingebaut by boomx #siio
-- Dank an die Autoren Jakub & Damian von der polnischen Commuity @ forum.fibaro.com
-- DATEN ANPASSEN
local city="ORT"
local country="de" -- en, se, ....
local api_key="API_KEY" -- you can get your own API_KEY on this website: https://home.openweathermap.org/users/sign_up
local lang = "de" -- en, se, ...
-- NETATMO-INTEGRATION (Aussensensor) - Temperatur und Luftfeuchtigkeit
local netatmo = false
local netatmo_id = 78 -- ID des Thermometers
-- VARIABLE für Wind (netatmo oder Z-Weather)
local wind_var = false
local var_name = 'wind_zweahter'
-- AB HIER NICHTS MEHR ÄNDERN
local thisdevice = fibaro:getSelfId()
local cHM = os.date("%H:%M")
local sunRise = fibaro:getValue(1, "sunriseHour")
local sunSet = fibaro:getValue(1, "sunsetHour")
local noc = (cHM > sunSet or cHM < sunRise)
local weather_array = {[200] = 47, [201] = 45, [202] = 45, [210] = 38, [211] = 4, [212] = 3, [221] = 4, [230] = 9, [231] = 9, [232] = 9, [300] = 9, [301] = 9, [302] = 9, [310] = 11, [311] = 10, [312] = 6, [321] = 9, [500] = 40, [501] = 40, [502] = 12, [503] = 12, [504] = 12, [511] = 10, [520] = 12, [521] = 12, [522] = 12, [600] = 14, [601] = 16, [602] = 13, [611] = 5, [621] = 19, [701] = 21, [711] = 22, [721] = 20, [731] = 19, [741] = 21, [804] = 26, [900] = 0, [901] = 1, [902] = 2, [903] = 25, [904] = 36, [905] = 24, [906] = 17, [950] = 3200, [952] = 12, [953] = 12, [954] = 12, [955] = 12, [956] = 12, [957] = 24, [958] = 24, [959] = 2, [960] = 4, [961] = 4, [962] = 2, [800] = 32, [801] = 30, [802] = 30, [803] = 28, [951] = 34}
if noc then weather_array = {[800] = 31, [801]= 29, [802] = 29, [803] = 27, [951] = 33} end
local city = string.gsub(city," ","+")
-- connect to OpenWeatherMap:
fibaro:debug('Verbindung zur API wird aufgebaut...')
OWM = Net.FHttp("api.openweathermap.org")
data, status = OWM:GET("/data/2.5/weather?q="..city..","..country.."&units=metric&lang="..lang.."&APPID="..api_key)
if tonumber(status) < 300 and status ~= nil then
--fibaro:debug(data)
ajson=json.decode(data)
-- Stadt:
city_=ajson.name..", "..ajson.sys.country
fibaro:debug('Wetterdaten für ' ..city_.. ' abgefragt.')
--Wetter
pogo=ajson.weather[1].description
fibaro:debug('Wetter: ' ..pogo)
pogoId=tonumber(ajson.weather[1].id)
weather_ = weather_array[pogoId]
if weather_ == nil then weather_ = 3200 end;
fibaro:debug('ConditionCode: ' ..weather_)
--Temperatur
if (netatmo == false) then
fibaro:debug('Keine netatmo-Integration')
tempmin=math.floor(ajson.main.temp_min)
tempmin = tonumber(tempmin .. ".00")
else
fibaro:debug('netatmo-Integration aktiv')
tempmin = tonumber(fibaro:getValue(netatmo_id, "value"))
end
fibaro:debug('Temperatur: ' ..tempmin.. ' °')
--Luftfeuchtigkeit
if (netatmo == false) then
fibaro:debug('Keine netatmo-Integration')
hum=ajson.main.humidity
hum = tonumber(hum .. ".00")
else
fibaro:debug('netatmo-Integration aktiv')
hum = tonumber(fibaro:getValue(netatmo_id + 1, "value"))
end
fibaro:debug('Luftfeuchtigkeit: ' ..hum.. ' %')
--Luftdruck
pressure=math.floor(ajson.main.pressure)
fibaro:debug('Luftdruck: ' ..pressure.. ' hPa')
--Windstärke
if (netatmo == false) then
fibaro:debug('Keine Variable für Wind gesetzt')
wind_speed=math.floor(ajson.wind.speed * 3.6)
wind_speed = tonumber(wind_speed .. ".00")
fibaro:debug('Windstärke: ' ..wind_speed.. ' km/h')
else
fibaro:debug('Variable für Wind gesetzt')
wind_speed = fibaro:getGlobal('wind_zweather')
fibaro:debug('Windstärke: ' ..wind_speed.. ' km/h')
end
--Windrichtung
wind_deg=math.floor(ajson.wind.deg)
wind_deg_num = math.floor(wind_deg / 45)
wind_deg_tab = {"N", "NE", "E", "SE", "S", "SW", "W", "NW"}
wind_direction = wind_deg_tab[wind_deg_num]
if (wind_direction == nil) then wind_direction = '-' end
fibaro:debug('Windrichtung: ' ..wind_direction)
-- Write data to label of VD:
fibaro:call(thisdevice, "setProperty", "ui.Label1.value", tempmin.." °C");
fibaro:call(thisdevice, "setProperty", "ui.Label2.value", hum.." %");
fibaro:call(thisdevice, "setProperty", "ui.Label3.value", wind_speed.." km/h, "..wind_direction);
fibaro:call(thisdevice, "setProperty", "ui.Label4.value", pressure.." hPa");
fibaro:call(thisdevice, "setProperty", "ui.Label5.value", city_);
-- Show in UI HC2 (browser)
VD = Net.FHttp("127.0.0.1", 11111);
r,s,e = VD:PUT("/api/devices", '{ "id": 3, "properties": {"Temperature": ' .. tempmin .. ', "Humidity": ' .. hum .. ', "ConditionCode": ' .. weather_ .. ', "Wind": ' .. wind_speed .. '}}');
if tonumber(e) == 0 then
fibaro:debug("Wetterdaten in der API aktualisiert.");
else
fibaro:debug("Aktualisierung der Wetterdaten fehlerhaft!!!");
end
else
fibaro:debug("Fehler beim Aufruf der OpenWeatherMap-API. Status: #"..status);
end
Dort habe ich soweit alles eingerichtet und es läuft das VD.
Nun wollte ich die Daten gern nutzen für die Sonos Wetterabfrage. Dann habe ich hier im Thread gelesen das ich noch eine Globale Variable: OW_Weather benötige. Die habe ich soweit erstellt. Nun muss diese Variable aber ja noch mit Daten gefüllt werden.
Dazu soll laut dir ein Udate button im VD folgenden Code haben.
selfId = fibaro:getSelfId()
local id = fibaro:get(fibaro:getSelfId(), "IPAddress")
HC3 = Net.FHttp("api.openweathermap.org")
danem, statusm = HC3:GET("/data/2.5/weather?q="..id.."&units=metric&APPID=xxxxxxxxxxxx")
danef, statusf = HC3:GET("/data/2.5/forecast?q="..id.."&units=metric&APPID=xxxxxxxxxxxx")
local ajson=json.decode(danem)
local tempmin=ajson.main.temp_min
local tempmax=ajson.main.temp_max
local pressure=ajson.main.pressure
local humidity=ajson.main.humidity
local city=ajson.name
local wind=ajson.wind.speed
local weather=ajson.weather[1].description
local tm=ajson.dt
local ajsonf=json.decode(danef)
local n
local t
for i = 1,5 do
t = ajsonf.list[i].dt
if t > tm then
n = i
break
end
end
local ftempmin=ajsonf.list[n].main.temp_min
local ftempmax=ajsonf.list[n].main.temp_max
local fpressure=ajsonf.list[n].main.pressure
local fhumidity=ajsonf.list[n].main.humidity
local fwind=ajsonf.list[n].wind.speed
if ftempmin > tempmin then
fibaro:call(selfId,"setProperty","ui.Label1.value", string.format("%3.1f°C(↑%3.1f)", tempmin, ftempmin))
elseif ftempmin < tempmin then
fibaro:call(selfId,"setProperty","ui.Label1.value", string.format("%3.1f°C(↓%3.1f)", tempmin, ftempmin))
else
fibaro:call(selfId,"setProperty","ui.Label1.value", string.format("%3.1f°C(-)", tempmin))
end
if ftempmax > tempmax then
fibaro:call(selfId,"setProperty","ui.Label2.value", string.format("%3.1f°C(↑%3.1f)", tempmax, ftempmax))
elseif ftempmax < tempmax then
fibaro:call(selfId,"setProperty","ui.Label2.value", string.format("%3.1f°C(↓%3.1f)", tempmax, ftempmax))
else
fibaro:call(selfId,"setProperty","ui.Label2.value", string.format("%3.1f°C(-)", tempmax))
end
if fpressure > pressure then
fibaro:call(selfId,"setProperty","ui.Label3.value",string.format("%dhPa(↑%d)", pressure, fpressure))
elseif fpressure < pressure then
fibaro:call(selfId,"setProperty","ui.Label3.value",string.format("%dhPa(↓%d)", pressure, fpressure))
else
fibaro:call(selfId,"setProperty","ui.Label3.value",string.format("%dhPa(-)", pressure))
end
if fhumidity > humidity then
fibaro:call(selfId,"setProperty","ui.Label4.value",string.format("%d%s(↑%d)", humidity, "%", fhumidity))
elseif fhumidity < humidity then
fibaro:call(selfId,"setProperty","ui.Label4.value",string.format("%d%s(↓%d)", humidity, "%", fhumidity))
else
fibaro:call(selfId,"setProperty","ui.Label4.value",string.format("%d%s(-)", humidity, "%"))
end
if fwind > wind then
fibaro:call(selfId,"setProperty","ui.Label5.value",string.format("%4.1fm/s(↑%4.1f)", wind, fwind))
elseif fwind < wind then
fibaro:call(selfId,"setProperty","ui.Label5.value",string.format("%4.1fm/s(↓%4.1f)", wind, fwind))
else
fibaro:call(selfId,"setProperty","ui.Label5.value",string.format("%4.1fm/s(-)", wind))
end
fibaro:call(selfId,"setProperty","ui.Label6.value",city)
fibaro:call(selfId,"setProperty","ui.Label91.value",weather)
fibaro:setGlobal("OW_Weather", weather)
--------
function setDevicePropertyValue(id, label, value)
fibaro:call(id, "setProperty", "ui."..label..".value", value)
end
--Date = os.date("%Y-%m-%d %H:%M:%S", os.time())
Date = os.date("%d-%m-%Y %H:%M:%S", os.time())
setDevicePropertyValue(selfId, "DateUpdate",Date)
fibaro:debug("Durchgelaufen")
Jetzt ist meine Frage, wo muss dieser Code rein?! Habe ich evtl. das “falsche” OpenWeather VD?!
Oder wurde das mal geändert?!
Sorry für die Verwirrung
In keinem deiner Skripte werden Variablen gesetzt. Dies kannst du aber manuell nachholen.
Gruß
Hallo,
sorry für die vielleicht dumme Frage, aber von welchen Variablen sprichst du?!
Gruß
Wird doch im 2ten Skript gesetzt, übersehen.
Gruß
Ja, da stellt sich mich doch die Frage, wo muss das zweite Script rein?!
Hoffe da kommt noch eine Antwort
Gruß
Stehen in deinem verwendeten Code in Zeile 5 und 6 noch die xxxxx drin?
Das Script sieht nach dem OpenWeathetVD und dann wohl dessen Button aus.
Abend.
Der ober Code ist von dem openweather VD der untere Code ist nur aus dem Forum und ich weiß nicht wo der hin muss.
Nein xxx ist durch mein API Code ersetzt
Ich habe jetzt extra für Dich nachgesehen.
Der zweite Code ist bei mir der Code, der bei dem von mir genutzten OpenWeather-VD bei dem Button “Update” hinterlegt ist.
Welchen Stand das von mir genutzte VD, das von Dir heruntergeladene VD und von wann der auf Seite 2 gepostete Code ist, habe ich nicht analysiert.
Wenn Du also den ersten Code nutzt, fehlt (wie von Boomx bereits gesagt hat) die Befüllung der globalen Var “fibaro:setGlobal(“OW_Weather”, weather)”
Der erste Code befüllt direkt die HC-API. Da wäre die globale Var egal bzw. nicht nötig.
Je nach dem, wie Du Deine Wetter Infos beziehst - Openweather und diese globale Var brauchst Du nicht zwingend.
VG Hoggle
Guten morgen,
leider hat das bei mir nicht hingehauen, habe das jetzt aber anders gelöst, so das ich die Wetterdaten erhalte.
Ich hätte noch eine Frage zu dem Sonos Remote.
Wie kann ich denn nach der ansage mein Radio starten?! Was muss ich da wo eintragen?!
Sofern jemand den Code für das Wetter benötigt, kann er sich gern melden.
Gruß