Ich habe vor einigen Tagen mein Projekt abgeschlossen, das ich hier und jetzt mit euch teilen möchte.
Mein Wunsch war es immer schon wenn`s draußen klingelt wollte ich drinnen eine Sprachausgabe haben, sei es über Sonos oder Alexa. Nun gibt es ja verschiedene Ansätze über Raspberry usw, das mir aber dann immer zu aufwändig war.
Mein Aufbau jetzt sieht aus wie folgt, draußen an der Haustür einen Berker Doppel Taster aber nur mit einer Wippe. Der eine Schließer ist für die Klingel, der zweite geht auf meinen Fibaro Universal Binary Sensor. Weil beide Schließer potentialfrei sind gibt es da auch keinerlei Probleme. Somit habe ich einen Trigger für alles was ich in meiner HC2 ansteuern möchte. z.B. geht ein Monitor für 30 Sekunden an oder eine Lampe im Bad kurz an.
Nun zur Sprachsteuerung, vor kurzen hatte ich mir zwei Buttons von Amazon bestellt, um etwas zu probieren. Dabei habe ich gesehen, dass man eine Routine programmieren kann, das wenn man drückt Alexa irgendwas sagt.
Ich habe dann den Button aufgeschraubt und an einem der drei Taster anstelle der Feder zwei Drähte angelötet und diese dann an meinem Universal Binary Sensor angeschlossen. Und jetzt, wenn es klingelt spricht mein Echo Dot oder Show „es hat jemand geklingelt“.
Nun kann man aber bei einer Routine mit Sprachausgabe immer nur Gerät ansteuern, weshalb ich mehrere Routinen mit gleichem Inhalt erstellt habe nur immer ein anderes Gerät angewählt, und siehe da alle meine Alexas sprechen wenn`s draußen klingelt.
Ich selber habe aber bei dieser ganzen Schaltung aber noch ein Problem, und vielleicht kann mir da jemand von euch helfen. Ich hatte das Problem schon einmal gepostet bin aber nicht weiter gekommen. Wie oben beschrieben wird beim klingeln draußen mein Monitor in der Küche für 60 Sekunden eingeschaltet wenn er aus ist. Das funktioniert auch soweit ganz gut mit einer grafischen Szene. Das einzige Problem an der Sache ist, wenn der Monitor schon eingeschaltet ist, und das auch so bleiben soll, geht er nach 60 Sek. aus. Das würde ich gerne mit LUA ändern. Wenn der Klingeltaster gedrückt wird, wird eine Abfrage der Geräte gemacht wird, ob eingeschaltet oder nicht. Der Monitor soll dann eingeschaltet bleiben, die Leuchten sollen kurz für 5 Sekunden ein- und dann sofort wieder ausschalten. Kann mir jemand bei dieser Szene helfen, oder gibt es so eine Szene schon, da ich selber mit LUA keinerlei Erfahrungen habe.
Leider kann ich noch keine vollständigen Szenen in LUA programmieren, aber ich versuche immer die Block-Szene in LUA umzuwandeln und ein paar „Bausteine“ auszutauschen. Dass das nicht immer das Gelbe vom Ei ist, weiß ich auch.
Versuch mal das hier:
if (tonumber(fibaro:getValue(MonitorID, „value“)) > 0)
then
debug(„green“,„Monitor ist bereits eingeschaltet.“)
else
fibaro:call(MonitorID,„turnOn“)
fibaro:sleep(60x1000);
fibaro:call(MonitorID,„turnOff“)
Also die Block-Szene in LUA umwandeln (evtl. vorher kopieren) und „MonitorID“ durch die ID des Monitors (WallPlug, Switch, etc.) austauschen. Der Block ersetzt dann die letzten drei Zeilen in der Block-Szene:
Monitor…
und…
Monitor…
Um die Debug-Funktion noch einzuschalten, müsste der folgende Code an erster Stelle noch eingefügt werden:
–[[
%% properties
%% events
%% globals
Klingel Neu
–]]
local vardebug = true
function debug(color, message)
if (vardebug) then
fibaro:debug(string.format(‚<%s style=„color:%s;“>%s</%s>‘, „span“, color, message, „span“));
end
end
Ich hoffe, dass es verständlich ist und funktioniert. Ansonsten einfach mal die Block-Szene in LUA umwandeln und den gesamten Code posten.
An alle Anderen: Sollte der Code falsch oder zu optimieren sein, bin auch ich für jede Unterstützung dankbar.
Edit - Hier gibt´s übrigens eine ganz gute Übersicht von den Standard-LUA-Befehlen:
Sehr schöne Idee. Jetzt mal ganz vereinfacht, wenn ich so einen Button direkt an meine Wohnungstür
packe und in Bluetooth Enternung zu z.B. einem Echo Dot bin, dann klappt die Sprachausgabe auch direkt?
Mal angenommen mir klaut keiner das Teil.
Da ich auf Z-Way setze könnte ich mir auch eine Verdrahtung wie oben beschrieben vorstellen, aber
fürs Erste suche ich nur Sprachausgabe.
Danke
Hallo, ich glaube nicht das sich der Button über Bluetooth verbindet, er verbindet sich über WLAN, aber grundsätzlich spricht Alexa dann wenn jemand drückt. Ist aber sehr auffällig weil er ja noch blau und grün leuchtet beim drücken.
In der Beschreibung steht doch was von Bluetooth, habe ich eben gelesen. Jetzt wundert es mich nur das meiner so funktioniert, er sitzt in meiner Hauptverteilung 20 m entfernt und getrennt durch eine Beton Decke.
Ok, so spontan blick ich da jetzt nicht durch. Was mich auch wundert, dass Du jetzt 3 Timeouts hast, in der Blockszene aber nur 2 (5 und 60 Sekunden).
Schreib mir mal bitte, was sich hinter den einzelnen IDs verbirgt.
Hallo, das Timeout 5 Sek kannst du außer Acht lassen, das schaltet nur eine Gruppe von Lampen für 5 Sek. ein und wieder aus. Wichtig ist der Monitor mit ID 219 . ID 124 ist meine Lampe im Büro die auch kurz an und aus geht. ID 184 ist die LED in der Küche , das gleiche. ID 235 ist Licht im Bad alle gehn für 5 Sekunden an und wieder aus.
Versuch das mal. Also bitte unten, über dem Debug-Fenster „Start“ drücken. Falls das Script nicht durchlaufen sollte, mir die Fehlermeldung posten.
Eventuell muss ich noch etwas nacharbeiten, was „sleep“ bzw. „setTimeout“ betrifft, mit Zweitem habe ich nämlich noch nicht gearbeitet.
local Monitor = 219
local Lampe_B = 124
local LED_K = 184
local Licht_B = 235
local vardebug = true
function debug(color, message)
if (vardebug) then
fibaro:debug(string.format(’<%s style=“color:%s;”>%s</%s>’, “span”, color, message, “span”));
end
end
function Monitor_an()
if (tonumber(fibaro:getValue(Monitor, “value”)) > 0)
then
debug(“green”,“Monitor ist bereits eingeschaltet.”)
else
fibaro:call(Monitor,“turnOn”)
fibaro:sleep(60x1000);
fibaro:call(Monitor,“turnOff”)
local startSource = fibaro:getSourceTrigger();
if (
( tonumber(fibaro:getValue(306, “value”)) > 0 )
or
startSource[“type”] == “other”
)
then
fibaro:call(Lampe_B, “turnOn”);
fibaro:call(LED_K, “startProgram”, “5”);
fibaro:call(Licht_B, “turnOn”);
Monitor_an()
setTimeout(function()
fibaro:call(Lampe_B, “turnOff”);
fibaro:call(Licht_B, “turnOff”);
end, 5000)
setTimeout(function()
fibaro:call(LED_K, “turnOff”);
end, 10000)
end
Hm…
Dann tausche bitte die Zeilen 14-20 durch folgende aus:
local function Debug( color, message )
fibaro:debug(string.format(‚<%s style=„color:%s;“>%s‘, „span“, color, message, „span“))
end
Wie gesagt, ich bastel mir die Szenen meistens aus anderen zusammen.
Aber warum da eine Fehlermeldung gekommen ist, verstehe ich trotzdem nicht. Das hat nur was mit der Debug-Ausgabe zutun.