dank der Hilfe und Anregungen auf siio.de wird mein Zuhause Stück für Stück immer smarter.
Kaum gelesen, habe ich mich an der Sturm Szene versucht, leider mit mäßigem Erfolg:
Deshalb habe ich in Zeile 7 die ID 25 eingetragen: local phoneID = {25} – Handy-IDs
Beim manuellen Starten der Szene kommt die entsprechende Ausgabe im Debug Fenster. Die Push auf’s Hand funktioniert jedoch nicht.
Wo könnte der Fehler sein?
Unabhängig davon, kann man das Script um eine Benachrichtigung per Email erweitern? Meine lua Kenntnisse sind leider nur knapp über nicht vorhanden. Könnte vielleicht jemand den Code bereitstellen, sofern nicht höllisch aufwendig?
Hallo boomx,
ich habe das Script heute abend noch mal ausprobiert - auch dank deinem Hinweis -, aber leider bekomme ich eine Fehlermeldung:
[DEBUG] 22:48:08: line 17: attempt to compare number with nil
Bei dem Script wollte ich gerne - da Yahoo nicht geht - es über Openweathermap realisieren.
--[[
%% properties
75 ui.Label5.value
%% globals
--]]
local sturm = 62 -- km/h nach dem Sturm erkannt werden soll
local phoneID = 4 -- Handy-IDs
local maxID = 100
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
local startSource = fibaro:getSourceTrigger();
local wind = fibaro:getValue(75, 'ui.Label5.value')
if ((tonumber(fibaro:getValue(75, 'ui.Label5.value')) > tonumber(sturm)) or startSource['type'] == 'other') then
if (startSource['type'] == 'other') then
Debug('white', "SZENE MANUELL GESTARTET")
else
Debug('green', "SZENE DURCH WIND-VORHERSAGE GESTARTET")
end
Debug('red', "ACHTUNG! Sturm erkannt. Geschwindikeit: " ..wind.. " km/h")
Debug('white', "Prüfe offene Fenster")
for id = 1, maxID do
local deviceType = fibaro:getType(id)
if (deviceType == 'com.fibaro.windowSensor' or deviceType == 'com.fibaro.doorSensor') then
if (tonumber(fibaro:getValue(id, 'value')) == 1) then
local name = fibaro:getName(id)
local room = fibaro:getRoomNameByDeviceID(id)
Debug('red', "ACHTUNG! Sturm erkannt. " ..name.. " im Raum " ..room.. " ist offen!")
for k=1, maxID do
if phoneID[k] ~= nil then
fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: Sturm erkannt! ' ..name.. ' im Raum ' ..room.. ' ist offen!')
end
end
end
end
end
end
Hast Du noch mal einen Tip ? Ich stehe auf dem Schlauch.
Ich vermute mal, Zeile 3 ist schon das Problem.
Zumindest habe ich das so noch nicht als Trigger gesehen.
in eine Block-Szene kann man das als Wenn-Bedingung auch nicht auswählen.
Befülle doch im VD eine globale Variable, mit dem Wind-Wert und verwende das dann hier als Trigger.
Hallo boomx & Hoggle,
da ich absoluter Newbie in Sache LUA bin, würde ich mich freuen wenn ihr mir einmal zeigen könntet wie der Code auszusehen hat.
Dann habe ich eine Grundlage um da weiter drauf aufzubauen.
Ich habe schon viel hin und her ausprobiert, aber leider hat es nicht geklappt, wahrscheinlich ist es wie so oft, ein Zeichen an der falschen Stelle
Nur so lesen mit Globale Variable und Trigger, da weis ich nicht wo ich aus dem Script die entsprechenden Werte von Openweathermap rausnehmen muss,
da dort ja auch noch mit einer primären Schleife usw. gearbeitet wird.
Also falls Ihr Zeit habt wäre ich dankbar für ein wenig Hilfe.
Hallo Hoggle,
ich habe es nun so versucht einzubauen, aber so richtig klappt es noch nicht.
Nun habe ich mir extra Weather Underground auch noch installiert, da darauf deine Antwort ausgelegt war.
Ich habe dann versucht die Angaben von der Seite 3 einzubauen.
Nun hatte ich folgende Fehlermeldung:
Line 25: bad argument #2 to ‘tonumber’ (base out of range)
Folgendes steht in der Zeile 25: if ((tonumber(fibaro:getGlobal('V_Wind')) > tonumber(sturm)) or startSource['type'] == 'other') then
V_Wind ist die besagte Variable die angelegt werden sollte.
Noch gebe ich ja nicht auf. Hast Du vieleicht einen komplett Code wo man sieht wie Du es gelöst hast ?
Hallo Hoggle,
habe ich alles probiert.
Die normale VD von Openweathermap und Weather Underground funktionieren super.
Aber die Werte wollen sich einfach nicht in das Sturmwarnungs Script einbauen lassen.
Ich habe die Zeilen 1:1 kopiert, versucht Werte anzupassen, Werte zu setzen - ohne Erfolg.
Nun ja wäre schön gewesen, aber gut hilft nichts, muss man warten bis Fibaro andere Wetterdaten ausser Yahoo anzeigt
und vielleicht klappt es ja dann.
Hi Hoggle,
so sieht das das LUA 2 - Sturmwarnung Script aus:
--[[
%% properties
%% globals
--]]
local sturm = 62 -- km/h nach dem Sturm erkannt werden soll
local phoneID = 4 -- Handy-IDs
local maxID = 1000
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
local startSource = fibaro:getSourceTrigger();
fibaro:call(80, "setProperty", "ui.lblWind.value", wind);
fibaro:setGlobal('V_Wind', wind)
if ((tonumber(fibaro:getGlobal('V_Wind')) > tonumber(sturm)) or startSource['type'] == 'other')
then
if (startSource['type'] == 'other') then
Debug('white', "SZENE MANUELL GESTARTET")
else
Debug('green', "SZENE DURCH WIND-VORHERSAGE GESTARTET")
end
Debug('red', "ACHTUNG! Sturm erkannt. Geschwindikeit: " ..V_Wind.. " km/h")
Debug('white', "Prüfe offene Fenster")
for id = 1, maxID do
local deviceType = fibaro:getType(id)
if (deviceType == 'com.fibaro.windowSensor' or deviceType == 'com.fibaro.doorSensor') then
if (tonumber(fibaro:getValue(id, 'value')) == 1) then
local name = fibaro:getName(id)
local room = fibaro:getRoomNameByDeviceID(id)
Debug('red', "ACHTUNG! Sturm erkannt. " ..name.. " im Raum " ..room.. " ist offen!")
for k=1, maxID do
if phoneID[k] ~= nil then
fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: Sturm erkannt! ' ..name.. ' im Raum ' ..room.. ' ist offen!')
end
end
end
end
end
end
Bei Weather Underground habe ich nichts geändert.
Muss ich dort den Wert in die Globale Variable füllen um die woanders abzurufen ?
@Hoggle:
Ich glaube jetzt habe ich es kapiert.
Die Zeilen im vorherigen Post von mir bezogen sich also auf das Weather Underground Script.
Da wird die Variable also gefüllt, damit diese in den anderen Scripten weiter bearbeitet werden können, es ist also eine Hilfsübergabe.
Jetzt habe ich nur noch das Problem das folgende Fehlermeldung erscheint beim Start:
Line 18: Bad Argument #2 to ‘tonumber’ (base out of range)
was steht denn in der Variablen? Sieht so aus, als ob diese nicht in eine Zahl umgewandelt werden kann. Dies wäre der Fall, wenn soetwas wie “32 km/h” in der Variablen steht.