Hier ist mal wieder ein kleiner Artikel zu der beliebten Reihe "Kleine LUA Scripte". Diesmal zeigen wir euch, wie Ihr in einer Szene die Parameter von Modulen verändern könnt.
Ganz neu ist das Thema ja nicht. Wir hatten euch (hier) in einem älteren Beitrag mal ein Virtuelles Device vorgestellt, mit welchem Ihr die Farbe des Fibaro Wallplugs ändern könnt. Im nächsten Step gehen wir allerdings ein Schritt weiter und ändern die Parameter von Modulen in einer Szene. So könnt Ihr zum Beispiel den Alarmsound eurer Sirene kurz vor dem Einschalten verändern. Die notwendigen Angaben zu den Parametern findet Ihr in den entsprechenden Anleitungen der Geräte.
Das LUA Skript
Kommen wir nun zu dem kleinen Skript. Dies könnt Ihr hier heraus kopieren und in eine neue Szene auf dem Fibaro HomeCenter 2 einfügen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
--[[ %% properties %% globals --]] local ID = 137 local parameter = 37 local size = 2 local value = 771 function changeParameter(deviceid,set_parameter,set_size,set_value) local http = net.HTTPClient() http:request("http://127.0.0.1:11111/api/devices/"..deviceid, { options = { method = 'PUT', headers = {}, data = '{"properties":{"parameters":[{"id":'..set_parameter..',"size":'..set_size..',"value":'..set_value..'}}]}', timeout = 10000 }, success = function(response) local result = response.data; if response.status == 200 or response.status == 201 then fibaro:debug('Status: ' ..response.status.. ' - Parameter geändert') else fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert') end end, error = function(err) fibaro:debug('[ERROR] ' .. err) end }) end changeParameter(ID,parameter,size,value) |
Im ersten Step könnt Ihr nun die lokalen Variablen ID, parameter, size und value anpassen. Die Angaben sind zwingend erforderlich und müssen gesetzt werden. Diese bedeuten folgendes:
1 2 3 4 |
local ID = 137 -- ID des Moduls, bei dem der Parameter geändert werden soll local parameter = 37 -- Parameter, welcher geändet werden soll local size = 2 -- Größe des Parameter local value = 771 -- Inhalt, welcher beim Parameter gesetzt werden soll |
Das waren auch schon alle benötigten Informationen und nach einem manuellen ausführen der Szene, wird der Parameter 37 von dem Modul mit der ID 137 auf den Wert 771 mit der Größe 2 gesetzt. Sollten die Werte nicht zu 100% stimmen, dann werdet Ihr oben in dem Debugfeld des HC2 eine Fehlermeldung erhalten, dass der Wert in der Form bei dem Modul nicht existent ist. In so einem Fall müssen die Werte erneut überprüft werden.
[alert variation="alert-info" dismiss="dismiss"]INFO: Es können natürlich auch die Parameter von batteriebetriebenen Modulen geändert werden. Diese werden aber erst bei der nächsten WakeUp-Time des Moduls übertragen. Bei strombetriebenen Modulen, sowie bei Modulen, welche FLIRS unterstützen, werden die Parameter sofort übertragen.[/alert]Nutzung der Funktion in einer Szene
Wie Ihr sicherlich bereits erkannt habt, wird die oben gepostete Szene nur beim manuellen Ausführen aktiv. Dies ist ja nicht wirklich Sinn und Zweck des Ganzen. Wir geben euch aber mit dieser Szene eine function() (Zeile 6 - 32) mit, welche Ihr einfach in eine beliebige Szene kopieren könnt und dort dann diese Funktion einfach über den Aufruf
1 |
changeParameter(ID,parameter,size,value) |
aufrufen könnt. Die notwendigen Angaben, welche Werte wo und wie gesetzt werden, findet Ihr wie oben beschrieben am Beginn der Szene. Eine andere Alternative wäre natürlich die erstelle Szene von einer anderen Szene aus zu starten. Dies könnt Ihr mit dem Befehl
1 |
fibaro:startScene(sceneID) |
durchführen.
Und nun wünschen wir euch viel Spass mit dem kleinen Skript. Über Kommentare würden wir uns sehr freuen.
Hallo boomx,
vielen Dank für Deine tollen Tutorials und der vielen Arbeit die Du Dir machst.
Mir kam beim lesen die Idee, mit diesem Script den Parameter Aufwachintervall der Danfoss LC-13 für in der Sommerphase damit anzupassen (von 900 z.B.: 86400). Dachte mir es würde langfristig die Batterien ein wenig schonen.
Was hälst Du von der Idee!
Gruß
ChrisBet
Hi,
danke, mach ich gern :)
Das würde funktionieren, dafür müsstest du allerdings das Skript anpassen. Das Aufwachintervall ist kein Parameter, sondern ein eigener Punkt in der API.
Gruß
noch weniger code geht mit api.get, api.put und api.post funktionen.
Beispiel, die Batterie Warnung abschalten mit
--[[
%% properties
%% globals
--]]
function setNoNotification(deviceId)
local dev = api.get('/devices/' .. deviceId)
dev.properties.batteryLowNotification = false
api.put('/devices/' .. deviceId, dev)
end
setNoNotification(288)
Schöne Ergänzung zu dem Artikel, danke dir dafür. :)
aber gern, ich sehe gerade, dass die Formatierung hin ist, daher nochmal ein Link zu dem Posting im Fibaro Forum wo ich es auch gepostet habe: http://forum.fibaro.com/index.php?/topic/21966-email-notification-for-low-battery/
Hallo zusammen,
habe das Script mit einer AEOTEC SirenGen5 realisiert. Funktioniert.
Nachteilig ist jedoch, dass die Änderung nicht "still" abläuft, d.h. bei jeder Parameteränderung springt die Sirene einmal an und muss erst wieder ausgeschalten werden..
Liegt der Grund hierführ im Gerät? Habe so eine Vermutung, da die Sirene schon beim Inkludieren ansprang.
(HC2 / 4.100)
Hi,
ja, das scheint "normal" zu sein. Ist bei mir auch so...
Gruß
Hallo.
Wie kann ich denn berechnen, welchen Wert ich bei "value" eingeben muss, wenn die Parametergröße 2 bzw. 4 ist?
Danke!!!