Jump to content
C4 Forums | Control4

CameronE

c4Forums Member
  • Posts

    13
  • Joined

  • Last visited

Profile Information

  • Gender
    Male
  • Location
    Seattle, WA

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

CameronE's Achievements

  1. Not just Yale. Baldwin, too. Three locks, all show just fine and healthy in the Zigbee Health Tool and one even sent a low battery notification to the panel. None can be opened or closed via the touch panel or app any more. Seems like something is broken in the last couple software updates.
  2. Did you enable the modes (i.e. is your driver.xml set up?) Do you have modes, can_heat, can_cool, etc set up? You should at least get the call back for SET_MODE_HVAC at that point...at which point it's up to you to call the appropriate hardware interface. You did start with the template for a thermostat_v2 driver, right? In my case, I just call my web service controlling the heads. For instance, this is my SET_SETPOINT_COOL function (but any of the proxy_commands.lua functions are basically the same): function SET_SETPOINT_COOL(celsius, fahrenheit) LogTrace("SET_SETPOINT_COOL(celsius = %s, fahrenheit = %s)", celsius, fahrenheit) g_tStatState["spCool"] = nil -- Create the packet/command to send to the device - all temps in F -- http://127.0.0.1:8084/v0/room/Guest%20Room/cool/temp/68 local url = helperGetBaseURL() .. "cool/temp/" .. fahrenheit helperPutURL(url) local t = C4:SetTimer(3000, function(timer) -- timer is the same as what C4:SetTimer() returned LUA_ACTION.getUnitStatus() end) end What is stupid (bad practice, but no other way to do it...polling is so 20-years-out-of-date) is I'm forced to poll the server for changes on the units, so the reason I clear out a table entry (set nil) is so that when I read the updated state from the unit later with LUA_ACTION.getUnitStatus() is so it is guaranteed to be a change, which then sets off a series of updates including the UI. That function is in the LUA_ACTIONS tab because my driver simply has an Actions button where one function is to examine the whole output of the unit's state -- essentially a manual poll on demand -- which I had implemented first for testing. My helperXXX functions just do some string building and calling of the server by building the URLs and making the callbacks needed with the C4:Url interfaces...should be obvious. You shouldn't be modifying the PRX_CMD functions -> the template provides these for you, and they're trivially simple. This is the stock one from the template file. function PRX_CMD.SET_SETPOINT_COOL(bindingID, tParams) gTStatProxy:prx_SET_SETPOINT_COOL(tParams) end
  3. Solved the first part. The second part is still annoying me. When I get a request in the proxy ("SET_SETPOINT_HEAT" for instance, in proxy_commnads.lua, after processing the request, I immediate send back a C4:SendToProxy(5001, "HEAT_SETPOINT_CHANGED", {SETPOINT=tonumber(fahrenheit), SCALE="F"} , "NOTIFY") This doesn't seem to immediately affect the UI; the UI returns to the pre-adjustment setpoint indicator. It's only up to a minute later that the UI reacts with the new setpoint. What did I do wrong? It _eventually_ coalesces to the right value, but it can take up to a minute (which is the polling interval for the device). It feels like if my call function were successful, it ought to happen right away.
  4. And just for a little bit of color - it seems to be an Android client based problem; the Android C4 app has the same "no adjustment slider" problem as the panels... but iOS apps work great.
  5. Just to close out: the XML was fine. It looks like driverEditor has a bug and it was bad builds. If I go from one open project to another (symbiotic drivers...) depending on whether things get closed first or not closed first it gets totally borked. I rewrote the driver this weekend (the third or fourth time, you learn better things ...) and I had one or two bad builds that closing and restarting driver editor and rebuilding fixed. I've learned to just restart driver editor... I really just need to set up a command line workflow for this and skip the tool... I'm not writing code in it, so it's really just a GUI frontend for the compile (squish) / validate / publish workflow.
  6. The background is I wrote a thermostat driver for some minisplits based on the driverworks template for thermostatV2 and it works (yay!) as designed... with a couple of minor catches that I would love a little tip to help figure out. The driver works great from my iPhone C4 app... I can adjust any of the units, change the vanes, adjust the fans, swap modes, change the temperature on the units, etc. However, when I use the touchscreen panels, though, I see the thermostats and the data is correct. I can change modes, fans, vanes, etc. The problem is that on the touchpanels, there's no "slider tab" on the ring ring, though... What am I doing wrong that would prevent the in-wall touchscreens from changing temperature? The second half of this question is every time I bring up the thermostat in the navigator on my phone, the "tab" is set to 74F. The units are polled, and when I get a poll return, I update the setpoint (COOL_SETPOINT_CHANGED) and it goes to the right value from the unit... how do I initialize the set points correctly so that the moment the thermostat is selected in the navigator window, the slider tab is set right on the ring? Thanks! I know these are really dumb questions, but after pouring through the docs and watching all the training vids, I'm still stuck on these. -c
  7. It's definitely not great... but. can live with that. I'm still confused why my driver (which passes squish/build, validate, and publish steps with no bugs) cannot be added into Composer
  8. Hey all - Having an issue connecting DriverEditor to my EA-5 while working on a driver. I open the connect button and find the EA-5 just fine. When I go to connect, I get a popup error "SSL Certificate Not Added", and the text says "Connect with ComposerPro first to add the SSL Certificate to the cache." However, I've been using CP to work on the system (3.2.2) and that and DE are the latest versions. I've tried opening and closing DE and CP both and nothing seems to let me get DE to connect up to the director. I'm having issues adding my new driver to C4; it's a template-derived thermostat driver, and while I had no issues with this previous driver I wrote, this time the CP refuses to add my new driver... it says "unable to add to room XXX" when I try to load it. Which set of logs should I be looking at to help diagnose this issue? Thanks!
  9. I cut two pass-thrus in the sheet rock in mine, and then installed one of the appropriate exhaust fans on the inside of the closet from https://www.acinfinity.com/closet-room-fan-systems/. The exhaust is up near ceiling height where it more or less blows straight at an HRV return vent. There's a second pass-thru cut at floor height. The outside of that wall, which faces into a hallway just have a blank grate on each similar to this: https://www.lowes.com/pd/Accord-Ventilation-White-Steel-Louvered-Sidewall-Ceiling-Grilles-Rough-Opening-6-in-x-20-in-Actual-7-75-in-x-21-75-in/1000442541 Running the AC infinity at half-speed gives me about 75 F in the room and the noise isn't really an issue - the mini-split fans make more noise. I know their products are pretty simple, but I really am a fan of the AC Infinity stuff for how easy they are to use in these situations. I had to do the same for a utility closet, where the wine room had vented a thru-wall chiller's output and that room was getting too warm. AC Infinity again...
  10. D'oh. Here I am thinking it was something so programmatically deep and it's the end user (dealer) setup of the driver. Thank you!
  11. One more dumb question about the Thermostat v2 sample... things are progressing well on my end with the project (other than my day job and second "hobby" job having forced me to back-burner this for a few weeks). I'm stumped about something, though, and could use a pointer. I didn't see this in the docs, so maybe I'm missing it. How do I configure the driver to show up in only the one room to which it's assigned? When I install the driver into the room, it shows up everywhere in the comfort page of the navigators/app. I have six thermostats, and I'd ideally like to install six copies of my driver, with only the one for a given room showing up in the room it's assigned to... it was a little surprising it's everywhere, so I'm sure it's just a setting I missed but I'm stuck. Thanks!
  12. Cool... this is super helpful. This is my first foray into writing a driver after three requests from clients; I'm working on the Mitsubishi mini-splits that use Kumo Cloud, but it's been a little challenging to get up to speed. Most of my normal "job" is k8s in AWS or GCP, usually written in Go, node, or Python, and just vastly different! I really appreciate the help!
  13. Hey all - developing a driver based on the Thermostat V2 sample and the docs are unfortunately not great; the training videos are clearly a little old (pre-c4z) and the sample docs are sparse at best. I need to use the "extras" section in my driver, and there's a schema / small xml file with an example of a list in the extras. I'm unclear as to where this goes in the main driver.xml file (as in, is <extras_setup> contained in <capabilities>?) There's a <has_extras> which I did set to true. I've also tried it one level up (as a peer node in the xml to capabilities, connections, etc) Neither of these has made it display in the navigator. I have directional vanes on the unit I'm programming, so I want to set up an "extras" item to select that: <extras_setup> <extra> <section label="Vane Swing"> <object type="list" id="1" label="Vane direction"> <list maxselections="1"> <item text="Auto" value="Auto"/> <item text="Swing" value="Swing"/> <item text="Ceiling" value="Ceiling"/> <item text="High" value="High"/> <item text="Middle" value="Middle"/> <item text="Low" value="Low"/> <item text="Floor" value="Floor"/> </list> </object> </section> </extra> </extras_setup> Where would I want to insert this in driver.xml (or how else would I pull this into the project appropriately?) and then what do I need to do to get it to display. I guess the followup is where in the template code do I then handle when this value changes? Thanks!
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.