Page 2 of 3

Re: [userMODULE] eaZy Logic for starters

Posted: 07 Apr 2015 22:21
by pofs
dolpheen wrote:
pofs wrote:And how would your parser behave if I have device named "all lights"? :)

It will select device 'all lights' in your house (It's really 'all lights' that you want to operate on isn't it? :))
Not quite sure :)
According to the syntax you described, it should select all devices with tag "lights", but it will select only one device (which might even not have a tag). On the other hand, returning only devices with tag "lights" will violate your syntax rule #1 (select by name). And returning all devices (both by tag and by name) isn't probably what user meant, but also possible. That makes your syntax ambiguous.

That's why they use special symbols in CSS selectors :)

Re: [userMODULE] eaZy Logic for starters

Posted: 07 Apr 2015 23:17
by dolpheen
I suppose to have the device query in more natural lanuage without special characters (the dark plan is to attach a speech engine and be a competitor for HomeKit and Siri :) )
Yes, there could be trade-off between ambigious/unambigious request, but we can provide a choice for user to clarify it.
_z('all lights') - ambigious whether it's device name or selected devices with all tags. The user have 'all lighs' device, but want to select devices by tag. Then he can issue _z('all lights by tag') of _z( 'all lights by tag by tag') if he has device 'all lights by tag' :)

Re: [userMODULE] eaZy Logic for starters

Posted: 08 Apr 2015 20:13
by dolpheen
So, here is an update (1.0.1) with code optimized and device query patterns extended (with remarks from pofs) )
Now you can do the next selections to operate on

Code: Select all

//select two dimmers from different fooms and set level to 50
_z('lamp on desk in cabinet, dimmer2 in kitchen').setLevel(50) 

// switch 'lamp at entrance' device in room 'hall'
_z('lamp at entrance in hall').on()

//select all devices with 'lights' tag
_z('all lights') 

//select all devices with 'lights' tag in room 'hall'
_z('all lights in hall') 

//select all devices with 'lights' tag in room 'hall' (force tag use if you have 'all lights' device)
_z('all with tag lights in hall'') 

// Select all devices with 'always armed alarms' tag (flood seensor, etc.), arm it and send notification  
// if breached (you can use Javascript functions instead notifications
_z('all Always Armed alarms').arm().onBreach('Alarm!)   
 
// disarm so that you do not recieve notifications 
_z('all general alarms').disarm() 

// The next device selection patterns exist (also can be passed as array)
_z('dimmer1, 'dimmer2, dimmer3', 'wallplug at basement')
The next part - include 'cron module' events handling. :)

Re: [userMODULE] eaZy Logic for starters

Posted: 08 Apr 2015 20:54
by pz1
Do you plan to write a formal syntax (e.g. in EBNF or similar?) for this?

Re: [userMODULE] eaZy Logic for starters

Posted: 08 Apr 2015 21:21
by dolpheen
pz1 wrote:Do you plan to write a formal syntax (e.g. in EBNF or similar?) for this?
Not clear, what kind of syntax, do you mean. Ssyntax for device selection query?
All the proposals are welcome at the moment, as I see, an application of this module is to easily create basic and more common used algorithms for automation. (i suppose, biggest part of automation needs can be put in maximum dozen of lines :) but it depends of course)

Re: [userMODULE] eaZy Logic for starters

Posted: 09 Apr 2015 09:57
by pz1
dolpheen wrote:Not clear, what kind of syntax, do you mean. Syntax for device selection query?
Yes, the syntax for this little automation programming language you are developing. Formally defining contraints and options. Something one does in defining a dtd/schema for an XML document.
Not a priority now, but possibly useful later for a description.

Re: [userMODULE] eaZy Logic for starters

Posted: 09 Apr 2015 19:33
by dolpheen
pz1 wrote:Yes, the syntax for this little automation programming language you are developing.
I'm not so tough guy at the moment to create new language :) It's just a pure Javascript with some syntactic sugar to handle common task in automation in an easy way. I got what you mean and I'll do some pattern description for query pattern to select devices from systems, thank you for remark.

At the moment I plan to do the next additions:
- with the current patterns it's not easy to select devices with some tags settings at the same time.
So, I propose to use the next parttern.

Code: Select all

// Select devices with 'lights' and 'general switches'  tag and then select only devices with 'second floor' tag from them
_z('all lights').add('all general switches').filter('all second floor').on()

// You can create and mange group of devices
// He we create groups of devices 'room1', 'room2', 'floor1'
var room1 = _z('all in room one');
var room2 = _z('all in room two');
var floor1 = _z(room1,room2);

// Select device by type
// Select battery device (for example to poll them later)
var battery = _z('all with type battery in kitchen')

//Time schedule with cron module like
var _z('switch1', 'valve in basement').cron("1 2 * * monday').switchOn()

//Add toggle function for devices
var _z('switch1').toggle()

Re: [userMODULE] eaZy Logic for starters

Posted: 19 Apr 2015 00:53
by SolarFlor
dolpheen wrote: Copy and unpack the attached file to your 'userModules' directory of Razberry.
It seems I have not the permission to move files in /opt/z-way-server/automation/userModules

I know it is a stupid question but shoud I change the permission as follow:

chmod -777 /opt/z-way-server/automation/userModules

?

Re: [userMODULE] eaZy Logic for starters

Posted: 19 Apr 2015 15:43
by dolpheen
Strange, there should be no problem copying files under pi account.
May be try with sudo?

Re: [userMODULE] eaZy Logic for starters

Posted: 19 Apr 2015 21:33
by SolarFlor
I have tried with filezilla but no permission. see below