welche ID's in welcher Scene auswerten - läuft nicht mehr

Hallo in die Runde,
ich habe das Forum durchforstet und zu meinem Thema keine wirkliche Lösung gefunden.
Nun wurde sich ja auch mit den Mesh Routen beschäftigt und da hat yeep einen Beitrag eingestellt zum auslesen der IDs im System.

Ich hatte vor geraumer Zeit ein Script gefunden, in dem wurde angezeigt welches Gerät in welcher Scene verwendet wird. Leider läuft es nicht mehr und es kommen nur noch API Fehler. Da ich leider nicht in der Lage bin es anzupassen, wollte ich hier fragen ob es jemand von Euch eventuell kann.


--[[
%% properties
%% globals
--]]
function getUserData(dID)
  local mStr = ""
 
  uIds = api.get("/users")
  for i in ipairs(uIds) do
    if (uIds[i].id == dID) then
        mStr = mStr .. uIds[i].email
        if ( uIds[i].hasGPS == true) then mStr = mStr .. " : hasGPS=" .. json.encode(uIds[i].tracking) end
        if (json.encode(uIds[i].deviceRights) ~= "[]") then mStr = mStr .. " : deviceRights=<small>" .. json.encode(uIds[i].deviceRights) .. "</small>" end
        if (json.encode(uIds[i].sceneRights) ~= "[]" ) then mStr = mStr .. " : sceneRights=<small>" .. json.encode(uIds[i].sceneRights) .. "</small>" end
        break
    end
  end
 return mStr
end

function getSceneData(dID,lType)
  local mStr, parentId, fontColor = "",0,"<font color=yellowgreen>"
  local header = api.get("/scenes?id=" .. dID)["name"] 
 
  if (lType ~= nil) then
    if ( api.get("/scenes?id=" .. dID)["roomID"] == 0) then header = "Unassigned:" .. api.get("/scenes?id=" .. dID)["name"]
    else header = fibaro:getRoomName(api.get("/scenes?id=" .. dID)["roomID"]) .. ":" .. api.get("/scenes?id=" .. dID)["name"] end
  end
  mStr= mStr .. "<font color=lightblue>" .. dID .. ": </font>" .. fontColor .. header .. "</font><small><font color=grey> [ " .. string.gsub(api.get("/scenes?id=" .. dID)["type"] ,"com.fibaro.","") 
  mStr = mStr .. " : Max Instances=" .. api.get("/scenes?id=" .. dID)["maxRunningInstances"]
  if (api.get("/scenes?id=" .. dID)["visible"] == false) then mStr = mStr .. " : Hidden" end
  if (api.get("/scenes?id=" .. dID)["alexaProhibited"] == false) then mStr = mStr .. " : Alexa enable" end
  if (api.get("/scenes?id=" .. dID)["autostart"] == true) then mStr = mStr .. " : Autostart" end
  mStr = mStr .. " : " .. api.get("/scenes?id=" .. dID)["runConfig"] .. " ]</font></small><br>" 
 return mStr
end

function getDeviceData(dID,lType)
  local mStr, parentId, fontColor, bLvl = "",0,"<font color=yellowgreen>",0
  local header = fibaro:getName(dID)
  
  if (fibaro:getType(dID) == "HC_user") then
    if (lType ~= nil) then
       mStr = mStr .. "<font color=lightblue>" .. dID .. ": </font><font color=yellowgreen>HC_User:" .. header .. "</font><small><font color=grey> [ " .. getUserData(dID).. " ]</font></small><br>"
    else
       mStr = mStr .. "<font color=lightblue>" .. dID .. ": </font><font color=yellowgreen>" .. header .. "</font><small><font color=grey> [ " .. getUserData(dID).. " ]</font></small><br>"
    end
   return mStr
  end
  if (lType ~= nil) then
    if ( fibaro:getRoomID(dID) == 0) then header = "Unassigned:" .. fibaro:getName(dID)
    else header = fibaro:getRoomName(fibaro:getRoomID(dID)) .. ":" .. fibaro:getName(dID) end
  end
  if (fibaro:getType(dID) == "com.fibaro.zwaveDevice"
    or api.get("/devices?id=" .. dID)["visible"] == false) then fontColor = "<font color=darkgrey>" end
  mStr= mStr .. "<font color=lightblue>" .. dID .. ": </font>" .. fontColor .. header .. "</font><small><font color=grey> [ " .. string.gsub(fibaro:getType(dID) ,"com.fibaro.","") 
  if (api.get("/devices?id=" .. dID)["parentId"] ~= nil) then parentId = api.get("/devices?id=" .. dID)["parentId"] end
  if (parentId == 1) then mStr = mStr .. " : Master" elseif (parentId>1) then mStr =mStr .. " : ParentID=" .. parentId end   
  if (tonumber(fibaro:getValue(dID, "batteryLevel")) ~= nil
    and fibaro:getType(dID) ~= "com.fibaro.zwaveDevice") then
        bLvl = api.get("/devices?id=" .. dID)["properties"]["batteryLevel"]
    	if not (bLvl) then bLvl=100 end
        if (tonumber(fibaro:getValue(dID, "batteryLevel")) < bLvl) then bLvl = tonumber(fibaro:getValue(dID, "batteryLevel")) end
        mStr = mStr .. " : Battery=" ..bLvl .. "%"
  end
  if (api.get("/devices?id=" .. dID)["properties"]["Push"] == true) then mStr = mStr .. " : Push" end
  if (api.get("/devices?id=" .. dID)["properties"]["DeviceUID"] ~= nil) then mStr = mStr .. " : UID=<small>" .. api.get("/devices?id=" .. dID)["properties"]["DeviceUID"] .. "</small>" end
  if (api.get("/devices?id=" .. dID)["visible"] == false) then mStr = mStr .. " : Hidden" end
  if (api.get("/devices?id=" .. dID)["enabled"] == false) then mStr = mStr .. " : Disabled" end
  if (fibaro:getValue(dID,"value") ~=nil) then mStr = mStr .. " ] [ value=" .. fibaro:getValue(dID,"value") .. " ]</font></small><br>" 
  else mStr = mStr .. " ]</font></small><br>" end
return mStr
end

local dList = "<br>"
local plainList = false

fibaro:debug("Gathering system information.....")
fibaro:debug(os.date('%c'));
if not plainList then
rIds = api.get("/rooms")
for i in ipairs(rIds) do
  dList = dList .. "<font color=wheat>--~~== " .. string.upper(rIds[i].name) .. " room ==~~--</font><br>"
  dIds = fibaro:getDevicesId({roomID = rIds[i].id})
  for j,dID in ipairs(dIds) do
      dList= dList .. getDeviceData(dID)
  end
  dIds = api.get("/scenes")
  for j in ipairs(dIds) do
    if (api.get("/scenes?id=" .. dIds[j].id)["roomID"] == rIds[i].id) then
       dList= dList .. getSceneData(dIds[j].id)
    end
  end
end  
dList = dList .. "<font color=wheat>--~~== Unassigned room ==~~--</font><br>"
dIds = fibaro:getDevicesId({roomID = 0,interfaces ={"zwave"}})
  for j,dID in ipairs(dIds) do
      dList= dList .. getDeviceData(dID)
  end
 dIds = api.get("/scenes")
  for j in ipairs(dIds) do
    if (api.get("/scenes?id=" .. dIds[j].id)["roomID"] == 0) then
       dList= dList .. getSceneData(dIds[j].id)
    end
  end
dList = dList .. "<font color=wheat>--~~== System Users ==~~--</font><br>"
dIds = fibaro:getDevicesId({roomID = 0,type="HC_user"})
  for j,dID in ipairs(dIds) do
      dList= dList .. getDeviceData(dID)
  end
dList = dList .. "<font color=wheat>--~~== Mobile devices list ==~~--</font><br>"
dIds = fibaro:getDevicesId({roomID = 0,type="iOS_device"})
  for j,dID in ipairs(dIds) do
      dList= dList .. getDeviceData(dID)
  end
fibaro:debug(dList .. "<span style=text-align:center>")
else
ids = fibaro:getDevicesId({})
dList = dList .. "<font color=wheat>--~~== Devices list ==~~--</font><br>"

for i,dID in ipairs(ids) do
  dList= dList .. getDeviceData(dID,1)
end
dList = dList .. "<font color=wheat>--~~== Scenes list ==~~--</font><br>"
 dIds = api.get("/scenes")
  for j in ipairs(dIds) do
       dList= dList .. getSceneData(dIds[j].id,1)
  end
 fibaro:debug(dList .. "<span style=text-align:center>")
end

Vielleicht findet sich jemand, der soviel Ahnung und Zeit hat.
Ich Danke Euch schonmal und wünsche allen eine schöne Zeit.

Gruß secundani

Hallo @secundani
Habe mir das Skript gerade angesehen, übersteigt leider auch meine LUA Kenntnisse ;-(
Habe es gerade in meiner HC2 laufen lassen und es läuft!!

Allerdings sehe ich KEINE Skriptzuordnungen, sondern er listet die Devices UND Skripte in einem Raum auf und zeigt einige Infos dazu an.

Bei Devices die “parent IDs” , Batteriestand, Schaltzustand
Bei Szenen, wieviele Instanzen möglich sind
(siehe Anhang)

2018-11-28-14_38_44-Home-Center-2.jpg

Hallo pblacky,
das es bei dir läuft ist komisch, bei mir mit 4.510 kommen nur Api Fehler. Aus irgendeinem Grund läuft es bei dir ohne Api Fehler, aber
eigentlich steht vorn die ID Scenennummer und dann kommen die Informationen welche Device ID’s in der Scene vorhanden sind. So hatte ich es unter 4.18 laufen.

so sah es mal aus
-== FLUR room ==
333: MS Flur [ FGMS001 : ParentID=332 : Battery=96% ] [ value=0 ]
334: MS-Temp-Flur [ temperatureSensor : ParentID=332 : Battery=96% ] [ value=23.4 ]
335: MS-Light-Flur [ lightSensor : ParentID=332 : Battery=96% ] [ value=149 ]

Auch solche Zeilen waren drin

159: HUE-Werte-auslesen [ luaScene : Max Instances=2 : MANUAL_ONLY ]
160: HUE-blinkt-x-mal [ luaScene : Max Instances=2 : MANUAL_ONLY ]
165: ToD1 [ luaScene : Max Instances=2 : Autostart : MANUAL_ONLY ]
172: TestHUE [ luaScene : Max Instances=2 : MANUAL_ONLY ]
173: SonneAuf [ blockScene : Max Instances=2 : Autostart : TRIGGER_AND_MANUAL ]
174: SonneAb [ blockScene : Max Instances=2 : Autostart : TRIGGER_AND_MANUAL ]
199: FritzSteckdose Mac [ luaScene : Max Instances=2 : MANUAL_ONLY ]
200: FritzMac Status [ luaScene : Max Instances=2 : MANUAL_ONLY ]

Ich habe V 4.520 installiert, vielleicht liegt es daran?

Habe mir das nochmal genauer angesehen, Scenen werden so dargestellt, wie im Anhang.
Man sieht wie die Szene getriggert wird und die maximalen Instanzen.
Aber WOHER die Szenen getrigert werden sehe ich nicht.

Beispiel:
Meine Szene “AUS - unten.176” wird von mehreren Skripten gestartet, die von Fernbedienungen (Szene Event) herkommen.
Das sehe ich nicht, oder verstehe ich da was falsch?

--~~== Unassigned room ==~~--
117: Set_Away.117 [ luaScene : Max Instances=2 : MANUAL_ONLY ]
131: PushOver_Send.131 [ luaScene : Max Instances=6 : TRIGGER_AND_MANUAL ]
135: PushOver Alarm.135 [ luaScene : Max Instances=4 : TRIGGER_AND_MANUAL ]
137: Rauchalarm.137 [ luaScene : Max Instances=2 : TRIGGER_AND_MANUAL ]
156: HC2 - REBOOT.156 [ luaScene : Max Instances=1 : MANUAL_ONLY ]
176: AUS - unten.176 [ luaScene : Max Instances=1 : MANUAL_ONLY ]
177: AUS - oben.177 [ luaScene : Max Instances=1 : MANUAL_ONLY ]
196: HC2-OnlineCheck.196 [ luaScene : Max Instances=2 : Autostart : TRIGGER_AND_MANUAL ]
202: AUS - ALLES.202 [ luaScene : Max Instances=1 : MANUAL_ONLY ]
205: Batteriecheck.205 [ luaScene : Max Instances=1 : Autostart : MANUAL_ONLY ]
219: Set_Home.219 [ luaScene : Max Instances=2 : MANUAL_ONLY ]
222: SecurityCheck.222 [ luaScene : Max Instances=2 : MANUAL_ONLY ]
223: Present_State.223 [ luaScene : Max Instances=1 : TRIGGER_AND_MANUAL ]
237: Set_Night.237 [ luaScene : Max Instances=2 : MANUAL_ONLY ]
245: Verbrauch.245 [ luaScene : Max Instances=2 : Autostart : MANUAL_ONLY ]
251: Device Inventory.251 [ luaScene : Max Instances=1 : MANUAL_ONLY ]
255: Roll.Trigger.255 [ luaScene : Max Instances=6 : TRIGGER_AND_MANUAL ]
261: CronJob.261 [ luaScene : Max Instances=2 : Autostart : TRIGGER_AND_MANUAL ]
266: CronBackup.266 [ luaScene : Max Instances=1 : Autostart : DISABLED ]
270: AUS Prüfung.270 [ luaScene : Max Instances=2 : MANUAL_ONLY ]
271: Alarm_State.271 [ luaScene : Max Instances=3 : TRIGGER_AND_MANUAL ]

Alles klar, jetzt haben sich unsere Beiträge überschnitten.
Dann passt die Anzeige eh.
Das Skript gefällt mir :wink:

Vielleicht kann das noch jemand mit einer älteren Version probieren, dann haben wir mehr Erkenntnisse…

werde auch mal 4.520 installieren und schauen wie bei mir das Ergebnis dann aussieht.
Ich fand das Script gut, da man eine große Inventur machen kann.

Seit FW 4.520 hat Fibaro die API Fehler gefixt. Selbst meine uralten Batteriecheckscripte laufen jetzt wieder ohne Fehler.
Das script heißt “Device list &Status” und stammt von User cag014 aus dem Fibaro Forum. Ohne seine Einverständnis hätte ich es hier nicht gepostet.

@secundani
Offensichtlich habe ich einen tieferen Zweck dieses Skriptes noch nicht durchschaut :wink:
Was meinst du GENAU mit “Inventur machen”.

Hallo jeep,
also Asche auf mein Haupt. Ich dachte wenn hier in so einem Forum ein Script gepostet wird, dann kann man es verwenden. Wenn dem nicht so ist sollten die Scripte mit einem Copyright versehen sein, damit ein User weiß, dass er es nicht nutzen darf.
Aber dennoch werde ich versuchen von User cag014 eine Genehmigung einzuholen. Kannst Du mir eventuell noch sagen wie ich hier im Forum nach einem user suchen kann. Über die Lupe bekomme ich leider nichts angezeigt.
Ich danke dir für deinen Hinweis und werde demnächst jeden User anschreiben, ob ich sein gepostetes Script verwenden darf.

Gruß secundani

@pblacky
für mich war es ganz angenehm mit einem Auszug aus dem Script zu sehen welche ID’s und welche Scenen ich im System habe.

@secundani,

Der User der dieses Script geschrieben hat ist nur im englischsprachigen Fibaro Forum zu finden. Aber da er kein Copyright, Copyleft oder sonstige Restriktionen zur Nutzung und Verbreitung hinterlegt hat, ist alles halb so wild. Aber man weiß ja nicht wie die Leute ticken, deshalb schadet nachfragen nicht.

@secundani
Alles klar, das meinst du mit “Inventur”.
Das mache ich mit dem HC2 Toolkit, da kann ich die Skripte auch gleich auf dem PC als LUA-Files sichern :wink:

@secundani,

ich habe mich vorhin zu kurz gefasst. Es geht nicht um die Verwendung, sonst hätte er es ja gar nicht reingestellt, sondern eher um das kopieren und hochladen in anderen Foren. Viele erlauben das ausdrücklich solange der Copyright Vermerk des Autors weiterhin existiert und nicht verändert wurde. Aber bei diesem Script fehlt das ja gänzlich und dass finde ich dann schon ein wenig schwammig.