Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Unsolved
Collapse
Discussion Forum to share and further the development of home control and automation, independent of platforms.
  1. Home
  2. General Discussion
  3. Discover IR codes for lost remote
Disaster recovery and virtualisation
CatmanV2C

Following on from my last thread, some progress has been made over the weekend.

With 18G of spanky RAM in my Synology DS224+. I've jumped into the murky world of virtualisation and already eliminated the need for two Raspberry Pi's from my system.

Home Assistant: In theory they provide an OVA file which is supported by the Synology. I couldn't get it to work, however, so grabbed a copy of the .img file they supply, renamed it .iso and imported it as a VM. Restored from my full back up and that all seems fantastic.

Minidnla Music server: Trivial. Grabbed a Debian .iso for Bookworm and copied that onto the NAS. Created a new machine which mirrored the specs of the Raspberry Pi, booted from the ISO then did an expert install. Once that was all stable with a basic core of stuff and networking, I've made a copy of that as a good base system. Then fired up minidnla on it, mounted my media and that's also woking. Not bad for a short weekend's work.

Still not sure about the main NUC though. I'm thinking of buying a new USB stick so I can mess around getting it working on the Synology before I do anything drastic.

Once that hurdle is sorted I'm torn between:

Using a brand new install of Bookworm, re-installing Z-way server, OpenLuup, AltUI, MSR and HA bridge, then restoring across or Making an ISO of the current system, importing that and upgrading in place (which will be pretty risk free since I can snapshot everything before I make any changes.)

Decisions, decisions.

C

General Discussion
RFC: When disaster strikes (sorry it's a bit verbose)
CatmanV2C

Hi everyone. Thanks for all your input recently on the topic of local notifications. I think we got some really interesting solutions 🙂

Back to more prosaic matters. Most of you will know that I've been messing around with this stuff for some years. My last major change was when I migrated from Vera, which was something like 4-5 years ago.

While my system has grown, it's not really altered very regularly, although I try to keep most of it kind of up to date.

Current set up:
Intel NUC that runs:
Bare metal install of Debian
Z-way server with Z-wave.me USB stick
Openluup
Altui
Multi system reactor
HA Bridge
Mosquito

Raspberry Pi
Running Home Assistant

About 40 varied Z-wave and Wifi devices

I also have a Synology DS224+ which may inform some responses.

Home Assistant recovery is pretty simple. I get a full backup of the system every night dumped onto my SAN and I know from experience that it would simply be a case of booting up a new install and feeding it the backup.

The NUC on the other hand....
Coming from a commercial IT world, I am becoming more and more conscious that I don't really feel I have a suitable disaster recovery plan, and my core system is running on hardware heading for 10 years old.

My initial thought, which I've kept putting off as it's awkward would be to grab a nice SSD, reboot the NUC into Mint or something similar and simply do a dd copy onto a new drive. I can get a replacement NUC on ebay simply enough, and keep it in a cupboard if anything other than the hard drive fails on the existing one, but this feels rather like a stop gap. However one immediate question:

If I had to use the replacement NUC would all the Z-wave devices simply carry on talking to the stick, or would they all need to be re-paired?

How easy would it be to move everything the NUC does (as a start) onto the NAS? Create a VM and clone the disc onto it?

Should I move to Docker? Something else?

What are the hive mind's thoughts?

Apologies if we've done this before, but while it all just works...

Cheers!

C

General Discussion
Eachen No Neutral smart wall switch to lights and Sonoff Mini R4 switch for LEDs
R

Hi all. First post so please be gentle.

I have an Eachen two-gang smart wall switch wired no neutral (with capacitor) connected to existing bathroom lights which works perfectly. It's also wired to a Sonoff Mini R4 Extreme connected to LED lights. I want the LED lights to switch on when the bathroom lights switch on (and vice versa). The Mini R4 works separately on my phone via Ewelink as well as on the Mini R4 itself (physical button). The switch is installed inside the wall and the rest of the components are in the ceiling / attic / roof cavity. The Mini R4 is set to Edge switch mode which works in my example I wired.

How I wired it:

cb919874-6933-460a-8cd0-f063bac88674-image.png

I have a video showcasing the example I wired today works. I could share it if required. Ignore the white cable. I only used it to power the example.

77ebbc23-83de-48ee-a4bf-247bfd24f121-image.png

3827ede6-cf5c-47aa-8fdb-c75470101c4a-image.png

The wiring diagram I used for the mini R4.

485de912-e656-4da3-b6f6-81cb076e0261-image.png

I wired it together with the existing lights of the bathroom so that L1 switches on both the Mini R4 and the bathroom lights:

a3ea5c93-a9ae-4aaf-8dce-24018bcdb4d1-image.png

This is the wiring diagram for the Eachen switch:
b867a3c7-c1ac-428c-a90f-7f0f4b62a609-image.png

The Eachen's first gang (L1) doesn't trigger the Mini R4 in any way.

Any help or advice will be much appreciated.

Thanks,
R

General Discussion
Hello and first network question
D

Just bought a couple of generic smart plugs and set them up easily using SmartLife app in the house I then plugged one into a workshop over 100m away This workshop has a hardwired internet connection with a separate wireless access router (not mesh) after doing a reset on the device and pairing to the new router it actually works from the house when my phone is connected to a completely separate wifi network - how is that possible ?
I did read something about these devices connecting to a server somewhere in China similar to IP cameras but there is no lag

General Discussion
Lights switches for warehouse
S

I need to replace about 15 traditional wall light switches (no neutral wire) to turn on/off all lights with one operation inside the warehouse. And still maintain the ability to control each light individually.

The preference is not to set up a Wifi for each switch to reduce the number of devices connected to the network, and also, they change the Wifi password regularly, so they do not want to change all 15 switches.

I am looking for some solution that will achieve this with either Bluetooth/RF or any other technology.
The warehouse dimensions are about 100ftx100ft with sheetrock walls.

Please assist.

General Discussion
'Random' lights turning on
CatmanV2C

I thought I had created a topic on this some time back, but can't find it to close the loop.

The issue was the lights on my drive appeared to be randomly switching on, with nothing from MSR logging and just a simple 'turn this on' in Openluup logs.

Finally got to the bottom of it this morning, which might help someone.

Turns out that somehow Alexa has decided that my drive lights are part of my Living room. If I tell her 'Living room lights on' the drive lights also come on. And if I tell her to turn them off, they also go off.

Which is madness because they are NOT in the living room group.

Current solution is to disable the drive lights in the Alexa app, which is fine as I never need to voice control them.

C

General Discussion
New to Home Automation Looking for a Single app?
A

Hi All

Hopefully this place looks like a helpful forum as I’m quite new to all this!

I’ve had a few devices all working separately /through their proprietary apps but we’re just finishing off a large house extension and this has added to the list.

I’d ideally like to be able to view/switch a number of different devices on one screen/head end but have no idea where to start.

The devices we have/will have shortly are as follows;

Zigbee Smart Sockets
Zigbee smart switches (for lights)
Heatmiser Neo Underfloor Heating (this runs from a Samsung ASHP but that part is automatic)
Samsung VRF air conditioning (currently using Smart Things App)
Hive (2xLTHW heating circuits in the existing house and Hot Water)
Ring (doorbell!)
Hik Vision PoE CCTV

We have lots of appliances (Neff N70) which we can control remotely but not too fussed about controlling those at the
Moment)

Any help/recommendations would be appreciated!

Thanks

Adrian

General Discussion
Sending data to a USB port to interface with a wireless switch
F

I have a legacy home automation set-up running on Windows XP. the computer and software have now died.
I have written a very nice Excel VBA program to replace the software and it can run on any modern Windows system.
My only remaining problem is to output the correct signal to a USB port to trigger the wireless switches.
Has anybody done a similar exercise. Please help.

General Discussion
Looking for Remote Switch boxes that can also be used with a wireless Decora Style Switch.
V

Hi All,

Kind of new to Home Automation. Started off Using Amazon Echo units and added a Samsung SmartThings hub. I have mostly been using plug in modules for turning lights on and off. I live in a very rural area where the internet goes out a lot. I eventually want to change to to a non internet Hub so things will work without needing an internet connection. But I will post with those questions at a later date.

So, the task at hand is this: I have flood lights at each corner of my house. They are currently controlled by switches at the front and back doors. I would like to add Security Cameras to each corner also. I can easily find small Wifi switches to put into the electrical box where the flood lights are located, then I can terminate the leads together behind the Decora switch to have constant power. Then I can use the constant power up at the lights electrical box to power the security cameras. I would also like to have a wireless switch to take the place of the Decora switch to be able to turn the lights off and on.

I cannot seem to find a product like this. It seems I can find the small wired in switch boxes that will also come with external smart wall switches, but the wall switches are an external box that does not fit in or cover the existing Wall switch electrical box. I can also find Wireless Decora switches that come with a remote wired in small switch box , but they all seem to be RF and do not integrate with a Smart Hub.
I am hoping someone here knows of a product that matches what I am looking for. Any help would be appreciated.

Also any recommendations for Wireless Security cameras are welcome.

Thanks for any help.

General Discussion
Just starting what hub is best.
I

Dear Forum,

I am just starting a smart home system. I've wanted to do this for 10 years at most and really would like to get a start. What I have are a couple of SONOFF wifi relays, some 433 (Hz/mHz) switches ( not wifi ) a couple of wifi lightbulbs, and I'd like to expand wifi thermostat, leak/water detectors, garage door openers and what ever else I can think of.

In the SONOFF items I have it's a particular app, the wifi bulbs are another app, and if I do a thermostat there might be another app. My wife is not a Luddite but she damn sure doesn't want to have to trouble shoot if/why a particular app breaks down.

So in what I do understand about smart home things is that I need/want a HUB. I spent 15 years doing some programming so I do have some computer ability, though I'd prefer to stay away from HAVING to line command operate the hub.

I would like a list of HUB's that people have found to be the best. Even better are links to let's say Amazon for that hub.

Regards from Noob Smart Home,
Barry

General Discussion
Logitech logic
CatmanV2C

Hello lovely people. Long time and all that. Hope you're all doing OK.

Bit of a left field one here, looking for extra eyes more than an answer and you're the most logical bunch I know 🙂

Part of our HA system is a Logitech Elite hub and remote control.
This is programmed to control my Cyrus Stereo, our TV, and HDMI switch and our Virgin V6 box.

I've been away for a couple of days. Got back this evening to (eventually) work out that the V6 box appears to be not accepting any commands from the Logitech.

Everything has been rebooted.
Logitech uses IR to control
Cyrus: Fine
TV: Fine
HDMI: Fine

Remote control uses Bluetooth to control Hub.
All commands from the Remote to the hub are executed (one might assume correctly) as the activity LED responds, and if you're controlling (say) the Cyrus, all works fine.

iOS App can be used to control Hub over the WLAN:
All commands from the App re executed (one might assume correctly) as the activity LED responds, and if you're controlling (say) the Cyrus, all works fine.

Native remote (that uses as far as I know bluetooth) to control the V6 box works fine.

V6 box refuses to acknowledge any command other than from the native remote. Remote or app provoke absolutely zero response from the V6 box.

This is annoying, but damned if I can think of any logical reason. One might assume a firmware update on the V6 box, but given that the Hub simply emulates the native remote, that seems unlikely.

I'm struggling to think of where even to start troubleshooting this, so any random thoughts would be appreciated.

My initial approach is to buy another hub in case there's a different radio set that's failed in the hub...

TIA!

C

General Discussion
Recommendation for a smart in-wall plug
D

I currently have an HVAC system in the attic - for heating and A/C. 120v is supplied to the unit to run the gas heating. A/C uses 240v. I have an ecobee thermostat...which sometimes goes offline....not often. When it goes offline, I need to turn the 120v power to the HVAC system off and then back on (the ecobee gets its power from the HVAC system). That resets the ecobee and all is fine. I spend the summer away from this house and if the ecobee goes offine..I have no current method to reset the HVAC 120v power remotely. My idea is to replace the current 120v plug in the attic with a smart plug...then I can remotely turn the 120v power off and the ecobee will reset and come back online. I use Wyze and Lutron Casita in the house currently and was hoping I could find an in-wall smart plug from Wyze or Lutron. Obviously, I don't need diming, etc...just the ability to turn the plug power on/off. I've seen some options...but one problem I have is the attic can reach up to 135F in the summer...many of the smart plugs I've seen are not rated for that temperature. Might any of you have any thoughts on a smart plug I might want to look at? I don't want to invest in anything that would require a new hub - so either WiFi based or Casita HUB based. I need 120v and 15amp ratings. Thanks in advance.

General Discussion
Expression Evaluation - Last Seen Date/Time
S

I am trying to run a reaction that turns on lights if a sensor has not been tripped for 2 minutes. Basically, when a garage door is open, turn on inside lights if nothing has been sensed for 2 minutes. My question has to do with the expression/variable for "Last Seen". The variable never gets updated over time since the last seen event never changes.

Screenshot 2024-09-02 191632.png

In the screenshot above, the reaction checks for any garage door as well as the variable called "GarageLastEntry". The expression for this variable is displayed below:

Screenshot 2024-09-02 191651.png

The problem that I am experiencing is that the variable never changes over time. I understand that this is because the "last seen" variable does not change over time when there is no activity. In this screenshot, the value shows 0.029... This can also be seen as the current value in the original reaction screenshot above. After 10 minutes, this value should be 10. However, when a garage door is opened, the variable does not get updated and thus the rule does not become true since .029 is less than 2.

When I go to the variable and click on the > icon, the variable then gets updated as expected as seen below:
Screenshot 2024-09-02 191711.png

So the ultimate question is, how do I use a rule that can use a variable such as "last seen"? Do I need to create another variable or reaction that multiplies this by 1 every minute? From what I read in the manual, a variable is evaluated every time it is included in a reaction. But this is not what I am seeing.

I also want to ask another question related to this variable. It seems like Reactor continuously deletes this variable and I have to keep recreating it? I have never experienced this with MSR so wanted to ask if this is a common problem or if my definition is causing this.

Any info is appreciated!!!

General Discussion
UK - Yale Smart Locks and Wi-Fi Bridge
S

BACKGROUND

I have been using 4 x Yale Contactless Connected Door Locks for several years (they use either a rfid tag or code to enter)

I have also been using 1 x Yale L1 Door Lock on the main front door and this connects via Yale Software

Yale contacted me to advise the L1 Lock software was being withdrawn and I needed to install a Yale Access Module into the existing lock and a Wi-Fi Bridge to link it with the newly released software

ALL of the above was working just fine.

RECENT

Yale emailed to advise I should add a Yale Access Module to each of the 4 other locks as this would link with the updated software via the Wi-Fi Bridge.

They offered a deal of just £4 each for these Modules so I got them.

THE PROBLEM

I found that only 2 of these modules would slot easily into the locks - two of them bent the pins and one of those snapped the female part in a lock (I do have a spare lock but thats not the point).

Anyway, I began to set-up the two fitted Modules with the Wi-Fi Bridge and I eventually found (thanks Google, NOT Yale) that I now need 1 x Wi-Fi Bridge PER LOCK (£50 each).

QUESTION

Does anyone know of a compatible Wi-Fi Bridge which works with Yale AND can handle multiple connections (ie 5 all 5 of my locks) ?

THANK YOU

General Discussion
iCOMEN boiler switch
V

Hello,
I had an iCOMEN boiler switch that worked for many years. And I used iCOMEN app on my phone to manage it. Short time ago app started to have an error message that it cannot connect to the server, and after some time the device also stopped working.

General Discussion
Would you use a self-hosted geofencing solution?
toggledbitsT

Some of you may know that I took at shot at building an alternate geofencing solution for Vera. The core of it was system agnostic, using the OwnTracks application and AWS lambdas to track devices and keep a central data, then disseminate that to the Vera via a websocket-based plugin. It worked with other apps as well, including Tasker and GPSLogger, but of the dozen people that were testing it, most used OwnTracks.

A lot was learned in the process, not the least of which is that the success of any such solution is highly dependent on the phone and its settings. Phone manufacturers love to set things up for the longest battery life, of course, but that's usually very anti-geofencing behavior. In the case of at least one brand, it was unusable and the settings could not be modified. It was also cost-prohibitive to maintain on Amazon, as AWS grabs a dime here and a dollar there and before you know it, it added $100/month to my AWS bill, which my wife deducted from my Scotch budget. Unacceptable.

But it's quite reasonable to use OwnTracks to a local endpoint, and I could pretty easily replicate the functionality as a local application, or maybe even as an additional endpoint built into MSR's API (still separate port and process, but in the package).

So the question really is... would you do it, or would you be too concerned about the security risks associated (e.g., dynamic DNS and NAT mapping in the firewall necessary for the phone to contact the service when not on LAN)?

General Discussion
Forum sysops
A

Hello forum instigators.

Not sure who host/runs the forum software but a couple of challenges:

The chat is not currently usable, as the scrolling is all not right and it's not possible to read chats or send chats reliably.

There are a lot of female members that should perhaps be on another forum; where they can advertise their skills more appropriately. Note: I agree it's a job, like any other.

Whoever you are - thank you for your invaluable work.

General Discussion
looking for a light switch with presence sensor?
T

I run a B&B and am looking for a way to turn the lights off whenever a room is unoccupied for X amount of time. The guest should still be able to turn the lights on and off manually, but should not be able to disable the auto turn off feature if the room is unoccupied.

I guess I am looking for a light switch with a built in presence sensor? I guess a presence sensor would be better as if it is a motion sensor, the lights may go off unwanted if the guest fails to make sufficient movement e.g. if the guest is lying down watching a film.

Are there any products on the market that would work for my application?

General Discussion
Looking for Bluetooth device for smartphone audio transmission
M

Hello,

I am in search of a device capable of using Bluetooth to connect with a smartphone and serve as its primary sound source on demand. This device should function similarly to conventional Bluetooth headphones, which automatically become the phone's sound output upon activation. However, this device should differ in that it transmits the audio signal to an amplifier via a jack, SPDIF, or similar connection. Alternatively, it could be an integrated amplifier that directly sends the signal to passive speakers.

The control of this process should be manageable through an API such as MQTT, REST, MODBUS, or similar. Are you aware of any devices that operate in this manner?

The concept is as follows: upon entering the bathroom, I would press a wall-mounted switch. This switch would send a signal to the Bluetooth device, prompting it to connect to my smartphone and seamlessly continue playing the audiobook I am currently listening to. Instead of using the phone's speakers, it would seamlessly start playing through ceiling-mounted speakers.

Many thanks 🙂

General Discussion
Beginner assistance
R

Hi folks,

I currently have some cheap Zigbee hub and some Amazon Alexas running my smart home which mostly consists of Zigbee power strips and Zigbee battery powered switches.

It all worked OK originally, but now whenever I press a Zigbee switch the light in the corresponding plug switches on then immediately off again.

If I ask Alexa to turn the light on it works fine. Likewise if I switch it on from my phone.

Any ideas what the issue could be?

I've tried unplugging the hub a number of times but that doesn't seem to fix it.

I was thinking about getting a Homey Pro 2023 to speed things up (tmas the Zigbee hub seems to be really slow now as well, for some reason) but I'm not sure about that either.

Any suggestions greatly appreciated!

General Discussion

Discover IR codes for lost remote

Scheduled Pinned Locked Moved General Discussion
49 Posts 5 Posters 12.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • therealdbT Offline
    therealdbT Offline
    therealdb
    wrote on last edited by
    #17

    Are you sure you can’t open those devices and look at the electronics? It seems to be simpler than this, to me 😉

    Maybe, also, some repair shop could help you. They usually deal with these kind of things and maybe they have something smarter to identify them. May be worth a try.

    --
    On a mission to automate everything.

    My MS Reactor contrib
    My Luup Plug-ins

    parkercP 1 Reply Last reply
    0
    • parkercP Offline
      parkercP Offline
      parkerc
      replied to therealdb on last edited by
      #18

      @therealdb said in Discover IR codes for lost remote:

      Are you sure you can’t open those devices and look at the electronics? It seems to be simpler than this, to me

      These items are racked up so it;s not quite as easy as I’d like that option to be - but I am weighing up the hassle of doing that vs doing this 🙂

      The benefit of making this code/process work is that a) i will have learnt something new - b) This could then be something g that helps others and c) it would give the Broadlink plug-in access to a huge ir bank of codes for people to use. 🙏🤞

      1 Reply Last reply
      0
      • parkercP Offline
        parkercP Offline
        parkerc
        wrote on last edited by parkerc
        #19

        Hi,

        I’ve been working with the code that was shared (thanks so much), and have trimming it down a bit to work it through in sections, but - here’s my current issue - any ideas ?

        (I) if I put the .csv file in the main search folder it does not return any errors, but it also does not print anything out.

        /mnt/nas/vera/ircodes/7,7.csv

        
        LuaTest 1.7
        
        Lua file: /etc/cmh-ludl/luatest.lua
        
        Results
        No errors
        Runtime: 51.4 ms
        Code returned: nil
        
        Print output
        (none)
        
        Code
           1    
           2       local lfs = require "lfs" 
           3       local dir = "mnt/nas/vera/ircodes/"   -- make this your path to the files 
           4       local split = "[^,]+,[^,]+,[^,]+,[^,]+,[^,]+"  -- (cmd_name,protocol,D,S,F) 
           5        
           6       local prontoCode = '' 
           7    
           8       for file in lfs.dir(dir) do 
           9           if file: match "%.csv$" then 
          10             for line in io.lines(dir .. filename) do 
          11               local cmd_name,protocol,D,S,F = list: match (split) 
          12               if 'power' == cmd_name then 
          13                 print ("$protocol $D $S $F",  protocol,D,S,F) 
          14               end 
          15             end 
          16          end 
          17      end
        
        
        • When I run it again, I get this, should filename be local or specified ?
        
        LuaTest 1.7
        
        Lua file: /etc/cmh-ludl/luatest.lua
        
        Results
        Runtime error: Line 9: attempt to concatenate global 'filename' (a nil value)
        
        Locals
        [main]
        lfs={ _VERSION="LuaFileSystem 1.6.2", symlinkattributes=function, lock_dir=function, dir=function, _DESCRIPTION="LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution", setmode=function, unlock=function, _COPYRIGHT="Copyright (C) 2003-2012 Kepler Project", currentdir=function, touch=function, mkdir=function, lock=function, link=function, attributes=function, chdir=function, rmdir=function }
        dir="mnt/nas/vera/ircodes/"
        split="[^,]+,[^,]+,[^,]+,[^,]+,[^,]+"
        prontoCode=""
        
        Print output
        (none)
        
        Code
           1       local lfs = require "lfs" 
           2       local dir = "mnt/nas/vera/ircodes/"   -- make this your path to the files 
           3       local split = "[^,]+,[^,]+,[^,]+,[^,]+,[^,]+"  -- (cmd_name,protocol,D,S,F) 
           4        
           5       local prontoCode = '' 
           6    
           7       for file in lfs.dir(dir) do 
           8           if file: match "%.csv$" then 
           9             for line in io.lines(dir .. filename) do 
          10               local cmd_name,protocol,D,S,F = list: match (split) 
          11               if 'POWER' == cmd_name then 
          12                 print ("$protocol $D $S $F",  protocol,D,S,F) 
          13               end 
          14             end 
          15          end 
          16      end
        
        

        II) I know we are doing this in sections, but as there are many layers of manufacturer folders and device type sub folders, will the eventual end code systematically search for all *.csv files within all the levels below? E.g.

        /mnt/nas/vera/ircodes/Samsung/TV/7,7.csv
        /mnt/nas/vera/ircodes/Panasonic/TV/128,0.csv
        /mnt/nas/vera/ircodes/Panasonic/TV/128,1.csv
        /mnt/nas/vera/ircodes/Panasonic/TV/128,4.csv
        /mnt/nas/vera/ircodes/Panasonic/TV/128,9.csv
        /mnt/nas/vera/ircodes/Panasonic/DVD Player/128,0.csv /mnt/nas/vera/ircodes/Panasonic/DVD Player/160,0.csv /mnt/nas/vera/ircodes/Panasonic/DVD Player/160,16.csv
        /mnt/nas/vera/ircodes/Panasonic/DVD Player/160,18.csv
        /mnt/nas/vera/ircodes/Panasonic/DVD Player/160,28.csv
        /mnt/nas/vera/ircodes/Panasonic/DVD Player/160,34.csv
        /mnt/nas/vera/ircodes/Panasonic/DVD Player/160,4.csv
        /mnt/nas/vera/ircodes/Panasonic/Unknown_EUR7617010/170,3csv

        I found this online, is that the sort of thing we will need to factor i later on..

        Alex  /  Jan 12, 2012

        Lua function to traverse all files in a folder recursively

        Lua function to traverse all files in a folder recursively

        Here is a little function that uses Lua File System (lfs module) in order to traverse all the files in a folder and its sub folders (and their sub folders) recursively. DIR_SEP=”\” &#82…

        If I remove the ‘filename’ variable call, and specify a file, it then does this.

        
        LuaTest 1.7
        
        Lua file: /etc/cmh-ludl/luatest.lua
        
        Results
        Runtime error: Line 10: attempt to index global 'list' (a nil value)
        
        Locals
        [main]
        lfs={ _VERSION="LuaFileSystem 1.6.2", symlinkattributes=function, lock_dir=function, dir=function, _DESCRIPTION="LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution", setmode=function, unlock=function, _COPYRIGHT="Copyright (C) 2003-2012 Kepler Project", currentdir=function, touch=function, mkdir=function, lock=function, link=function, attributes=function, chdir=function, rmdir=function }
        dir="mnt/nas/vera/ircodes/"
        split="[^,]+,[^,]+,[^,]+,[^,]+,[^,]+"
        prontoCode=""
        
        Print output
        (none)
        
        Code
           1   local lfs = require "lfs" 
           2       local dir = "mnt/nas/vera/ircodes/"   -- make this your path to the files 
           3       local split = "[^,]+,[^,]+,[^,]+,[^,]+,[^,]+"  -- (cmd_name,protocol,D,S,F) 
           4        
           5       local prontoCode = '' 
           6    
           7       for file in lfs.dir(dir) do 
           8           if file: match "%.csv$" then 
           9             for line in io.lines(dir .. '7,7.csv') do 
          10               local cmd_name,protocol,D,S,F = list: match (split) 
          11               if 'POWER' == cmd_name then 
          12                 print ("$protocol $D $S $F",  protocol,D,S,F) 
          13               end 
          14             end 
          15          end 
          16      end
        
        
        1 Reply Last reply
        0
        • A Offline
          A Offline
          a-lurker
          wrote on last edited by a-lurker
          #20

          "list" should be "line"

          And /mnt/nas/vera/ircodes/Panasonic/Unknown_EUR7617010/170,3csv files are expected to end in ".csv"

          And "file" should probably be changed to "filename"

          Refer: https://keplerproject.github.io/luafilesystem/manual.html

          Also I see you changed "power" to "POWER", which is correct but it's safer to do this: 'POWER' == cmd_name:upper() to guarantee you get uppercase. You are also using commas in your filenames. While this is allowed in Linux, I'm not so sure it should be encouraged. If that's how they come, so be it.

          1 Reply Last reply
          0
          • parkercP Offline
            parkercP Offline
            parkerc
            wrote on last edited by parkerc
            #21

            Thanks, I’ve made a few adjustments based on feedback, and using just one .csv file for now, which it seems to find ok, based on the print output, but it unfortunately doesn’t extract the POWER information?

            
            LuaTest 1.7
            
            Lua file: /etc/cmh-ludl/luatest.lua
            
            Results
            No errors
            Runtime: 9.9 ms
            Code returned: nil
            
            Print output
            7,7.csv     
            
            Code
               1    
               2       local lfs = require "lfs" 
               3       local dir = "mnt/nas/vera/ircodes/"   -- make this your path to the files 
               4       local split = "[^,]+,[^,]+,[^,]+,[^,]+,[^,]+"  -- (func_name,protocol,D,S,F) 
               5        
               6       local prontoCode = '' 
               7    
               8       for filename in lfs.dir(dir) do 
               9           if filename: match "%.csv$" then 
              10                  print(filename) 
              11             for line in io.lines(dir .. filename) do 
              12               local func_name,protocol,D,S,F = line: match (split) 
              13                  -- print(line) 
              14                  -- print (line: match (split)) 
              15               if 'POWER' == func_name:upper() then 
              16                 print ("$protocol $D $S $F",  protocol,D,S,F) 
              17                    print (func_name) 
              18               end 
              19             end 
              20          end 
              21      end
            
            
            1 Reply Last reply
            0
            • akbooerA Offline
              akbooerA Offline
              akbooer
              wrote on last edited by
              #22

              My fault. A rookie error in the code (which, obviously, I hadn't tested.)

              For your purposes, it's probably good enough to use the search string:

              local split = "([^,]+),(%.*)" -- (func_name,protocol,D,S,F)

              So this I have tested, and it works.

              local lfs = require "lfs" 
              local dir = "mnt/nas/vera/ircodes/"   -- make this your path to the files 
              local split = "^([^,]+),(.*)"  -- (func_name,protocol,D,S,F) 
               
              local prontoCode = '' 
              
              for filename in lfs.dir(dir) do 
                  if filename: match "%.csv$" then 
                    print(filename) 
                    for line in io.lines(dir .. filename) do 
                      local func_name,etc = line: match (split) 
                      if 'POWER' == func_name:upper() then 
                        print ("$protocol $D $S $F",  etc) 
                      end 
                    end 
                 end 
              end
              

              giving this output, for example:

              7,7.csv
              $protocol $D $S $F 	NECx2,7,7,2
              
              1 Reply Last reply
              0
              • parkercP Offline
                parkercP Offline
                parkerc
                wrote on last edited by parkerc
                #23

                Thanks @akbooer

                If I’m to use the irptransmogrifier command line interface, I’m going to need to get the format into something like this.

                
                irptransmogrifier render -p -n D=7,S=7,F=2 NECx2
                
                

                Here is the latest code,

                local lfs = require "lfs" 
                local dir = "mnt/nas/vera/ircodes/"   -- make this your path to the files 
                local split = "^([^,]+),(.*)"  -- (func_name,protocol,D,S,F) 
                 
                local prontoCode = '' 
                
                for filename in lfs.dir(dir) do 
                    if filename: match "%.csv$" then 
                      print(filename) 
                      for line in io.lines(dir .. filename) do 
                        local func_name,etc = line: match (split) 
                        if 'POWER' == func_name:upper() then 
                          print ("$protocol $D $S $F",  etc) 
                	   for word in string.gmatch(etc, '([^,]+)') do
                    	     print(word)
                	      end
                        end 
                      end 
                   end 
                end
                

                Which I’ve tried to update so that the returned values can be seen individually

                Print output
                7,7.csv
                $protocol $D $S $F NECx2,7,7,2
                NECx2
                7
                7
                2

                However I theoretically need them created into individual variables, however I’m not able to get name them ?

                This was my attempt, which didn’t work..

                
                local protocol, device, subdevice, function2 = string.match(etc, '(%a+) (%d+) (%d+) (%d+)')
                print('Protocol = ' .. protocol)
                print('Device = ' .. device)
                print('SubDevice = ' .. subdevice)
                print('Function = ' .. function2)
                
                
                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  a-lurker
                  wrote on last edited by
                  #24

                  Once you get the variables you need, use this line instead of the above - I left out the "-p"

                  local command = string.format("%sirptransmogrifier render -p -n D=%s,S=%s,F=%s protocol",irptransmogrifierPath,D,S,F,protocol)
                  
                  1 Reply Last reply
                  0
                  • parkercP Offline
                    parkercP Offline
                    parkerc
                    wrote on last edited by parkerc
                    #25

                    Thanks, but that’s ultimate where I’m struggling.

                    I can’t work out how to take those 4 comma separated values, and make each one identifiable as a separate variable - D,S,F, protocol

                    This line returns what I need,

                    print ("$protocol $D $S $F",  etc) ,
                    

                    which tells me the values i need are in etc so any idea why this didn’t work ?

                    local protocol, D, S, F = string.match(etc, '(%a+) (%d+) (%d+) (%d+)')
                    print('Protocol = ' .. protocol)
                    print('D = ' .. D)
                    print('S = ' .. S)
                    print('F = ' .. F)
                    
                    akbooerA 1 Reply Last reply
                    0
                    • akbooerA Offline
                      akbooerA Offline
                      akbooer
                      replied to parkerc on last edited by
                      #26

                      @parkerc said in Discover IR codes for lost remote:

                      any idea why this didn’t work ?

                      ...because the syntax is wrong.

                      I've lost count of the number of times that I may have suggested to you that it might just be worthwhile to learn a little bit more about Lua. The effort that you are putting into this shows that a bit of learning will be a very good investment.

                      This will split the parameters:

                      local params = "([^,]+),([^,]+),([^,]+),([^,]+)"
                      local protocol, D,S,F = etc: match(params)
                      
                      parkercP 1 Reply Last reply
                      0
                      • parkercP Offline
                        parkercP Offline
                        parkerc
                        replied to akbooer on last edited by parkerc
                        #27

                        @akbooer said in Discover IR codes for lost remote:

                        I've lost count of the number of times that I may have suggested to you that it might just be worthwhile to learn a little bit more about Lua.

                        I know, and believe me when I say. I honestly try to lean aspects of Lua when I can. but - I don’t know if you recall my responses in the past - my job and other commitments leave me so little time to learn anything for any length of time. And when I do find a pocket of time to play, I’m eager to create something new and interesting , and obviously use that as time to learn in the process.

                        To make it worse, not being a programmer, and not being able to work with LUA on a daily basis, so much of what I learn is sadly lost - through lack of use..

                        Not meant to be a sob story, just something I have to work with - hence I’m always so grateful for your help and the help of others..

                        parkercP 1 Reply Last reply
                        0
                        • parkercP Offline
                          parkercP Offline
                          parkerc
                          replied to parkerc on last edited by parkerc
                          #28

                          It looks like I finally have the main function in good shape 👍 Next on the list is to understand how the IrpTransmogrifier element fits in.

                          FYI - I’ve added a logging facility to the code, so that I can keep track of the .csv files accessed and the codes sent.

                          
                          function scanIndexFiles ()
                          	local lfs = require "lfs" 
                          	local dir = "mnt/nas/vera/ircodes/"   -- make this your path to the files 
                          	local split = "^([^,]+),(.*)"  -- (func_name,protocol,D,S,F) 
                          
                              local prontoCode = ''
                          
                              for filename in lfs.dir(dir) do 
                              	if filename: match "%.csv$" then 
                            	    print('Filename =' ..filename) 
                           	     for line in io.lines(dir .. filename) do 
                          			local func_name,etc = line: match (split) 
                          			local params = "([^,]+),([^,]+),([^,]+),([^,]+)"
                          			local protocol, D,S,F = etc: match(params)
                          				if 'POWER' == func_name:upper() then 
                          				-- print ("$protocol $D $S $F",  etc) 
                          				print('Protocol = ' .. protocol)
                          				print('D = ' .. D)
                          				print('S = ' .. S)
                          				print('F = ' .. F)
                          
                          			  local irptransmogrifierPath = "insert path here"
                          
                                        -- this may all need work depending on whatever "irptransmogrifier" does
                          			  
                                        local command = string.format("%sirptransmogrifier render -n D=%s,S=%s,F=%s protocol",irptransmogrifierPath,D,S,F,protocol)
                          			  print(command)
                                        local handle = assert(io.popen(command))
                                        local prontoCode = handle:read("*a")
                                        handle:close()
                          			  print(prontoCode)
                          
                          				local time = os.date("%Y-%m-%d %H:%M:%S") 
                          				local file = io.open("/www/test_write.txt", 'a') 
                          				file:write(time .. "; " .. filename .. "; " .. protocol .. "; " .. D .. "; " .. S .. "; " .. F .. "\n")
                          				file:close()
                          			  
                                        local INTERVAL_SECS = 2
                                        --luup.call_delay('sendProntoCodeToBroadLinkDevice', INTERVAL_SECS, prontoCode)
                          
                                      end
                                    end
                                 end
                              end
                          end
                          
                          
                          1 Reply Last reply
                          0
                          • parkercP Offline
                            parkercP Offline
                            parkerc
                            wrote on last edited by parkerc
                            #29

                            Current sticking point is - what do I do about the ‘Java’ requirement for getting IrpTransmogrifier to run on Vera.. Any recommendations?

                            To help narrow down my options; I’ve also posted this question on the Vera forum to see if anyone installed/used it.. -

                            Oct 4, 2020

                            Need a Java virtual machine (JVM, "Java runtime environment") to run something

                            Need a Java virtual machine (JVM, "Java runtime environment") to run something

                            Looking online, there are a few out there… http://jamvm.sourceforge.net/ Here’s an OpenWrt and JamVM here → Multithreaded Randomness: Java on OpenWRT … be good to know if anyone has installed/used one of them on Vera.

                            Hoping this is the final piece to the puzzle and then we’re hopefully good to go....

                            JamVM seems the most likely...

                            1 Reply Last reply
                            0
                            • akbooerA Offline
                              akbooerA Offline
                              akbooer
                              wrote on last edited by
                              #30

                              I’d be really surprised if that fitted. What type of Vera is it?

                              1 Reply Last reply
                              0
                              • parkercP Offline
                                parkercP Offline
                                parkerc
                                wrote on last edited by parkerc
                                #31

                                VeraPlus.

                                The MIPS processor seems to be supported..

                                GitHub - xranby/jamvm: JamVM is a new Java Virtual Machine conforming to the JVM specification edition 2 (blue book). Clone of git://git.code.sf.net/p/jamvm/code

                                GitHub - xranby/jamvm: JamVM is a new Java Virtual Machine conforming to the JVM specification edition 2 (blue book). Clone of git://git.code.sf.net/p/jamvm/code

                                JamVM is a new Java Virtual Machine conforming to the JVM specification edition 2 (blue book). Clone of git://git.code.sf.net/p/jamvm/code - xranby/jamvm

                                akbooerA 1 Reply Last reply
                                0
                                • akbooerA Offline
                                  akbooerA Offline
                                  akbooer
                                  replied to parkerc on last edited by akbooer
                                  #32

                                  @parkerc

                                  Java on OpenWRT

                                  "...a Java VM is out of the question"

                                  parkercP 1 Reply Last reply
                                  0
                                  • parkercP Offline
                                    parkercP Offline
                                    parkerc
                                    replied to akbooer on last edited by parkerc
                                    #33

                                    @akbooer said in Discover IR codes for lost remote:

                                    @parkerc

                                    Java on OpenWRT

                                    "...a Java VM is out of the question"

                                    Interesting, as when I had read that part, I assumed he was just referring to your normal/standard approach to installing a Java VM on anything, as later in his point (3) he goes on to say ....

                                    1. Finding a lightweight Java VM that runs on MIPS. If you Google for "java openwrt" there are a lot of forum postings lamenting the lack of a working JVM for OpenWRT. However, jamvm (an actively maintained lightweight JVM) has had an OpenWRT ipkg right there in the OpenWRT opkg repository for a couple of years.

                                    Goes on in (4) to propose..

                                    opkg install jamvm

                                    Which, considering how Vera is set up, that’s not a package you can install via that route..

                                    root@MiOS_5247999:/tmp/verair# opkg install jamvm
                                    Unknown package 'jamvm'.
                                    Collected errors:
                                     * opkg_install_cmd: Cannot install package jamvm.
                                    root@MiOS_ 5247999:/tmp/verair#
                                    
                                    

                                    It would be good to have everything I need for this all on the same machine; looking at the specification of a VeraPlus, does anyone think it has the resources ?

                                    Spec / Vera Plus
                                    CPU = 880MHz MIPS SoC
                                    Flash Memory = NAND 128MB
                                    Memory = DDR3 256MB

                                    A 1 Reply Last reply
                                    0
                                    • A Offline
                                      A Offline
                                      a-lurker
                                      replied to parkerc on last edited by a-lurker
                                      #34

                                      @parkerc said in Discover IR codes for lost remote:

                                      does anyone think it has the resources ?

                                      No.

                                      Forget doing this on a Vera. It would be easier to use, say Windows. Any recent Win machine probably already has the JRE already installed. Just install Lua on the Win machine (refer Google), get the code working (can still use Vera to test the majority of the code) and the call the IR transmitter on Vera with a URL, just like any other function (refer MiOS wiki) can be executed.

                                      The install info for IrpTransmogrifier already has a batch file available ready to run it (refer to IrpTransmogrifier GitHub release and documentation pages). Basically IrpTransmogrifier is a Java program and needs to be executed by something that knows how to do it eg JVE. Just like windows knows how to execute Windows executables.

                                      What does IrpTransmogrifier do? Lots of stuff but in your case it can generate (or as they prefer "render") actual codes, when feed a little bit of information. ie the parameters that define a code in a concise manner - that is: protocol,D,S,F

                                      1 Reply Last reply
                                      0
                                      • parkercP Offline
                                        parkercP Offline
                                        parkerc
                                        wrote on last edited by parkerc
                                        #35

                                        Thanks

                                        Agreed, it doesn't really matter where the ‘processing’ is done, (doing it all on Vera just seemed the easiest) - but I ultimately just need to have a facility where I can search, find and the raise a request (all of which is so far unproven/tested) for the ‘POWER’ IR commands via ...

                                        irptransmogrifier render -p -n D=7,S=7,F=2 NECx2
                                        

                                        ... and then have it (hopefully) return the command in the pronto code/format I want ....

                                        0000 006C 0000 0022 00AD 00AD 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 06FB
                                        

                                        .. and then once I have it, I just need to get that returned ‘code’ into your Broadlink request..

                                        function sendProntoCodeToBroadLinkDevice(prontoCode)
                                           local BROADLINK_DEVICE_ID = 49
                                           luup.call_action('urn:a-lurker-com:serviceId:IrTransmitter1', 'SendProntoCode', {ProntoCode = prontoCode}, BROADLINK_DEVICE_ID)
                                        end
                                        
                                        sendProntoCodeToBroadLinkDevice(prontoCode)
                                        
                                        

                                        It all seem so do-able when I started. 🤣

                                        1 Reply Last reply
                                        0
                                        • parkercP Offline
                                          parkercP Offline
                                          parkerc
                                          wrote on last edited by parkerc
                                          #36

                                          Hi all

                                          The plan on this now is to generates a CSV file, one line per signal, containing the filename, the ‘POWER’ command was found in, its protocol, and the D, S, and F parameters, that I can then import into IrScrutinizer (which is basically IrpTransmogrifier with a GUI), and then export that in the Pronto format .

                                          Currently the following code to create the .csv is not going recursively through all the folders, any advice ?

                                          function scanIndexFiles ()
                                          	local lfs = require "lfs" 
                                          	local dir = "mnt/nas/vera/ircodes/"   -- make this your path to the files 
                                          	local split = "^([^,]+),(.*)"  -- (func_name,protocol,D,S,F) 
                                          	local time = os.date("%Y-%m-%d %H:%M:%S") 
                                          	
                                              local prontoCode = ''
                                          
                                              for filename in lfs.dir(dir) do 
                                              	if filename: match "%.csv$" then 
                                          		for line in io.lines(dir .. filename) do 
                                          			local func_name,etc = line: match (split) 
                                          			local params = "([^,]+),([^,]+),([^,]+),([^,]+)"
                                          			local protocol, D,S,F = etc: match(params)
                                          				if 'POWER' == func_name:upper() then 
                                          			
                                          			local file = io.open("/www/powerircodes.txt", 'a') 
                                          			print(filename .. "; " .. protocol .. "; " .. D .. "; " .. S .. "; " .. F .. "\n")
                                          			file:write(filename .. "; " .. protocol .. "; " .. D .. "; " .. S .. "; " .. F .. "\n")
                                          			file:close()
                                                      end
                                                    end
                                                 end
                                              end
                                          end
                                          
                                          scanIndexFiles()
                                          
                                          1 Reply Last reply
                                          0

                                          Recent Topics

                                          • Disaster recovery and virtualisation
                                            CatmanV2C
                                            CatmanV2
                                            0
                                            5
                                            550

                                          • Remote access of Zwave stick from Z-wave server
                                            CatmanV2C
                                            CatmanV2
                                            0
                                            3
                                            259

                                          • Organizing/ structuring rule sets and rules
                                            G
                                            gwp1
                                            0
                                            5
                                            330

                                          • Moving MSR from a QNAP container to RP 5 - some issues
                                            G
                                            gwp1
                                            0
                                            5
                                            281

                                          • Widget deletion does not work and landing page (status) is empy
                                            G
                                            gwp1
                                            0
                                            4
                                            256

                                          • Need help reducing false positive notifications
                                            T
                                            tamorgen
                                            0
                                            7
                                            445

                                          • Reactor (Multi-System/Multi-Hub) Announcements
                                            toggledbitsT
                                            toggledbits
                                            5
                                            120
                                            35.1k

                                          • Deleting widgets
                                            toggledbitsT
                                            toggledbits
                                            0
                                            4
                                            431

                                          • MQTT configuration question
                                            tunnusT
                                            tunnus
                                            0
                                            11
                                            580

                                          • System Configuration Check - time is offset
                                            G
                                            gwp1
                                            0
                                            8
                                            560
                                          Powered by NodeBB | Contributors
                                          Hosted freely by 10RUPTiV - Solutions Technologiques | Contact us
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Unsolved